主题
原文:https://www.mstx.cn/harness/415.html · 创建:2026-09-02 · 更新:2026-09-03 · 阅读:1136
为什么需要术语表
Agent领域的术语混乱是出了名的。同一个概念,在不同的框架、论文和团队中可能有不同的名字;同一个名字,在不同语境下可能指向不同的东西。这种混乱不只是学术上的洁癖问题——它直接导致沟通效率低下和设计决策偏差。
本节为本书涉及的核心术语建立统一的定义。这些定义不追求学术上的绝对严谨,而是追求工程实践中的清晰和可用。当你在团队中说"我们需要改进Agent的记忆",这里的"记忆"指的是什么?当你看到一篇博客说"我们的Agent实现了规划能力",这里的"规划"具体是什么机制?本节回答这些问题。
基础概念
Agent(智能体)
一个以LLM为核心、能够感知环境、做出决策、执行行动的系统。本书中,Agent特指基于大语言模型构建的、具有工具调用能力的智能体。
关键特征:Agent不是被动地回答问题的聊天机器人,而是主动地拆解任务、选择工具、执行操作、验证结果的系统。
与聊天机器人的区别:聊天机器人是"一问一答",Agent是"给一个目标,自主推进"。
Harness
包裹在Agent核心逻辑之外的一整套基础设施,为Agent提供运行、评估、调试和治理所需的支撑能力。本书的核心主题。
Harness包含的模块:Runtime(运行时)、Tool Registry(工具注册表)、Memory System(记忆系统)、Evaluator(评估器)、Observability Layer(可观测层)、Security Layer(安全层)。
一个类比:如果LLM是Agent的大脑,Harness就是Agent的身体——它决定了大脑能接触到什么、能做什么、以及每一次"思考"是否被妥善记录。
LLM(Large Language Model,大语言模型)
基于海量文本数据训练的大规模神经网络模型,具备理解语义、推理逻辑、生成文本等能力。本书中,LLM特指具备Function Calling能力的对话式模型。
在Agent中的角色:LLM是Agent的"思考引擎"。Agent的每一次决策——调用什么工具、如何解读结果、何时给出回答——都由LLM完成。
Function Calling(工具调用)
LLM的一项能力:不仅生成文本,还能输出结构化的函数调用请求,指定要调用的函数名和参数。
为什么重要:Function Calling是Agent从"会说话"到"会做事"的关键转折。它让LLM能够真正地驱动外部工具执行操作,而非仅仅"模拟"调用。
示例:
json
{
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"北京\"}"
}
}
]
}Tool(工具)
Agent可以调用的外部函数或API。每个工具包含三个要素:名称、描述(告诉LLM这个工具是做什么的)、参数Schema(告诉LLM如何调用)。
工具的分类:
读操作:查询信息,无副作用(如查天气、查订单)
写操作:改变外部状态,有副作用(如发送邮件、创建记录)
危险操作:可能导致不可逆后果(如删除数据、执行交易)
工具与普通函数的区别:普通函数是给人用的,工具是给LLM用的——它的描述和Schema质量直接影响LLM能否正确使用它。
循环与执行
Agent Loop(Agent循环)
Agent执行任务的核心控制流:反复调用LLM,根据LLM的决策执行工具,将工具结果反馈给LLM,直到LLM给出最终回答。
三个阶段:
感知(Perceive):获取当前状态——用户输入、工具结果、对话历史
思考(Think):LLM基于感知做出决策——调用工具还是给出回答
行动(Act):执行LLM指定的工具,或将最终回答返回给用户
Iteration(迭代)
Agent循环中的一轮。一次迭代包含一次LLM调用和可能的一次工具执行。
与对话轮次的区别:一个用户请求可能触发多次迭代(多次LLM调用),但只对应一轮对话。
Termination Condition(终止条件)
Agent循环停止的条件。包括:
正常终止:LLM给出了最终回答(没有tool_calls)
最大迭代次数:循环达到预设的上限,强制终止
超时:总执行时间超过限制
用户中断:用户主动停止了Agent的执行
不可恢复错误:关键工具连续失败,无法继续
工程意义:终止条件必须被明确记录在Agent的执行结果中。一个因"最大迭代次数"而终止的Agent,和一个"正常终止"的Agent,其结果的可靠性完全不同。
Trace(执行轨迹)
Agent一次完整执行过程的详细记录,包括每一轮LLM调用的输入输出、每一次工具调用的参数和结果、循环终止的原因。
Trace是Agent可观测性的基础。有了完整的Trace,你才能回答:"Agent为什么这样回答?""它在哪一步出了偏差?"
架构组件
Runtime(运行时)
Harness的执行核心,负责驱动Agent循环:调度LLM调用、执行工具、管理循环的终止条件。
设计原则:Runtime应该保持尽可能薄——它只负责编排,不负责实现具体逻辑。
Tool Registry(工具注册表)
管理Agent所有可用工具的模块。职责包括:工具定义存储、Schema管理、执行沙箱、权限校验。
与普通函数库的区别:Tool Registry不只是存储函数,它还管理着LLM如何理解这些工具(Schema)和工具执行的安全边界(权限)。
Memory System(记忆系统)
管理Agent信息的模块,包含三个层次:
短期记忆(Working Memory) :当前会话的对话历史,直接作为LLM的输入
长期记忆(Long-term Memory) :跨会话的持久知识,通过检索获取
情景记忆(Episodic Memory) :历史任务的完整记录,用于经验学习
核心挑战:上下文窗口有限,但信息无限。记忆系统必须选择什么该记、什么该忘、什么该压缩。
Evaluator(评估器)
度量Agent表现的模块。管理评估数据集、计算评分指标、执行回归测试。
核心功能:
离线评估:在开发阶段,在固定评估集上度量Agent的各方面表现
在线评估:在生产环境中,采样真实流量进行质量评估
对比实验:比较不同版本的Agent在相同评估集上的表现差异
Observability Layer(可观测层)
记录、可视化、分析Agent执行过程的模块。包括Trace记录、日志聚合、指标计算、告警触发。
与日志系统的区别:可观测层不只是"记录发生了什么",而是让你能够回答关于Agent行为的问题——为什么这样做?哪里出了问题?趋势如何?
Security Layer(安全层)
保护Agent及其运行环境免受恶意攻击和意外伤害的模块。包括输入过滤、输出审查、权限边界、审计日志。
Agent安全的特殊性:传统软件的安全威胁来自外部攻击者,而Agent的安全威胁还包括LLM自身被误导(如Prompt注入)和Agent的自主决策越界。
编排与架构模式
Single-Agent(单Agent模式)
一个Agent拥有所有工具和指令,在单一循环中处理所有任务。
优势:简单、上下文完整、延迟可控
代价:上下文窗口压力大、指令可能冲突、能力有上限
Multi-Agent(多Agent模式)
多个专业化的Agent分工协作完成任务的模式。每个Agent有自己的指令、工具集和上下文。
三种编排结构:
流水线(Pipeline) :Agent A → Agent B → Agent C,串行传递
编排者-工作者(Orchestrator-Workers) :主Agent分配任务给工作Agent,汇总结果
对等协作(Peer-to-Peer) :Agent之间直接对话,无固定层级
Orchestrator(编排者)
在多Agent系统中负责协调的主Agent。它的职责包括:理解任务、分解子任务、分配给工作Agent、汇总结果。
与单Agent的区别:Orchestrator不做具体的执行工作,它只负责调度。具体的工具调用由工作Agent完成。
Handoff(交接)
Agent之间传递对话控制权的机制。当一个Agent判断任务超出了自己的能力范围,它将对话"交接"给另一个更合适的Agent。
与消息传递的区别:Handoff传递的是控制权,而非仅仅是一条消息。交接之后,接收方成为对话的主导者。
评估与质量
Evaluation Dataset(评估数据集)
一组用于度量Agent表现的测试用例集合。每个用例包含输入和对应的期望行为。
评估集的质量标准:
代表性:覆盖真实使用中的常见场景和边界场景
稳定性:作为固定的"锚点",不随Agent版本变化而改变
可度量:每个用例都有明确的评判标准
LLM-as-Judge
使用LLM来评估Agent输出质量的方法。用一个"评判模型"对Agent的输出打分或判断是否符合预期。
优势:可以评估开放性的输出质量(而非只有对错) 风险:评判模型自身也有偏见和不确定性,需要校准
Regression Testing(回归测试)
在Agent修改后,在固定的评估集上重新运行,确认整体表现没有退化。
Agent回归测试的特殊性:由于LLM的非确定性,单次运行的结果不可靠。回归测试通常需要多次运行取统计结果。
Task Completion Rate(任务完成率)
Agent成功完成任务的百分比。这是Agent评估中最基础的指标。
一个微妙之处:"完成任务"的定义因场景而异。对于一个客服Agent,"完成任务"可能意味着"正确回答了用户的问题";对于一个订票Agent,则意味着"成功完成了订票流程"。
模型行为相关
Hallucination(幻觉)
LLM生成看似合理但实际错误的信息。在Agent场景中,幻觉尤为危险——Agent可能自信地编造工具返回结果或事实信息。
Agent幻觉的特殊性:不仅仅是"说错了",而是可能错误地报告工具执行结果,导致用户产生错误的信任。
Prompt Injection(提示词注入)
攻击者通过精心构造的输入,诱导LLM忽略原始指令、执行攻击者指定的行为。
Agent场景中的特殊风险:Agent比聊天机器人更容易受到注入攻击,因为它有能力执行工具。一条被注入的指令如果触发了一个危险工具,后果可能是真实的。
Non-determinism(非确定性)
相同的输入可能产生不同的输出。LLM的非确定性来自采样策略、模型服务端的更新、以及系统中微小的状态差异。
工程应对:不追求消除非确定性,而是度量它。同一个测试用例运行多次,统计成功率和稳定性。
生命周期相关
Gray Release(灰度发布)
先让新版本的Agent处理一小部分流量(如5%),观察表现后再逐步放量的部署策略。
Agent灰度发布的特殊性:Agent的行为在真实流量下不可完全预测,灰度发布是从小范围验证到大范围上线的安全过渡。
Sampling Evaluation(采样评估)
从生产流量中抽取一部分样本进行质量评估。由于完整评估所有生产请求成本过高,采样评估是持续监控Agent质量的经济手段。
采样率的选择:太低则统计不可靠,太高则成本过大。通常从5%开始,根据实际需要调整。
Drift(漂移)
Agent的表现随时间推移发生的变化。漂移的来源包括:
模型漂移:模型提供商更新了模型版本
数据漂移:用户输入分布发生变化
环境漂移:工具依赖的外部系统发生变化
应对:定期在固定评估集上运行Agent,检测表现是否偏离基线。
关于术语的几点建议
第一:在团队中建立术语共识。 比术语定义本身更重要的是团队内部的一致性。当团队中的每个人说"评估"时,指的都是同一件事,沟通效率才能提升。
第二:术语是工具,不是目的。 不要花太多时间争论一个概念应该叫什么。重要的是理解概念背后的工程问题和设计权衡。
第三:本书后续章节会持续使用这些术语。 如果你在后续阅读中遇到不熟悉的词,可以回到本节查找。
本节小结
本节建立了全书统一的核心术语体系。这些定义的价值不在于学术严谨性,而在于工程实践中的清晰沟通。当后续章节使用"循环""工具注册表""评估集"这些词时,它们指向的都是本节定义的确切概念。
至此,第2章的内容全部完成。我们从Agent的核心循环出发,理解了Harness的典型架构,对比了单Agent与多Agent的编排模式,梳理了Agent的生命周期,最后建立了术语共识。这些认知基础将支撑你进入第3章——从零开始搭建一个最小可用的Harness。