Skip to content

AI Agent 智能体

AI 技术 ⭐⭐⭐ 高级 🔥🔥🔥 高频

💡 核心要点

AI Agent(智能体)是以大语言模型为核心推理引擎,能够自主感知环境、制定计划、调用工具并根据反馈迭代优化的智能系统。与简单的 LLM 调用不同,Agent 具备自主决策循环——它不仅能生成文本,还能分解复杂任务、操作外部工具、维护记忆状态,并通过反思机制自我修正。Agent 是当前 LLM 应用架构中最重要的演进方向。

什么是 AI Agent

与简单 LLM 调用的区别

简单的 LLM 调用是一次性的输入-输出映射——给定 Prompt,返回回答,流程即结束。而 AI Agent 是一个持续运行的决策循环,能够根据中间结果动态调整行为。

对比维度简单 LLM 调用AI Agent
交互模式单轮输入→输出多轮自主循环
任务复杂度单步可完成的任务多步骤、需规划的复杂任务
工具使用无或有限主动选择和调用多种工具
错误处理无自我修正能力可检测错误并重试
记忆仅当前上下文窗口短期 + 长期记忆系统
自主性完全被动响应主动规划和执行

直观示例

简单 LLM 调用:
  用户: "帮我写一封邮件"  →  LLM: [生成邮件文本]  →  结束

AI Agent:
  用户: "帮我调研竞品 X 并写一份分析报告"
    → Agent 思考: 我需要先搜索竞品信息
    → Agent 行动: 调用搜索工具获取竞品数据
    → Agent 思考: 数据不够,我需要查看他们的定价页面
    → Agent 行动: 调用网页抓取工具获取定价信息
    → Agent 思考: 现在信息足够了,我来组织报告结构
    → Agent 行动: 生成分析报告
    → Agent 反思: 报告缺少市场份额数据,我补充一下
    → Agent 行动: 再次搜索并补充数据
    → 最终输出: 完整的竞品分析报告

Agent 核心架构

AI Agent 的运行遵循感知 → 规划 → 行动 → 记忆的循环模式:


核心组件详解

规划 Planning

规划模块负责将复杂任务分解为可执行的子步骤,并确定执行顺序。

ReAct 模式

ReAct(Reasoning + Acting)是最经典的 Agent 规划模式,交替进行推理行动

python
def react_agent_loop(question: str, tools: dict,
                     llm, max_steps: int = 10) -> str:
    """
    ReAct Agent 核心循环。

    Args:
        question: 用户问题
        tools: 可用工具字典 {"tool_name": tool_function}
        llm: 大语言模型
        max_steps: 最大迭代步数
    Returns:
        最终回答
    """
    history = f"问题: {question}\n"

    for step in range(max_steps):
        # 让 LLM 生成下一步的思考和行动
        response = llm.generate(
            f"""{history}
请按以下格式输出下一步:
Thought: 你的思考过程
Action: 工具名称
Action Input: 工具输入参数
(如果你已经有足够信息回答,请输出:)
Thought: 我已经有足够信息
Final Answer: 最终回答"""
        )

        history += response + "\n"

        # 检查是否已得出最终答案
        if "Final Answer:" in response:
            return response.split("Final Answer:")[-1].strip()

        # 解析并执行工具调用
        action = parse_action(response)
        if action and action["tool"] in tools:
            observation = tools[action["tool"]](action["input"])
            history += f"Observation: {observation}\n"

    return "达到最大步数限制,未能得出结论。"

Plan-and-Solve 模式

先生成完整的执行计划,然后按计划逐步执行,适合有明确步骤的任务:

python
plan_and_solve_prompt = """请为以下任务生成一个分步执行计划,
然后按照计划逐步执行。

任务: {task}

请先输出计划:
Plan:
1. [第一步]
2. [第二步]
...

然后逐步执行每一步,展示中间结果。"""

两种模式对比

特性ReActPlan-and-Solve
规划方式边推理边行动,动态调整先生成完整计划再执行
灵活性高——可根据中间结果调整方向较低——计划一旦生成不易修改
适用场景探索性任务、信息不确定步骤明确、流程化任务
风险可能偏离目标计划可能与实际情况脱节

记忆 Memory

记忆系统使 Agent 能够保持上下文连贯性利用历史经验,是区别于简单 LLM 调用的关键能力。

记忆类型实现方式存储内容生命周期
短期记忆(Short-term)对话历史(消息列表)当前对话的上下文单次会话
长期记忆(Long-term)向量数据库(Vector Store)历史经验、用户偏好、知识跨会话持久化
工作记忆(Working)结构化状态变量当前任务进度、中间结果单次任务
python
class AgentMemory:
    """Agent 记忆系统实现。"""

    def __init__(self, vector_store, max_short_term: int = 20):
        self.short_term = []        # 短期记忆:对话历史
        self.working = {}           # 工作记忆:当前任务状态
        self.vector_store = vector_store  # 长期记忆:向量数据库
        self.max_short_term = max_short_term

    def add_message(self, role: str, content: str):
        """添加对话消息到短期记忆。"""
        self.short_term.append({"role": role, "content": content})
        # 超出限制时,将旧消息存入长期记忆
        if len(self.short_term) > self.max_short_term:
            old_messages = self.short_term[:5]
            summary = self._summarize(old_messages)
            self.vector_store.add(text=summary, metadata={"type": "conversation"})
            self.short_term = self.short_term[5:]

    def retrieve_relevant(self, query: str, top_k: int = 3) -> list:
        """从长期记忆中检索与当前查询相关的历史信息。"""
        return self.vector_store.similarity_search(query, top_k=top_k)

    def update_working(self, key: str, value):
        """更新工作记忆中的任务状态。"""
        self.working[key] = value

    def get_context(self, query: str) -> str:
        """组合所有记忆源,构建完整上下文。"""
        # 短期记忆
        recent = self.short_term[-10:]
        # 长期记忆(相关部分)
        long_term = self.retrieve_relevant(query)
        # 工作记忆
        working = self.working

        return self._format_context(recent, long_term, working)

    def _summarize(self, messages: list) -> str:
        """将多条消息压缩为摘要。"""
        content = "\n".join(f"{m['role']}: {m['content']}" for m in messages)
        return f"对话摘要: {content[:500]}"

    def _format_context(self, recent, long_term, working) -> str:
        """格式化组合上下文。"""
        parts = ["=== 近期对话 ==="]
        for msg in recent:
            parts.append(f"{msg['role']}: {msg['content']}")
        if long_term:
            parts.append("\n=== 相关历史经验 ===")
            for item in long_term:
                parts.append(item.text)
        if working:
            parts.append("\n=== 当前任务状态 ===")
            for k, v in working.items():
                parts.append(f"{k}: {v}")
        return "\n".join(parts)

工具 Tools

工具是 Agent 与外部世界交互的接口,赋予 LLM 超越纯文本生成的能力。

工具类型示例能力扩展
信息检索Web 搜索、知识库查询、数据库查询获取实时信息和私有数据
代码执行Python 沙箱、Shell 命令精确计算、数据处理
API 调用REST API、第三方服务连接外部系统和服务
文件操作读写文件、解析 PDF/Excel处理各种格式文档
交互操作浏览器自动化、GUI 操作模拟用户操作
python
# 工具定义示例
class Tool:
    """Agent 工具的基类。"""

    def __init__(self, name: str, description: str, func):
        self.name = name
        self.description = description
        self.func = func

    def run(self, input_data: str) -> str:
        """执行工具并返回结果。"""
        try:
            result = self.func(input_data)
            return f"成功: {result}"
        except Exception as e:
            return f"错误: {str(e)}"

# 注册工具
tools = [
    Tool(
        name="web_search",
        description="搜索互联网获取最新信息。输入应为搜索关键词。",
        func=lambda q: search_engine.search(q)
    ),
    Tool(
        name="python_executor",
        description="在沙箱中执行 Python 代码并返回结果。输入应为合法 Python 代码。",
        func=lambda code: sandbox.execute(code)
    ),
    Tool(
        name="file_reader",
        description="读取指定路径的文件内容。输入应为文件路径。",
        func=lambda path: open(path).read()
    ),
]

反思 Reflection

反思模块使 Agent 能够评估自身行为的质量并在必要时自我修正,是实现高可靠性的关键。

python
reflection_prompt = """请评估你刚才完成的任务:

任务目标: {original_goal}
执行步骤: {steps_taken}
当前结果: {current_output}

请回答以下问题:
1. 当前结果是否完整地解决了任务目标?(是/否)
2. 结果中是否存在事实错误或逻辑漏洞?
3. 是否遗漏了重要信息?
4. 如果需要改进,具体应该怎么做?

评估结果:"""

def reflection_loop(agent, task: str, max_reflections: int = 3) -> str:
    """
    带反思的 Agent 执行循环。

    Args:
        agent: Agent 实例
        task: 任务描述
        max_reflections: 最大反思次数
    Returns:
        最终输出
    """
    result = agent.execute(task)

    for i in range(max_reflections):
        # 自我评估
        evaluation = agent.llm.generate(
            reflection_prompt.format(
                original_goal=task,
                steps_taken=agent.get_history(),
                current_output=result
            )
        )

        # 如果评估通过,结束循环
        if "是" in evaluation.split("\n")[0] and "无" in evaluation:
            break

        # 根据评估结果改进
        result = agent.execute(
            f"根据以下反馈改进之前的结果:\n{evaluation}\n原始结果:\n{result}"
        )

    return result

Agent 框架对比

框架开发者核心特点适用场景学习曲线
LangChain AgentLangChain生态丰富、工具集成广泛、文档齐全通用 Agent 开发、快速原型中等
LangGraphLangChain基于图的工作流、支持循环和状态管理复杂 Agent 工作流较高
AutoGPTSignificant Gravitas全自主执行、目标驱动探索性实验
CrewAICrewAI多 Agent 角色扮演、任务协作多 Agent 协作场景中等
AutoGenMicrosoft多 Agent 对话式编排、灵活拓扑、代码执行研究探索、复杂多 Agent 协作较高
Claude Agent SDKAnthropic原生 Tool Use、简洁 APIAnthropic 生态应用
OpenAI AssistantsOpenAI托管服务、内置代码解释器和文件检索OpenAI 生态应用
DifyDify.AI可视化编排、低代码平台快速搭建 AI 应用
Coze字节跳动可视化 Agent 构建、丰富插件生态国内应用场景

Function Calling 与工具调用

Function Calling(函数调用)是 Agent 与外部世界交互的核心能力。LLM 在生成过程中识别需要调用外部工具的时机,并输出结构化的调用参数。

工作流程

User Query --> LLM Decision
                  |
           +------+------+
           |             |
      Need Tools    No Tools
           |             |
    Output tool      Generate
    name + args      response
           |
    App executes
    tool call
           |
    Return result
    to LLM
           |
    LLM generates
    final response

工具定义示例

python
# OpenAI Function Calling 格式
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的当前天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名称,如:北京"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                },
                "required": ["city"]
            }
        }
    }
]

# Anthropic Claude Tool Use 格式
anthropic_tools = [
    {
        "name": "get_weather",
        "description": "获取指定城市的当前天气信息",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "城市名称"},
                "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
            },
            "required": ["city"]
        }
    }
]

工具调用模式

模式说明适用场景
串行调用LLM 一次请求一个工具,等待结果后继续步骤有依赖关系的任务
并行调用LLM 一次请求多个工具,同时执行独立的数据获取任务
链式调用一个工具的输出作为另一个工具的输入多步处理流水线

关键要点:Function Calling 的本质是让模型输出结构化的工具调用意图,实际的工具执行由应用层代码完成,模型本身不执行任何外部操作。


MCP(Model Context Protocol)

MCP 是 Anthropic 于 2024 年发布的开放协议,旨在标准化 LLM 应用与外部数据源和工具之间的通信方式——类似于"AI 领域的 USB 接口"。

为什么需要 MCP

问题没有 MCP有 MCP
工具集成每个工具每个平台需单独适配 (M×N)工具实现一次 MCP Server,所有平台通用 (M+N)
协议标准OpenAI、Claude、Gemini 格式各不同统一的开放协议
生态复用工具代码无法跨项目复用MCP Server 可直接在不同应用间共享

架构

  • Host:LLM 应用(如 Claude Desktop、IDE 扩展)
  • Client:Host 内的连接管理器,与 Server 建立 1:1 连接
  • Server:轻量级进程,暴露工具、资源和 Prompt 模板

MCP 核心原语

原语说明类比
ToolsAgent 可调用的函数(如搜索、查询数据库)Function Calling
Resources只读数据源(如文件内容、API 数据)RESTful GET 端点
Prompts预定义的 Prompt 模板Prompt 库

MCP vs 原生 Function Calling

维度Function CallingMCP
定义位置在 API 请求中定义工具在独立的 MCP Server 中定义
可复用性绑定到特定应用代码Server 可跨应用复用
标准化各厂商格式不同统一开放协议
生态每个应用自己实现社区共享 MCP Server
传输层HTTP APIstdio / HTTP+SSE

多 Agent 系统

当单个 Agent 难以胜任复杂任务时,可以通过多个 Agent 协作来完成。

协作模式

Pattern 1: Orchestrator-Worker

  Orchestrator ----> Agent A (Search)
       |-----------> Agent B (Analyze)
       |-----------> Agent C (Write)
       |
    Aggregate --> Final Output


Pattern 2: Debate

  Agent A --> Propose
  Agent B --> Challenge
  Agent A --> Revise
  Judge   --> Final Decision


Pattern 3: Pipeline

  Agent A --> Agent B --> Agent C --> Final Output
  (Research)  (Analyze)   (Write)

多 Agent 示例

python
class MultiAgentSystem:
    """
    多 Agent 协作系统(主从模式)。
    """

    def __init__(self, orchestrator_llm, worker_configs: list):
        self.orchestrator = orchestrator_llm
        self.workers = {}
        for config in worker_configs:
            self.workers[config["name"]] = Agent(
                name=config["name"],
                role=config["role"],
                tools=config["tools"],
                llm=config["llm"]
            )

    def execute(self, task: str) -> str:
        """
        执行多 Agent 协作任务。

        Args:
            task: 任务描述
        Returns:
            最终汇总结果
        """
        # Step 1: Orchestrator 分解任务并分配
        plan = self.orchestrator.generate(
            f"""将以下任务分解为子任务,并分配给合适的 Agent。

可用 Agent:
{self._format_workers()}

任务: {task}

请以 JSON 格式输出分配方案:
[{{"agent": "agent_name", "subtask": "子任务描述"}}]"""
        )

        assignments = parse_json(plan)

        # Step 2: 各 Agent 并行/串行执行子任务
        results = {}
        for assignment in assignments:
            agent_name = assignment["agent"]
            subtask = assignment["subtask"]
            if agent_name in self.workers:
                results[agent_name] = self.workers[agent_name].execute(subtask)

        # Step 3: Orchestrator 汇总结果
        summary = self.orchestrator.generate(
            f"""以下是各 Agent 完成的子任务结果:

{self._format_results(results)}

请汇总为一个完整、连贯的最终输出。

原始任务: {task}"""
        )

        return summary

    def _format_workers(self) -> str:
        return "\n".join(
            f"- {name}: {agent.role}" for name, agent in self.workers.items()
        )

    def _format_results(self, results: dict) -> str:
        return "\n\n".join(
            f"[{name}]:\n{result}" for name, result in results.items()
        )

Agentic Workflows vs Simple Chains

理解Agentic 工作流简单链式调用的区别是设计 LLM 应用架构的关键。

特性Simple Chain(简单链)Agentic Workflow(智能体工作流)
控制流预定义的固定顺序模型动态决策下一步
分支无或简单 if-else基于中间结果的复杂分支
循环不支持支持迭代和重试
错误恢复整体失败局部重试和回退
适用场景步骤固定的流水线任务需要判断和决策的复杂任务
python
# Simple Chain:固定流程
def simple_chain(document: str) -> dict:
    summary = llm.generate(f"总结以下文档:{document}")
    keywords = llm.generate(f"从以下摘要中提取关键词:{summary}")
    category = llm.generate(f"根据关键词分类:{keywords}")
    return {"summary": summary, "keywords": keywords, "category": category}

# Agentic Workflow:动态决策
def agentic_workflow(task: str) -> str:
    agent = Agent(llm=llm, tools=tools)
    # Agent 自行决定需要几步、用什么工具、是否需要重试
    return agent.execute(task)

Claude Agent SDK 与 Anthropic Tool Use

Anthropic 提供了原生的 Tool Use 能力,允许 Claude 模型直接与外部工具交互:

python
import anthropic

client = anthropic.Anthropic()

# 定义工具
tools = [
    {
        "name": "query_database",
        "description": "查询数据库获取用户信息",
        "input_schema": {
            "type": "object",
            "properties": {
                "user_id": {"type": "string", "description": "用户 ID"},
                "fields": {
                    "type": "array",
                    "items": {"type": "string"},
                    "description": "需要查询的字段列表"
                }
            },
            "required": ["user_id"]
        }
    }
]

# Agent 循环:持续调用直到模型停止请求工具
messages = [{"role": "user", "content": "查询用户 U12345 的订单历史"}]

while True:
    response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=1024,
        tools=tools,
        messages=messages
    )

    # 如果模型不再需要工具,输出最终回答
    if response.stop_reason == "end_turn":
        final_answer = response.content[0].text
        break

    # 解析并执行工具调用
    for block in response.content:
        if block.type == "tool_use":
            tool_result = execute_tool(block.name, block.input)
            messages.append({"role": "assistant", "content": response.content})
            messages.append({
                "role": "user",
                "content": [{
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": str(tool_result)
                }]
            })

挑战与应对

幻觉(Hallucination)

Agent 在多步推理中可能累积错误——一步的幻觉会传播到后续所有步骤。

应对措施

  • 在关键步骤加入事实验证(如搜索确认)
  • 使用 RAG 提供可靠上下文
  • 反思机制检查中间结果的一致性

无限循环(Infinite Loops)

Agent 可能在两个状态间反复跳转,或不断重复相同行为。

应对措施

  • 设置最大迭代步数(如 10~20 步)
  • 检测连续重复的行为模式并强制终止
  • 记录每步状态,检测循环

成本控制

Agent 的循环特性可能导致大量 API 调用,Token 消耗远超预期。

python
class CostAwareAgent:
    """带成本控制的 Agent。"""

    def __init__(self, llm, max_tokens: int = 50000,
                 max_steps: int = 15):
        self.llm = llm
        self.max_tokens = max_tokens
        self.max_steps = max_steps
        self.total_tokens = 0
        self.step_count = 0

    def execute(self, task: str) -> str:
        while self.step_count < self.max_steps:
            if self.total_tokens >= self.max_tokens:
                return self._force_conclude("Token 预算耗尽")

            response = self.llm.generate(self._build_prompt(task))
            self.total_tokens += response.usage.total_tokens
            self.step_count += 1

            if self._is_final_answer(response):
                return response.text

        return self._force_conclude("达到最大步数限制")

    def _force_conclude(self, reason: str) -> str:
        """强制生成结论。"""
        return self.llm.generate(
            f"由于{reason},请基于目前收集的信息给出最佳答案。"
        )

Agent 评估方法

评估 Agent 系统的效果比评估单次 LLM 调用更复杂,需要从多个维度衡量:

评估维度指标说明
任务完成率成功完成目标任务的比例最核心的指标
工具选择准确率选择正确工具的比例反映规划能力
步骤效率完成任务的平均步数 vs 最优步数越接近最优越好
错误恢复率遇到错误后成功恢复的比例反映鲁棒性
成本效率完成任务消耗的 Token 数 / API 调用次数生产环境关键指标

主流评估基准

基准考察能力说明
AgentBench多种环境下的 Agent 能力包含 Web、数据库、代码等 8 个环境
SWE-Bench自动修复真实 GitHub Issue考察代码理解和修改能力,难度高
WebArena浏览器操作自动化在真实网站上完成任务
GAIA通用 AI 助手能力需要多种工具和多步推理

常见陷阱

⚠️ 常见误区

  1. Agent 过度设计:简单任务不需要 Agent。如果任务可以通过一次 LLM 调用或固定链式调用完成,引入 Agent 反而增加复杂度、延迟和成本。应根据任务复杂度选择合适的架构层级。

  2. 工具描述不清晰:Agent 选择工具完全依赖工具的文本描述。描述模糊或缺少示例会导致模型频繁选错工具或传入错误参数。每个工具的 description 应包含功能说明、参数约束和使用场景。

  3. 缺少终止条件:未设置最大步数、Token 上限或超时限制,可能导致 Agent 陷入无限循环或产生巨额费用。生产环境必须配置多层次的终止保护。

  4. 记忆管理缺失:随着对话轮次增加,上下文窗口被历史消息填满,导致关键信息被截断。应实现记忆压缩(摘要)和分级存储机制。

  5. 忽视工具执行的安全性:Agent 可能生成危险的工具调用(如删除文件、执行恶意代码)。所有工具执行必须在沙箱环境中运行,关键操作需人工审批。


📝 面试真题4 道高频
1. 请描述 AI Agent 的核心架构及其与简单 LLM 调用的区别中等
2. Agent 系统中的记忆机制有哪些类型?各自的作用和实现方式是什么?困难
3. 在生产环境中部署 Agent 系统,面临哪些主要挑战?如何应对?困难
4. 如何评估一个 Agent 系统的性能?有哪些关键指标?中等

面试真题详解

Q1:请描述 AI Agent 的核心架构及其与简单 LLM 调用的区别

要点

AI Agent 是以 LLM 为核心推理引擎的自主决策系统,其架构包含四个核心模块:

  1. 感知(Perception):接收用户输入和外部环境信息(包括工具返回的结果),是循环的起点
  2. 规划(Planning):利用 LLM 的推理能力,将复杂任务分解为子步骤,并决定下一步行动。典型模式包括 ReAct(边推理边行动)和 Plan-and-Solve(先规划后执行)
  3. 行动(Action):调用外部工具执行具体操作——搜索信息、执行代码、调用 API 等
  4. 记忆(Memory):维护短期记忆(当前对话上下文)、长期记忆(向量数据库中的历史经验)和工作记忆(当前任务状态)

与简单 LLM 调用的关键区别在于 Agent 拥有自主决策循环——它不是一次性地生成回答,而是持续运行"推理→行动→观察→再推理"的循环,直到任务完成。这赋予了 Agent 处理多步骤、需要外部信息和工具协助的复杂任务的能力。


Q2:Agent 系统中的记忆机制有哪些类型?各自的作用和实现方式是什么?

要点

Agent 的记忆系统分为三个层次:

短期记忆(Short-term Memory)

  • 存储当前会话的对话历史
  • 实现方式:消息列表(message list),直接放入 LLM 的上下文窗口
  • 局限:受上下文窗口大小限制,历史过长时需要截断或压缩

长期记忆(Long-term Memory)

  • 存储跨会话的持久化信息,如用户偏好、历史交互经验、领域知识
  • 实现方式:向量数据库(如 Chroma、Pinecone),将历史信息 Embedding 后存储,按语义相似度检索
  • 典型场景:记住用户上周提到的偏好设置,复用之前类似任务的解决方案

工作记忆(Working Memory)

  • 存储当前任务的执行状态、中间结果和待办事项
  • 实现方式:结构化变量(如字典、JSON),在任务执行过程中动态更新
  • 作用:让 Agent 知道"做到了哪一步"、"哪些子任务已完成"、"中间数据是什么"

关键设计:当短期记忆超出窗口限制时,应将旧消息通过 LLM 生成摘要,存入长期记忆,实现"遗忘但可回忆"的机制。


Q3:在生产环境中部署 Agent 系统,面临哪些主要挑战?如何应对?

要点

挑战具体表现应对策略
幻觉累积中间推理步骤中的错误逐步放大关键步骤加入事实验证;使用 RAG 提供可靠依据;反思机制交叉检查
无限循环Agent 反复执行相同操作或在状态间跳转设置最大步数和超时时间;检测重复行为模式;强制终止并总结
成本失控循环调用导致 Token 消耗远超预算设置 Token 预算上限;监控每次执行的成本;选择合适模型(简单步骤用小模型)
安全风险Agent 可能生成危险的工具调用沙箱执行;最小权限原则;关键操作人工审批;输入/输出过滤
可观测性不足多步执行过程难以调试和追踪完整的执行日志和追踪链;可视化每一步的决策和工具调用
延迟过高多轮 LLM 调用和工具执行导致响应时间长并行执行独立任务;缓存常见子任务结果;流式输出中间状态

核心原则:在生产环境中,应采用渐进式自主策略——从人机协作(Human-in-the-Loop)开始,观察 Agent 的可靠性后再逐步减少人工干预。


Q4:如何评估一个 Agent 系统的性能?有哪些关键指标?

要点

Agent 评估比单次 LLM 调用评估更复杂,需要从五个维度综合衡量:

  1. 任务完成率:最核心指标——Agent 是否真正解决了用户的问题。需要明确定义"完成"的标准(如代码通过测试、信息完整准确)
  2. 工具选择准确率:Agent 是否选对了工具、传入了正确参数。错误的工具选择会导致连锁失败
  3. 步骤效率:完成任务用了多少步?与最优路径相比是否有大量冗余步骤
  4. 错误恢复率:当工具调用失败或中间结果不符预期时,Agent 能否自行修正
  5. 成本效率:Token 消耗和 API 调用次数,直接影响生产环境的运营成本

评估基准:SWE-Bench(代码修复)是最有影响力的 Agent 基准,因为它使用真实 GitHub Issue 作为任务,贴近实际开发场景。AgentBench 和 GAIA 则提供更广泛的通用能力评估。

面试加分点:指出 Agent 评估应区分过程评估(每步决策质量)和结果评估(最终任务完成),两者都很重要——一个 Agent 可能通过低效路径完成任务,过程评估能发现改进空间。


延伸阅读