Skip to content

Agent核心概念

概述

Agent(智能代理)是AI应用的高级形态,它能够自主理解任务、制定计划、调用工具并执行操作。与传统的问答系统不同,Agent具备自主决策多步推理能力,可以完成复杂的任务流程。

什么是Agent

定义

Agent是一个能够感知环境、做出决策并采取行动以实现目标的智能系统。在AI领域,Agent通常指基于大语言模型(LLM)构建的自主系统。

Agent vs 传统应用

特性传统应用AI Agent
交互方式单轮问答多轮自主执行
决策能力自主规划和决策
工具使用固定流程动态选择和调用
错误处理预定义规则自我修正和重试
适应性

Agent的核心能力

  1. 感知能力 - 理解用户意图和环境信息
  2. 推理能力 - 分析问题、制定计划
  3. 行动能力 - 调用工具、执行操作
  4. 记忆能力 - 存储和检索历史信息
  5. 学习能力 - 从经验中改进表现

Agent架构设计

基础架构

┌─────────────────────────────────────────┐
│              用户输入                    │
└──────────────┬──────────────────────────┘


┌─────────────────────────────────────────┐
│           感知模块 (Perception)          │
│  - 意图识别                              │
│  - 实体抽取                              │
│  - 上下文理解                            │
└──────────────┬──────────────────────────┘


┌─────────────────────────────────────────┐
│           大脑模块 (Brain)               │
│  - 任务规划                              │
│  - 推理决策                              │
│  - 自我反思                              │
└──────────────┬──────────────────────────┘


┌─────────────────────────────────────────┐
│           行动模块 (Action)              │
│  - 工具选择                              │
│  - 参数构造                              │
│  - 结果处理                              │
└──────────────┬──────────────────────────┘


┌─────────────────────────────────────────┐
│           记忆模块 (Memory)              │
│  - 短期记忆                              │
│  - 长期记忆                              │
│  - 知识检索                              │
└─────────────────────────────────────────┘

核心组件

1. 规划器(Planner)

负责将复杂任务分解为可执行的子任务。

python
from typing import List
from dataclasses import dataclass

@dataclass
class Task:
    id: str
    description: str
    dependencies: List[str]
    status: str = "pending"

class Planner:
    def __init__(self, llm):
        self.llm = llm
    
    def decompose_task(self, user_request: str) -> List[Task]:
        prompt = f"""
        将以下用户请求分解为具体的执行步骤:
        请求:{user_request}
        
        请以JSON格式返回任务列表,每个任务包含:
        - id: 任务ID
        - description: 任务描述
        - dependencies: 依赖的任务ID列表
        """
        
        response = self.llm.generate(prompt)
        tasks = self.parse_tasks(response)
        return tasks
    
    def parse_tasks(self, response: str) -> List[Task]:
        import json
        task_dicts = json.loads(response)
        return [Task(**t) for t in task_dicts]

2. 执行器(Executor)

负责执行具体任务并返回结果。

python
from typing import Any, Dict

class Executor:
    def __init__(self, tools: Dict[str, Any]):
        self.tools = tools
    
    def execute(self, task: Task) -> Dict[str, Any]:
        tool_name = self.select_tool(task)
        tool = self.tools[tool_name]
        
        params = self.extract_params(task)
        result = tool.run(**params)
        
        return {
            "task_id": task.id,
            "tool": tool_name,
            "result": result,
            "status": "completed"
        }
    
    def select_tool(self, task: Task) -> str:
        pass
    
    def extract_params(self, task: Task) -> Dict[str, Any]:
        pass

3. 反思器(Reflector)

评估执行结果并决定是否需要调整。

python
class Reflector:
    def __init__(self, llm):
        self.llm = llm
    
    def evaluate(self, task: Task, result: Dict) -> Dict[str, Any]:
        prompt = f"""
        任务:{task.description}
        执行结果:{result}
        
        请评估:
        1. 任务是否完成?
        2. 结果是否符合预期?
        3. 是否需要重试或调整?
        """
        
        evaluation = self.llm.generate(prompt)
        return self.parse_evaluation(evaluation)
    
    def parse_evaluation(self, response: str) -> Dict[str, Any]:
        pass

Agent工作流程

标准执行流程

python
class Agent:
    def __init__(self, llm, tools, memory):
        self.planner = Planner(llm)
        self.executor = Executor(tools)
        self.reflector = Reflector(llm)
        self.memory = memory
    
    def run(self, user_request: str):
        tasks = self.planner.decompose_task(user_request)
        results = []
        
        for task in self.get_execution_order(tasks):
            if self.can_execute(task, results):
                result = self.executor.execute(task)
                evaluation = self.reflector.evaluate(task, result)
                
                if evaluation["needs_retry"]:
                    result = self.retry(task, evaluation)
                
                results.append(result)
                self.memory.store(task, result)
        
        return self.synthesize_results(results)
    
    def get_execution_order(self, tasks: List[Task]) -> List[Task]:
        pass
    
    def can_execute(self, task: Task, results: List) -> bool:
        pass
    
    def retry(self, task: Task, evaluation: Dict) -> Dict:
        pass
    
    def synthesize_results(self, results: List) -> str:
        pass

执行流程图

用户请求 → 任务分解 → 任务排序 → 执行任务 → 结果评估
    ↑                                      │
    └──────────── 重试/调整 ←───────────────┘

Agent类型

1. 单步Agent

适用于简单任务,一次性完成。

python
class SimpleAgent:
    def __init__(self, llm, tools):
        self.llm = llm
        self.tools = tools
    
    def run(self, query: str) -> str:
        tool_calls = self.llm.generate_tool_calls(query)
        
        results = []
        for call in tool_calls:
            tool = self.tools[call.name]
            result = tool.run(**call.arguments)
            results.append(result)
        
        return self.llm.synthesize(query, results)

2. 多步Agent

适用于复杂任务,需要多轮规划和执行。

python
class MultiStepAgent:
    def __init__(self, llm, tools, max_iterations=10):
        self.llm = llm
        self.tools = tools
        self.max_iterations = max_iterations
    
    def run(self, query: str) -> str:
        context = {"query": query, "steps": []}
        
        for i in range(self.max_iterations):
            action = self.plan_next_step(context)
            
            if action["type"] == "finish":
                return action["response"]
            
            result = self.execute_action(action)
            context["steps"].append({
                "action": action,
                "result": result
            })
        
        return "达到最大迭代次数"
    
    def plan_next_step(self, context: Dict) -> Dict:
        pass
    
    def execute_action(self, action: Dict) -> Any:
        pass

3. 自主Agent

具备完整的自主决策能力。

python
class AutonomousAgent:
    def __init__(self, llm, tools, memory):
        self.llm = llm
        self.tools = tools
        self.memory = memory
        self.state = "idle"
    
    def run(self, goal: str):
        self.state = "planning"
        plan = self.create_plan(goal)
        
        self.state = "executing"
        for step in plan:
            while not self.is_step_complete(step):
                action = self.decide_action(step)
                result = self.execute(action)
                self.update_state(action, result)
                self.reflect()
        
        self.state = "completed"
        return self.summarize()

实际应用示例

智能助手Agent

python
class SmartAssistant:
    def __init__(self, llm):
        self.llm = llm
        self.tools = {
            "search": SearchTool(),
            "calculator": CalculatorTool(),
            "weather": WeatherTool(),
            "calendar": CalendarTool()
        }
        self.memory = ConversationMemory()
    
    def chat(self, user_input: str) -> str:
        context = self.memory.get_context()
        
        intent = self.analyze_intent(user_input, context)
        
        if intent["needs_tools"]:
            results = self.use_tools(intent["tools"])
            response = self.generate_response(user_input, results)
        else:
            response = self.llm.generate(user_input, context)
        
        self.memory.add_exchange(user_input, response)
        
        return response
    
    def analyze_intent(self, user_input: str, context: List) -> Dict:
        prompt = f"""
        用户输入:{user_input}
        历史上下文:{context}
        
        分析用户意图,判断是否需要使用工具。
        如果需要,返回工具名称和参数。
        """
        return self.llm.generate_json(prompt)
    
    def use_tools(self, tool_calls: List[Dict]) -> List[Any]:
        results = []
        for call in tool_calls:
            tool = self.tools[call["name"]]
            result = tool.run(**call["params"])
            results.append(result)
        return results
    
    def generate_response(self, query: str, results: List) -> str:
        prompt = f"问题:{query}\n工具结果:{results}\n生成回答:"
        return self.llm.generate(prompt)

代码助手Agent

python
class CodeAssistant:
    def __init__(self, llm):
        self.llm = llm
        self.tools = {
            "read_file": FileReadTool(),
            "write_file": FileWriteTool(),
            "run_code": CodeExecutionTool(),
            "search_doc": DocSearchTool()
        }
    
    def help(self, request: str) -> str:
        if "debug" in request:
            return self.debug_code(request)
        elif "write" in request:
            return self.write_code(request)
        elif "explain" in request:
            return self.explain_code(request)
        else:
            return self.general_help(request)
    
    def debug_code(self, request: str) -> str:
        code = self.extract_code(request)
        error = self.run_code(code)
        
        if error:
            fix = self.analyze_error(error, code)
            return f"发现错误:{error}\n修复建议:{fix}"
        
        return "代码运行正常"
    
    def write_code(self, request: str) -> str:
        spec = self.parse_spec(request)
        code = self.llm.generate_code(spec)
        
        test_result = self.test_code(code)
        if test_result["passed"]:
            return code
        else:
            return self.fix_code(code, test_result["errors"])

设计原则

1. 单一职责

每个Agent应该专注于一个明确的领域或任务类型。

2. 可观测性

Agent的决策过程和执行步骤应该可追踪和调试。

python
class ObservableAgent:
    def __init__(self):
        self.logger = AgentLogger()
    
    def run(self, query: str):
        self.logger.log_start(query)
        
        with self.logger.track_step("planning"):
            plan = self.plan(query)
        
        with self.logger.track_step("execution"):
            results = self.execute(plan)
        
        self.logger.log_end(results)
        return results

3. 可恢复性

Agent应该能够从错误中恢复,支持断点续传。

python
class RecoverableAgent:
    def __init__(self):
        self.checkpoint = CheckpointManager()
    
    def run(self, query: str):
        state = self.checkpoint.load()
        
        if state:
            return self.resume(state)
        
        try:
            result = self.execute(query)
            self.checkpoint.clear()
            return result
        except Exception as e:
            self.checkpoint.save(self.current_state)
            raise e

4. 安全性

限制Agent的权限,防止危险操作。

python
class SafeAgent:
    def __init__(self, llm, tools, permissions):
        self.llm = llm
        self.tools = self.filter_tools(tools, permissions)
        self.sandbox = Sandbox()
    
    def filter_tools(self, tools, permissions):
        return {
            name: tool 
            for name, tool in tools.items()
            if name in permissions.allowed_tools
        }
    
    def execute(self, action):
        if not self.is_safe(action):
            raise SecurityError("不安全的操作")
        
        return self.sandbox.run(action)

小结

Agent是AI应用的高级形态,具备自主决策和多步推理能力。设计一个优秀的Agent需要:

  1. 清晰的架构 - 规划器、执行器、反思器、记忆系统
  2. 合理的工作流 - 任务分解、执行、评估、调整
  3. 适当的工具集 - 根据任务需求选择和集成工具
  4. 健壮的错误处理 - 支持重试、恢复、降级
  5. 良好的可观测性 - 日志、追踪、调试支持

下一章我们将深入探讨Agent的工具调用机制,这是Agent与外部世界交互的关键能力。