智能体设计模式全面解析:从基础到高级

Posted by iceyao on Tuesday, January 20, 2026

智能体设计模式全面解析:从基础到高级

引言

随着大语言模型(LLM)技术的快速发展,AI智能体(Agent)已成为构建复杂AI应用的核心范式。智能体不仅能够理解和生成文本,更重要的是能够自主感知环境、制定计划、执行行动,并从经验中学习改进。

本文将全面解析当前主流的智能体设计模式,从基础的ReAct模式到高级的多智能体协作模式,帮助开发者深入理解各种模式的设计理念、实现机制和适用场景。

智能体的核心能力

mindmap
  root((智能体核心能力))
    感知能力
      环境感知
      状态识别
      信息提取
    推理能力
      逻辑推理
      因果分析
      模式识别
    决策能力
      目标设定
      策略制定
      行动选择
    执行能力
      工具调用
      API交互
      任务执行
    学习能力
      经验积累
      知识更新
      策略优化

核心设计模式

ReAct 模式

基本概念

[!info] ReAct 定义 ReAct(Reasoning + Acting)模式是最基础也是最重要的智能体设计模式,由Google在2022年提出。其核心思想是将**推理(Reasoning)行动(Acting)**交织在一起,形成一个动态的思考-行动-观察循环。

工作流程

graph TD
    A[开始任务] --> B[Thought: 分析当前状态]
    B --> C[Action: 执行具体行动]
    C --> D[Observation: 获取执行结果]
    D --> E{任务完成?}
    E -->|否| B
    E -->|是| F[输出最终结果]
    
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style F fill:#9f9,stroke:#333,stroke-width:2px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#bfb,stroke:#333,stroke-width:2px
    style D fill:#ffb,stroke:#333,stroke-width:2px

核心组件详解

graph LR
    subgraph "ReAct 核心组件"
        T[Thought 思考器]
        A[Action 执行器]
        O[Observation 观察器]
    end
    
    T --> |推理结果| A
    A --> |执行结果| O
    O --> |反馈信息| T
    
    T -.-> |分析任务<br/>制定策略<br/>预测结果| T
    A -.-> |调用工具<br/>执行API<br/>环境交互| A
    O -.-> |收集数据<br/>分析反馈<br/>状态更新| O

实现示例(LangGraph)

from typing import Annotated, TypedDict, Literal
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI

# 定义状态类型
class AgentState(TypedDict):
    """ReAct智能体状态定义"""
    messages: Annotated[list, "消息历史,包含所有对话和工具调用记录"]
    iteration: int  # 当前迭代次数

def create_react_agent(tools: list, max_iterations: int = 10):
    """
    创建ReAct模式智能体
    
    Args:
        tools: 可用工具列表
        max_iterations: 最大迭代次数,防止无限循环
    
    Returns:
        编译后的LangGraph工作流
    """
    
    # 初始化LLM并绑定工具,使模型能够调用工具
    llm = ChatOpenAI(model="gpt-4").bind_tools(tools)
    # 创建工具节点,用于执行工具调用
    tool_node = ToolNode(tools)
    
    def reasoning_node(state: AgentState) -> AgentState:
        """
        Thought阶段:推理并决定下一步行动
        
        模型分析当前消息历史,决定是否需要调用工具或直接回答
        """
        messages = state["messages"]
        response = llm.invoke(messages)
        return {
            "messages": messages + [response],
            "iteration": state["iteration"] + 1
        }
    
    def should_continue(state: AgentState) -> Literal["tools", "end"]:
        """
        路由函数:决定是否继续执行或结束
        
        Returns:
            "tools": 需要执行工具调用
            "end": 任务完成或达到最大迭代次数
        """
        last_message = state["messages"][-1]
        
        # 安全检查:防止无限循环
        if state["iteration"] >= max_iterations:
            return "end"
        
        # 检查是否有工具调用请求
        if hasattr(last_message, "tool_calls") and last_message.tool_calls:
            return "tools"
        
        return "end"
    
    # ===== 构建状态图 =====
    workflow = StateGraph(AgentState)
    
    # 添加节点
    workflow.add_node("reasoning", reasoning_node)  # Thought: 推理节点
    workflow.add_node("tools", tool_node)           # Action + Observation: 工具执行节点
    
    # 设置入口点
    workflow.set_entry_point("reasoning")
    
    # 添加条件边:根据推理结果决定下一步
    workflow.add_conditional_edges(
        "reasoning",
        should_continue,
        {"tools": "tools", "end": END}
    )
    
    # 工具执行后返回推理节点,形成循环
    workflow.add_edge("tools", "reasoning")
    
    return workflow.compile()

# 使用示例
def run_react_agent(task: str):
    from langchain_core.tools import tool
    
    @tool
    def search(query: str) -> str:
        """搜索信息"""
        return f"搜索结果: 关于'{query}'的相关信息..."
    
    @tool
    def calculate(expression: str) -> str:
        """执行数学计算"""
        return str(eval(expression))
    
    agent = create_react_agent(tools=[search, calculate])
    
    result = agent.invoke({
        "messages": [HumanMessage(content=task)],
        "iteration": 0
    })
    
    return result["messages"][-1].content

适用场景

场景类型 描述 优势 示例
🔍 信息检索 需要多步搜索和分析 动态调整查询策略 研究报告生成、事实核查
🐛 问题诊断 需要逐步排查问题 灵活应对未知情况 代码调试、系统故障排除
💬 对话助手 实时交互响应 简单高效的循环结构 客服机器人、个人助理
📊 数据分析 探索性数据分析 根据发现调整分析方向 业务洞察、趋势分析

Plan-and-Execute 模式

基本概念

[!info] Plan-and-Execute 定义 Plan-and-Execute模式采用"先规划,后执行"的策略,将复杂任务分解为有序的子任务序列,然后按计划逐步执行。这种模式更适合需要全局规划和资源协调的复杂任务。

架构设计

graph TB
    subgraph "Plan-and-Execute 架构"
        P[Planner 规划器]
        E[Executor 执行器]
        R[Re-planner 重规划器]
        M[Monitor 监控器]
    end
    
    Input[任务输入] --> P
    P --> |生成计划| Queue[计划队列]
    Queue --> E
    E --> |执行结果| M
    M --> |需要调整| R
    M --> |继续执行| E
    R --> |更新计划| Queue
    E --> |任务完成| Output[结果输出]
    
    style P fill:#e1f5fe
    style E fill:#e8f5e8
    style R fill:#fff3e0
    style M fill:#fce4ec

详细执行流程

sequenceDiagram
    participant U as 用户
    participant P as Planner
    participant E as Executor
    participant M as Monitor
    participant R as Re-planner
    
    U->>P: 提交任务
    P->>P: 任务分析
    P->>P: 生成执行计划
    P->>E: 发送计划
    
    loop 执行循环
        E->>E: 执行当前步骤
        E->>M: 报告执行结果
        M->>M: 评估执行状态
        
        alt 需要重新规划
            M->>R: 触发重规划
            R->>R: 分析问题
            R->>P: 更新计划
            P->>E: 发送新计划
        else 继续执行
            M->>E: 继续下一步
        end
    end
    
    E->>U: 返回最终结果

核心组件实现(LangGraph)

from typing import TypedDict, List, Optional, Literal
from dataclasses import dataclass
from enum import Enum
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
import json

class StepStatus(Enum):
    """计划步骤状态枚举"""
    PENDING = "pending"         # 待执行
    IN_PROGRESS = "in_progress" # 执行中
    COMPLETED = "completed"     # 已完成
    FAILED = "failed"           # 执行失败

@dataclass
class PlanStep:
    """计划步骤数据类"""
    id: int                      # 步骤ID
    description: str             # 步骤描述
    tools: List[str]             # 所需工具
    dependencies: List[int]      # 依赖的步骤ID
    status: StepStatus = StepStatus.PENDING
    result: Optional[str] = None

# 定义状态类型
class PlanExecuteState(TypedDict):
    """Plan-and-Execute智能体状态定义"""
    task: str                    # 原始任务
    plan: List[dict]             # 执行计划(步骤列表)
    current_step: int            # 当前执行到的步骤索引
    results: List[str]           # 各步骤执行结果
    final_result: Optional[str]  # 最终综合结果

def create_plan_execute_agent(tools: list):
    """
    创建Plan-and-Execute模式智能体
    
    该模式采用"先规划,后执行"的策略:
    1. Planner: 分析任务,生成执行计划
    2. Executor: 按计划逐步执行
    3. Re-planner: 根据执行情况动态调整计划
    4. Synthesizer: 综合所有结果生成最终答案
    
    Args:
        tools: 可用工具列表
    
    Returns:
        编译后的LangGraph工作流
    """
    
    # 规划器使用低温度确保稳定的计划生成
    planner_llm = ChatOpenAI(model="gpt-4", temperature=0)
    # 执行器绑定工具
    executor_llm = ChatOpenAI(model="gpt-4").bind_tools(tools)
    
    def planning_node(state: PlanExecuteState) -> PlanExecuteState:
        """
        规划阶段:创建执行计划
        
        将复杂任务分解为有序的子任务序列
        """
        task = state["task"]
        
        plan_prompt = f"""
        请为以下任务创建详细的执行计划:
        
        任务:{task}
        
        要求:
        1. 将任务分解为3-8个具体步骤
        2. 每个步骤应该是可执行的原子操作
        3. 明确步骤之间的依赖关系
        
        请以JSON数组格式输出,每个步骤包含: id, description, dependencies
        """
        
        response = planner_llm.invoke([HumanMessage(content=plan_prompt)])
        plan = json.loads(response.content)
        
        return {**state, "plan": plan, "current_step": 0, "results": []}
    
    def execution_node(state: PlanExecuteState) -> PlanExecuteState:
        """
        执行阶段:执行当前步骤
        
        根据计划执行具体操作,并收集执行结果
        """
        plan = state["plan"]
        current_step = state["current_step"]
        results = state["results"]
        
        # 边界检查
        if current_step >= len(plan):
            return state
        
        step = plan[current_step]
        
        # 构建执行上下文,包含之前的结果
        exec_prompt = f"""
        请执行以下步骤:
        步骤描述:{step['description']}
        
        之前的执行结果:
        {chr(10).join([f"步骤{i+1}: {r}" for i, r in enumerate(results)])}
        """
        
        response = executor_llm.invoke([HumanMessage(content=exec_prompt)])
        new_results = results + [response.content]
        
        return {**state, "results": new_results, "current_step": current_step + 1}
    
    def replan_node(state: PlanExecuteState) -> PlanExecuteState:
        """
        重规划阶段:根据执行结果调整计划
        
        当执行过程中发现问题或新信息时,动态调整剩余计划
        """
        task = state["task"]
        results = state["results"]
        
        replan_prompt = f"""
        原始任务:{task}
        已完成的步骤结果:{results}
        
        请根据当前进度,评估是否需要调整剩余计划。
        如需调整,请输出新的计划步骤(JSON格式)。
        如不需要调整,输出 "NO_REPLAN"。
        """
        
        response = planner_llm.invoke([HumanMessage(content=replan_prompt)])
        
        if "NO_REPLAN" not in response.content:
            new_plan = json.loads(response.content)
            return {**state, "plan": new_plan, "current_step": 0}
        
        return state
    
    def synthesize_node(state: PlanExecuteState) -> PlanExecuteState:
        """
        综合阶段:整合所有结果
        
        将各步骤的执行结果综合为最终答案
        """
        task = state["task"]
        results = state["results"]
        
        synth_prompt = f"""
        任务:{task}
        
        执行结果:
        {chr(10).join([f"步骤{i+1}: {r}" for i, r in enumerate(results)])}
        
        请综合以上结果,给出最终答案。
        """
        
        response = planner_llm.invoke([HumanMessage(content=synth_prompt)])
        
        return {**state, "final_result": response.content}
    
    def should_continue(state: PlanExecuteState) -> Literal["execute", "replan", "synthesize"]:
        """
        路由函数:决定下一步操作
        
        Returns:
            "execute": 继续执行下一步
            "replan": 触发重规划
            "synthesize": 所有步骤完成,进入综合阶段
        """
        current_step = state["current_step"]
        plan = state["plan"]
        
        # 所有步骤执行完毕
        if current_step >= len(plan):
            return "synthesize"
        
        # 每执行两步检查一次是否需要重规划(可配置)
        if current_step > 0 and current_step % 2 == 0:
            return "replan"
        
        return "execute"
    
    # ===== 构建状态图 =====
    workflow = StateGraph(PlanExecuteState)
    
    # 添加节点
    workflow.add_node("plan", planning_node)       # 规划器
    workflow.add_node("execute", execution_node)   # 执行器
    workflow.add_node("replan", replan_node)       # 重规划器
    workflow.add_node("synthesize", synthesize_node) # 综合器
    
    # 设置入口点
    workflow.set_entry_point("plan")
    
    # 定义执行流程
    workflow.add_edge("plan", "execute")  # 规划完成后开始执行
    workflow.add_conditional_edges(
        "execute",
        should_continue,
        {"execute": "execute", "replan": "replan", "synthesize": "synthesize"}
    )
    workflow.add_edge("replan", "execute")  # 重规划后继续执行
    workflow.add_edge("synthesize", END)    # 综合后结束
    
    return workflow.compile()

# 使用示例
def run_plan_execute_agent(task: str):
    from langchain_core.tools import tool
    
    @tool
    def search(query: str) -> str:
        """搜索信息"""
        return f"搜索结果: {query}"
    
    @tool
    def write_file(content: str) -> str:
        """写入文件"""
        return f"已写入: {content[:50]}..."
    
    agent = create_plan_execute_agent(tools=[search, write_file])
    
    result = agent.invoke({
        "task": task,
        "plan": [],
        "current_step": 0,
        "results": [],
        "final_result": None
    })
    
    return result["final_result"]

并行执行优化

gantt
    title Plan-and-Execute 并行执行时间线
    dateFormat X
    axisFormat %s
    
    section 串行执行
    Step 1    :s1, 0, 2
    Step 2    :s2, 2, 4
    Step 3    :s3, 4, 6
    Step 4    :s4, 6, 8
    Step 5    :s5, 8, 10
    
    section 并行执行
    Step 1    :p1, 0, 2
    Step 2    :p2, 2, 4
    Step 3    :p3, 2, 4
    Step 4    :p4, 4, 6
    Step 5    :p5, 4, 6

适用场景

场景类型 特点 优势 应用示例
📊 数据处理流水线 步骤固定,依赖明确 资源预分配,高吞吐量 ETL流程、报表生成
🏗️ 项目管理 阶段性强,需要里程碑 进度可控,便于管理 软件开发、产品发布
📝 内容创作 创作流程标准化 质量保证,流程规范 技术文档、营销材料
🔬 科研流程 严格的方法论 结果可复现,过程规范 实验设计、论文写作

Ralph Loop 模式

基本概念

[!important] Ralph Loop 定义 Ralph Loop(Reasoning-Acting-Learning-Planning Loop)是最高级的智能体设计模式,它将推理、行动、学习和规划整合成一个持续迭代的闭环系统。该模式的核心特点是具备学习和记忆能力,能够从经验中不断改进。

核心架构

graph TD
    subgraph "Ralph Loop 核心架构"
        R[Reasoning 推理]
        A[Acting 行动]
        L[Learning 学习]
        P[Planning 规划]
        
        KB[(Knowledge Base<br/>知识库)]
        EM[(Experience Memory<br/>经验记忆)]
        
        R --> A
        A --> L
        L --> P
        P --> R
        
        R <--> KB
        L <--> EM
        P <--> KB
        A <--> EM
    end
    
    Env[Environment<br/>环境] <--> A
    
    style R fill:#e3f2fd
    style A fill:#e8f5e8
    style L fill:#fff8e1
    style P fill:#fce4ec
    style KB fill:#f3e5f5
    style EM fill:#e0f2f1

四阶段详细流程

flowchart TD
    subgraph "Phase 1: Reasoning 推理阶段"
        R1[状态评估]
        R2[问题分析]
        R3[假设生成]
        R4[策略推荐]
        
        R1 --> R2 --> R3 --> R4
    end
    
    subgraph "Phase 2: Acting 行动阶段"
        A1[动作选择]
        A2[参数绑定]
        A3[执行动作]
        A4[收集反馈]
        
        A1 --> A2 --> A3 --> A4
    end
    
    subgraph "Phase 3: Learning 学习阶段"
        L1[经验提取]
        L2[模式识别]
        L3[知识更新]
        L4[策略优化]
        
        L1 --> L2 --> L3 --> L4
    end
    
    subgraph "Phase 4: Planning 规划阶段"
        P1[目标设定]
        P2[资源评估]
        P3[策略制定]
        P4[计划生成]
        
        P1 --> P2 --> P3 --> P4
    end
    
    R4 --> A1
    A4 --> L1
    L4 --> P1
    P4 --> R1
    
    style R1 fill:#e3f2fd
    style A1 fill:#e8f5e8
    style L1 fill:#fff8e1
    style P1 fill:#fce4ec

知识库架构

erDiagram
    KNOWLEDGE_BASE {
        string id PK
        string type
        string content
        float confidence
        datetime created_at
        datetime updated_at
    }
    
    FACTS {
        string fact_id PK
        string entity
        string relation
        string value
        float confidence
    }
    
    RULES {
        string rule_id PK
        string condition
        string action
        float success_rate
        int usage_count
    }
    
    PATTERNS {
        string pattern_id PK
        string context
        string pattern_type
        json parameters
        float effectiveness
    }
    
    EXPERIENCES {
        string exp_id PK
        string task_type
        json context
        json actions
        json outcomes
        float reward
    }
    
    KNOWLEDGE_BASE ||--o{ FACTS : contains
    KNOWLEDGE_BASE ||--o{ RULES : contains
    KNOWLEDGE_BASE ||--o{ PATTERNS : contains
    KNOWLEDGE_BASE ||--o{ EXPERIENCES : contains

学习机制实现(LangGraph)

from typing import TypedDict, List, Optional, Literal
from datetime import datetime
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
import json

# 定义状态类型
class RalphState(TypedDict):
    """Ralph Loop智能体状态定义"""
    task: str                              # 原始任务
    episode_count: int                     # 当前回合数
    max_episodes: int                      # 最大回合数
    reasoning_result: Optional[dict]       # 推理阶段结果
    action_result: Optional[dict]          # 行动阶段结果
    learning_result: Optional[dict]        # 学习阶段结果
    planning_result: Optional[dict]        # 规划阶段结果
    task_completed: bool                   # 任务是否完成
    final_answer: Optional[str]            # 最终答案
    knowledge_base: List[dict]             # 知识库(持久化存储)
    experience_memory: List[dict]          # 经验记忆(情景记忆)

def create_ralph_agent(tools: list, max_episodes: int = 10):
    """
    创建Ralph Loop模式智能体
    
    Ralph = Reasoning + Acting + Learning + Planning
    这是一个具有学习能力的高级智能体模式
    
    Args:
        tools: 可用工具列表(本示例中未使用,可扩展)
        max_episodes: 最大学习回合数
    
    Returns:
        编译后的LangGraph工作流
    """
    
    llm = ChatOpenAI(model="gpt-4", temperature=0)
    
    def reasoning_node(state: RalphState) -> RalphState:
        """
        Phase 1: 推理阶段 (Reasoning)
        
        职责:
        - 评估当前状态
        - 分析问题核心
        - 生成解决假设
        - 推荐行动策略
        """
        task = state["task"]
        kb = state["knowledge_base"]
        memory = state["experience_memory"]
        
        # 检索相关知识和历史经验(简化版,实际可用向量检索)
        relevant_knowledge = kb[-5:] if kb else []
        similar_experiences = memory[-3:] if memory else []
        
        prompt = f"""
        任务: {task}
        
        相关知识: {json.dumps(relevant_knowledge, ensure_ascii=False)}
        类似经验: {json.dumps(similar_experiences, ensure_ascii=False)}
        
        请进行推理分析,输出JSON格式:
        {{
            "state_assessment": "当前状态评估",
            "problem_analysis": "问题核心分析",
            "hypotheses": ["假设1", "假设2"],
            "recommended_action": "推荐的行动策略"
        }}
        """
        
        response = llm.invoke([HumanMessage(content=prompt)])
        reasoning = json.loads(response.content)
        
        return {**state, "reasoning_result": reasoning}
    
    def acting_node(state: RalphState) -> RalphState:
        """
        Phase 2: 行动阶段 (Acting)
        
        职责:
        - 根据推理结果选择动作
        - 执行动作并收集反馈
        - 记录执行上下文
        """
        task = state["task"]
        reasoning = state["reasoning_result"]
        
        prompt = f"""
        任务: {task}
        推理结果: {json.dumps(reasoning, ensure_ascii=False)}
        
        请执行推荐的行动,输出JSON格式:
        {{
            "action_taken": "执行的动作",
            "parameters": {{}},
            "outcome": "执行结果",
            "success": true,
            "context": "执行上下文"
        }}
        """
        
        response = llm.invoke([HumanMessage(content=prompt)])
        action_result = json.loads(response.content)
        
        return {**state, "action_result": action_result}
    
    def learning_node(state: RalphState) -> RalphState:
        """
        Phase 3: 学习阶段 (Learning)
        
        职责:
        - 从执行结果中提取经验
        - 识别行为模式
        - 更新知识库
        - 优化执行策略
        """
        action_result = state["action_result"]
        kb = state["knowledge_base"].copy()
        memory = state["experience_memory"].copy()
        
        # 构建经验记录
        experience = {
            "context": action_result.get("context", ""),
            "action": action_result.get("action_taken", ""),
            "outcome": action_result.get("outcome", ""),
            "success": action_result.get("success", False),
            "timestamp": datetime.now().isoformat()
        }
        memory.append(experience)
        
        # 请求LLM识别模式并提取知识
        prompt = f"""
        根据以下经验,提取可学习的知识模式:
        {json.dumps(experience, ensure_ascii=False)}
        
        输出JSON格式:
        {{
            "patterns": ["识别的模式"],
            "new_knowledge": {{"key": "value"}},
            "strategy_updates": ["策略更新建议"]
        }}
        """
        
        response = llm.invoke([HumanMessage(content=prompt)])
        learning = json.loads(response.content)
        
        # 将新知识添加到知识库
        if learning.get("new_knowledge"):
            kb.append(learning["new_knowledge"])
        
        return {
            **state,
            "learning_result": learning,
            "knowledge_base": kb,
            "experience_memory": memory
        }
    
    def planning_node(state: RalphState) -> RalphState:
        """
        Phase 4: 规划阶段 (Planning)
        
        职责:
        - 根据学习结果设定下一步目标
        - 制定新的执行策略
        - 评估任务是否完成
        """
        task = state["task"]
        learning = state["learning_result"]
        
        prompt = f"""
        任务: {task}
        学习结果: {json.dumps(learning, ensure_ascii=False)}
        
        基于学习到的内容,制定下一轮的计划:
        {{
            "goal": "下一步目标",
            "strategy": "采用的策略",
            "expected_outcome": "预期结果",
            "task_completed": false
        }}
        """
        
        response = llm.invoke([HumanMessage(content=prompt)])
        planning = json.loads(response.content)
        
        return {
            **state,
            "planning_result": planning,
            "task_completed": planning.get("task_completed", False)
        }
    
    def finalize_node(state: RalphState) -> RalphState:
        """生成最终答案,综合所有学习经验"""
        task = state["task"]
        memory = state["experience_memory"]
        
        prompt = f"""
        任务: {task}
        完整执行历史: {json.dumps(memory, ensure_ascii=False)}
        
        请综合所有经验,生成最终答案。
        """
        
        response = llm.invoke([HumanMessage(content=prompt)])
        
        return {**state, "final_answer": response.content}
    
    def should_continue(state: RalphState) -> Literal["reasoning", "finalize"]:
        """路由函数:决定是否继续Ralph循环"""
        if state["task_completed"]:
            return "finalize"
        if state["episode_count"] >= state["max_episodes"]:
            return "finalize"
        return "reasoning"
    
    def increment_episode(state: RalphState) -> RalphState:
        """回合计数器,用于跟踪学习进度"""
        return {**state, "episode_count": state["episode_count"] + 1}
    
    # ===== 构建状态图 =====
    workflow = StateGraph(RalphState)
    
    # 添加Ralph四阶段节点
    workflow.add_node("reasoning", reasoning_node)    # R - 推理
    workflow.add_node("acting", acting_node)          # A - 行动
    workflow.add_node("learning", learning_node)      # L - 学习
    workflow.add_node("planning", planning_node)      # P - 规划
    workflow.add_node("increment", increment_episode) # 回合计数
    workflow.add_node("finalize", finalize_node)      # 最终输出
    
    # 设置入口点
    workflow.set_entry_point("reasoning")
    
    # 定义Ralph循环边: R -> A -> L -> P -> increment
    workflow.add_edge("reasoning", "acting")
    workflow.add_edge("acting", "learning")
    workflow.add_edge("learning", "planning")
    workflow.add_edge("planning", "increment")
    
    # 条件边:继续循环或结束
    workflow.add_conditional_edges(
        "increment",
        should_continue,
        {"reasoning": "reasoning", "finalize": "finalize"}
    )
    workflow.add_edge("finalize", END)
    
    return workflow.compile()

# 使用示例
def run_ralph_agent(task: str):
    agent = create_ralph_agent(tools=[], max_episodes=5)
    
    result = agent.invoke({
        "task": task,
        "episode_count": 0,
        "max_episodes": 5,
        "reasoning_result": None,
        "action_result": None,
        "learning_result": None,
        "planning_result": None,
        "task_completed": False,
        "final_answer": None,
        "knowledge_base": [],
        "experience_memory": []
    })
    
    return result["final_answer"]

自适应学习流程

graph LR
    subgraph "自适应学习循环"
        E[Experience<br/>经验收集]
        P[Pattern<br/>模式识别]
        K[Knowledge<br/>知识抽取]
        S[Strategy<br/>策略优化]
        
        E --> P
        P --> K
        K --> S
        S --> E
    end
    
    subgraph "学习机制"
        RL[强化学习]
        IL[模仿学习]
        ML[元学习]
        TL[迁移学习]
    end
    
    E -.-> RL
    P -.-> IL
    K -.-> ML
    S -.-> TL

适用场景

场景类型 特点 优势 应用示例
🎓 智能教育 需要个性化适应 持续学习用户偏好 自适应学习系统、智能导师
🤖 个人助手 长期交互关系 了解用户习惯和需求 智能秘书、生活助理
🔬 自动化研究 探索未知领域 积累研究经验和方法 科学发现、药物研发
🎮 游戏AI 对手策略变化 适应不同玩家风格 智能NPC、游戏平衡

扩展设计模式

Chain-of-Thought 模式

基本概念

[!tip] Chain-of-Thought 定义 **Chain-of-Thought (CoT)**模式通过引导模型展示详细的推理步骤来提高复杂问题的解决能力。它不是直接给出答案,而是逐步展示思考过程。

推理链结构

graph TD
    Q[问题输入] --> S1[推理步骤1]
    S1 --> S2[推理步骤2]
    S2 --> S3[推理步骤3]
    S3 --> Sn[推理步骤n]
    Sn --> A[最终答案]
    
    subgraph "推理类型"
        L[逻辑推理]
        M[数学计算]
        C[因果分析]
        A1[类比推理]
    end
    
    style Q fill:#f9f9f9
    style A fill:#e8f5e8

实现示例(LangGraph)

from typing import TypedDict, List, Literal
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

# 定义状态类型
class CoTState(TypedDict):
    """Chain-of-Thought智能体状态定义"""
    problem: str           # 待解决的问题
    steps: List[str]       # 推理步骤列表
    current_step: int      # 当前推理步骤索引
    final_answer: str      # 最终答案

def create_cot_agent(max_steps: int = 5):
    """
    创建Chain-of-Thought模式智能体
    
    通过引导模型逐步展示推理过程来提高复杂问题的解决能力
    每一步都会基于之前的推理结果进行下一步分析
    
    Args:
        max_steps: 最大推理步骤数
    
    Returns:
        编译后的LangGraph工作流
    """
    
    llm = ChatOpenAI(model="gpt-4", temperature=0)
    
    # 预定义的推理步骤引导
    STEP_PROMPTS = [
        "分析问题的关键信息和约束条件",
        "确定解决问题的方法和策略",
        "执行具体的计算或推理过程",
        "验证结果的合理性和完整性",
        "总结并给出最终答案"
    ]
    
    def analyze_step(state: CoTState) -> CoTState:
        """
        执行单步推理
        
        每次调用生成一个推理步骤,并将结果添加到推理链中
        """
        problem = state["problem"]
        steps = state["steps"]
        current = state["current_step"]
        
        # 获取当前步骤的引导提示
        current_prompt = STEP_PROMPTS[current] if current < len(STEP_PROMPTS) else "继续推理"
        
        # 构建包含历史推理的提示
        prompt = f"""
        问题: {problem}
        
        之前的推理步骤:
        {chr(10).join([f"步骤{i+1}: {s}" for i, s in enumerate(steps)])}
        
        当前任务: {current_prompt}
        
        请给出这一步的详细推理过程:
        """
        
        response = llm.invoke([HumanMessage(content=prompt)])
        new_steps = steps + [response.content]
        
        return {
            **state,
            "steps": new_steps,
            "current_step": current + 1
        }
    
    def finalize_answer(state: CoTState) -> CoTState:
        """
        生成最终答案
        
        综合所有推理步骤,给出简洁明确的最终结论
        """
        problem = state["problem"]
        steps = state["steps"]
        
        prompt = f"""
        问题: {problem}
        
        完整推理过程:
        {chr(10).join([f"步骤{i+1}: {s}" for i, s in enumerate(steps)])}
        
        请基于以上推理,给出简洁明确的最终答案:
        """
        
        response = llm.invoke([HumanMessage(content=prompt)])
        
        return {**state, "final_answer": response.content}
    
    def should_continue(state: CoTState) -> Literal["analyze", "finalize"]:
        """路由函数:决定是否继续推理"""
        if state["current_step"] >= max_steps:
            return "finalize"
        return "analyze"
    
    # ===== 构建状态图 =====
    workflow = StateGraph(CoTState)
    
    # 添加节点
    workflow.add_node("analyze", analyze_step)      # 推理节点
    workflow.add_node("finalize", finalize_answer)  # 总结节点
    
    # 设置入口点
    workflow.set_entry_point("analyze")
    
    # 添加条件边:推理完成后决定继续还是总结
    workflow.add_conditional_edges(
        "analyze",
        should_continue,
        {"analyze": "analyze", "finalize": "finalize"}
    )
    workflow.add_edge("finalize", END)
    
    return workflow.compile()

# 使用示例
def solve_with_cot(problem: str):
    agent = create_cot_agent(max_steps=4)
    
    result = agent.invoke({
        "problem": problem,
        "steps": [],
        "current_step": 0,
        "final_answer": ""
    })
    
    # 输出完整推理链
    for i, step in enumerate(result["steps"]):
        print(f"步骤{i+1}: {step}")
    print(f"\n最终答案: {result['final_answer']}")
    
    return result["final_answer"]

Multi-Agent 协作模式

协作架构

graph TB
    subgraph "Multi-Agent 协作系统"
        C[Coordinator 协调者]
        
        subgraph "专业智能体"
            A1[Research Agent<br/>研究专家]
            A2[Analysis Agent<br/>分析专家]
            A3[Writing Agent<br/>写作专家]
            A4[Review Agent<br/>审核专家]
        end
        
        subgraph "共享资源"
            KB[(Knowledge Base)]
            WS[(Workspace)]
            CM[(Communication)]
        end
    end
    
    User[用户] --> C
    C --> A1
    C --> A2
    C --> A3
    C --> A4
    
    A1 <--> KB
    A2 <--> KB
    A3 <--> WS
    A4 <--> WS
    
    A1 <--> CM
    A2 <--> CM
    A3 <--> CM
    A4 <--> CM
    
    C --> User

协作流程

sequenceDiagram
    participant U as 用户
    participant C as 协调者
    participant R as 研究智能体
    participant A as 分析智能体
    participant W as 写作智能体
    participant V as 审核智能体
    
    U->>C: 提交任务
    C->>C: 任务分解
    
    par 并行执行
        C->>R: 分配研究任务
        C->>A: 分配分析任务
    end
    
    R->>C: 研究结果
    A->>C: 分析结果
    
    C->>W: 整合信息,开始写作
    W->>C: 初稿完成
    
    C->>V: 提交审核
    V->>C: 审核意见
    
    alt 需要修改
        C->>W: 修改建议
        W->>C: 修改版本
    else 通过审核
        C->>U: 最终结果
    end

实现示例(LangGraph)

from typing import TypedDict, Literal, Optional
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
import json

# 定义状态类型
class MultiAgentState(TypedDict):
    """Multi-Agent协作系统状态定义"""
    task: str                         # 原始任务
    research_result: Optional[str]    # 研究智能体输出
    analysis_result: Optional[str]    # 分析智能体输出
    draft: Optional[str]              # 写作智能体输出(草稿)
    review_result: Optional[dict]     # 审核智能体输出
    final_result: Optional[str]       # 最终结果
    revision_count: int               # 修改次数

def create_multi_agent_system():
    """
    创建Multi-Agent协作系统
    
    系统包含四个专业智能体:
    - Research Agent: 负责收集和整理相关信息
    - Analysis Agent: 负责深度分析研究结果
    - Writing Agent: 负责撰写内容
    - Review Agent: 负责审核并提供反馈
    
    Returns:
        编译后的LangGraph工作流
    """
    
    # 各专业智能体使用不同的配置
    research_llm = ChatOpenAI(model="gpt-4", temperature=0.7)   # 较高创造性
    analysis_llm = ChatOpenAI(model="gpt-4", temperature=0)     # 精确分析
    writing_llm = ChatOpenAI(model="gpt-4", temperature=0.5)    # 平衡创造性
    review_llm = ChatOpenAI(model="gpt-4", temperature=0)       # 严格审核
    
    def coordinator_node(state: MultiAgentState) -> MultiAgentState:
        """
        协调者节点:初始化任务分配
        
        在实际场景中可以进行任务分解和智能体选择
        """
        return state
    
    def research_agent(state: MultiAgentState) -> MultiAgentState:
        """
        研究智能体:收集和整理相关信息
        
        职责:背景调研、资料收集、关键信息提取
        """
        task = state["task"]
        
        prompt = f"""
        你是一个专业的研究员。请针对以下任务进行深入研究:
        
        任务:{task}
        
        请提供:
        1. 相关背景信息
        2. 关键概念解释
        3. 重要数据和事实
        4. 参考资源列表
        """
        
        response = research_llm.invoke([HumanMessage(content=prompt)])
        return {**state, "research_result": response.content}
    
    def analysis_agent(state: MultiAgentState) -> MultiAgentState:
        """
        分析智能体:深度分析研究结果
        
        职责:逻辑分析、观点提炼、优劣势评估
        """
        task = state["task"]
        research = state.get("research_result", "")
        
        prompt = f"""
        你是一个专业的分析师。请基于以下信息进行深度分析:
        
        任务:{task}
        研究资料:{research}
        
        请提供:
        1. 核心观点总结
        2. 逻辑关系分析
        3. 优劣势评估
        4. 建议和结论
        """
        
        response = analysis_llm.invoke([HumanMessage(content=prompt)])
        return {**state, "analysis_result": response.content}
    
    def writing_agent(state: MultiAgentState) -> MultiAgentState:
        """
        写作智能体:撰写内容
        
        职责:整合信息、撰写文章、响应修改意见
        """
        task = state["task"]
        research = state.get("research_result", "")
        analysis = state.get("analysis_result", "")
        review = state.get("review_result")
        
        if review and not review.get("approved"):
            # 根据审核意见进行修改
            prompt = f"""
            请根据以下审核意见修改文章:
            
            原文:{state.get('draft', '')}
            审核意见:{review.get('feedback', '')}
            
            请输出修改后的完整文章。
            """
        else:
            # 首次撰写
            prompt = f"""
            你是一个专业的写作者。请基于以下材料撰写高质量内容:
            
            任务:{task}
            研究资料:{research}
            分析结果:{analysis}
            
            请撰写一篇结构清晰、内容丰富的文章。
            """
        
        response = writing_llm.invoke([HumanMessage(content=prompt)])
        return {**state, "draft": response.content}
    
    def review_agent(state: MultiAgentState) -> MultiAgentState:
        """
        审核智能体:审核并提供反馈
        
        职责:质量评估、问题识别、改进建议
        """
        task = state["task"]
        draft = state.get("draft", "")
        
        prompt = f"""
        你是一个严格的审核专家。请审核以下内容:
        
        原始任务:{task}
        待审核内容:{draft}
        
        请以JSON格式输出审核结果:
        {{
            "approved": true,
            "score": 8,
            "feedback": "具体的修改建议或通过理由"
        }}
        """
        
        response = review_llm.invoke([HumanMessage(content=prompt)])
        review_result = json.loads(response.content)
        
        return {
            **state,
            "review_result": review_result,
            "revision_count": state["revision_count"] + 1
        }
    
    def finalize_node(state: MultiAgentState) -> MultiAgentState:
        """最终确认输出"""
        return {**state, "final_result": state.get("draft", "")}
    
    def should_revise(state: MultiAgentState) -> Literal["writing", "finalize"]:
        """
        路由函数:决定是否需要修改
        
        Returns:
            "writing": 需要修改
            "finalize": 审核通过或达到最大修改次数
        """
        review = state.get("review_result", {})
        revision_count = state.get("revision_count", 0)
        
        # 防止无限修改循环
        if revision_count >= 3:
            return "finalize"
        
        if review.get("approved", False):
            return "finalize"
        
        return "writing"
    
    # ===== 构建状态图 =====
    workflow = StateGraph(MultiAgentState)
    
    # 添加智能体节点
    workflow.add_node("coordinator", coordinator_node)  # 协调者
    workflow.add_node("research", research_agent)       # 研究智能体
    workflow.add_node("analysis", analysis_agent)       # 分析智能体
    workflow.add_node("writing", writing_agent)         # 写作智能体
    workflow.add_node("review", review_agent)           # 审核智能体
    workflow.add_node("finalize", finalize_node)        # 最终输出
    
    # 设置入口点
    workflow.set_entry_point("coordinator")
    
    # 定义协作流程(串行展示,实际可并行优化)
    workflow.add_edge("coordinator", "research")
    workflow.add_edge("research", "analysis")
    workflow.add_edge("analysis", "writing")
    workflow.add_edge("writing", "review")
    
    # 审核后决定是修改还是完成
    workflow.add_conditional_edges(
        "review",
        should_revise,
        {"writing": "writing", "finalize": "finalize"}
    )
    workflow.add_edge("finalize", END)
    
    return workflow.compile()

# 使用示例
def run_multi_agent(task: str):
    system = create_multi_agent_system()
    
    result = system.invoke({
        "task": task,
        "research_result": None,
        "analysis_result": None,
        "draft": None,
        "review_result": None,
        "final_result": None,
        "revision_count": 0
    })
    
    return result["final_result"]

Hierarchical Agent 模式

层次结构

graph TD
    subgraph "Hierarchical Agent 架构"
        M[Master Agent<br/>主控智能体]
        
        subgraph "中层管理"
            S1[Supervisor 1<br/>任务管理]
            S2[Supervisor 2<br/>资源管理]
            S3[Supervisor 3<br/>质量管理]
        end
        
        subgraph "执行层"
            W1[Worker 1]
            W2[Worker 2]
            W3[Worker 3]
            W4[Worker 4]
            W5[Worker 5]
            W6[Worker 6]
        end
    end
    
    M --> S1
    M --> S2
    M --> S3
    
    S1 --> W1
    S1 --> W2
    S2 --> W3
    S2 --> W4
    S3 --> W5
    S3 --> W6
    
    style M fill:#ff9999
    style S1 fill:#99ccff
    style S2 fill:#99ccff
    style S3 fill:#99ccff
    style W1 fill:#99ff99
    style W2 fill:#99ff99
    style W3 fill:#99ff99
    style W4 fill:#99ff99
    style W5 fill:#99ff99
    style W6 fill:#99ff99

实现示例(LangGraph)

from typing import TypedDict, List, Optional, Dict
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
import json

# 定义状态类型
class HierarchicalState(TypedDict):
    """Hierarchical Agent层次化智能体状态定义"""
    task: str                              # 原始任务
    subtasks: Dict[str, List[str]]         # supervisor_name -> [子任务列表]
    worker_results: Dict[str, str]         # worker_id -> 执行结果
    supervisor_summaries: Dict[str, str]   # supervisor_name -> 汇总报告
    final_result: Optional[str]            # 最终结果

def create_hierarchical_agent():
    """
    创建Hierarchical Agent层次化智能体系统
    
    三层架构:
    - Master Agent (主控层): 任务分解和最终汇总
    - Supervisor Agents (管理层): 管理各自领域的Worker
    - Worker Agents (执行层): 具体任务执行
    
    Returns:
        编译后的LangGraph工作流
    """
    
    # 不同层级使用不同的模型配置
    master_llm = ChatOpenAI(model="gpt-4", temperature=0)        # 主控:精确决策
    supervisor_llm = ChatOpenAI(model="gpt-4", temperature=0)    # 管理:汇总分析
    worker_llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.5)  # 执行:高效完成
    
    def master_node(state: HierarchicalState) -> HierarchicalState:
        """
        主控智能体:任务分解
        
        将复杂任务分解给三个管理者:
        - task_supervisor: 任务执行管理
        - resource_supervisor: 资源管理
        - quality_supervisor: 质量保证
        """
        task = state["task"]
        
        prompt = f"""
        你是主控智能体。请将以下任务分解给三个管理者:
        - task_supervisor: 负责任务执行相关的子任务
        - resource_supervisor: 负责资源管理相关的子任务  
        - quality_supervisor: 负责质量保证相关的子任务
        
        任务:{task}
        
        请以JSON格式输出任务分配:
        {{
            "task_supervisor": ["子任务1", "子任务2"],
            "resource_supervisor": ["子任务1", "子任务2"],
            "quality_supervisor": ["子任务1", "子任务2"]
        }}
        """
        
        response = master_llm.invoke([HumanMessage(content=prompt)])
        subtasks = json.loads(response.content)
        
        return {**state, "subtasks": subtasks}
    
    def create_supervisor_node(supervisor_name: str):
        """
        创建Supervisor节点的工厂函数
        
        每个Supervisor负责:
        1. 分发子任务给Worker
        2. 收集Worker执行结果
        3. 汇总并生成报告
        
        Args:
            supervisor_name: 管理者名称
        
        Returns:
            supervisor节点函数
        """
        def supervisor_node(state: HierarchicalState) -> HierarchicalState:
            subtasks = state["subtasks"].get(supervisor_name, [])
            worker_results = state["worker_results"].copy()
            
            # Worker层:执行各子任务
            for i, subtask in enumerate(subtasks):
                worker_prompt = f"""
                你是一个执行者。请完成以下子任务:
                {subtask}
                
                请直接输出执行结果。
                """
                response = worker_llm.invoke([HumanMessage(content=worker_prompt)])
                worker_results[f"{supervisor_name}_worker_{i}"] = response.content
            
            # Supervisor层:汇总Worker结果
            relevant_results = {k: v for k, v in worker_results.items() 
                               if k.startswith(supervisor_name)}
            
            summary_prompt = f"""
            你是{supervisor_name}管理者。请汇总以下Worker的执行结果:
            
            {json.dumps(relevant_results, ensure_ascii=False)}
            
            请输出汇总报告。
            """
            
            summary = supervisor_llm.invoke([HumanMessage(content=summary_prompt)])
            
            supervisor_summaries = state["supervisor_summaries"].copy()
            supervisor_summaries[supervisor_name] = summary.content
            
            return {
                **state,
                "worker_results": worker_results,
                "supervisor_summaries": supervisor_summaries
            }
        
        return supervisor_node
    
    def aggregation_node(state: HierarchicalState) -> HierarchicalState:
        """
        聚合节点:综合所有Supervisor的结果
        
        Master Agent汇总各管理者的报告,生成最终结果
        """
        task = state["task"]
        summaries = state["supervisor_summaries"]
        
        prompt = f"""
        你是主控智能体。请综合以下各管理者的汇报,生成最终结果:
        
        原始任务:{task}
        
        任务管理报告:{summaries.get('task_supervisor', '')}
        资源管理报告:{summaries.get('resource_supervisor', '')}
        质量管理报告:{summaries.get('quality_supervisor', '')}
        
        请输出最终的综合报告。
        """
        
        response = master_llm.invoke([HumanMessage(content=prompt)])
        
        return {**state, "final_result": response.content}
    
    # ===== 构建状态图 =====
    workflow = StateGraph(HierarchicalState)
    
    # 添加节点
    workflow.add_node("master", master_node)  # 主控层
    workflow.add_node("task_supervisor", create_supervisor_node("task_supervisor"))
    workflow.add_node("resource_supervisor", create_supervisor_node("resource_supervisor"))
    workflow.add_node("quality_supervisor", create_supervisor_node("quality_supervisor"))
    workflow.add_node("aggregation", aggregation_node)  # 聚合层
    
    # 设置入口点
    workflow.set_entry_point("master")
    
    # 定义层次化执行流程(串行展示,实际可并行优化)
    workflow.add_edge("master", "task_supervisor")
    workflow.add_edge("task_supervisor", "resource_supervisor")
    workflow.add_edge("resource_supervisor", "quality_supervisor")
    workflow.add_edge("quality_supervisor", "aggregation")
    workflow.add_edge("aggregation", END)
    
    return workflow.compile()

# 使用示例
def run_hierarchical_agent(task: str):
    agent = create_hierarchical_agent()
    
    result = agent.invoke({
        "task": task,
        "subtasks": {},
        "worker_results": {},
        "supervisor_summaries": {},
        "final_result": None
    })
    
    return result["final_result"]

Reflection 模式

反思循环

graph LR
    subgraph "Reflection 反思循环"
        A[Action<br/>执行行动]
        R[Reflect<br/>反思评估]
        I[Improve<br/>改进策略]
        P[Plan<br/>重新规划]
        
        A --> R
        R --> I
        I --> P
        P --> A
    end
    
    subgraph "反思维度"
        E[效果评估]
        M[方法分析]
        G[目标对齐]
        L[经验学习]
    end
    
    R -.-> E
    R -.-> M
    R -.-> G
    R -.-> L

实现示例(LangGraph)

from typing import TypedDict, List, Literal, Optional
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
import json

# 定义状态类型
class ReflectionState(TypedDict):
    """Reflection反思模式智能体状态定义"""
    task: str                       # 原始任务
    current_solution: Optional[str] # 当前解决方案
    reflection: Optional[dict]      # 反思评估结果
    improvements: List[str]         # 改进建议列表
    iteration: int                  # 当前迭代次数
    max_iterations: int             # 最大迭代次数
    final_result: Optional[str]     # 最终结果
    quality_score: float            # 质量评分(0-10)

def create_reflection_agent(max_iterations: int = 3, quality_threshold: float = 8.0):
    """
    创建Reflection反思模式智能体
    
    该模式通过持续的自我反思和改进来优化输出质量:
    1. Action: 执行任务或应用改进
    2. Reflect: 评估当前方案的质量
    3. Improve: 制定改进策略
    4. Plan: 决定是否继续迭代
    
    Args:
        max_iterations: 最大反思迭代次数
        quality_threshold: 质量阈值,达到后停止迭代
    
    Returns:
        编译后的LangGraph工作流
    """
    
    # Actor负责执行,Reflector负责评估
    actor_llm = ChatOpenAI(model="gpt-4", temperature=0.7)    # 较高创造性
    reflector_llm = ChatOpenAI(model="gpt-4", temperature=0)  # 精确评估
    
    def action_node(state: ReflectionState) -> ReflectionState:
        """
        行动阶段 (Action)
        
        执行任务或根据改进建议优化现有方案
        """
        task = state["task"]
        improvements = state["improvements"]
        current = state.get("current_solution", "")
        
        if current and improvements:
            # 应用改进建议
            prompt = f"""
            请根据以下改进建议,优化现有解决方案:
            
            原始任务:{task}
            当前方案:{current}
            改进建议:{chr(10).join(improvements)}
            
            请输出改进后的完整方案。
            """
        else:
            # 首次执行
            prompt = f"""
            请完成以下任务:
            
            {task}
            
            请输出完整的解决方案。
            """
        
        response = actor_llm.invoke([HumanMessage(content=prompt)])
        
        return {**state, "current_solution": response.content}
    
    def reflect_node(state: ReflectionState) -> ReflectionState:
        """
        反思阶段 (Reflect)
        
        从多个维度评估当前方案:
        - 效果评估 (effectiveness)
        - 方法分析 (methodology)
        - 目标对齐 (goal_alignment)
        """
        task = state["task"]
        solution = state["current_solution"]
        
        prompt = f"""
        你是一个严格的质量评估专家。请对以下解决方案进行全面反思评估:
        
        原始任务:{task}
        当前方案:{solution}
        
        请从以下维度进行评估,输出JSON格式:
        {{
            "effectiveness": {{
                "score": 8,
                "analysis": "效果评估分析"
            }},
            "methodology": {{
                "score": 7,
                "analysis": "方法分析"
            }},
            "goal_alignment": {{
                "score": 9,
                "analysis": "目标对齐度分析"
            }},
            "overall_score": 8,
            "strengths": ["优点1", "优点2"],
            "weaknesses": ["不足1", "不足2"]
        }}
        """
        
        response = reflector_llm.invoke([HumanMessage(content=prompt)])
        reflection = json.loads(response.content)
        
        return {
            **state,
            "reflection": reflection,
            "quality_score": reflection.get("overall_score", 0)
        }
    
    def improve_node(state: ReflectionState) -> ReflectionState:
        """
        改进阶段 (Improve)
        
        根据反思结果制定具体的改进策略
        """
        reflection = state["reflection"]
        
        prompt = f"""
        基于以下反思评估,制定具体的改进策略:
        
        评估结果:{json.dumps(reflection, ensure_ascii=False)}
        
        请列出3-5条具体可执行的改进建议:
        """
        
        response = reflector_llm.invoke([HumanMessage(content=prompt)])
        
        # 解析改进建议(提取数字开头的行)
        improvements = [line.strip() for line in response.content.split('\n') 
                       if line.strip() and line.strip()[0].isdigit()]
        
        return {**state, "improvements": improvements}
    
    def plan_node(state: ReflectionState) -> ReflectionState:
        """
        规划阶段 (Plan)
        
        更新迭代计数,为下一轮做准备
        """
        return {**state, "iteration": state["iteration"] + 1}
    
    def finalize_node(state: ReflectionState) -> ReflectionState:
        """最终输出"""
        return {**state, "final_result": state["current_solution"]}
    
    def should_continue(state: ReflectionState) -> Literal["action", "finalize"]:
        """
        路由函数:决定是否继续迭代
        
        停止条件:
        1. 质量评分达到阈值
        2. 达到最大迭代次数
        """
        if state["quality_score"] >= quality_threshold:
            return "finalize"
        
        if state["iteration"] >= state["max_iterations"]:
            return "finalize"
        
        return "action"
    
    # ===== 构建状态图 =====
    workflow = StateGraph(ReflectionState)
    
    # 添加节点 (A-R-I-P 循环)
    workflow.add_node("action", action_node)      # A - 行动
    workflow.add_node("reflect", reflect_node)    # R - 反思
    workflow.add_node("improve", improve_node)    # I - 改进
    workflow.add_node("plan", plan_node)          # P - 规划
    workflow.add_node("finalize", finalize_node)  # 最终输出
    
    # 设置入口点
    workflow.set_entry_point("action")
    
    # 定义反思循环: A -> R -> I -> P
    workflow.add_edge("action", "reflect")
    workflow.add_edge("reflect", "improve")
    workflow.add_edge("improve", "plan")
    
    # 条件边:继续循环或结束
    workflow.add_conditional_edges(
        "plan",
        should_continue,
        {"action": "action", "finalize": "finalize"}
    )
    workflow.add_edge("finalize", END)
    
    return workflow.compile()

# 使用示例
def run_reflection_agent(task: str):
    agent = create_reflection_agent(max_iterations=3, quality_threshold=8.0)
    
    result = agent.invoke({
        "task": task,
        "current_solution": None,
        "reflection": None,
        "improvements": [],
        "iteration": 0,
        "max_iterations": 3,
        "final_result": None,
        "quality_score": 0.0
    })
    
    print(f"迭代次数: {result['iteration']}")
    print(f"质量得分: {result['quality_score']}")
    
    return result["final_result"]

模式对比与选择

核心特征对比

设计模式 复杂度 学习能力 适应性 可解释性 执行效率 最佳场景
ReAct ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 动态交互任务
Plan-Execute ⭐⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ 复杂结构化任务
Ralph Loop ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ 长期学习任务
Chain-of-Thought ⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ 推理密集任务
Multi-Agent ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ 协作复杂任务
Hierarchical ⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐ 大规模任务
Reflection ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ 质量优化任务

选择决策树

flowchart TD
    Start[任务分析] --> Simple{任务复杂度}
    
    Simple -->|简单| Interactive{需要交互?}
    Simple -->|复杂| Structured{结构化程度}
    
    Interactive -->|是| ReAct[ReAct模式]
    Interactive -->|否| CoT[Chain-of-Thought模式]
    
    Structured -->|高| Parallel{可并行执行?}
    Structured -->|低| Learning{需要学习?}
    
    Parallel -->|是| PlanExec[Plan-and-Execute模式]
    Parallel -->|否| Multi[Multi-Agent模式]
    
    Learning -->|是| Ralph[Ralph Loop模式]
    Learning -->|否| Hierarchical[Hierarchical模式]
    
    style ReAct fill:#e3f2fd
    style CoT fill:#f3e5f5
    style PlanExec fill:#e8f5e8
    style Multi fill:#fff3e0
    style Ralph fill:#fce4ec
    style Hierarchical fill:#e0f2f1

实际应用案例

案例1: 智能客服系统

[!example] 场景描述 构建一个能够处理复杂客户咨询的智能客服系统

采用模式: Multi-Agent + ReAct

graph TB
    subgraph "智能客服系统架构"
        Router[路由智能体<br/>ReAct模式]
        
        subgraph "专业服务智能体"
            Tech[技术支持<br/>Plan-Execute]
            Sales[销售咨询<br/>ReAct]
            Service[售后服务<br/>Ralph Loop]
        end
        
        subgraph "支持系统"
            KB[(知识库)]
            CRM[(客户系统)]
            Ticket[(工单系统)]
        end
    end
    
    Customer[客户] --> Router
    Router --> Tech
    Router --> Sales
    Router --> Service
    
    Tech <--> KB
    Sales <--> CRM
    Service <--> Ticket

案例2: 自动化研究助手

[!example] 场景描述 协助研究人员进行文献调研和假设验证

采用模式: Ralph Loop + Chain-of-Thought

graph LR
    subgraph "研究助手工作流"
        Q[研究问题] --> L[文献检索<br/>ReAct]
        L --> A[文献分析<br/>CoT]
        A --> H[假设生成<br/>Ralph]
        H --> V[假设验证<br/>Plan-Execute]
        V --> R[报告生成<br/>Multi-Agent]
    end

案例3: 智能代码审查

[!example] 场景描述 自动化代码质量检查和改进建议

采用模式: Hierarchical + Reflection

graph TD
    subgraph "代码审查系统"
        Master[主审查智能体]
        
        subgraph "专项检查"
            Syntax[语法检查]
            Logic[逻辑分析]
            Performance[性能评估]
            Security[安全审计]
        end
        
        subgraph "反思优化"
            Reflect[反思评估]
            Improve[改进建议]
        end
    end
    
    Code[代码输入] --> Master
    Master --> Syntax
    Master --> Logic
    Master --> Performance
    Master --> Security
    
    Syntax --> Reflect
    Logic --> Reflect
    Performance --> Reflect
    Security --> Reflect
    
    Reflect --> Improve
    Improve --> Report[审查报告]

未来发展趋势

技术发展方向

mindmap
  root((智能体发展趋势))
    模式融合
      自适应模式切换
      混合架构设计
      动态组合优化
    能力增强
      多模态感知
      跨域知识迁移
      元学习能力
    协作进化
      大规模协作
      去中心化架构
      集群智能
    安全可控
      可解释AI
      对齐机制
      安全防护
    应用拓展
      垂直领域深化
      边缘计算部署
      实时交互优化

关键技术突破

[!note] 自适应模式选择

  • 基于任务特征的自动模式匹配
  • 运行时动态模式切换
  • 多模式融合优化

[!note] 增强学习机制

  • 少样本快速学习
  • 持续学习防遗忘
  • 跨任务知识迁移

[!note] 大规模协作

  • 千级智能体协调
  • 分布式决策机制
  • 容错与自恢复

[!note] 安全与对齐

  • 价值对齐保证
  • 行为可预测性
  • 恶意行为检测

应用前景展望

timeline
    title 智能体应用发展时间线
    
    2024 : 基础模式成熟
         : ReAct广泛应用
         : Plan-Execute商业化
    
    2025 : 协作模式突破
         : Multi-Agent平台化
         : 垂直领域深化
    
    2026 : 学习能力跃升
         : Ralph Loop产业化
         : 自适应系统普及
    
    2027 : 大规模部署
         : 千级智能体协作
         : 边缘智能普及
    
    2028+ : 通用智能体
          : 跨域自主学习
          : 人机深度协作

总结

[!summary] 核心要点 智能体设计模式的发展经历了从简单到复杂、从单一到协作、从固定到自适应的演进过程。每种模式都有其独特的设计理念和适用场景:

  • ReAct模式:简单高效,适合动态交互场景
  • Plan-and-Execute模式:结构化强,适合复杂任务规划
  • Ralph Loop模式:学习能力强,适合长期优化任务
  • 扩展模式:各有特色,满足特定需求

选择合适的设计模式需要综合考虑任务复杂度、交互需求、学习要求、性能约束等多个因素。随着技术的不断发展,我们可以期待看到更多创新的设计模式和更强大的智能体系统。

未来的智能体将更加智能、自主和协作,能够在更广泛的领域为人类提供有价值的服务。理解和掌握这些设计模式,将为构建下一代AI应用奠定坚实的基础。


参考资料

  1. Yao, S., et al. (2022). “ReAct: Synergizing Reasoning and Acting in Language Models”
  2. Wang, L., et al. (2023). “Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning”
  3. Wei, J., et al. (2022). “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models”
  4. LangChain Documentation - Agent Architectures
  5. AutoGPT Project - Autonomous Agent Design Patterns
  6. OpenAI. (2023). “GPT-4 Technical Report”
  7. Anthropic. (2023). “Constitutional AI: Harmlessness from AI Feedback”

「真诚赞赏,手留余香」

爱折腾的工程师

真诚赞赏,手留余香

使用微信扫描二维码完成支付