<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Harness on Zewang's Blog</title><link>https://zewang0217.github.io/tags/harness/</link><description>Recent content in Harness on Zewang's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 13 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://zewang0217.github.io/tags/harness/index.xml" rel="self" type="application/rss+xml"/><item><title>深入理解 AI Agent（一）：Agent = LLM + 上下文 + 工具</title><link>https://zewang0217.github.io/p/ai-agent-in-depth-ch1-basics/</link><pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate><guid>https://zewang0217.github.io/p/ai-agent-in-depth-ch1-basics/</guid><description>&lt;h1 id="深入理解-ai-agent一agent--llm--上下文--工具"&gt;深入理解 AI Agent（一）：Agent = LLM + 上下文 + 工具
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;资料源：李博杰《深入理解 AI Agent：设计原理与工程实践》第1章
开源仓库：https://github.com/bojieli/ai-agent-book （v1.4，2026-08-13）&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="一句话主线"&gt;一句话主线
&lt;/h2&gt;&lt;p&gt;现代 Agent 的最小工程实现，可以压缩成一个公式：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent = LLM + 上下文 + 工具&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这本书用 10 章把这一句话展开成完整的工程方法论。第 1 章是全书的&amp;quot;概念地图&amp;quot;：它不追求深度，而是快速建立统一的术语和参照坐标——后面每一章都会回来细化地图上的某个区域。所以这一章的读法不是&amp;quot;记住所有概念&amp;quot;，而是&amp;quot;建立整体印象&amp;quot;。&lt;/p&gt;
&lt;h2 id="三重视角同一个-agent三种说法"&gt;三重视角：同一个 Agent，三种说法
&lt;/h2&gt;&lt;p&gt;公式里的三个词，从不同抽象层次看有完全不同的名字，但指向同一个对象：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;直觉层&lt;/th&gt;
 &lt;th&gt;工程实现层&lt;/th&gt;
 &lt;th&gt;学术层（RL）&lt;/th&gt;
 &lt;th&gt;含义&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;大脑&lt;/td&gt;
 &lt;td&gt;LLM&lt;/td&gt;
 &lt;td&gt;策略（Policy）&lt;/td&gt;
 &lt;td&gt;决定&amp;quot;下一步做什么&amp;quot;的决策内核&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;眼睛&lt;/td&gt;
 &lt;td&gt;上下文&lt;/td&gt;
 &lt;td&gt;观察与历史&lt;/td&gt;
 &lt;td&gt;每个决策点能看到的信息&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;手脚&lt;/td&gt;
 &lt;td&gt;工具&lt;/td&gt;
 &lt;td&gt;观察/行动接口&lt;/td&gt;
 &lt;td&gt;能读取什么、能改变什么&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;为什么值得同时记住三层？因为不同场景下最顺手的语言不同：和产品同学聊用&amp;quot;大脑/眼睛/手脚&amp;quot;，读代码用&amp;quot;LLM/上下文/工具&amp;quot;，读 RL 论文用&amp;quot;Policy/Observation/Action&amp;quot;。而且这套映射有个重要的边界声明——上下文只是&lt;strong&gt;环境在 Agent 内部的表示&lt;/strong&gt;，工具背后的文件系统、数据库、网页、用户仍然属于&lt;strong&gt;环境&lt;/strong&gt;，不因为被工具访问就变成 Agent 的一部分。&lt;/p&gt;
&lt;p&gt;这个边界是后面所有架构讨论的地基：Agent 与 Environment 是闭环交互的两方，而不是彼此的组成部分。环境返回观察 → Agent 基于上下文决策 → 行动改变环境 → 新的观察再回来。&lt;/p&gt;
&lt;h2 id="为什么扩展眼睛和手脚比换更聪明的大脑更有效"&gt;为什么&amp;quot;扩展眼睛和手脚&amp;quot;比&amp;quot;换更聪明的大脑&amp;quot;更有效
&lt;/h2&gt;&lt;p&gt;公式给出后，作者马上抛出一个反直觉的判断：&lt;strong&gt;在底层模型固定时，提升 Agent 任务表现最主要的系统工程手段，是重新定义或扩展观察空间与动作空间——也就是扩展上下文和工具。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;道理很朴素：没有进入上下文的信息，对模型来说就像不存在；没有被动作接口允许的操作，模型只能停留在文字建议上。所以很多看似&amp;quot;需要更聪明模型&amp;quot;的问题，其实只是&lt;strong&gt;接口问题&lt;/strong&gt;——把任务所需的数据纳入上下文，或把操作封装成工具，原本不可解的任务就变得可解。&lt;/p&gt;
&lt;p&gt;书里用两个产品演进验证了这一点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manus&lt;/strong&gt;：在它之前，Deep Research、Coding、Computer Use 是三条相对独立的 Agent 路线。Manus 的突破不是换了个更强的模型，而是把三者的观察空间和动作空间取&lt;strong&gt;并集&lt;/strong&gt;——虚拟浏览器扩大观察，文件系统+代码执行+命令行扩大动作，同一个 Agent 就跨越了原有产品边界。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt;：把接口延伸到用户的数字生活——通过 WhatsApp/Telegram/Slack 等消息渠道触达，用本地 Gateway 连接 Google Drive、Notion 和本地文件系统，让分散在不同账号与设备中的文件都能进入同一个观察空间。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个值得注意的细节：Manus 后来也加了 Google Drive 连接器和桌面端本地访问——产品能力的演进往往就是观察空间和动作空间的演进，这句话反复被验证。&lt;/p&gt;
&lt;h2 id="上下文消融实验agent-的五官缺一不可"&gt;上下文消融实验：Agent 的五官缺一不可
&lt;/h2&gt;&lt;p&gt;上下文由五个部分构成，前两项是&lt;strong&gt;静态前缀&lt;/strong&gt;，后三项是随交互增长的&lt;strong&gt;动态轨迹&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统提示词（System Prompt）——开发者的&amp;quot;岗位说明书&amp;quot;，定义身份、权限、行为准则&lt;/li&gt;
&lt;li&gt;工具定义（Tool Definitions）——声明可用工具的名称、功能、参数格式&lt;/li&gt;
&lt;li&gt;用户消息（User Messages）——用户输入，可能含 RAG 检索引入的外部知识&lt;/li&gt;
&lt;li&gt;模型回复（Assistant Messages）——最多含三部分：思考过程（reasoning）、文本内容（content）、工具调用请求（tool_calls）&lt;/li&gt;
&lt;li&gt;工具执行结果（Tool Results）——框架执行工具后返回的结果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;怎么证明&amp;quot;每个组件都不可或缺&amp;quot;？书里的实验 1-1 做了&lt;strong&gt;消融实验&lt;/strong&gt;（Ablation Study）——像医生诊断时逐一排除病因：保留全部组件的完整基线，再四组各去掉一个组件对照。结果非常直观：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;去掉什么&lt;/th&gt;
 &lt;th&gt;现象&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;工具定义&lt;/td&gt;
 &lt;td&gt;完全丧失行动能力，无法调用任何工具&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;工具执行结果&lt;/td&gt;
 &lt;td&gt;看不到上一步反馈，反复调用同一个工具，&lt;strong&gt;无限循环&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;思考过程（reasoning）&lt;/td&gt;
 &lt;td&gt;前后决策互相矛盾&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;历史消息&lt;/td&gt;
 &lt;td&gt;等于失忆，从头重复已完成的任务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;核心洞察一句话：&lt;strong&gt;上下文决定了 Agent 能看到什么，而 Agent 只能基于看到的信息做决策。&lt;/strong&gt; 蒙住眼睛的人做不出合理判断，缺任何一个组件，Agent 的决策能力都会严重退化。&lt;/p&gt;
&lt;p&gt;这个实验的方法论也值得记住——当你想论证&amp;quot;某个组件有没有用&amp;quot;，消融实验是最直接的武器。这对评估类工作尤其重要（后面第 6 章会系统展开）。&lt;/p&gt;
&lt;h2 id="react-循环想--做--看轨迹就是记忆"&gt;ReAct 循环：想 → 做 → 看，轨迹就是记忆
&lt;/h2&gt;&lt;p&gt;三个组件如何协同？答案就是 ReAct（Reasoning + Acting）循环：&lt;strong&gt;模型先思考当前该做什么 → 调用工具行动 → 观察工具结果 → 再思考下一步&lt;/strong&gt;。循环不断重复直到任务完成。&lt;/p&gt;
&lt;p&gt;关键概念是&lt;strong&gt;轨迹（trajectory）&lt;/strong&gt;：Agent 执行过程中不断积累的消息历史。于是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Agent 的上下文 = 静态前缀（系统提示词 + 工具定义）+ 轨迹（消息历史）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;书里用&amp;quot;多币种收入汇总&amp;quot;的例子走了一遍完整轨迹：第一轮，模型看到任务后并行调用三个货币转换工具（EUR/GBP/JPY → USD）；第二轮，拿到转换结果后调用代码解释器做汇总计算；第三轮，确认计算完成，生成最终答案。&lt;strong&gt;3 次迭代、4 次工具调用&lt;/strong&gt;就完成了多步骤任务。&lt;/p&gt;
&lt;p&gt;最小运行骨架（伪代码，示意机制而非某个 SDK）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;trajectory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;decision&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;static_prefix&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;trajectory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;decision&lt;/span&gt; &lt;span class="n"&gt;没有工具调用&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;decision&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;decision&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# 相互独立的调用可并行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;validated_call&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Harness&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;observation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validated_call&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;trajectory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;observation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;轨迹不仅是执行记录，更是能力载体：通过分析大量轨迹可以发现行为模式、优化决策路径；轨迹还能沉淀到知识库，或作为 RL 的训练数据——这是后面第 8 章&amp;quot;持续进化&amp;quot;的伏笔。&lt;/p&gt;
&lt;h2 id="模型即-agent-与苦涩的教训harness-会被吃掉吗"&gt;模型即 Agent 与苦涩的教训：Harness 会被吃掉吗？
&lt;/h2&gt;&lt;p&gt;第 1.1.3 节介绍了当前最前沿的范式——&lt;strong&gt;模型即 Agent（Model as Agent）&lt;/strong&gt;：先进模型通过后训练（特别是 RL）把&amp;quot;何时调用工具、调哪个、传什么参数&amp;quot;的决策&lt;strong&gt;内化&lt;/strong&gt;为原生能力。书中实验 1-2（Kimi K3）和 1-3（GPT-5.6 Deep Research）展示了这一点：模型自己决定何时搜索、搜索什么，连续执行 200-300 次工具调用仍保持思考一致性。&lt;/p&gt;
&lt;p&gt;这里作者专门厘清了一个常见误解（issue #30 读者指出的）：&lt;strong&gt;RL 内化的是&amp;quot;用不用、怎么用&amp;quot;的决策策略，而不是把搜索引擎或代码沙盒&amp;quot;装进&amp;quot;模型权重&lt;/strong&gt;。工具本身及其执行（web_search、code_runner 的真实实现、沙盒环境、结果回传）仍在模型之外的基础设施里完成。编排循环没有消失，只是从客户端移到了服务端。&lt;/p&gt;
&lt;p&gt;这引出一个更深的问题（书的立场值得细品）：&lt;strong&gt;如果模型持续变强，今天的 Harness 会不会被模型&amp;quot;吃掉&amp;quot;？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rich Sutton 的《苦涩的教训》回顾了 AI 七十年反复上演的一幕：研究者一次次把自己对领域的理解编码进系统，短期见效，长期却总是输给能随算力与数据规模扩展的通用方法（搜索与学习）。以此衡量，Harness 里的约束、验证与纠正，有多少属于&amp;quot;人的先验&amp;quot;，注定会被模型内化？&lt;/p&gt;
&lt;p&gt;书的立场是&amp;quot;&lt;strong&gt;方向认同，节奏务实&lt;/strong&gt;&amp;quot;：不怀疑模型会持续吃掉 Harness（工具调用、长程规划都曾靠外部编排，如今已是原生能力）；但&amp;quot;吃&amp;quot;的速度远比直觉慢——训练以月计，模型无法一次内化真实业务中所有的约束与偏好。&lt;strong&gt;模型此刻的能力边界，就是 Harness 此刻的价值所在。&lt;/strong&gt; Harness 工程不是对苦涩教训的抵抗，而是这一教训在工程时间尺度上的实践：模型还做不稳的，Harness 先补上；模型每内化一层，Harness 就卸下一层，转而兜底新的能力前沿。&lt;/p&gt;
&lt;p&gt;这个&amp;quot;吃与被吃&amp;quot;的动态关系，是理解 Agent 工程未来走向的元问题。&lt;/p&gt;
&lt;h2 id="agent-的三条学习路径不同时间尺度的协同"&gt;Agent 的三条学习路径：不同时间尺度的协同
&lt;/h2&gt;&lt;p&gt;顺带第 1.1.3 节还给出了一个重要的分类框架——Agent 的行为改变发生在三个层次：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;任务内上下文适应&lt;/strong&gt;：示例、状态、检索结果进入上下文，立即调整行为，但任务结束不保留。快速、低成本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨任务外部产物更新&lt;/strong&gt;：把事实写成知识文档、把策略写进 Prompt/Skill、把流程写成程序/Harness。可审计、可修订。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模型参数更新&lt;/strong&gt;：SFT/偏好训练/RL，用于难以显式表达的高维能力（医疗影像理解、隐式决策策略）。部署成本高，泛化能力强。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;三条路径不是互斥分类，而是&lt;strong&gt;不同时间尺度上的协同机制&lt;/strong&gt;：上下文负责临场适应，外部产物负责可控积累，参数负责内化难以表达的能力。&lt;/p&gt;
&lt;h2 id="harness-工程模型之外的竞争力"&gt;Harness 工程：模型之外的竞争力
&lt;/h2&gt;&lt;p&gt;第 1.2 节是本章的重心。前半章回答&amp;quot;Agent 是什么&amp;quot;，这半章回答&amp;quot;Agent 如何可靠地运行&amp;quot;。&lt;/p&gt;
&lt;p&gt;生产形态的完整公式展开：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Agent = Model + Harness
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Harness = 上下文管理 + 工具接口 + 约束 + 验证 + 纠正
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Harness 这个词原指马具——缰绳和挽具不是为了限制马的奔跑，而是把力量引导到正确的方向。模型是那匹强大但不可预测的马，Harness 是把它的能力引导成可靠任务执行的工程外壳。&lt;/p&gt;
&lt;p&gt;五要素的分工：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;上下文&lt;/strong&gt;：为模型提供感知信息——信息充分性，让每个决策点基于足够的信息判断&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具接口&lt;/strong&gt;：为模型提供观察与行动手段——接口清晰，命名直观、参数有例子、边界有说明&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;约束&lt;/strong&gt;：设定行为边界——&lt;strong&gt;故障安全默认值&lt;/strong&gt;，所有能力默认关闭，必须显式开放（类似手机 App 权限管理）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;验证&lt;/strong&gt;：自动判断操作结果对错——&lt;strong&gt;输入隔离&lt;/strong&gt;，安全检查只看结构化数据（工具返回的 JSON 字段），而不是模型自由生成的文本，因为攻击者可能通过提示注入操纵模型输出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;纠正&lt;/strong&gt;：发现问题时自动修正或回退——&lt;strong&gt;在确认无法恢复之前不暴露中间态&lt;/strong&gt;（先静默重试，不把半成品展示给用户）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;生产控制骨架（伪代码）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;decision&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Harness&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;build_context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trajectory&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;allowed_action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Harness&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;constrain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;decision&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 约束&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;observation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allowed_action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;evidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Harness&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allowed_action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;observation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 验证&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;evidence&lt;/span&gt; &lt;span class="n"&gt;通过&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;trajectory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;observation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;trajectory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Harness&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;correct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evidence&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# 纠正&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;一个很有说服力的例证：Claude Code 的 Harness 中，&lt;strong&gt;绝大部分代码是约束、验证与纠正，而不是上下文与工具本身&lt;/strong&gt;——工具（文件读写、命令执行、搜索）只是一小部分，围绕工具构建的保障机制（流程状态管理、多层上下文压缩、权限分类、熔断器、错误恢复）才是真正的核心。&lt;/p&gt;
&lt;p&gt;作者还给出工程范式演进弧线，五层层层包含：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;提示工程 ⊂ 上下文工程 ⊂ Harness 工程 ⊂ Loop 工程 ⊂ Graph 工程
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;每一层都在前一层基础上扩展工程师的关注范围：从&amp;quot;优化输入文本&amp;quot;到&amp;quot;管理模型看到的所有信息&amp;quot;到&amp;quot;组织模型运行并与环境交互&amp;quot;到&amp;quot;跨轮次的持续自主运转&amp;quot;到&amp;quot;把循环/程序/审批组织成显式执行图&amp;quot;。&lt;/p&gt;
&lt;p&gt;为什么说这是竞争力所在？LangChain 在 Terminal Bench 2.0 上的实践是硬证据：他们的 Coding Agent 从 52.8% 提升到 66.5%（排行榜 30 名开外跃升至前 5），&lt;strong&gt;改变的不是模型，而是 Harness&lt;/strong&gt;——让 Agent 自动检查执行结果、检测重复循环、优化思考策略。当各家模型能力越来越接近，竞争优势就转移到了模型之外的工程实践。&lt;/p&gt;
&lt;h2 id="编排模式工作流-vs-自主-agent"&gt;编排模式：工作流 vs 自主 Agent
&lt;/h2&gt;&lt;p&gt;Harness 中&amp;quot;上下文与工具&amp;quot;的组织方式有两种极端：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;工作流（Workflow）&lt;/strong&gt;——预定义的确定性代码路径。每个节点做什么、下一步去哪都是代码写死的，LLM 只在节点内部负责理解和生成。以订机票为例：核实身份 → 搜索航班 → 完成付款 → 确认预订，流程固定，系统绝不会在付款前订座。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;优势：严格流程控制（业务规则靠代码强制，不依赖 LLM 判断）+ 安全性（执行路径确定，提示注入最多影响当前节点内部，攻击面被限制在单节点内）&lt;/li&gt;
&lt;li&gt;局限：缺乏变通性——预设流程外的场景（用户临时改签、航班取消要推荐替代）只能走异常分支或交还人类&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;自主 Agent&lt;/strong&gt;——执行路径由 Agent 根据环境反馈实时决定。同样的订机票任务：先搜索航班 → 发现要登录 → 核实身份 → 再搜索 → 发现最便宜的航班要转机 → 主动询问用户 → 用户不要转机 → 调整条件……本质上就是 ReAct 循环。必须设计明确的&lt;strong&gt;停止条件&lt;/strong&gt;（任务完成/调用 final_answer/无工具调用/错误超限/最大轮次），否则容易死循环或过度执行。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;优势：能处理开放式、步骤数不可预测的问题（SWE-bench、Computer Use、迭代研究）&lt;/li&gt;
&lt;li&gt;代价：更高成本 + 复合错误风险，需要在沙盒充分测试、设护栏监控、关键决策点加人机检查点&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实践中的关键原则是&lt;strong&gt;从简单到复杂&lt;/strong&gt;：先试单个 LLM 调用（优化提示词和示例）→ 需要多步骤但步骤固定时用工作流 → 只有需要动态决策时才上自主 Agent。而且两者不是非此即彼——n8n 这类平台允许在同一个系统里混合：严格合规的流程用工作流，需要灵活决策的部分切自主模式。&lt;strong&gt;Agent 系统通常用延迟和成本换取更好的任务性能，这个交换是否值得要谨慎权衡。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="护栏与安全性分层防御且要防误拒绝"&gt;护栏与安全性：分层防御，且要防&amp;quot;误拒绝&amp;quot;
&lt;/h2&gt;&lt;p&gt;护栏是约束/验证/纠正的实现手段，按防护位置分三层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;输入侧&lt;/strong&gt;：请求到达 Agent 之前拦截——相关性分类器（标记偏离主题的查询）、安全分类器（检测越狱和提示注入；越狱是用户自己试图绕过安全限制，提示注入是攻击者通过外部数据间接操纵模型）、内容审核、基于规则的过滤（黑名单/长度限制/正则）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行侧&lt;/strong&gt;：工具调用时验证——核心是&lt;strong&gt;工具风险评级&lt;/strong&gt;：按可逆性、权限等级、财务影响给工具标低/中/高，高风险操作需额外审查或人工确认&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输出侧&lt;/strong&gt;：响应返回用户前检查——PII 过滤器、输出验证&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两个值得记住的设计点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;误拒绝也是失败&lt;/strong&gt;：为了降低危险请求被放行，模型可能同时拒绝合法但形式敏感的任务（授权的安全测试、模型蒸馏研究）。所以护栏评估不能只测&amp;quot;应当拒绝的是否被拦截&amp;quot;，还要测&amp;quot;明确允许的是否能正常完成&amp;quot;——评估体系必须双向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constitutional Classifiers&lt;/strong&gt;（Anthropic）：规则驱动（用自然语言&amp;quot;宪法&amp;quot;生成合成训练数据）+ 上下文联合判断（把用户提问和模型回答放一起检查，因为&amp;quot;如何使用食品调味料&amp;quot;单独看没问题，对照提问才发现是化学试剂暗语）+ 两级筛查（极轻量探针先过滤所有对话，可疑的再交给强分类器复审）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;**人工干预（Human in the loop）**是兜底：超过失败阈值（重试/操作次数上限）或高风险操作（大额退款、不可逆操作）时升级到人工。部署早期尤其重要——识别失败模式、发现边缘情况、建立评估周期。&lt;/p&gt;
&lt;h2 id="思考题与延伸两个值得反复咀嚼的观点"&gt;思考题与延伸：两个值得反复咀嚼的观点
&lt;/h2&gt;&lt;p&gt;读完本章后做了一遍思考题，其中两个观点特别想记下来——它们都指向同一个判断标准，对做 Agent 相关工作很有用。&lt;/p&gt;
&lt;h3 id="为什么模型越自主harness-越重要"&gt;为什么模型越自主，Harness 越重要
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;模型在工具调用决策上越来越自主。harness 就是为了让 agent 在执行过程中能够不偏离目标，能够完整的完成目标，能够减少出错，减少一些意外与安全问题，更好的让模型/agent 工作（上下文，记忆，工具，skill&amp;hellip;）。我认为 agent 框架未来的核心价值就是，让 agent 在掌控之中做得更好。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;——这是我对思考题 3 的原始直觉。细想之后，这个答案可以再推进一步：&lt;strong&gt;两个趋势不是并列共存，而是因果关系&lt;/strong&gt;。模型自主决策空间越大，出错时的影响面越大，因此需要更精细的约束、验证和纠正机制来确保可靠性（这正是书中 1.1.3 节的原话逻辑）。模型吃掉的是&amp;quot;编排决策&amp;quot;（何时调工具、调哪个、传什么参数），但正是这种自主性把 Harness 的治理价值抬高了。&lt;/p&gt;
&lt;p&gt;由此可以整理出&lt;strong&gt;框架未来核心价值的完整清单&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;约束/验证/纠正（可靠性）&lt;/strong&gt;——模型负责&amp;quot;做得快&amp;quot;，Harness 负责&amp;quot;做得对、可控、可审计&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文经济性（KV Cache / 压缩）&lt;/strong&gt;——上下文管理的成本与质量，让长任务跑得起&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具生态（MCP）&lt;/strong&gt;——工具接入的标准化，降低生态摩擦&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可观测性与评估&lt;/strong&gt;——把表现变成可比较的信号，驱动迭代&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全护栏&lt;/strong&gt;——分层防线 + 人工干预，兜住自主性的影响面&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="什么会被模型吃掉教模型-vs-治理模型"&gt;什么会被模型&amp;quot;吃掉&amp;quot;：教模型 vs 治理模型
&lt;/h3&gt;&lt;p&gt;思考题 10 问：好的设计原则穿越模型迭代周期，但具体工程手段会随模型能力进步而过时——举一个例子。这道题我一开始完全没头绪，补课后想明白了。&lt;/p&gt;
&lt;p&gt;书给的理论框架是：&lt;strong&gt;模型每内化一层，Harness 就卸下一层&lt;/strong&gt;。所以被吃掉的都是&amp;quot;人类把领域知识硬编码去补偿模型短板&amp;quot;的手段。最典型的例子是&lt;strong&gt;客户端手写 ReAct 编排循环&lt;/strong&gt;（检测 tool_calls → 执行工具 → 回传结果）——五年前每个 Agent 框架都在写这段代码，现在 GPT-5.6 的 Responses API、Kimi 的 Formula 把编排搬到服务端闭环执行，模型原生决策，这正是&amp;quot;模型即 Agent&amp;quot;范式。同类还有：显式 ReAct 提示词（思考模型原生就会）、few-shot 示例教工具调用（RL 已内化）、XML/JSON 格式约束（原生 structured output 取代）。&lt;/p&gt;
&lt;p&gt;由此提炼出一个判断标准：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;凡是&amp;quot;教模型怎么做&amp;quot;的手段都可能被吃掉；凡是&amp;quot;治理模型&amp;quot;的手段（约束/验证/纠正/审计/可观测）反而升值——因为自主性越大，治理需求越大。&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;评估任何 Agent 工程手段的价值时，先问它属于哪一类：是&amp;quot;教模型&amp;quot;（迟早被内化），还是&amp;quot;治理模型&amp;quot;（越自主越值钱）。&lt;/p&gt;
&lt;h3 id="其余思考题的一句话快答"&gt;其余思考题的一句话快答
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Q1（只加一项能力）&lt;/strong&gt;：看瓶颈在哪——&amp;ldquo;看不到信息&amp;quot;加上下文，&amp;ldquo;做不到&amp;quot;加工具，&amp;ldquo;想不通&amp;quot;换模型；模型有天花板且不可控，上下文和工具完全在自己掌控内&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q4（死循环）&lt;/strong&gt;：除了缺工具结果，还有重试循环、状态振荡、计划翻新、子 Agent ping-pong、上下文遗忘导致重做；检测靠执行预算 + 循环签名 + 进展信号 + 熔断器（详见活页夹 thoughts.md）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q7（动态风险评估）&lt;/strong&gt;：业界第一线不是小模型，是确定性参数规则（如 Claude Code 的 deny/ask 参数级匹配）；小模型作为两级筛查的第二级，延迟只加在可疑样本上&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q9（人工干预）&lt;/strong&gt;：先分类&amp;quot;哪些必须等人&amp;rdquo;，队列化 + 异步通知，超时走安全默认；Claude Code auto 模式的本质是让一个 supervisor 层决定&amp;quot;什么时候该问&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="小结一张概念地图"&gt;小结：一张概念地图
&lt;/h2&gt;&lt;p&gt;第 1 章建立的框架可以浓缩为五点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Agent = 大脑 + 眼睛 + 手脚&lt;/strong&gt;：LLM 是大脑，上下文是眼睛，工具是手脚，三者缺一不可&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;扩展眼睛和手脚是最主要的能力杠杆&lt;/strong&gt;：模型固定时，扩展观察空间与动作空间往往直接把不可解变可解&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文是决定性的&lt;/strong&gt;：静态前缀 + 动态轨迹，消融实验证明每个组件都不可缺失&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Harness 是竞争力所在&lt;/strong&gt;：模型能力商品化，差异在约束、验证、纠正——&amp;ldquo;能做事&amp;rdquo; vs &amp;ldquo;可靠地做事&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;从简单到复杂&lt;/strong&gt;：先提示词 → 再工作流 → 最后自主 Agent；安全从第一行代码就要考虑&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下一章进入 Harness 最核心的组件——上下文工程（KV Cache、提示工程、Agent Skills、上下文压缩）。&lt;/p&gt;</description></item></channel></rss>