Skip to content

第4章 Agent 设计方法论:打造终极进化智能体

如果RAG是给大模型"开卷考试",那Agent就是让大模型"走出考场自己找答案"。

从被动回答到主动执行,这是AI产品能力的质变。但Agent也是最容易被滥用的技术——不是所有问题都需要Agent,简单的RAG就能解决大部分场景。

我是怕浪猫,这章讲Agent的设计方法论,帮你搞清楚什么时候用Agent,怎么设计Agent,以及怎么避免过度设计。

4.1 Agent 认知与能力全景

什么是AI Agent

AI Agent是一个能够自主感知环境、做出决策、执行动作的智能体。它和大模型对话的核心区别在于:大模型只能"说",Agent能"做"。

维度大模型对话AI Agent
交互方式一问一答自主规划+执行
工具使用可以调用外部工具(API、数据库、搜索等)
任务执行只能输出文本能完成多步骤的复杂任务
记忆仅当前对话有短期和长期记忆
决策被动响应主动规划和调整
自主性

一个最简单的类比:大模型是"顾问",你问它问题它给你建议;Agent是"助理",你给它一个目标,它自己想办法完成。

Agent的能力层级

Agent的能力不是二元的(有或没有),而是分层的。从低到高4个层级:

Level 1:对话Agent 能力:多轮对话、上下文记忆 局限:不能执行动作,只能聊天 典型产品:ChatGPT、Claude

Level 2:工具调用Agent 能力:调用外部工具(搜索引擎、API、代码执行器等) 局限:工具调用是预定义的,不能自主选择工具 典型产品:ChatGPT with Plugins、Bing Chat

Level 3:规划Agent 能力:自主规划任务步骤、选择工具、调整策略 局限:长程规划能力有限,容易跑偏 典型产品:AutoGPT、MetaGPT

Level 4:协作Agent 能力:多Agent协作、分工、争论、达成共识 局限:协调成本高,调试困难 典型产品:CrewAI、AutoGen

Agent的能力层级越高,越强大,但也越不可控。产品设计中,选择合适的层级比追求最高层级更重要。

什么时候需要Agent

这是最重要的决策。不是所有场景都需要Agent,很多时候RAG + 工作流就够了。

需要Agent的信号:

  • 任务需要多步推理和决策
  • 需要根据中间结果调整策略
  • 需要调用多个不同的工具
  • 任务流程不确定,无法预定义

不需要Agent的信号:

  • 单步问答就能解决
  • 流程是固定的,可以用工作流编排
  • 不需要外部工具
  • 用户对延迟敏感(Agent比直接问答慢很多)
场景是否需要Agent推荐方案
知识问答RAG
流程化任务(审批、报销)工作流
多条件搜索+比较Agent + 搜索工具
自动化测试Agent + 代码执行
多源信息整合Agent + 多工具
复杂数据分析Agent + 代码 + 数据库

不要为了用Agent而用Agent。能用RAG解决的不要上Agent,能用工作流解决的不要上自主Agent。过度设计是AI产品最常见的错误。

4.2 Agent 基础能力构建

提示词设计

Agent的提示词和普通对话的提示词不同,需要包含:

  1. 角色定义
  2. 可用工具列表
  3. 决策规则
  4. 输出格式(思维过程+动作选择)

Agent提示词模板:

你是{角色名称},一个能够自主完成任务的AI助手。

你的目标:{任务描述}

你可以使用以下工具:
1. {工具1名称}:{工具1描述}。输入格式:{格式}
2. {工具2名称}:{工具2描述}。输入格式:{格式}
3. {工具3名称}:{工具3描述}。输入格式:{格式}

决策规则:
1. 先分析任务,制定执行计划
2. 按计划逐步执行,每一步选择最合适的工具
3. 如果某一步失败,分析原因并调整策略
4. 完成所有步骤后,给出最终结果

输出格式:
思考:{你的推理过程}
动作:{选择的工具名称}
动作输入:{工具的输入参数}

工具调用(Function Calling)

工具调用是Agent的核心能力。大模型本身只能生成文本,但通过Function Calling机制,模型可以"告诉"系统它想调用什么工具、传什么参数,由系统执行工具并把结果返回给模型。

Function Calling的工作流程:

1. 用户提问:"北京今天的天气怎么样?"
2. 模型判断需要调用天气API → 输出:{"function": "get_weather", "args": {"city": "北京"}}
3. 系统执行天气API → 返回结果:{"temp": 28, "condition": "晴"}
4. 模型基于API结果生成回答 → "北京今天天气晴朗,气温28度"

OpenAI Function Calling的代码示例:

python
from openai import OpenAI

client = OpenAI()

# 定义工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名称"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                },
                "required": ["city"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "search_knowledge_base",
            "description": "在企业知识库中搜索信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "搜索关键词"},
                    "category": {"type": "string", "description": "知识分类"}
                },
                "required": ["query"]
            }
        }
    }
]

# 发送请求
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "北京今天的天气怎么样?"}],
    tools=tools
)

# 处理工具调用
message = response.choices[0].message
if message.tool_calls:
    for tool_call in message.tool_calls:
        function_name = tool_call.function.name
        function_args = json.loads(tool_call.function.arguments)
        
        # 执行工具
        if function_name == "get_weather":
            result = get_weather(**function_args)
        
        # 把工具结果返回给模型
        messages = [
            {"role": "user", "content": "北京今天的天气怎么样?"},
            message,
            {"role": "tool", "content": str(result), "tool_call_id": tool_call.id}
        ]
        
        final_response = client.chat.completions.create(
            model="gpt-4o",
            messages=messages,
            tools=tools
        )
        print(final_response.choices[0].message.content)

工具设计的3个原则:

原则一:工具描述要精确 模型根据工具的描述来决定是否调用。描述不清晰,模型可能误调用或漏调用。

原则二:参数设计要简单 参数越少越好,参数类型尽量用string。复杂的参数结构容易导致模型传参错误。

原则三:工具结果要结构化 工具返回的结果应该是结构化的(JSON格式),方便模型理解和使用。

记忆系统

Agent的记忆分为3种:

1. 短期记忆(对话历史) 当前对话中的上下文。受上下文窗口限制,通常只能保留最近几轮对话。

2. 工作记忆(当前任务状态) 当前任务的执行计划、已完成步骤、待完成步骤。通常用结构化的方式存储。

python
class AgentMemory:
    def __init__(self):
        self.task_plan = []      # 任务计划
        self.completed = []       # 已完成步骤
        self.current_step = None  # 当前步骤
        self.findings = {}        # 中间发现
    
    def update_plan(self, plan):
        self.task_plan = plan
    
    def complete_step(self, step, result):
        self.completed.append({"step": step, "result": result})
        self.findings[step] = result
    
    def get_context(self):
        return {
            "plan": self.task_plan,
            "completed": self.completed,
            "current": self.current_step,
            "findings": self.findings
        }

3. 长期记忆(知识持久化) 跨对话的知识积累。通常用向量数据库存储,每次对话时检索相关记忆。

长期记忆的实现:

python
def save_memory(user_id, memory_content, vector_db):
    """保存一条记忆"""
    vector = embedding_model.embed(memory_content)
    vector_db.add(
        vectors=[vector],
        documents=[memory_content],
        metadatas=[{"user_id": user_id, "timestamp": datetime.now().isoformat()}]
    )

def recall_memory(user_id, query, vector_db, top_k=5):
    """回忆相关记忆"""
    query_vector = embedding_model.embed(query)
    results = vector_db.query(
        query_vectors=[query_vector],
        n_results=top_k,
        where={"user_id": user_id}
    )
    return results

记忆是Agent的"人格"基础。没有记忆的Agent就像失忆的助手,每次对话都从零开始。

4.3 Agent 高阶能力设计

规划与推理

规划是Agent最核心的高阶能力。好的规划能让Agent把复杂任务拆解成可执行的步骤,坏的规划会让Agent在死循环中浪费token。

ReAct(Reasoning + Acting)

ReAct是最经典的Agent规划框架,交替进行推理(Thought)和行动(Action):

用户:帮我比较iPhone 15 Pro和Samsung S24 Ultra的相机参数

Thought:我需要分别获取iPhone 15 Pro和Samsung S24 Ultra的相机参数,然后进行比较。
Action:search("iPhone 15 Pro 相机参数")
Observation:iPhone 15 Pro:4800万像素主摄+1200万超广角+1200万长焦(3倍光学变焦)

Thought:已获取iPhone信息,现在获取Samsung信息。
Action:search("Samsung S24 Ultra 相机参数")
Observation:Samsung S24 Ultra:2亿像素主摄+1200万超广角+5000万长焦(5倍光学变焦)+1000万长焦(3倍)

Thought:信息足够,现在进行比较。
Action:generate_comparison(iPhone_15_Pro, Samsung_S24_Ultra)

Plan-and-Execute

先制定完整计划,再逐步执行。适合任务步骤较多、依赖关系清晰的场景。

用户:帮我写一篇关于AI Agent的技术报告

Step 1:制定大纲
→ 大纲:1.背景 2.定义 3.架构 4.关键技术 5.应用场景 6.挑战与展望

Step 2:撰写第1节 背景
→ 内容生成...

Step 3:撰写第2节 定义
→ 内容生成...

...(按计划逐步执行)

反思机制(Self-Reflection)

让Agent在执行过程中检查自己的输出质量,发现问题时回溯修正。

python
REFLECTION_PROMPT = """你刚完成了以下任务:
任务:{task}
执行过程:{execution_log}
执行结果:{result}

请评估:
1. 结果是否完整回答了任务?
2. 有没有遗漏或错误?
3. 是否需要补充执行?

如果发现问题,请指出具体哪里需要修正。如果没问题,回复"质量合格"。"""

反思机制的价值:它能让Agent在输出前自检,减少幻觉和错误。但代价是额外的token消耗和延迟。

多Agent协作

复杂任务可以拆分给多个专业化的Agent协作完成。每个Agent有不同的角色和专业领域。

协作模式一:顺序协作

Agent A的输出是Agent B的输入,依次执行。

调研Agent → 写作Agent → 审校Agent → 发布Agent

适用场景:流水线式任务,每一步有明确的输入输出。

协作模式二:辩论协作

多个Agent对同一问题给出不同观点,通过辩论达成共识。

Agent A:支持方案X,理由是...
Agent B:支持方案Y,理由是...
Agent C(裁判):综合A和B的观点,建议...

适用场景:需要多角度思考的决策问题。

协作模式三:分工协作

一个主Agent负责规划和分配,多个子Agent并行执行。

主Agent:将任务拆分为3个子任务
├── 子Agent A:负责数据分析
├── 子Agent B:负责市场调研
└── 子Agent C:负责竞品分析
主Agent:汇总3个子Agent的结果,生成最终报告

适用场景:子任务之间独立,可以并行执行。

CrewAI多Agent协作示例:

python
from crewai import Agent, Task, Crew

# 定义Agent
researcher = Agent(
    role='研究员',
    goal='收集关于AI Agent的最新技术信息',
    backstory='你是一位技术研究员,擅长搜索和整理信息',
    tools=[search_tool]
)

writer = Agent(
    role='技术写作',
    goal='将研究信息整理成易懂的技术文章',
    backstory='你是一位技术博主,擅长将复杂技术解释清楚',
)

reviewer = Agent(
    role='审校员',
    goal='检查文章的准确性和可读性',
    backstory='你是一位资深编辑,对细节要求严格',
)

# 定义任务
research_task = Task(
    description='调研AI Agent的最新技术进展,包括ReAct、Plan-and-Execute、Multi-Agent等',
    agent=researcher
)

write_task = Task(
    description='基于调研结果,写一篇AI Agent技术综述文章',
    agent=writer
)

review_task = Task(
    description='审校文章,检查事实准确性、逻辑连贯性和可读性',
    agent=reviewer
)

# 组建团队并执行
crew = Crew(
    agents=[researcher, writer, reviewer],
    tasks=[research_task, write_task, review_task],
    verbose=True
)

result = crew.kickoff()

容错与安全

Agent的自主性越高,出错和被滥用的风险越大。容错和安全设计不可忽视。

容错策略:

策略说明实现
步数限制限制Agent的最大执行步数max_steps=10
超时控制单步执行超时则终止step_timeout=30s
成本控制限制token消耗总量max_tokens=50000
人工确认关键操作需人工确认关键工具调用前暂停
降级策略Agent失败时回退到简单方案fallback_to_rag=True

安全策略:

策略说明实现
工具权限限制Agent可调用的工具工具白名单
输入过滤过滤恶意用户输入输入审计
输出审核审核Agent的输出内容输出安全检查
沙箱执行代码执行在沙箱中Docker容器隔离
操作日志记录Agent的所有操作完整的action log

Agent的安全不是可选项,是必选项。一个不受控的Agent,比一个没有Agent的产品更危险。

4.4 Agent 实战矩阵

场景一:智能客服Agent

需求: 客服不仅回答问题,还要能执行操作(查询订单、发起退货、修改地址)

python
# 工具定义
customer_service_tools = [
    {
        "name": "query_order",
        "description": "查询用户订单状态",
        "parameters": {"order_id": "string", "user_id": "string"}
    },
    {
        "name": "initiate_return",
        "description": "发起退货申请",
        "parameters": {"order_id": "string", "reason": "string"}
    },
    {
        "name": "update_address",
        "description": "修改收货地址",
        "parameters": {"order_id": "string", "new_address": "string"}
    },
    {
        "name": "search_knowledge_base",
        "description": "在企业知识库中搜索信息",
        "parameters": {"query": "string"}
    }
]

# Agent提示词
CUSTOMER_SERVICE_PROMPT = """你是一位专业的电商客服。你可以回答问题和执行操作。

规则:
1. 先理解用户意图,再决定是查询知识库还是执行操作
2. 执行操作前,向用户确认(如"我将为您发起退货申请,确认吗?")
3. 修改地址和退货等敏感操作,必须先验证用户身份
4. 如果不确定,优先查询知识库而不是直接操作
5. 所有操作结果都要向用户确认"""

场景二:数据分析Agent

需求: 用户用自然语言描述分析需求,Agent自动完成数据查询、分析、可视化

python
# 工具定义
data_analysis_tools = [
    {
        "name": "execute_sql",
        "description": "执行SQL查询",
        "parameters": {"sql": "string"}
    },
    {
        "name": "generate_chart",
        "description": "生成数据可视化图表",
        "parameters": {"data": "array", "chart_type": "string", "title": "string"}
    },
    {
        "name": "statistical_analysis",
        "description": "执行统计分析",
        "parameters": {"data": "array", "method": "string"}
    }
]

场景三:内容创作Agent

需求: 从选题到发布的内容创作全流程自动化

python
# 多Agent分工
content_creation_agents = {
    "planner": "分析热点话题,确定选题和角度",
    "researcher": "搜索相关资料和数据",
    "writer": "撰写文章初稿",
    "editor": "审校和优化文章",
    "seo_optimizer": "优化标题和关键词"
}

# 工作流
workflow = [
    {"agent": "planner", "input": "本周科技热点", "output": "选题方案"},
    {"agent": "researcher", "input": "选题方案", "output": "研究资料"},
    {"agent": "writer", "input": "选题+资料", "output": "文章初稿"},
    {"agent": "editor", "input": "文章初稿", "output": "终稿"},
    {"agent": "seo_optimizer", "input": "终稿", "output": "发布版本"}
]

Agent框架对比

框架语言特点适用场景
LangChainPython生态最全,文档丰富通用Agent开发
LangGraphPython基于图的状态机,可控性强复杂工作流
CrewAIPython多Agent协作,角色分配团队协作场景
AutoGenPython微软出品,多Agent对话研究和实验
Dify-可视化编排,低代码快速原型
Coze-零代码,快速搭建非技术人员

选择建议:初学者从Dify/Coze开始,开发者用LangChain/LangGraph,需要多Agent协作用CrewAI。

本章小结

主题核心要点
Agent定义自主感知+决策+执行的智能体
能力层级对话→工具→规划→协作,4级递进
使用决策RAG能解决的不上Agent,工作流能解决的不上自主Agent
工具调用Function Calling是Agent的基础能力
记忆系统短期+工作+长期,3层记忆
规划框架ReAct、Plan-and-Execute、Self-Reflection
多Agent顺序/辩论/分工,3种协作模式
容错安全步数限制+超时控制+工具权限+操作日志

觉得有用?收藏起来,下次直接照抄。

你在设计Agent时遇到过什么问题?评论区聊聊。

关注怕浪猫,下期我们讲需求分析——AI产品经理如何发现和验证用户需求。

系列进度 4/13

下章预告: 第5章机会捕捉,从用户体验基础到需求调研方法论,教你发现真正值得做的AI产品机会。

热爱生活,喜好美食,追求未来!