02-ReAct循环与Harness工程:从提示工程到Loop工程、编排模式与护栏
02-ReAct循环与Harness工程从提示工程到Loop工程、编排模式与护栏系列第 2 篇。上一篇我们说 Agent LLM 上下文 工具本质是一个模型-环境闭环。这一篇拆开这个闭环的心脏ReAct 循环以及围绕它的 Harness 工程。概念全部出自李博杰《深入理解AI Agent设计原理与工程实践》例子换成了我在无人零售和智慧农业项目里的实战。一、ReAct 循环思考 → 行动 → 观察ReAct Reasoning Acting2022 年由普林斯顿提出如今已是几乎所有 Agent 的事实标准执行骨架。一个完整循环长这样思考(Thought)我需要先查这个订单的支付记录 行动(Action)query_payment_records(order_id20260818001) 观察(Observation)存在两笔扣款第二笔未冲正 思考(Thought)证据充分可以退款 行动(Action)create_refund(...) 观察(Observation)退款单 RD-8848 创建成功 思考(Thought)任务完成向用户输出结论三个要点思考是显式的。模型先在上下文里写下推理过程再决定行动。这不是花架子——显式的 Thought 相当于给模型一个草稿区显著降低不查就答的幻觉率。观察来自真实世界。Observation 是工具执行结果、是环境反馈它把模型从猜拉回看。循环由终止条件退出。要么模型输出最终答复要么触发步数/超时护栏强制刹车。新手最容易犯的错是只写一次工具调用就接客服话术。真正的 Agent 是while True每轮把新的 Observation 追加进上下文再让模型决定下一步直到它自己说我搞定了。二、三种学习机制Agent 的成长分三个时间尺度书中一个很精彩的分类Agent 的学习不是一锅粥按时间尺度分三层——机制时间尺度载体例子任务内上下文适应单次任务内秒~分钟messages 列表Agent 查了库存后记住结果后续推理直接引用跨任务 artifact 更新跨任务天~周外部文件/记忆库把本次排障经验写进运维知识库下次直接检索训练周期参数更新训练周期月模型权重用 SFT/RLHF 让模型学会新的工具调用习惯工程启示前两种你今天就能做且性价比远高于微调模型。我们的售货柜运维 Agent 就是把每次故障处理过程沉淀成 markdown 工单RAG 检索回来作为上下文——等效于一个越用越熟练的老师傅而模型权重一个字节没动。三、Harness 工程模型之外的竞争力Harness马具/安全带指包裹 LLM 的那层工程系统。书中给出的定义性任务是四件事构造上下文决定模型每轮看到什么——系统提示、检索结果、历史裁剪暴露工具接口设计工具的命名、参数 schema、描述文本工具描述本身就是提示词维护循环状态跑 ReAct 循环管理步数、超时、重试权限验证与纠正高危动作退款、开门、删库要人审或规则拦截工具失败要反馈给模型自纠。为什么说这是竞争力因为模型人人都能调大家用的可能是同一个 API而 Harness 决定了同样的模型在你手里是实习生还是高级工程师。范式已经从提示工程Prompt Engineering演进到Loop 工程Loop Engineering单条提示词调得再花也不如把整个循环的上下文流、工具面、护栏设计好。提示词只是 Loop 里的一个零件。Harness 五个功能模块的核心原则可以一句话概括每一轮都问自己——模型现在看到的上下文是否最小且充分可用的工具是否安全且顺手循环是否总有退出路径。而构建有效 Agent 的核心原则书中归纳得很克制能用简单方案就不要上复杂方案——能用单次调用解决的不套循环能用固定工作流解决的不放全自主 Agent。复杂度是 Agent 最大的敌人。四、编排模式工作流 vs 自主 Agent这是架构选型的分水岭工作流Workflow代码预先编排好步骤LLM 在节点里被调用。路径确定可测试成本可控。适合流程明确的场景——比如售货柜每日补货建议拉销量 → 算预测 → 生成报告每一步都是写死的。自主 AgentAutonomous Agent只给目标和工具路径由模型在 ReAct 循环里自己探索。灵活但不可预测成本是开盲盒。适合开放性任务——比如排查 3 号柜今天为什么掉线需要根据每步观察动态决策。选型口诀流程能写死的写死工作流必须临场判断的才放开Agent。两者通常混用外层工作流做确定性环节内层嵌一个 Agent 处理需要看情况的环节。五、护栏与模型选型护栏Guardrails分三层输入护栏提示注入检测、敏感词过滤——别让用户一句忽略以上指令就把你的退款工具骗走过程护栏步数上限、工具调用频率限制、高危工具白名单/人工审批——我们所有涉及资金的工具退款、补差价都必须走审批节点输出护栏结果校验金额格式、字段完整性、越权检查只能操作自己柜子的数据。如何选择模型书中给的工程化建议很实用按能力-成本-延迟三角权衡循环内高频调用的推理步用便宜快的模型最终汇总用强模型这就是多模型编排用真实任务基准测试而不是刷榜单——你的 Agent 是调工具的就测工具调用准确率关注上下文窗口与指令遵循的平衡窗口大不等于用得好见第 4 篇 KV Cache。六、真实案例Pine AI 打电话协商账单书中提到 Pine AI 替用户打电话协商账单的案例是 ReAct Harness 的教科书演示Agent 接到帮我跟运营商砍价的目标后自主完成 拨号 → 听对方话术语音转文本进入观察空间→ 思考应对策略 → 实时应答 → 谈不拢就要求转接挽留部门 → 拿到优惠后确认生效并挂断汇报。整个过程循环几十轮每一轮都是 Thought/Action/Observation而 Harness 负责语音流、通话状态机、费用相关的确认护栏涉及签约动作必须向用户复核。这个案例说明当观察空间实时语音和动作空间语音应答、转接、查套餐足够丰富时一个打电话这种高度动态的任务也能被 Agent 闭环搞定——但它绝不是一个提示词就能解决的背后是一整套 Loop 工程。七、小结ReAct 显式思考 工具行动 环境观察循环往复直到终止Agent 学习分三尺度上下文适应任务内、artifact 更新跨任务、参数更新训练前两个是工程师的主战场Harness 四件事构造上下文、暴露工具、维护循环、权限纠正——这是模型之外的竞争力编排选型流程写死用工作流临场判断才用自主 Agent护栏三层输入/过程/输出 按能力-成本-延迟选模型是 Agent 上生产的门票。下一篇我们放大 Agent 的眼睛——上下文工程并手写一个最小可跑的 Agent 核心循环。