《Agentic Design Patterns》第 19 章导读:评估与监控

《Agentic Design Patterns》第 19 章导读:评估与监控

本文是对开源书籍《Agentic Design Patterns》第 19 章的解读与导读,内容忠实呈现原文,并附个人思考。

原书在线阅读:https://adp.xindoo.xyz/ | 翻译项目代码仓库:https://github.com/xindoo/agentic-design-patterns


前面我们聊了怎么让智能体更聪明------规划、推理、协作、工具使用......但有一个灵魂拷问:你怎么知道你的智能体表现好不好?

传统软件有单元测试、集成测试、性能测试------输入什么、输出什么,清清楚楚。但 AI 智能体不一样:它是概率性的、非确定性的,同一个问题每次回答可能都不一样。它还会调用工具、跟环境交互,行为轨迹千变万化。

第 19 章讲的就是评估和监控------怎么系统地衡量智能体的性能、监控目标进展、检测操作异常。


一、为什么评估和监控这么难?

先想一下:你怎么评估一个客服聊天机器人的好坏?

传统思路:写一堆测试用例,输入问题,检查输出------但输出是自然语言啊!"请问怎么退款?"和"我要退货退款"表达的是同一个意思,但字符串完全不一样。精确匹配根本行不通。

而且智能体不只是"回答问题",它还会:

  • 调用工具(查订单、改地址、退款项)
  • 多轮对话(用户说不清,智能体得追问)
  • 处理异常(订单不存在怎么办?)
  • 跟其他系统交互

这就导致传统的软件测试方法完全不够用。我们需要全新的评估体系。

书中列举了 7 个典型应用场景:

场景 说明
实时性能跟踪 持续监控生产环境中智能体的准确性、延迟、资源消耗
A/B 测试 并行比较不同版本/策略的性能,找出最优方案
合规与安全审计 自动生成审计报告,跟踪道德准则、监管要求的遵守情况
企业系统治理 AI"合约"------为 AI 委派的任务编纂目标、规则和控制机制
漂移检测 监控输出质量是否随时间退化(数据分布变化、环境变化)
异常检测 识别异常或意外操作,可能表明错误、攻击或涌现的不良行为
学习进度评估 跟踪学习型智能体的学习曲线、技能改进、泛化能力

二、基础评估指标

1. 响应准确性评估

最基础的评估是检查智能体输出的正确性。但"正确性"怎么衡量?

一个最简单的版本是精确匹配:

python 复制代码
def evaluate_response_accuracy(agent_output: str, expected_output: str) -> float:
    """计算智能体响应的简单准确度分数。"""
    return 1.0 if agent_output.strip().lower() == expected_output.strip().lower() else 0.0

但这个方法问题很大------"法国首都是巴黎"和"巴黎是法国的首都"意思完全一样,但字符串不匹配,就会被判 0 分。

真实场景中需要更高级的指标:

  • 字符串相似度:Levenshtein 距离、Jaccard 相似度
  • 关键词分析:检查关键词的存在/缺失
  • 语义相似度:用嵌入模型计算余弦相似度
  • LLM-as-a-Judge:让另一个 LLM 来评估细微的正确性和有用性
  • RAG 特定指标:忠实性(答案是否基于检索到的上下文)、相关性

2. 延迟监控

响应速度直接影响用户体验。特别是在实时或交互式环境中,延迟过高会严重损害用户体验。

实际应用中,延迟数据不能只打印到控制台,需要记录到持久存储:

  • 结构化日志文件(JSON 格式)
  • 时间序列数据库(InfluxDB、Prometheus)
  • 数据仓库(Snowflake、BigQuery、PostgreSQL)
  • 可观测性平台(Datadog、Splunk、Grafana Cloud)

3. Token 使用量跟踪

LLM 驱动的智能体,成本主要来自 token 消耗。输入输出 token 越多,账单越贵。

python 复制代码
class LLMInteractionMonitor:
    def __init__(self):
        self.total_input_tokens = 0
        self.total_output_tokens = 0

    def record_interaction(self, prompt: str, response: str):
        # 实际场景用 LLM API 的 token 计数器或 tokenizer
        input_tokens = len(prompt.split())
        output_tokens = len(response.split())
        self.total_input_tokens += input_tokens
        self.total_output_tokens += output_tokens

跟踪 token 使用量有两个好处:

  1. 成本管理:知道钱花在哪了,优化资源分配
  2. 改进提示词:识别提示词工程或响应生成中的优化空间

三、LLM-as-a-Judge:用 AI 评估 AI

"有用性"、"质量"这些主观品质,用客观指标很难衡量。这时候就有了一个巧妙的思路:让一个 LLM 来评估另一个 LLM 的输出。

这就是 LLM-as-a-Judge 方法。它的优势是:

  • 一致:同样的标准,不会今天松明天紧
  • 高效:可以大规模并行评估
  • 可扩展:想加多少评估维度就加多少

书中给了一个法律调查问题质量评估的完整示例,用 Gemini 模型当法官,从五个维度打分:

评估维度 说明
清晰性和精确性 问题是否模糊、歧义、令人困惑
中立性和偏见 是否有引导性或有偏见的语言
相关性和焦点 是否与调查目标直接相关
完整性 是否提供了回答所需的足够上下文
受众适当性 术语难度是否适合目标受众

每个维度 1-5 分,最后输出 JSON 格式的结构化结果:整体分数、理由、详细反馈、关注点、建议行动。

python 复制代码
class LLMJudgeForLegalSurvey:
    """使用生成式 AI 模型评估法律调查问题的类。"""
    def __init__(self, model_name='gemini-1.5-flash-latest', temperature=0.2):
        self.model = genai.GenerativeModel(model_name)
        self.temperature = temperature

    def judge_survey_question(self, survey_question: str) -> Optional[dict]:
        full_prompt = self._generate_prompt(survey_question)
        response = self.model.generate_content(
            full_prompt,
            generation_config=genai.types.GenerationConfig(
                temperature=self.temperature,
                response_mime_type="application/json"
            )
        )
        return json.loads(response.text)

当然,LLM-as-a-Judge 也不是完美的------它受限于"法官"LLM 自身的能力,可能忽略中间步骤,也可能有自己的偏见。

三种评估方法对比:

评估方法 优势 劣势
人工评估 能捕捉细微行为、考虑主观因素 难以扩展、昂贵、耗时
LLM-as-a-Judge 一致、高效、可扩展 可能忽略中间步骤、受 LLM 能力限制
自动化指标 可扩展、高效、客观 在捕获完整能力方面可能有局限

四、智能体轨迹评估

评估智能体不能只看最终输出,还要看它是怎么走到那里的 ------也就是它的轨迹(trajectory)。

轨迹就是智能体达到目标所采取的步骤序列。评估轨迹可以检查:

  • 决策质量好不好
  • 推理过程对不对
  • 工具有没有用对
  • 效率高不高

比如一个处理客户产品查询的智能体,理想轨迹应该是:

  1. 确定用户意图
  2. 使用数据库搜索工具
  3. 审查结果
  4. 生成报告

把智能体的实际操作和理想轨迹对比,就能发现错误和低效率。

对比方法有很多种:

方法 说明 严格程度
精确匹配 要求与理想序列完全一致 最高
按序匹配 正确操作按顺序,允许有额外步骤 中等
任意顺序匹配 正确操作以任何顺序,允许额外步骤 较低
精确度 测量预测操作的相关性 灵活
召回率 测量捕获了多少基本操作 灵活
单工具使用 检查特定操作是否发生 最低

选哪种方法取决于场景------高风险场景可能要求精确匹配,灵活场景用按序或任意顺序就行。

测试文件 vs 评估集文件

ADK(Google 的 Agent Development Kit)提供了两种评估文件格式:

  • 测试文件:单个简单的智能体交互,JSON 格式,适合单元测试,快速执行
  • 评估集文件:多个可能很长的会话,适合模拟复杂多轮对话和集成测试

每个测试/评估包含多个"回合",每个回合包括:用户查询、预期的工具使用、中间智能体响应、最终响应。


五、多智能体评估:评估"团队表现"

评估多智能体系统就像评估团队项目------不只要看每个人干得怎么样,还要看整个团队配合得好不好。

四个关键问题:

  1. 智能体是否有效合作?

    比如"航班预订智能体"成功订完票后,有没有正确把日期和目的地传给"酒店预订智能体"?传错了酒店就订错了时间。

  2. 它们是否制定了好计划并坚持执行?

    计划是先订航班再订酒店,如果"酒店智能体"在航班确认前就尝试订房,那就是偏离计划了。还要检查智能体会不会卡住------比如无休止地搜"完美"的租车,永远不进入下一步。

  3. 是否为正确的任务选择了正确的智能体?

    用户问天气,系统应该用专门的"天气智能体"(提供实时数据),而不是"通用知识智能体"(只给"夏天通常很温暖"这种废话)。

  4. 添加更多智能体是否真的提高了性能?

    加了个"餐厅预订智能体",是让整体旅行规划更好更高效了?还是造成冲突、拖慢系统?如果是后者,说明可扩展性有问题。


六、从智能体到高级承包商

书中提出了一个很有意思的演进方向:从简单的 AI 智能体,演进为高级"承包商"(Contractor)。

当今的 AI 智能体靠简短模糊的指令运行------做 demo 还行,放到生产环境就很脆弱,因为歧义会导致失败。

"承包商"模型通过建立用户和 AI 之间严格的正式化关系来解决这个问题------就像人类世界的法律服务协议一样,明确定义、双方同意。

四个关键支柱:

1. 正式化合约

不是简单的提示词,而是详细的规范,作为任务的唯一真实来源。

比如财务分析任务的合约不会只说"分析上个季度的销售",而是会要求:

  • 一份 20 页的 PDF 报告
  • 分析 2025 年第一季度欧洲市场销售
  • 包含五个特定的数据可视化
  • 与 2024 年第一季度的比较分析
  • 基于提供的供应链中断数据集的风险评估

明确到可交付成果、精确规格、可接受的数据源、工作范围、预期成本和完成时间------结果客观可验证。

2. 动态协商和反馈生命周期

合约不是静态命令,而是对话的开始。承包商智能体可以分析初始条款并进行协商。

比如合约要求使用智能体无法访问的专有数据库,它可以返回反馈:"指定的 XYZ 数据库不可访问。请提供凭据或批准使用替代公共数据库,这可能会略微改变数据的粒度。"

协商阶段还允许智能体标记歧义或潜在风险------在执行开始之前解决误解,防止代价高昂的失败。

3. 以质量为中心的迭代执行

承包商优先考虑正确性和质量,而不是低延迟。它基于自我验证和纠正的原则运作。

比如代码生成合约,智能体不会只是写代码;它会:

  • 生成多个算法方法
  • 根据合约定义的单元测试编译和运行它们
  • 对性能、安全性、可读性等指标评分
  • 只提交通过所有验证标准的版本

4. 通过子合约的层次化分解

复杂度很高的任务,主承包商智能体充当项目经理,把大目标分解成更小的子任务------通过生成新的正式"子合约"。

比如"构建电商移动应用"的主合约,可以分解为:

  • 设计 UI/UX
  • 开发用户身份验证模块
  • 创建产品数据库架构
  • 集成支付网关

每个子合约都是完整独立的,有自己的可交付成果和规格,可以分配给其他专门的智能体。

这个承包商模型的思路非常值得深思。它本质上是把软件工程中的"需求规格说明书"、"合同管理"、"项目分解"等成熟实践,引入到 AI 智能体的交互中。对于高风险、高价值的任务,这可能是未来的方向。


七、Google ADK 的评估支持

Google 的 ADK(Agent Development Kit)提供了三种评估方式:

  1. 基于 Web 的 UI(adk web):交互式评估和数据集生成,可视化地创建会话并保存到评估集
  2. pytest 编程集成 :通过 AgentEvaluator.evaluate 调用,整合到测试管道中,适合 CI/CD
  3. 命令行界面(adk eval):自动化评估,适合定期构建和验证流程

八、速览:评估和监控设计模式

维度 说明
问题背景 Agentic 系统在复杂动态环境中运行,性能可能随时间退化。概率性和非确定性意味着传统软件测试不足以确保可靠性
解决方案 标准化评估和监控框架------定义明确指标(准确性、延迟、token 使用)、分析智能体轨迹、采用 LLM-as-a-Judge、建立反馈循环
实践建议 生产环境部署、A/B 测试比较、合规审计、漂移检测、评估复杂行为(轨迹 + 主观质量)时使用

九、关键要点总结

  1. 超越传统测试:评估智能体需要在真实环境中持续测量其有效性、效率和合规性
  2. 基础指标三件套:响应准确性、延迟监控、token 使用跟踪------每个智能体系统都得有
  3. 轨迹评估很重要:不只要看结果,还要看过程------把实际操作和理想路径对比,发现错误和低效率
  4. LLM-as-a-Judge 是利器:主观品质(有用性、质量)的评估,让 AI 来评 AI,一致且可扩展
  5. 多智能体要看协作:团队表现不等于个体表现之和,要检查合作质量、计划执行、角色匹配、可扩展性
  6. 承包商模型是未来方向:从简单提示词到正式合约,协商、分解、自我验证------让 AI 从不可预测的工具变成可问责的系统

我的思考

这一章让我感触最深的是**"从智能体到承包商"**这个概念。

现在很多人做 AI 应用,思路还是"写个好提示词就行"。但真要上生产,你会发现:歧义、边界情况、可靠性、可审计性......全是问题。承包商模型提出的四个支柱------正式合约、协商反馈、迭代执行、层次分解------其实就是把人类社会中已经验证过的"工程项目管理"方法论,移植到 AI 系统中来。

另外,LLM-as-a-Judge 也是一个非常实用的技术。以前评估 AI 输出质量只能靠人,贵且慢。现在用 AI 评 AI,虽然不是 100% 准确,但胜在快、便宜、一致,可以作为第一道筛选关卡。

当然,评估和监控是个大学问------数据漂移怎么检测?异常行为怎么发现?多智能体的协作效率怎么量化?这些问题都还在探索中。但至少,我们已经有了一个框架和起点。

下一章我们聊第 20 章------优先级排序。当智能体面临一堆任务、目标冲突、资源有限时,该先做什么?后做什么?敬请关注!

相关推荐
鱼宵1 小时前
Spring AI RAG 问答助手:回答带引用,AI 不再睁眼说瞎话
java·人工智能·spring·springai
lisw051 小时前
环境智能(ambient intelligence)概述!
网络·人工智能·计算机视觉
虎鲸不是鱼1 小时前
AI 自动化逆向(五)控制组:区分「没有」和「没取到」
人工智能·自动化·大模型·ai逆向·ai反编译
vivo互联网技术1 小时前
Agent 不能只记录调用了什么,还要记录为什么调用 | KDC 系列 03
架构·agent
jerryinwuhan1 小时前
从GPT到Agent:下一代人工智能系统架构演进
人工智能·gpt·系统架构
console.log('npc')1 小时前
第 3 章 工程化与项目初始化
前端·人工智能·大模型
墨云安全1 小时前
AI 渗透测试是怎么实现的?2026 年大模型驱动测试用例生成的工程拆解
网络·人工智能·网络安全·渗透测试·测试用例
rannn_1111 小时前
项目缓存实战:热点 Key 击穿、缓存穿透与多级缓存架构
java·缓存·架构
阿文和她的Key1 小时前
私有化 AI 基座的三层分工:环境层、管控层、网关层各自解决什么
网络·人工智能