Skip to content

感知-行动循环

定位:模型本是「单次预测机器」——给一段输入,吐一段输出,然后到此为止。Harness 给它装上感知循环:让每一次行动的结果,都成为下一次的输入。这就是 Agent 能「持续干活」的第一根支柱。

📎 上级:设计指南/Agent设计;出处:实践分享第一章 P6(4 件事之一)。


一、一句话:工具调用 = 行动,工具返回 = 感知

Section titled “一、一句话:工具调用 = 行动,工具返回 = 感知”

模型没有眼睛也没有手。Harness 给它两样东西:

  • 工具调用(model → 环境)= 行动:读文件、跑命令、调接口、写文件。
  • 工具返回(环境 → model)= 感知:行动产生的结果,回灌进上下文,成为下一步的依据。
调用工具 ──→ 环境执行 ──→ 返回结果
↑________________ 模型重新感知 ________________↓

没有这个闭环,模型只能「凭空猜」;有了它,模型每走一步都看得见现场,可以纠错、可以追加、可以收敛。

工具是模型的「手脚」,但装多了反而废:

原则说明
给真动作,别给摆设能读文件 / 跑命令 / 调接口,而不只是「再输出一段文字」
数量克制工具越多,选择噪音越大——只挂当前任务必需的(呼应 设计指南/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 万 ← 交付

关键转折在第 ①→② 步:工具返回的不是空错误,而是「错在哪、该怎么改」——模型据此自我纠正,换正确口径重试。这就是「工具返回 = 感知」的价值:返回写得好,等于免费送一次自愈机会。没有这层感知,模型要么编数、要么卡死。

  • 🚫 工具一大堆,任务只用三个 → 选择噪音拖垮判断,先做减法。
  • 🚫 返回灌全量数据 → 一次工具返回吃掉半个上下文窗口,后续全废。
  • 🚫 静默失败 → 工具出错却返回空/假成功,模型在错误地基上继续盖楼。
  • 🚫 只行动不评估 → 调完工具不看返回就下结论,等于闭着眼开车。