Files
my_wiki/wiki/concepts/Self-Verification.md
T
2026-04-07 21:01:17 +08:00

111 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 自我验证
tags: [核心概念, 验证, Harness]
source: [LangChain, Anthropic]
confidence_score:
last_updated: 2026-04-07
---
# 自我验证
**自我验证**Self-Verification)是[[Harness-Engineering|Harness 工程]]中的关键技术,使智能体能够通过运行中的反馈自我改进。当今的模型是卓越的自我改进机器,但它们没有自然地倾向于进入这种**构建-验证循环**。
## 核心概念
### 最常见的失败模式
LangChain 团队观察到的最常见失败模式是:智能体编写解决方案、重读自己的代码、确认看起来没问题,然后停止。
测试是自主智能体编码的关键部分。它有助于测试整体正确性,同时为智能体提供信号来进行爬山优化。
## 构建-验证循环
LangChain 向系统提示中添加了关于如何解决问题的指导:
### 阶段 1:规划与发现
阅读任务、扫描代码库,并基于任务规格和如何验证解决方案构建初始计划。
### 阶段 2:构建
在考虑验证的情况下实现计划。如果测试不存在则构建测试,并测试愉快路径和边缘情况。
### 阶段 3:验证
运行测试、阅读完整输出、与要求的内容进行比较(而不是与你自己的代码)。
### 阶段 4:修复
分析任何错误、重新访问原始规格,并修复问题。
## LangChain 的实现
### PreCompletionChecklistMiddleware
除了提示外,确定性上下文注入有助于智能体验证它们的工作。LangChain 使用 `PreCompletionChecklistMiddleware` 在智能体退出前拦截它,并提醒它对任务规格运行验证通过。
这类似于 [Ralph Wiggum Loop|Ralph Wiggum 循环]],其中一个钩子在智能体退出时强制其继续执行,用于验证。
![自我验证循环](../assets/self-verification-loop.png)
### 强调测试
LangChain 真正专注于测试,因为它在每次迭代中推动变化。他们发现,测试必须是智能体工作流程的核心部分,而不是事后想法。
## 环境上下文工程
Harness 工程的一部分是**为上下文工程构建良好的交付机制。** Terminal Bench 任务带有目录结构、内置工具和严格的超时。
### 1. 目录上下文与工具
`LocalContextMiddleware` 在智能体启动时运行,映射 `cwd` 和其他父+子目录。运行 `bash` 命令来查找工具如 `Python` 安装。上下文发现和搜索容易出错,因此注入上下文减少了这个错误表面并帮助**将智能体引导到其环境中。**
### 2. 教导智能体编写可测试的代码
智能体不知道它们的代码需要如何可测试。添加提示说它们的工作将根据程序化测试来衡量,类似于提交代码时。例如,提及文件路径的任务规格应该被精确遵循,以便解决方案在自动化评分步骤中工作。强调边缘情况的提示有助于智能体避免仅检查"愉快路径"情况。强制模型符合测试标准是避免随着时间推移"烂泥堆积"的强大策略。
### 3. 时间预算
注入时间预算警告以推动智能体完成工作并转向验证。智能体在时间估计方面是出了名的糟糕,因此这种启发式在这种环境中有所帮助。现实世界编码通常没有严格的时间限制,但如果不添加任何约束知识,智能体就不会在时间范围内工作。
## 循环检测
智能体一旦决定了一个计划就可能变得短视,导致"末日循环",对同一破碎方法进行小幅变异(在某些轨迹中超过 10 次以上)。
LangChain 使用 `LoopDetectionMiddleware`,通过工具调用钩子跟踪每个文件的编辑次数。它在对同一文件进行 `N` 次编辑后添加上下文如"……考虑重新考虑你的方法"。这可以帮助智能体从末日循环中恢复,尽管如果模型认为正确的话它可以继续沿着相同的路径前进。
重要提示:这是一种设计启发式,围绕当今感知的模型问题进行工程设计。随着模型改进,这些护栏可能会变得不必要,但今天帮助智能体正确和自主地执行。
## 推理三明治
推理模型可以自主运行数小时,因此必须决定在每个子任务上花费多少计算。你可以在每个任务上使用最大推理预算,但大多数工作可以从优化推理计算支出中受益。
Terminal Bench 超时限制创造了一个权衡。更多推理有助于智能体评估每个步骤,但可以燃烧超过 2 倍以上的 token/时间。`gpt-5.2-codex` 有 4 种推理模式,`low``medium``high``xhigh`
LangChain 发现推理有助于规划以充分理解问题,一些 Terminal Bench 任务非常困难。一个好的计划有助于更快地得到可行的解决方案。
后期验证也从更多推理中受益,以捕获错误并提交解决方案。作为一种启发式,选择 xhigh-high-xhigh"**推理三明治**"作为基线。
![推理三明治](../assets/the-reasoning-sandwich.png)
**在规划和验证上花费更多的推理计算**
仅在 `xhigh` 运行由于智能体超时而得分较差,为 `53.9%`,相比之下在 `high``63.6%`。在推理预算分割的试验运行中没有大的差异,因此坚持使用他们的方法,将分数推到 `66.5%`
## Harness 工程师的目的
**Harness 工程师的目的:准备和交付上下文,使智能体能够自主完成工作。**
智能体对其环境、约束和评估标准了解得越多,它们就能越好地自主自我指导工作。
## 相关概念
- [[Build-Verify Loop|构建-验证循环]]
- [[Reasoning Sandwich|推理三明治]]
- [[Doom Loop|末日循环]]
- [[Loop Detection|循环检测]]
- [[LangChain Harness Engineering|LangChain Harness 工程]]
## 参考来源
1. LangChain - Improving Deep Agents with harness engineering
2. Anthropic - Harness design for long-running application development
---
*最后更新:2026-04-07*
*本文档由 [[WikiLLM]] 编译自多个来源*