Skip to content

原文: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。