第19章:评估与监控

智能体设计模式:构建智能系统的实战指南 阅读 22 次

第19章:评估与监控

本章探讨了允许智能体系统性地评估其性能、监控向目标进展的情况以及检测操作异常的方法。虽然第11章概述了目标设定和监控,第17章讨论了推理机制,但本章重点在于对智能体效果的持续、通常外部的测量,以及其效率和符合要求性的监控。这包括定义指标、建立反馈循环以及实施报告系统,以确保智能体的性能与操作环境中的预期相一致(见图1)。

image1

图1:评估和监控的最佳实践

实际应用与用例

最常见的应用和用例:

  • 实时系统中的性能跟踪: 持续监控部署在生产环境中的智能体(例如,客户服务聊天机器人的解决率、响应时间)的准确性、延迟和资源消耗。
  • 智能体改进的A/B测试: 系统性地并行比较不同智能体版本或策略的性能,以确定最佳方法(例如,为物流智能体尝试两种不同的规划算法)。
  • 合规性与安全审计: 生成自动审计报告,跟踪智能体随时间对道德准则、法规要求和安全协议的遵守情况。这些报告可由人工审核或另一智能体进行验证,并在发现问题时生成关键绩效指标或触发警报。
  • 企业系统:为了管理企业系统中的智能体AI,需要一种新的控制工具,即AI“合同”。这个动态协议规定了AI委托任务的宗旨、规则和控制措施。
  • 漂移检测: 监控智能体输出在时间上的相关性或准确性,检测其性能因输入数据分布(概念漂移)或环境变化而下降的情况。
  • 智能体行为异常检测: 识别智能体采取的不寻常或意外的行为,这可能表明错误、恶意攻击或突发的非期望行为。
  • 学习进度评估: 对于旨在学习的智能体,跟踪其学习曲线、特定技能的提升或在不同任务或数据集上的泛化能力。

动手代码示例

开发一套全面的人工智能智能体评估框架是一项具有挑战性的工作,其复杂性堪比一门学术学科或一篇重要的出版物。这种困难源于需要考虑的众多因素,例如模型性能、用户交互、伦理影响以及更广泛的社会影响。然而,为了实际应用,可以将焦点缩小到对智能体高效有效运行至关重要的关键用例。

智能体响应评估: 这一核心流程对于评估智能体输出质量与准确性至关重要。它包括判断智能体是否能够针对给定输入提供相关、正确、逻辑清晰、无偏见且准确的信息。评估指标可能包括事实准确性、流畅性、语法精确性和符合用户意图的程度。

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通过执行去除前后空白字符后的智能体输出与预期输出的精确、不区分大小写的比较,来计算智能体响应的基本准确率得分。如果完全匹配,则返回1.0分,否则返回0.0分,表示二元的正确或错误评估。虽然这种方法对于简单的检查来说很简单,但它没有考虑到诸如释义或语义等价这样的变化。

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

智能体响应: "法国的首都是巴黎。" 真实值: "巴黎是法国的首都。"

即使移除了空白字符并将字符串转换为小写,这两个字符串仍然不相同。因此,该函数将错误地返回一个准确度得分为0.0,尽管这两个句子传达了相同的意思。

直接比较在评估语义相似性方面存在不足,只有当智能体的响应与预期输出完全匹配时才能成功。更有效的评估需要先进的自然语言处理(NLP)技术来辨别句子之间的含义。在现实场景中对人工智能智能体进行彻底评估时,通常需要更复杂的指标。这些指标可以包括字符串相似度度量,如Levenshtein距离和Jaccard相似度,关键词分析以确定是否存在特定关键词,使用嵌入模型计算余弦相似度的语义相似度,LLM作为裁判的评估(稍后讨论,用于评估细微的正确性和有用性),以及RAG特定的指标,如忠实度和相关性。

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

跟踪LLM交互中的令牌使用情况: 对于由大型语言模型(LLM)驱动的智能体,跟踪令牌使用情况对于管理成本和优化资源配置至关重要。LLM交互的计费通常取决于处理的令牌数量(输入和输出)。因此,高效的令牌使用可以直接降低运营成本。此外,监控令牌计数有助于识别在提示工程或响应生成过程中可能存在的改进领域。

# 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。该类包含输入和输出令牌的计数器。其record_interaction方法通过分割提示和响应字符串来模拟令牌计数。在实际实现中,将使用特定的LLM API分词器以实现精确的令牌计数。随着交互的发生,监控器累积输入和输出令牌的总数。get_total_tokens方法提供了访问这些累积总数的途径,这对于成本管理和优化LLM使用至关重要。

使用LLM作为评判者的“有用性”自定义指标: 评估主观质量,如AI智能体的“有用性”,超出了标准客观指标所能及的范围。一个潜在的框架是使用大型语言模型(LLM)作为评判者。这种LLM作为评判者的方法根据“有用性”的预定义标准评估另一个AI智能体的输出。利用LLM的高级语言能力,这种方法提供了细腻、类似人类的对主观质量的评估,超越了简单的关键词匹配或基于规则的评估。尽管仍在开发中,但这一技术显示出自动化和扩展定性评估的潜力。

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).
* `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的分数,并且输出需要包含详细的理由和反馈。代码构建了一个提示,其中包含了评估标准以及要评估的调查问题。

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

在结束之前,让我们来探讨各种评估方法,并考虑它们的优缺点。

Evaluation Method Strengths Weaknesses
Human Evaluation Captures subtle behavior Difficult to scale, expensive, and time-consuming, as it considers subjective human factors.
LLM-as-a-Judge Consistent, efficient, and scalable. Intermediate steps may be overlooked. Limited by LLM capabilities.
Automated Metrics Scalable, efficient, and objective Potential limitation in capturing complete capabilities.

智能体轨迹

评估智能体的轨迹至关重要,因为传统的软件测试是不够的。标准代码会产生可预测的通过和失败结果,而智能体则是以概率性进行操作,需要定性评估最终输出和智能体的轨迹——即达到解决方案所采取的步骤序列。评估多智能体系统具有挑战性,因为它们始终处于变化之中。这需要开发出超越个体性能的复杂指标,以衡量沟通和团队协作的有效性。此外,环境本身也不是静态的,这要求包括测试用例在内的评估方法随着时间的推移而适应。

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

评估AI智能体的方法主要有两种:使用测试文件和使用评估集文件。测试文件采用JSON格式,代表单个、简单的智能体-模型交互或会话,非常适合在开发过程中的单元测试,侧重于快速执行和简单的会话复杂性。每个测试文件包含一个会话,该会话包含多个回合,其中回合是指用户与智能体的交互,包括用户的查询、预期的工具使用轨迹、中间智能体响应和最终响应。例如,一个测试文件可能详细描述用户请求“关闭卧室中的设备_2”,指定智能体使用具有如位置:卧室、设备_id:device_2和状态:OFF等参数的set_device_info工具,并期望最终响应为“我已经将设备_2的状态设置为关闭。”测试文件可以组织到文件夹中,并可能包含一个test_config.json文件来定义评估标准。评估集文件利用一个名为“evalset”的数据集来评估交互,包含多个可能较长的会话,适合模拟复杂的多回合对话和集成测试。一个评估集文件包含多个“evals”,每个“eval”代表一个独特的会话,包含一个或多个“turns”,这些回合包括用户查询、预期的工具使用、中间响应和参考最终响应。一个示例评估集可能包括一个会话,其中用户首先询问“你能做什么?”然后说“掷两次10面的骰子,然后检查9是否为质数”,定义了预期的roll_die工具调用和check_prime工具调用,以及总结骰子滚动和质数检查的最终响应。

多智能体:评估具有多个智能体的复杂AI系统就像评估团队项目一样。由于有许多步骤和交接,其复杂性是一个优势,允许你在每个阶段检查工作的质量。你可以检查每个个体“智能体”完成其特定任务的表现如何,但你必须评估整个系统作为一个整体的表现。

为了做到这一点,你需要就团队动态提出关键问题,并辅以具体的例子来支持。智能体是否有效地进行了合作?例如,在“航班预订智能体”成功预订航班后,它是否成功地将正确的日期和目的地传递给了“酒店预订智能体”?合作失败可能导致预订了错误星期的酒店。 他们是否制定了一个良好的计划并坚持执行?假设计划是先预订航班,然后预订酒店。如果“酒店智能体”试图在航班确认之前预订房间,那么它已经偏离了计划。你还要检查智能体是否陷入了困境,例如,无休止地寻找“完美的”租赁汽车,而从未继续下一步。 是否选择了合适的智能体来完成相应的任务?如果用户询问旅行期间的天气情况,系统应该使用专门提供实时数据的“天气智能体”。如果它反而使用了一个提供诸如“夏天通常很暖和”这类通用答案的“通用知识智能体”,那么它就选择了错误的工作工具。 最后,增加更多智能体是否会提升性能?如果你为团队新增一个“餐厅预订智能体”,这是否会使得整体行程规划更加出色和高效?或者它会导致冲突并减慢系统速度,这表明存在可扩展性问题?

从智能体到高级承包商

最近,有提议(智能体伴侣,gulli 等人)从简单的AI智能体向高级“承包商”进化,从概率性、通常不可靠的系统转变为更确定性和可问责的系统,这些系统旨在处理复杂、高风险的环境(见图2)。

当今常见的AI智能体在处理简短、不明确的指令时运行,这使得它们适合进行简单的演示,但在实际生产中却很脆弱,因为模糊性会导致失败。"承包商"模型通过建立用户与AI之间严格、正式的关系来解决这个问题,这种关系建立在明确定义且双方同意的条款之上,类似于人类世界中的法律服务协议。这一转变由四个关键支柱支持,共同确保了以前超出自主系统范围的任务的清晰性、可靠性和稳健执行。

首先是“规范化合同”的支柱,这是一份详细的规范,作为一项任务的唯一真相来源。它远不止一个简单的提示。例如,一项财务分析任务的合同不会仅仅说“分析上一季度的销售额”,而是会要求“一份20页的PDF报告,分析2025年第一季度的欧洲市场销售情况,包括五个具体的数据可视化,与2024年第一季度的比较分析,以及基于所包含的供应链中断数据集的风险评估。”这份合同明确规定了所需的交付成果、其精确规范、可接受的数据来源、工作范围,甚至预期的计算成本和完成时间,使得结果可以客观验证。

第二是动态生命周期中谈判和反馈的支柱。合同并非静态的命令,而是对话的开始。承包智能体可以分析初始条款并进行谈判。例如,如果合同要求使用智能体无法访问的特定专有数据源,它可以返回反馈说明:“指定的XYZ数据库无法访问。请提供凭证或批准使用替代的公共数据库,这可能会略微改变数据的粒度。”这一谈判阶段还允许智能体标记模糊性或潜在风险,在执行开始前解决误解,防止昂贵的失败,并确保最终输出与用户的实际意图完美契合。

image2

图2:智能体之间的合约执行示例

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

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

最终,这个承包商框架通过将形式化规范、协商和可验证执行的原则直接嵌入到智能体的核心逻辑中,重新构想了AI交互。这种方法论将人工智能从有潜力但往往不可预测的助手提升为一个可靠系统,能够以可审计的精确度自主管理复杂项目。通过解决模糊性和可靠性等关键挑战,该模型为在信任和问责制至关重要的任务关键领域部署AI铺平了道路。

谷歌的ADK

在结论之前,让我们来看一个支持评估的框架的具体示例。使用谷歌的ADK(见图3)进行智能体评估可以通过三种方法进行:基于Web的UI(adk web)用于交互式评估和数据集生成,使用pytest进行程序集成,以便将其纳入测试流程,以及直接命令行界面(adk eval)用于适合常规构建生成和验证过程的自动化评估。

image3

图3:Google ADK的评估支持

基于网页的用户界面支持创建和保存交互式会话到现有或新的评估集中,并显示评估状态。Pytest集成允许通过调用AgentEvaluator.evaluate方法,指定智能体模块和测试文件路径,将测试文件作为集成测试的一部分运行。

命令行界面通过提供智能体模块路径和评估集文件,以及指定配置文件或打印详细结果的选项,简化了自动化评估。可以在评估集文件名后列出特定评估项以执行,评估项之间用逗号分隔。

概览

内容: 智能体系统和LLM在复杂、动态的环境中运行,其性能可能会随时间退化。它们概率性和非确定性本质意味着传统的软件测试不足以确保可靠性。评估动态多智能体系统是一个重大挑战,因为它们的不断变化性质及其环境性质要求开发适应性测试方法和复杂的指标,这些指标可以衡量协作成功,而不仅仅是个人表现。在部署后可能会出现数据漂移、意外交互、工具调用和偏离预期目标等问题。因此,持续评估是必要的,以衡量智能体的有效性、效率和遵守操作和安全要求的情况。

原因:一个标准化的评估和监控框架提供了一种系统化的方法来评估和确保智能体的持续性能。这包括为准确性、延迟和资源消耗(如LLM的令牌使用)定义清晰的指标。它还包括分析智能体轨迹以理解推理过程和采用LLM作为裁判进行细微、定性的评估等高级技术。通过建立反馈循环和报告系统,该框架允许持续改进、A/B测试以及检测异常或性能漂移,确保智能体与其目标保持一致。

经验法则:在部署智能体到实时、生产环境,且实时性能和可靠性至关重要的场合,请使用此模式。此外,当需要系统地比较不同版本的智能体或其底层模型以推动改进,或在需要符合性、安全性和道德审计的监管或高风险领域运营时,也应使用此模式。此模式还适用于智能体的性能可能因数据或环境变化(漂移)而随时间退化的情况,以及评估复杂的智能体行为,包括动作序列(轨迹)和主观输出质量(如有用性)的情况。

视觉摘要

image4
图4:评估和监控设计模式

关键要点

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

结论

总结来说,有效评估AI智能体需要超越简单的准确性检查,转向对其在动态环境中表现的持续、多角度评估。这包括对延迟和资源消耗等指标的实践监控,以及通过智能体的轨迹对决策过程的复杂分析。对于如帮助性这样的细微品质,LLM作为裁判员等创新方法正变得至关重要,而像谷歌的ADK这样的框架则为单元和集成测试提供了结构化的工具。在多智能体系统中,挑战进一步加剧,重点转向评估协作成功和有效合作。

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

参考文献

相关研究包括:

  1. ADK Web
  2. ADK Evaluate
  3. ADK评估
  4. 基于LLM智能体评估调查
  5. 智能体作为裁判:使用智能体评估智能体
  6. 智能体伴侣,gulli 等人