Skip to content

8. 企业生产实践

一句话理解:生产级 Reflection 不是把 Generator 和 Critic 简单串起来,而是一套涉及模型选型、评分校准、在线/离线闭环、Runtime/Memory 集成、评测基准和人工兜底的系统工程

何时启用 Reflection

不是所有任务都值得反思。启用 Reflection 的典型信号:

信号说明
单轮 LLM 错误率明显偏高如代码生成、复杂规划、长文本写作
错误成本较高如金融、法律、医疗、安全相关输出
有明确的评估标准如代码可编译、测试通过、格式固定
允许额外延迟反思通常增加 1~3 倍延迟,实时性强的场景慎用
有高质量 Critic 或验证工具如单元测试、编译器、检索系统、专家规则

不建议开启的场景:

  • 低延迟要求的对话补全(如客服首句回复)。
  • 创意发散任务,过度反思会扼杀多样性。
  • 评估标准模糊、人工都难以判断好坏的任务。

Critic 模型选型

Critic 是 Reflection 系统的“质量守门人”,其选型直接影响反思效果。

选型适用场景优点缺点
主模型自身兼任 Critic资源受限、通用任务无需额外部署,上下文一致容易陷入自我偏好,批判不够独立
独立同尺寸模型需要客观批判视角独立,评估更公正成本翻倍
小尺寸专用 Critic高频调用、规则明确成本低、延迟低通用性差,需要微调
多 Critic 投票高风险、复杂任务降低单一 Critic 偏差成本与延迟显著增加
外部验证工具代码、事实、约束客观、可解释只覆盖可验证维度

工程建议:

  1. 先工具,后模型:能用编译器、单元测试、检索验证的问题,优先用外部工具。
  2. Critic 比 Generator 更“保守”:Critic 的温度应偏低,提示词要求明确、严格。
  3. 小模型 Critic 需要微调:用人工标注的 critique 数据微调 7B~13B 模型,可在低成本下获得不错效果。
  4. 多 Critic 用于高风险场景:如代码安全审查、医疗建议,可使用 3 个 Critic 投票。

评分校准

Evaluator 的 score 必须与人感知的质量一致,否则 Reflection Loop 会陷入“自说自话”。

校准步骤

  1. 定义评分维度

    • 文本任务:准确性、完整性、连贯性、风格符合度。
    • 代码任务:编译通过、测试通过、性能、安全性、可读性。
    • 规划任务:可行性、资源效率、风险覆盖。
  2. 人工标注评测集

    • 收集 100~500 条 (draft, critique, score) 样本。
    • 由领域专家打分,作为 golden label。
  3. 拟合 Evaluator

    • 调整 prompt、权重,使 Evaluator 输出与人工打分的 Pearson/Spearman 相关系数达到 0.8 以上。
    • 对离散型 verdict,要求与人工一致率 ≥ 85%。
  4. 持续监控

    • 在线收集人工反馈,定期回灌到评测集。
    • 监控 score 分布漂移,发现异常及时调整。

常见校准问题

问题现象解决
score 膨胀大多数输出都在 0.9 以上收紧 prompt、增加区分度维度、重新标注
score 与人工不一致Evaluator 给高分但人工觉得差增加反例样本、细化 rubric
维度间权重失衡某一项主导总分用加权平均或几何平均,定期 A/B 测试

在线反思 vs 离线反思

模式触发时机适用实现
在线反思请求处理过程中同步执行延迟可接受、错误成本高把 Revision Loop 接入 Agent Runtime 的主循环
离线反思请求结束后异步执行,或批量处理日志分析、对话复盘、经验沉淀消费运行日志,生成 critique 与改进建议,写入 Memory
混合反思在线轻量反思 + 离线深度反思大多数生产系统在线做 1~2 轮快速修订,离线做 episode 级总结

在线反思适合“当前回答必须更好”,离线反思适合“长期积累经验”。

与 Runtime 集成

集成要点:

  • timeout 必须覆盖 Reflection 循环:设置 timeout = generator_timeout + max_iter * (critique_timeout + evaluate_timeout + revise_timeout)
  • 错误隔离:Critic 或 Evaluator 失败时,应降级为“无反思直接返回 Generator 输出”,而非整体失败。
  • 流式输出:如果 Runtime 支持流式,反思阶段可以隐藏,只把最终 draft 流给用户。

与 Memory 集成

Reflection 产生的数据是 Memory 的宝贵输入:

  • 短期 Memory:当前 loop 的 draft、critique、score 保存在 Workspace,供下一轮使用。
  • 长期 Memory:把 (task, final_draft, best_critique, score) 作为 episode 写入,支持后续检索相似任务的经验。
  • 策略 Memory:记录“哪些 critique 类型最常出现”,用于优化 Critic prompt 或训练数据。

写入结构建议:

json
{
  "episode_id": "...",
  "task_type": "code_generation",
  "request_summary": "Implement a Redis cache wrapper",
  "iterations": 3,
  "final_score": 0.95,
  "critique_categories": ["missing_error_handling", "typing_issue"],
  "lesson": "Always add type hints and retry logic for Redis connections."
}

评测基准

生产环境需要为 Reflection 建立评测基准(benchmark):

层级指标说明
模块级Critic 准确率、Evaluator 与人工一致性单独评估 Critic 和 Evaluator
Loop 级通过率、平均迭代次数、首次通过时间评估整个反思循环的效率
端到端任务成功率、人工满意度、延迟、成本评估 Reflection 对最终用户体验的贡献
长期重复错误率、Memory 命中率评估反思经验是否真正被复用

建议用离线数据集定期回归,避免线上 A/B 测试才能发现问题。

人工兜底(Human-in-the-Loop)

生产 Reflection 系统必须有人工兜底机制:

触发条件处理方式
连续 N 轮未通过暂停循环,把当前最佳版本 + 问题清单提交人工
涉及安全/合规/伦理直接升级人工审核,不自动输出
Evaluator 分数波动剧烈标记为不确定,请求人工确认
高风险领域(医疗/法律/金融)默认需要人工批准后才能输出
用户投诉或反馈差人工介入复盘并修正策略

人工反馈应回流到训练数据或 prompt 优化中,形成“机器反思 + 人工校正”的飞轮。

成本与延迟优化

策略效果
按任务启用 Reflection避免所有请求都走反思流程
Critic 使用小模型显著降低 token 成本
缓存 critique相似 draft 直接复用历史批判
提前终止score 已达 threshold 立即停止
异步离线反思把重计算放到请求结束后
限制输入长度过长的 draft/critique 增加成本和延迟

生产踩坑清单

原因应对
反思后反而更差Generator 过度迎合 Critic,破坏原意保留历史最佳版本,允许回滚
无限循环终止条件配置不当强制 max_iter + 收敛检测
Critic 与 Evaluator 不一致prompt 定义冲突统一 rubric,联合校准
延迟超出预期未考虑多轮调用timeout 与重试策略需覆盖整个 loop
反思结果未沉淀缺少 Memory 集成每轮结束后写入 episode
人工介入太频繁threshold 过严或 Critic 过敏感调整 threshold、优化 Critic prompt

本章小结

生产级 Agent Reflection 需要综合考虑 Critic 模型选型、评分校准、在线/离线模式、与 Runtime 和 Memory 的集成、评测基准、人工兜底和成本延迟优化。它不是万能药,应在错误成本较高、评估标准明确、延迟可接受的场景启用,并通过持续监控和校准保证反思结果真正提升输出质量。

参考来源

Released under CC-BY-SA-4.0 License.