Skip to main content
章节22 min read

第19章:Evaluation and Monitoring

第19章:Evaluation and Monitoring 本章探讨了使智能 Agent 能够系统性地评估其性能、监控目标进展并检测运行异常的方法论。第11章概述了目标设定与监控,第17章讨论了 Reasoning 机制,而本章则重点关注对 Agent 有效性、效率及合规性的持续(通常是外部)测量。这包括定义指标、建...

第19章:Evaluation and Monitoring

本章探讨了使智能 Agent 能够系统性地评估其性能、监控目标进展并检测运行异常的方法论。第11章概述了目标设定与监控,第17章讨论了 Reasoning 机制,而本章则重点关注对 Agent 有效性、效率及合规性的持续(通常是外部)测量。这包括定义指标、建立反馈循环以及实施报告系统,以确保 Agent 性能在运行环境中符合预期(见图1)。

图1:Evaluation and Monitoring 最佳实践

实际应用与用例

最常见的应用与用例:

  • 实时系统中的性能跟踪:持续监控部署在生产环境中的 Agent 的准确性、延迟和资源消耗(例如,客服聊天机器人的问题解决率、响应时间)。
  • Agent 改进的 A/B 测试:系统性地并行比较不同 Agent 版本或策略的性能,以识别最优方法(例如,为物流 Agent 尝试两种不同的规划算法)。
  • 合规与安全审计:生成自动化审计报告,跟踪 Agent 随时间的推移对道德准则、监管要求和生命协议协议的遵守情况。这些报告可以由 human-in-the-loop 或另一个 Agent 进行验证,并可以在发现问题时生成 KPI 或触发警报。
  • 企业系统:为了在企业系统中治理 Agentic AI,需要一种新的控制工具——AI"合同"。这种动态协议将 AI 委托任务的目标、规则和控制措施编入代码。
  • 漂移检测:随着时间的推移监控 Agent 输出的相关性或准确性,检测由于输入数据分布变化(概念漂移)或环境变化而导致的性能下降。
  • Agent 行为中的异常检测:识别 Agent 采取的异常或意外行动,这些行动可能表示错误、恶意攻击或新出现的不当行为。
  • 学习进度评估:对于设计为学习的 Agent,跟踪其学习曲线、特定技能的改进或跨不同任务或数据集的泛化能力。

动手代码示例

为 AI Agent 开发全面的评估框架是一项具有挑战性的工作,其复杂性堪比一门学科或一篇重要的学术论文。这种困难源于需要考虑的众多因素,如模型性能、用户交互、道德影响和更广泛的社会影响。然而,对于实际实施,可以将重点缩小到 AI Agent 高效有效运行所必需的关键用例。

Agent 响应评估:这一核心过程对于评估 Agent 输出的质量和准确性至关重要。它涉及确定 Agent 是否针对给定输入提供了相关、正确、合乎逻辑、无偏见和准确的信息。评估指标可能包括事实正确性、流畅性、语法精确性以及是否符合用户的预期目的。

python
def evaluate_response_accuracy(agent_output: str, expected_output: str) -> float: """Calculates a simple accuracy score for agent responses.""" # This is a very basic exact match; real-world would use more sophisticated metrics return 1.0 if agent_output.strip().lower() == expected_output.strip().lower() else 0.0 # Example usage agent_response = "The capital of France is Paris." ground_truth = "Paris is the capital of France." score = evaluate_response_accuracy(agent_response, ground_truth) print(f"Response accuracy: {score}")

Python 函数 evaluate_response_accuracy 通过对 Agent 输出与预期输出进行精确的、不区分大小写的比较(在去除前导或尾随空格之后)来计算 AI Agent 响应的基本准确性分数。对于完全匹配的情况,它返回 1.0 分,否则返回 0.0 分,表示二分类的正确或错误评估。虽然这种方法对于简单检查而言简单直接,但它没有考虑释义或语义等价性等变化。

问题在于其比较方法。该函数对两个字符串进行严格的逐字符比较。在提供的示例中:

  • agent_response:"The capital of France is Paris."
  • ground_truth:"Paris is the capital of France."

即使在去除空格并转换为小写后,这两个字符串也不完全相同。因此,该函数将错误地返回 0.0 的准确性分数,尽管两个句子表达了相同的含义。

简单的比较在评估语义相似性方面存在不足,只有当 Agent 的响应与预期输出完全匹配时才能成功。更有效的评估需要先进的自然语言处理(NLP)技术来识别句子之间的含义。对于现实场景中的全面 AI Agent 评估,通常不可或缺更复杂的指标。这些指标可以包括字符串相似性度量(如 Levenshtein 距离和 Jaccard 相似性)、用于特定关键词出现与否的关键词分析、使用嵌入模型的余弦相似度进行语义相似性分析、LLM-as-a-Judge Evaluations(稍后讨论用于评估细微的正确性和有帮助性),以及 RAG 特定指标(如忠实度和相关性)。

延迟监控:在 AI Agent 响应或行动速度至关重要的应用中,Agent 行动的延迟监控至关重要。此过程测量 Agent 处理请求和生成输出所需的持续时间。高延迟会对用户体验和 Agent 的整体有效性产生不利影响,特别是在实时或交互式环境中。在实际应用中,仅仅将延迟数据打印到控制台是不够的。建议将这些信息记录到持久存储系统中。选项包括结构化日志文件(例如 JSON)、时间序列数据库(例如 InfluxDB、Prometheus)、数据仓库(例如 Snowflake、BigQuery、PostgreSQL)或可观测性平台(例如 Datadog、Splunk、Grafana Cloud)。

跟踪 LLM 交互的 Token 使用情况:对于 LLM 驱动的 Agent,跟踪 token 使用情况对于管理成本和优化资源分配至关重要。LLM 交互的计费通常取决于处理的 token 数量(输入和输出)。因此,高效的 token 使用直接降低了运营成本。此外,监控 token 计数有助于识别 Prompt Engineering 或响应生成过程中潜在的可改进领域。

python
# This is conceptual as actual token counting depends on the LLM API class LLMInteractionMonitor: def __init__(self): self.total_input_tokens = 0 self.total_output_tokens = 0 def record_interaction(self, prompt: str, response: str): # In a real scenario, use LLM API's token counter or a tokenizer input_tokens = len(prompt.split()) # Placeholder output_tokens = len(response.split()) # Placeholder self.total_input_tokens += input_tokens self.total_output_tokens += output_tokens print(f"Recorded interaction: Input tokens={input_tokens}, Output tokens={output_tokens}") def get_total_tokens(self): return self.total_input_tokens, self.total_output_tokens # Example usage monitor = LLMInteractionMonitor() monitor.record_interaction("What is the capital of France?", "The capital of France is Paris.") monitor.record_interaction("Tell me a joke.", "Why don't scientists trust atoms? Because they make up everything!") input_t, output_t = monitor.get_total_tokens() print(f"Total input tokens: {input_t}, Total output tokens: {output_t}")

本节介绍了一个概念性的 Python 类 LLMInteractionMonitor,用于跟踪大语言模型交互中的 token 使用情况。该类包含输入和输出 token 的计数器。其 record_interaction 方法通过分割 prompt 和响应字符串来模拟 token 计数。在实际实现中,将使用特定的 LLM API tokenizer 来进行精确的 token 计数。随着交互的发生,监控器会累计总输入和输出 token 计数。get_total_tokens 方法提供对这些累计总数的访问,这对于成本管理和优化 LLM 使用至关重要。

使用 LLM-as-a-Judge 评估"有帮助性"的自定义指标:评估 AI Agent 的"有帮助性"等主观品质超出了标准客观指标的范围。一个潜在的框架涉及使用 LLM 作为评估者。这种 LLM-as-a-Judge 方法根据预定义的"有帮助性"标准评估另一个 AI Agent 的输出。利用 LLM 的高级语言能力,这种方法提供了对主观品质的细致入微的、类人的评估,超越了简单的关键词匹配或基于规则的评估。尽管仍在发展中,但这项技术在自动化和扩展定性评估方面显示出了前景。

python
import google.generativeai as genai import os import json import logging from typing import Optional # --- Configuration --- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') # Set your API key as an environment variable to run this script # For example, in your terminal: export GOOGLE_API_KEY='your_key_here' try: genai.configure(api_key=os.environ["GOOGLE_API_KEY"]) except KeyError: logging.error("Error: GOOGLE_API_KEY environment variable not set.") exit(1) # --- LLM-as-a-Judge Rubric for Legal Survey Quality --- LEGAL_SURVEY_RUBRIC = """ You are an expert legal survey methodologist and a critical legal reviewer. Your task is to evaluate the quality of a given legal survey question. Provide a score from 1 to 5 for overall quality, along with a detailed rationale and specific feedback. Focus on the following criteria: 1. **Clarity & Precision (Score 1-5):** * 1: Extremely vague, highly ambiguous, or confusing. * 3: Moderately clear, but could be more precise. * 5: Perfectly clear, unambiguous, and precise in its legal terminology (if applicable) and intent. 2. **Neutrality & Bias (Score 1-5):** * 1: Highly leading or biased, clearly influencing the respondent towards a specific answer. * 3: Slightly suggestive or could be interpreted as leading. * 5: Completely neutral, objective, and free from any leading language or loaded terms. 3. **Relevance & Focus (Score 1-5):** * 1: Irrelevant to the stated survey topic or out of scope. * 3: Loosely related but could be more focused. * 5: Directly relevant to the survey's objectives and well-focused on a single concept. 4. **Completeness (Score 1-5):** * 1: Omits critical information needed to answer accurately or provides insufficient context. * 3: Mostly complete, but minor details are missing. * 5: Provides all necessary context and information for the respondent to answer thoroughly. 5. **Appropriateness for Audience (Score 1-5):** * 1: Uses jargon inaccessible to the target audience or is overly simplistic for experts. * 3: Generally appropriate, but some terms might be challenging or oversimplified. * 5: Perfectly tailored to the assumed legal knowledge and background of the target survey audience. **Output Format:** Your response MUST be a JSON object with the following keys: * `overall_score`: An integer from 1 to 5 (average of criterion scores, or your holistic judgment). * `rationale`: A concise summary of why this score was given, highlighting major strengths and weaknesses. * `detailed_feedback`: A bullet-point list detailing feedback for each criterion (Clarity, Neutrality, Relevance, Completeness, Audience Appropriateness). Suggest specific improvements. * `concerns`: A list of any specific legal, ethical, or methodological concerns. * `recommended_action`: A brief recommendation (e.g., "Revise for neutrality", "Approve as is", "Clarify scope"). """ class LLMJudgeForLegalSurvey: """A class to evaluate legal survey questions using a generative AI model.""" def __init__(self, model_name: str = 'gemini-1.5-flash-latest', temperature: float = 0.2): """ Initializes the LLM Judge. Args: model_name (str): The name of the Gemini model to use. 'gemini-1.5-flash-latest' is recommended for speed and cost. 'gemini-1.5-pro-latest' offers the highest quality. temperature (float): The generation temperature. Lower is better for deterministic evaluation. """ self.model = genai.GenerativeModel(model_name) self.temperature = temperature def _generate_prompt(self, survey_question: str) -> str: """Constructs the full prompt for the LLM judge.""" return f"{LEGAL_SURVEY_RUBRIC}\n\n---\n**LEGAL SURVEY QUESTION TO EVALUATE:**\n{survey_question}\n---" def judge_survey_question(self, survey_question: str) -> Optional[dict]: """ Judges the quality of a single legal survey question using the LLM. Args: survey_question (str): The legal survey question to be evaluated. Returns: Optional[dict]: A dictionary containing the LLM's judgment, or None if an error occurs. """ full_prompt = self._generate_prompt(survey_question) try: logging.info(f"Sending request to '{self.model.model_name}' for judgment...") response = self.model.generate_content( full_prompt, generation_config=genai.types.GenerationConfig( temperature=self.temperature, response_mime_type="application/json" ) ) # Check for content moderation or other reasons for an empty response. if not response.parts: safety_ratings = response.prompt_feedback.safety_ratings logging.error(f"LLM response was empty or blocked. Safety Ratings: {safety_ratings}") return None return json.loads(response.text) except json.JSONDecodeError: logging.error(f"Failed to decode LLM response as JSON. Raw response: {response.text}") return None except Exception as e: logging.error(f"An unexpected error occurred during LLM judgment: {e}") return None # --- Example Usage --- if __name__ == "__main__": judge = LLMJudgeForLegalSurvey() # --- Good Example --- good_legal_survey_question = """ To what extent do you agree or disagree that current intellectual property laws in Switzerland adequately protect emerging AI-generated content, assuming the content meets the originality criteria established by the Federal Supreme Court? (Select one: Strongly Disagree, Disagree, Neutral, Agree, Strongly Agree) """ print("\n--- Evaluating Good Legal Survey Question ---") judgment_good = judge.judge_survey_question(good_legal_survey_question) if judgment_good: print(json.dumps(judgment_good, indent=2)) # --- Biased/Poor Example --- biased_legal_survey_question = """ Don't you agree that overly restrictive data privacy laws like the FADP are hindering essential technological innovation and economic growth in Switzerland? (Select one: Yes, No) """ print("\n--- Evaluating Biased Legal Survey Question ---") judgment_biased = judge.judge_survey_question(biased_legal_survey_question) if judgment_biased: print(json.dumps(judgment_biased, indent=2)) # --- Ambiguous/Vague Example --- vague_legal_survey_question = """ What are your thoughts on legal tech? """ print("\n--- Evaluating Vague Legal Survey Question ---") judgment_vague = judge.judge_survey_question(vague_legal_survey_question) if judgment_vague: print(json.dumps(judgment_vague, indent=2))

Python 代码定义了一个 LLMJudgeForLegalSurvey 类,旨在使用生成式 AI 模型评估法律调查问题的质量。它利用 google.generativeai 库与 Gemini 模型进行交互。

核心功能涉及将调查问题与详细的评估标准一起发送给模型。该标准规定了判断调查问题的五个标准:清晰度与精确性、中立性与偏见、相关性与焦点、完整性以及受众适宜性。对于每个标准,都会分配 1 到 5 的分数,并且输出中需要详细的基本原理和反馈。代码构建了一个包含标准和待评估调查问题的 prompt。

judge_survey_question 方法将此 prompt 发送给配置的 Gemini 模型,请求按照定义的结构格式化的 JSON 响应。预期的输JSON 包括总分、概要基本原理、每个标准的详细反馈、关注点列表以及建议行动。该类处理 AI 模型交互过程中可能出现的错误,例如 JSON 解码问题或空响应。该脚本通过评估法律调查问题的示例来演示其操作,说明了 AI 如何根据预定义的标准评估质量。

在结束之前,让我们检查各种评估方法,考虑它们的优点和缺点。

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

评估 Agent 的轨迹:评估 Agent 的轨迹至关重要,因为传统的软件测试是不够的。标准代码产生可预测的通过/失败结果,而 Agent 则是概率性运行的,因此需要对最终输出和 Agent 的轨迹(即达到解决方案所采取的步骤序列)进行定性评估。

评估多 Agent 系统具有挑战性,因为它们处于不断变化之中。这需要开发复杂的指标,超越个体性能来衡量沟通和团队协作的有效性。此外,环境本身也不是静态的,要求评估方法(包括测试用例)随时间推移而适应。

这涉及检查决策质量、推理过程和整体结果。实施自动化评估是有价值的,特别是对于原型阶段之后的开发。分析轨迹和 Tool Use 包括评估 Agent 为实现目标所采取的步骤,例如工具选择、策略和任务效率。例如,处理客户产品查询的 Agent 可能理想地遵循涉及意图确定、数据库搜索 Tool Use、结果审查和报告生成的轨迹。将 Agent 的实际行动与这种预期的或 ground truth 轨迹进行比较,以识别错误和低效。比较方法包括精确匹配(要求与理想序列完全匹配)、顺序匹配(顺序正确的行动,允许额外步骤)、任意顺序匹配(任意顺序的正确行动,允许额外步骤)、精确率(衡量预测行动的相关性)、召回率(衡量捕获了多少 essential 行动)和单一 Tool Use(检查特定行动)。指标的选择取决于特定的 Agent 要求,高风险场景可能需要精确匹配,而更灵活的情况可能使用顺序或任意顺序匹配。

AI Agent 的评估涉及两种主要方法:使用测试文件和使用 evalset 文件。测试文件采用 JSON 格式,表示单一、简单的 Agent-Model 交互或会话,非常适合活跃开发期间的单元测试,侧重于快速执行和简单的会话复杂性。每个测试文件包含一个具有多个回合的单一会话,其中回合是用户与 Agent 的交互,包括用户的查询、预期的 Tool Use 轨迹、中间 Agent 响应和最终响应。例如,测试文件可能详细说明用户请求"关闭卧室中的 device_2",指定 Agent 使用具有参数(如 location: Bedroom, device_id: device_2, status: OFF)的 set_device_info 工具,以及预期的最终响应"已将 device_2 状态设置为关闭"。测试文件可以组织到文件夹中,并可能包含定义评估标准的 test_config.json 文件。Evalset 文件利用称为"evalset"的数据集来评估交互,包含多个可能很长的会话,适用于模拟复杂的、多回合的对话和集成测试。一个 evalset 文件包含多个"eval",每个代表一个不同的会话,具有一个或多个"回合",包括用户查询、预期的 Tool Use、中间响应和参考最终响应。一个示例 evalset 可能包括一个会话,其中用户首先询问"What can you do?",然后说"Roll a 10 sided dice twice and then check if 9 is a prime or not,"定义预期的 roll_die 工具调用和 check_prime 工具调用,以及总结掷骰结果和质数检查的最终响应。

多 Agent:评估具有多个 Agent 的复杂 AI 系统很像评估一个团队项目。由于存在许多步骤和交接,其复杂性是一个优势,允许你在每个阶段检查工作质量。你可以检查每个单独的"Agent"执行其特定工作的效果如何,但你还必须评估整个系统的整体表现。

为此,你会问一些关于团队动态的关键问题,并有具体示例支持:

  • Agent 之间是否有效合作?例如,在'航班预订 Agent' 确保航班后,它是否成功将正确的日期和目的地传递给'酒店预订 Agent'?合作失败可能导致酒店被预订到错误的星期。
  • 它们是否制定了良好的计划并坚持下去?想象一下,计划是先预订航班,然后预订酒店。如果'酒店 Agent' 在航班确认之前尝试预订房间,则它已经偏离了计划。你还要检查 Agent 是否卡住了,例如,无休止地搜索"完美"租车而从未进入下一步。
  • 是否为正确的任务选择了正确的 Agent?如果用户询问其旅行的天气,系统应使用提供实时数据的专业'天气 Agent'。如果它改为使用给出通用答案(如"夏天通常很热")的'通用知识 Agent',则它选择了错误的工作工具。
  • 最后,添加更多 Agent 是否会提高性能?如果你向团队添加一个新的'餐厅预订 Agent',它是否使整体旅行规划更好、更高效?或者它是否产生了冲突并减慢了系统速度,表明存在可扩展性问题?

从 Agent 到高级 Contractor

最近,有人提议(Agent Companion, Gulli et al.)从简单的 AI Agent 演变为高级"contractor",从概率性的、通常不可靠的系统转向为复杂、高风险环境设计的更确定性和负责任的系统(见图2)。

当今常见的 AI Agent 基于简短的、未充分指定的指令运行,这使得它们适用于简单的演示,但在生产中很脆弱,因为歧义会导致失败。"contractor"模型通过建立用户与 AI 之间严格的、形式化的关系来解决这一问题,这种关系建立在明确定义且双方同意的条款基础上,就像人类世界中的法律服务协议一样。这种转变由四个关键支柱支持,它们共同确保以前超出自主系统范围的任务的清晰度、可靠性和稳健执行。

第一个支柱是正式合同,这是一个详细的规范,作为任务的唯一事实来源。它远远超出了简单的 prompt。例如,财务分析任务的合同不仅仅会说"分析上个季度的销售情况";它会要求"一份20页的PDF报告,分析2025年第一季度欧洲市场的销售情况,包括五个具体的数据可视化、与2024年第一季度的比较分析,以及基于随附的供应链中断数据集的风险评估。"该合同明确定义了所需的 deliverables、其精确规范、可接受的数据源、工作范围,甚至预期的计算成本和完成时间,使结果具有客观可验证性。

第二个支柱是协商与反馈的动态生命周期。合同不是静态命令,而是对话的开始。contractor Agent 可以分析初始条款并进行协商。例如,如果合同要求使用 Agent 无法访问的特定专有数据源,它可以返回反馈,说明"指定的 XYZ 数据库无法访问。请提供凭据或批准使用替代公共数据库,这可能会稍微改变数据的粒度。"这个协商阶段还允许 Agent 标记歧义或潜在风险,在执行开始前解决误解,防止代价高昂的失败,并确保最终输出与用户的实际意图完美匹配。

图2:Agent 之间的合同履行示例

第三个支柱是专注于质量的迭代执行。与为低延迟响应设计的 Agent 不同,contractor 优先考虑正确性和质量。它基于自我验证和纠正的原则运行。例如,对于代码生成合同,Agent 不仅仅会编写代码;它会生成多种算法方法,根据合同中定义的一套单元测试对它们进行编译和运行,根据性能、安全性和可读性等指标对每个解决方案进行评分,并且只提交通过所有验证标准的版本。这种生成、审查和改进其自身工作直至满足合同规范的内部循环对于建立对其输出的信任至关重要。

最后,第四个支柱是通过分包合同进行分层分解。对于具有重大复杂性的任务,主要 contractor Agent 可以充当项目经理,将主要目标分解为更小、更易于管理的子任务。它通过生成新的正式"分包合同"来实现这一点。例如,一个"构建电子商务移动应用程序"的总体合同可以由主要 Agent 分解为"设计 UI/UX"、"开发用户身份验证模块"、"创建产品数据库结构"和"集成支付网关"的分包合同。这些分包合同中的每一个都是完整的、独立的合同,具有自己的 deliverables 和规范,可以分配给其他专业 Agent。这种结构化的分解允许系统以高度组织化和可扩展的方式处理巨大的、多方面的项目,标志着 AI 从简单工具到真正自主和可靠的问题解决引擎的转变。

最终,这种 contractor 框架通过直接将正式规范、协商和可验证执行的原则嵌入 Agent 的核心逻辑中,重新构想了 AI 交互。这种有条不紊的方法将人工智能从前景广阔但往往不可预测的助手提升为可靠的系统,能够自主管理具有可审计精度的复杂项目。通过解决歧义性和可靠性的关键挑战,该模型为在信任和问责制至关重要的关键任务领域部署 AI 铺平了道路。

Google 的 ADK

在结束之前,让我们看一个支持评估的框架的具体示例。使用 Google 的 ADK 进行 Agent 评估(见图3)可以通过三种方法进行:基于 Web 的 UI(adk web)用于交互式评估和数据集生成,使用 pytest 进行编程集成以纳入测试管道,以及直接命令行界面(adk eval)用于适用于定期构建生成和验证过程的自动化评估。

图3:Google ADK 的评估支持

基于 Web 的 UI 支持交互式会话创建和保存到现有或新的 eval 集,显示评估状态。Pytest 集成允许通过调用 AgentEvaluator.evaluate、指定 Agent 模块和测试文件路径,将测试文件作为集成测试的一部分运行。

命令行界面通过提供 Agent 模块路径和 eval 集文件来促进自动化评估,并可以选择指定配置文件或打印详细结果。可以通过在 eval 集文件名后列出它们(以逗号分隔)来选择较大 eval 集中的特定 eval 执行。

一览

What(是什么):Agentic 系统和 LLM 在复杂的动态环境中运行,其性能可能随时间推移而下降。它们的概率性和非确定性性质意味着传统的软件测试不足以确保可靠性。评估动态多 Agent 系统是一个重大挑战,因为它们不断变化的性质及其环境要求开发自适应测试方法和复杂的指标,这些指标可以衡量超越个体性能的协作成功。数据漂移、意外交互、工具调用和偏离预期目标等问题可能在部署后出现。

Why(为什么):标准化的评估和监控框架提供了一种系统性的方法来评估和确保智能 Agent 的持续性能。这涉及为准确性、延迟和资源消耗定义明确的指标,如 LLM 的 token 使用情况。它还包括先进技术,如分析 agentic 轨迹以理解推理过程,以及采用 LLM-as-a-Judge 进行细致的定性评估。通过建立反馈循环和报告系统,该框架允许持续改进、A/B 测试以及检测异常或性能漂移,确保 Agent 与其目标保持一致。

Rule of thumb(经验法则):在实时性能和高可靠性至关重要的生产环境中部署 Agent 时,使用此模式。此外,当需要系统性地比较 Agent 的不同版本或其底层模型以推动改进时,以及在需要合规、安全和道德审计的监管或高风险领域运行时,也使用此模式。当 Agent 的性能可能由于数据或环境的变化(漂移)而随时间推移下降时,或在评估复杂的 agentic 行为(包括行动序列(轨迹)和主观输出(如有帮助性)的质量)时,此模式也适用。

视觉摘要

图4:Evaluation and Monitoring 设计模式

关键要点

  • 评估智能 Agent 超越了传统测试,可以持续衡量其在现实环境中的有效性、效率和需求遵守情况。
  • Agent 评估的实际应用包括实时系统中的性能跟踪、改进的 A/B 测试、合规审计以及检测行为中的漂移或异常。
  • 基本的 Agent 评估涉及评估响应准确性,而现实场景需要更复杂的指标,如延迟监控和 LLM 驱动 Agent 的 token 使用跟踪。
  • Agent 轨迹(Agent 采取的步骤序列)对于评估至关重要,将实际动作与理想的 ground-truth 路径进行比较,以识别错误和低效率。
  • ADK 通过用于单元测试的单独测试文件和用于集成测试的全面 evalset 文件提供结构化的评估方法,两者都定义了预期的 Agent 行为。
  • Agent 评估可以通过基于 Web 的 UI 进行交互式测试、通过 pytest 进行 CI/CD 集成编程,或通过命令行界面进行自动化工作流来执行。
  • 为了使 AI 在复杂、高风险任务中可靠,我们必须从简单的 prompt 转向精确定义可验证 deliverables 和范围的正式"合同"。这种结构化协议允许 Agent 进行协商、澄清歧义并迭代验证其自身工作,将其从不可预测的工具转变为负责任和值得信赖的系统。

结论

总之,有效评估 AI Agent 需要超越简单的准确性检查,对其在动态环境中的性能进行持续的、多方面的评估。这涉及对延迟和资源消耗等指标的实用监控,以及通过 Agent 的轨迹对 Agent 决策过程进行复杂分析。对于有帮助性等细微品质,LLM-as-a-Judge 等创新方法正变得至关重要,而 Google 的 ADK 等框架为单元测试和集成测试提供了结构化工具。随着多 Agent 系统的出现,挑战加剧,焦点转向评估协作成功和有效合作。

为了确保关键应用中的可靠性,范式正在从简单的、prompt 驱动的 Agent 转向受正式协议约束的高级"contractor"。这些 contractor Agent 基于明确的、可验证的条款运行,允许它们协商、分解任务并自我验证其工作,以满足严格的质量标准。这种结构化的方法将 Agent 从不可预测的工具转变为能够自主处理复杂、高风险任务的负责任系统。最终,这种演进对于在关键任务领域部署复杂的 agentic AI 所需的信任建立至关重要。

参考文献

相关研究包括:

  1. ADK Web: https://github.com/google/adk-web
  2. ADK Evaluate: https://google.github.io/adk-docs/evaluate/
  3. Survey on Evaluation of LLM-based Agents, https://arxiv.org/abs/2503.16416
  4. Agent-as-a-Judge: Evaluate Agents with Agents, https://arxiv.org/abs/2410.10934
  5. Agent Companion, Gulli et al: https://www.kaggle.com/whitepaper-agent-companion