reasoning_verification_lab进阶约 95 分钟
6B-实验
推理实验室:分解、搜索、自洽与验证器怎样配合
参考:来源 F · 第 17、22 章进阶
学完你能做到
- 掌握六种推理技术的真实边界
- 把生成器与验证器分离
- 设计推理预算、失败回退和可检查输出
上一课回答“选哪种推理策略”,这一课进入内部结构。复杂推理通常不是一段更长的提示词,而是候选生成、外部计算、证据读取、结果验证和失败回退的组合。模型负责提出可能性,系统负责把可能性变成可验证结果。
| 技术 | 内部动作 | 适合的问题 | 最常见的误用 |
|---|---|---|---|
| 逐步分解 | 把大问题拆成依赖明确的子问题 | 多跳问答、复杂写作 | 拆得太碎,丢失整体目标 |
| 推理一步、调用工具、读取观察 | 信息会随执行变化的任务 | 没有最大步数,陷入循环 | |
| 自洽采样 | 独立生成多个答案,再比较一致性 | 有明确答案的推理题 | 多数意见同样可能集体出错 |
| 树状搜索 | 保留多条候选路径,评分、剪枝、回退 | 规划、组合搜索 | 分支爆炸,费用失控 |
| 程序辅助 | 把精确计算交给代码或计算器 | 数学、统计、数据处理 | 运行未审查代码或信任错误输入 |
| 反思修订 | 按评分标准找缺陷并重写 | 报告、代码、结构化输出 | 没有外部标准,只做语言润色 |
为什么要把“生成答案”和“检查答案”拆开
同一个模型在同一段上下文中既写答案又宣布自己正确,容易维护自己的第一印象。更可靠的结构是让生成器只负责提出候选,让验证器看到题目、候选、证据和评分标准;能用确定性程序检查的部分,例如 JSON、数字、引用存在性和测试结果,更不应交给语言模型凭感觉判断。
带预算的候选-验证循环
candidates = generate(question, n=3)
for candidate in candidates:
hard = validate_schema_math_citations(candidate)
soft = score_against_rubric(candidate, evidence) if hard.ok else 0
record(candidate, hard.issues, soft)
best = highest_valid_candidate()
if not best and budget.can_retry(): regenerate(with=issue_summary)
else: return answer_or_explicit_limit(best)推理管线设计
25 分钟- 为“比较两篇论文的方法学可靠性”设计候选、证据和验证器。
- 指出哪些检查可用程序完成,哪些需要模型判断。
- 设置最大分支数、最大重写次数和失败交付格式。
综合演算:为一次生产事故选择推理搜索策略
服务延迟突然升高,可能来自数据库锁、缓存击穿、下游超时或新版本。Agent 不能沿第一直觉一路走到底,需要维护候选假设并用观测逐步排除。
本节追问:怎样让搜索扩展有效假设,同时避免分支爆炸? 先不要急着看结论。沿着下面四步,逐项区分输入、决策、证据和失败信号。
| 阶段 | 本步要做的决定 | 什么算证据 | 最常见的失败 |
|---|---|---|---|
| 建立假设 | 按时间线和系统依赖提出互斥或可区分的原因 | 每个假设都预测可观察现象 | 列出十个无法验证的泛泛原因 |
| 选择观测 | 优先执行信息增益高且低风险的检查 | 一次检查能明显改变多个假设概率 | 先重启服务破坏现场 |
| 更新搜索 | 根据日志证据淘汰、保留或拆分分支 | 假设表记录支持与反证 | 看到一个相关指标就立即定论 |
| 验证修复 | 先在受控环境实施并检查副作用 | 延迟恢复且错误率、数据一致性正常 | 指标短暂下降就宣布完成 |
阅读方式:先遮住后两列自己回答,再用“证据”和“失败”两列检查理解。
常见误解
让多个 Agent 各猜一个原因后投票
实际上
可观察症状:多数意见可能共享同一错误上下文,且没有新证据。
更可靠的修复:让并行假设绑定不同可证伪预测,再按真实观测更新。
案例工作坊 · 建议真正动手完成
25 分钟- 画出四个故障假设及其区分性观测。
- 按信息增益、成本和风险给检查排序。
- 写出修复后的三项独立验收指标。
查看参考答案
搜索的核心不是产生更多文字,而是维护可证伪假设、选择高信息增益观测并根据证据更新。验证修复必须检查目标指标和副作用。
迁移检查:换一个场景还会不会
事故诊断的第一个动作通常不应是?