感知-行动循环
① 感知-行动循环
Section titled “① 感知-行动循环”定位:模型本是「单次预测机器」——给一段输入,吐一段输出,然后到此为止。Harness 给它装上感知循环:让每一次行动的结果,都成为下一次的输入。这就是 Agent 能「持续干活」的第一根支柱。
📎 上级:设计指南/Agent设计;出处:实践分享第一章 P6(4 件事之一)。
一、一句话:工具调用 = 行动,工具返回 = 感知
Section titled “一、一句话:工具调用 = 行动,工具返回 = 感知”模型没有眼睛也没有手。Harness 给它两样东西:
- 工具调用(model → 环境)= 行动:读文件、跑命令、调接口、写文件。
- 工具返回(环境 → model)= 感知:行动产生的结果,回灌进上下文,成为下一步的依据。
调用工具 ──→ 环境执行 ──→ 返回结果 ↑________________ 模型重新感知 ________________↓没有这个闭环,模型只能「凭空猜」;有了它,模型每走一步都看得见现场,可以纠错、可以追加、可以收敛。
二、行动:工具设计的要点
Section titled “二、行动:工具设计的要点”工具是模型的「手脚」,但装多了反而废:
| 原则 | 说明 |
|---|---|
| 给真动作,别给摆设 | 能读文件 / 跑命令 / 调接口,而不只是「再输出一段文字」 |
| 数量克制 | 工具越多,选择噪音越大——只挂当前任务必需的(呼应 设计指南/Agent设计/上下文管理) |
| 语义清晰 | 名称与入参让模型一眼知道「什么时候用、怎么用」 |
| 副作用分级 | 只读 / 写入 / 危险操作分级,危险动作要确认或加权限闸 |
在本 cookbook 里,CLI 就是给 AI 的工具集——把领域动作收敛成稳定、可组合的命令。见 设计指南/CLI设计。
三、感知:工具返回的质量,决定下一步的质量
Section titled “三、感知:工具返回的质量,决定下一步的质量”行动重要,返回更重要——返回是模型的「眼睛」,看不清就走错:
| 返回设计 | 好 | 坏 |
|---|---|---|
| 结构 | 结构化、可解析(JSON / 表格) | 一大坨自由文本,模型还得二次解析 |
| 体量 | 只回决策所需的最小信息 | 把整张表/整个文件灌回来,污染上下文 |
| 错误 | 明确说「错在哪、怎么改」,可自纠 | 静默失败 / 只回 error,模型无从纠错 |
| 口径 | 带上口径与单位,杜绝歧义 | 只给裸数字,下一步算错 |
可纠正性是闭环的灵魂:返回里要让模型知道「这步成没成、下一步该往哪走」。错误信息写得好,等于免费给了一次自我修复的机会。
四、案例:「深圳湾一号建安造价超了多少?」
Section titled “四、案例:「深圳湾一号建安造价超了多少?」”成本经理问 Agent:「深圳湾一号的建安造价,比目标值超了多少?」
没有闭环的版本——模型是个「背书的实习生」:它没有现场数据,只能凭训练记忆编一个看着合理的数字「约超 1200 万」。听上去专业,其实是瞎猜,经理拿去汇报会出事。
有闭环的版本——模型是个「会查数的助理」,每一步都先看现场再决定下一步:
① 调 cost-query 取「深圳湾一号·建安造价·实际 vs 目标」 ← 行动 ↳ 返回:{ error: "科目名『建安造价』不唯一,请用末级科目" } ← 感知(报错)② 据报错改用末级科目重查 ← 纠错后的行动 ↳ 返回:{ 实际: 2.83亿, 目标: 2.71亿, 超: 1200万 } ← 感知③ 看到超支,追加下钻:超在哪个分项? ← 基于感知的新行动 ↳ 返回:土建桩基 +980万(占 8 成) ← 感知④ 收敛回答:超 1200 万,主因是土建桩基 +980 万 ← 交付关键转折在第 ①→② 步:工具返回的不是空错误,而是「错在哪、该怎么改」——模型据此自我纠正,换正确口径重试。这就是「工具返回 = 感知」的价值:返回写得好,等于免费送一次自愈机会。没有这层感知,模型要么编数、要么卡死。
- 🚫 工具一大堆,任务只用三个 → 选择噪音拖垮判断,先做减法。
- 🚫 返回灌全量数据 → 一次工具返回吃掉半个上下文窗口,后续全废。
- 🚫 静默失败 → 工具出错却返回空/假成功,模型在错误地基上继续盖楼。
- 🚫 只行动不评估 → 调完工具不看返回就下结论,等于闭着眼开车。
- 注意力为什么是稀缺资源 → 设计指南/Agent设计/上下文管理
- 工具集怎么设计成 CLI → 设计指南/CLI设计 · 设计指南/CLI设计/CLI设计规范
- 返回结果如何沉淀成记忆 → 设计指南/Agent设计/记忆管理