1. 项目概述:为什么我们需要一份“智能体模式”的精选清单?

在人工智能,特别是大语言模型驱动的智能体开发领域,我们正处在一个“模式爆炸”的时代。每天都有新的论文、开源项目和博客文章涌现,它们都在探讨如何让AI智能体更可靠、更高效地完成任务。然而,信息过载带来的一个直接问题是:面对海量的“模式”、“架构”和“技巧”,开发者,尤其是刚入门的从业者,很容易感到无所适从。哪些模式是经过实践检验的?哪些只是昙花一现的概念?如何将这些模式组合起来解决我的具体问题?这正是 nibzard/awesome-agentic-patterns 这个项目试图回答的核心问题。

简单来说,这是一个精心策划的、社区驱动的资源集合,专注于收集、分类和解释那些在构建AI智能体时反复出现且被证明有效的设计模式。它不是一个代码库,而是一个“知识库”或“模式目录”。对于任何正在或计划使用大语言模型构建具备自主推理、规划和执行能力的应用(比如自动化客服、代码生成助手、数据分析代理、游戏NPC等)的开发者而言,这份清单就像一份“烹饪大全”,告诉你有哪些成熟的“菜式”(模式),以及每种“菜式”需要什么“食材”(组件)和“火候”(配置)。

我自己在构建智能体系统的过程中,就曾花费大量时间在论文、GitHub和各类技术论坛间跳转,试图拼凑出一个可行的架构。 awesome-agentic-patterns 的价值在于,它将这些分散的智慧集中起来,提供了一个结构化的入口。无论你是想快速了解ReAct(推理+行动)框架,还是想深入研究更复杂的多智能体协作模式如CrewAI或AutoGen的架构,这个项目都能为你提供一个清晰的路径图和高质量的参考资料。它解决的不是“从零到一”写代码的问题,而是“从模糊到清晰”的设计思路问题。

2. 核心模式分类与深度解析

一份优秀的模式清单,其核心价值在于分类的清晰度和解释的深度。 awesome-agentic-patterns 通常会按照智能体能力的复杂度和应用场景的维度进行分层。我们可以将其核心内容解构为以下几个关键层级。

2.1 基础单智能体模式:智能的原子单元

这是所有复杂架构的基石,关注单个智能体内部的工作循环。理解这些模式,是理解更高级协作的前提。

1. ReAct (Reasoning + Acting) 这是当前最主流、最基础的单智能体模式。其核心思想是让智能体模仿人类的思考过程:先思考(Reason),再行动(Act),根据行动结果观察(Observe),然后继续思考,形成一个 Thought -> Act -> Observation 的循环。

  • 原理 :大语言模型在生成最终答案前,先生成一段“内心独白”(Thought),阐述其推理过程和下一步计划。例如:“用户想了解天气。我需要调用天气API。我应该先询问用户的城市。” 然后,它再执行一个具体的动作(Act),比如调用一个工具(Tool)来查询天气。
  • 实操要点 :实现ReAct的关键在于 提示工程(Prompt Engineering) 。你需要设计清晰的系统提示(System Prompt),明确告诉模型输出格式,例如:“请严格按照以下格式响应:Thought: [你的推理过程] Action: [调用的工具名] Action Input: [工具的输入参数]”。同时,需要构建一个可靠的 工具调用(Tool Calling) 层,能够解析模型的输出,执行对应工具,并将结果(Observation)塞回给模型进行下一轮思考。
  • 注意事项 :ReAct模式对提示词非常敏感。模糊的指令会导致模型在“Thought”阶段就偏离轨道。此外,需要小心处理工具的输入输出格式,不匹配会导致循环中断。一个常见的技巧是,在系统提示中提供几个详细的示例(Few-shot Examples),能极大提升模式的稳定性。

2. Plan-and-Execute (规划与执行) 这个模式将任务分解为两个阶段:规划阶段和执行阶段。智能体先制定一个详细的、分步骤的计划,然后逐步执行该计划,通常不再进行复杂的中途调整。

  • 原理 :与ReAct的“边想边做”不同,Plan-and-Execute是“先想好再做”。它适用于目标明确、步骤清晰、依赖关系固定的任务,比如“写一份项目计划书”、“按照菜谱做菜”。
  • 应用场景 :代码生成(先规划模块结构,再逐个实现)、内容创作大纲生成、复杂数据处理流程编排。
  • 心得 :这个模式的优点是执行路径清晰,可控性强。缺点是缺乏灵活性,一旦规划有误或执行中遇到未预料的情况(如工具失败),智能体可能无法有效应对。通常,可以结合ReAct,在“执行”每个子步骤时,允许智能体进行简单的本地推理。

3. Reflexion (自我反思与修正) 这是一个让智能体具备“学习”和“改进”能力的进阶模式。智能体在完成任务后,会对自己的行动过程和结果进行批判性评估,生成“反思”,并将这些反思存入长期记忆,用于指导未来的相似任务。

  • 原理 :在标准ReAct循环结束后,增加一个“反思”步骤。模型会分析:我哪里做得好?哪里出错了?根本原因是什么?下次应该如何避免?例如,一个代码生成智能体在运行代码出错后,会反思错误信息,并总结出“在调用API前必须检查输入参数是否为空”的经验。
  • 实操要点 :实现Reflexion需要维护一个 向量数据库 或类似的记忆存储,用于保存反思文本。当下次遇到类似任务时,可以通过语义检索将这些“经验教训”作为上下文提供给模型,从而提升其表现。
  • 避坑指南 :反思的质量至关重要。质量不高的反思(如过于笼统或错误)会污染记忆,导致性能下降。通常需要设计一个“反思评估”环节,或者只保留那些在后续任务中被验证有效的反思。

2.2 多智能体协作模式:从独奏到交响乐

当单个智能体能力有限或任务需要多领域 expertise 时,就需要引入多智能体系统。这里的核心是智能体间的通信与协调机制。

1. 分层协作(Manager-Worker) 这是最直观的多智能体架构。一个“经理(Manager)”智能体负责接收用户请求、分解任务、并将子任务分配给不同的“工人(Worker)”智能体,最后汇总结果。

  • 架构解析 :Manager 通常具备较强的任务分解和规划能力。Worker 则是领域专家,如“代码专家”、“文档撰写专家”、“数据分析专家”。它们之间通过预定义的消息通道(如队列、发布订阅)进行通信。
  • 工具选型考量 :开源框架如 CrewAI AutoGen 都内置了对此模式的良好支持。选择时需考虑:是否需要智能体间复杂的对话协商(AutoGen更强),还是更倾向于清晰的任务流水线(CrewAI的编排更直观)?框架对工具调用的封装程度如何?社区生态是否活跃?
  • 常见问题 :最大的挑战是“经理”的规划能力。如果任务分解不合理,整个系统效率会很低。另一个问题是智能体间的通信开销,频繁的上下文传递会消耗大量Token,增加成本和延迟。

2. 平等辩论与共识(Debate & Consensus) 在此模式中,多个智能体(通常持不同初始观点或专长)就一个问题进行辩论,通过多轮对话逐步收敛到一个共识或更优解决方案。

  • 原理 :模拟学术讨论或董事会决策。例如,为一个新功能设计技术方案,可以创建“架构师”、“后端开发”、“前端开发”、“安全专家”四个智能体进行辩论。每个智能体从自己的视角提出方案和质疑,最终综合出一个全面、稳健的方案。
  • 实现细节 :需要设计辩论规则,如发言顺序、回合数、共识达成条件(例如,当所有智能体对某个方案不再提出实质性反对意见)。系统提示需要为每个智能体赋予鲜明的“角色”和“目标”。
  • 经验分享 :这个模式非常消耗Token和计算资源,且辩论容易陷入循环或僵局。实践中,通常需要一个“主持人”智能体来引导流程、总结阶段性共识,并在适当时机终止辩论。它不适合需要快速响应的场景,但非常适合需要深度思考、规避盲点的决策类任务。

3. 竞标与拍卖(Bidding & Auction) 适用于动态任务分配场景。当一个新任务出现时,多个智能体根据自身能力、当前负载和“兴趣”进行“竞标”,由协调者选择最合适的智能体来执行。

  • 应用场景 :在一个拥有众多异构智能体的开放环境中,例如,一个虚拟公司里有“翻译机器人”、“绘图机器人”、“总结机器人”。用户丢进来一个混合任务(“翻译并总结这篇外文文章,并配一张图”),协调者将任务拆解后,各个机器人对子任务进行竞标。
  • 技术要点 :核心是设计一个合理的“投标函数”。这个函数通常基于智能体对该任务成功率的自我评估、预计耗时、当前资源利用率等。协调者根据投标结果(不一定是价高者得,可能是综合评分最高者得)进行分配。
  • 注意事项 :竞标机制的设计非常复杂,设计不当可能导致负载不均衡(强者恒强)或某些智能体“饿死”。通常需要引入一些随机性或公平性机制。

2.3 支持性模式与高级技巧

这些模式不直接定义智能体的工作流,而是为其提供增强能力,如同游戏的“装备”和“技能”。

1. 工具使用(Tool Use)模式 这不是一个具体的模式,而是一类模式的统称,关注如何让智能体更高效、更安全地使用外部工具(API、函数、数据库等)。

  • 动态工具描述 :与其在系统提示中硬编码所有工具描述,不如让智能体在运行时动态查询一个“工具注册表”来获取最新的工具列表和描述。这提高了系统的可扩展性。
  • 工具组合与链式调用 :教会智能体将多个工具组合起来使用。例如,先调用“搜索”工具获取信息,再调用“总结”工具提炼要点,最后调用“邮件”工具发送结果。这需要模型具备一定的流程推理能力。
  • 安全沙箱 :对于执行代码、访问敏感系统等高风险工具,必须在严格的沙箱环境中运行,并对输出进行过滤和检查,防止智能体执行恶意或破坏性操作。

2. 记忆与上下文管理 智能体的“记忆力”是其表现的关键。模式包括:

  • 短期/长期记忆 :短期记忆即对话上下文窗口。长期记忆则需要外部存储(向量数据库)。如何将重要的交互信息摘要化并存入长期记忆,并在需要时精准检索,是一个核心模式。
  • 摘要式记忆(Summary Memory) :当对话历史超过上下文窗口时,不是简单地丢弃最早的记录,而是让模型主动对过往对话生成一个摘要,并将摘要作为新的记忆起点。这能极大地扩展智能体的“回忆”范围。
  • 实体记忆 :专门记忆对话中出现的具体实体(如人名、项目名、参数值),并建立它们之间的关系图谱,便于后续精准引用。

3. 验证与自我纠正(Self-Correction) 让智能体具备初步的“质量控制”能力。

  • 输出格式验证 :在最终输出给用户前,用一个简单的规则引擎或另一个轻量级模型检查输出是否符合JSON、XML等预定格式要求。
  • 事实核查(Grounding) :对于智能体生成的陈述性内容(尤其是基于内部知识生成的),可以设计一个流程,让其引用来源(如检索到的文档片段),或对关键事实进行二次确认。
  • 代码执行验证 :对于生成的代码,一个强大的模式是“生成 -> 执行 -> 检查错误 -> 修复”的循环,直到代码通过所有测试用例。

3. 如何在实际项目中应用这些模式:一个实战工作流

了解了这么多模式,最终还是要落地到项目里。下面我以一个“智能数据分析报告生成代理”为例,拆解如何组合运用上述模式。

项目目标 :用户上传一个CSV数据文件,用自然语言提出分析需求(如“分析销售额趋势,找出异常月份,并给出可能原因”),智能体最终生成一份包含图表和文字解读的Markdown报告。

3.1 架构设计阶段:模式选型与组合

这是一个典型的多步骤、需要多种能力的任务。我决定采用 “分层协作(Manager-Worker)” 作为主架构,并在Worker内部使用 “ReAct” 模式。

  1. 角色定义

    • 经理(Manager) :1个。负责理解用户需求,制定分析计划。
    • 工人(Worker) :3个。
      • 数据探查员(Explorer) :负责加载数据、进行初步描述性统计、发现数据质量问题。
      • 分析师(Analyst) :负责执行具体的分析指令,如计算指标、制作图表。
      • 报告员(Reporter) :负责整合分析结果,撰写结构化的、易于理解的报告。
  2. 工作流设计

    用户输入 -> Manager -> 制定计划 -> 任务1 (Explorer) -> 任务2 (Analyst) -> 任务3 (Reporter) -> 汇总 -> 用户输出
    

    Manager将“分析销售额趋势,找出异常月份,并给出可能原因”这个需求,分解为:

    • 任务1(给Explorer):加载 sales_data.csv ,检查数据完整性,给出数据概览(行数、列名、时间范围、缺失值)。
    • 任务2(给Analyst):基于Explorer的结果,计算月度销售额,绘制趋势折线图,使用统计学方法(如IQR)识别异常月份。
    • 任务3(给Reporter):根据Analyst的图表和结论,撰写一份包含引言、方法、结果、讨论和结论的简短报告。

3.2 核心环节实现与工具封装

每个智能体都需要工具才能工作。我们使用LangChain的 @tool 装饰器或类似机制来封装工具。

为Explorer智能体封装工具

import pandas as pd
from langchain.tools import tool

@tool
def load_csv(file_path: str) -> str:
    """加载CSV文件并返回基本信息。"""
    try:
        df = pd.read_csv(file_path)
        info = f"数据加载成功。形状:{df.shape}。列名:{list(df.columns)}。前3行预览:\n{df.head(3).to_string()}"
        # 将DataFrame存入一个“工作区”供后续工具使用(简化示例,可用全局变量或缓存)
        global_workspace['dataframe'] = df
        return info
    except Exception as e:
        return f"加载文件失败:{e}"

@tool
def get_data_overview() -> str:
    """获取当前加载数据的概览统计。"""
    df = global_workspace.get('dataframe')
    if df is None:
        return "请先使用load_csv工具加载数据。"
    overview = df.describe(include='all').to_string()
    missing = df.isnull().sum().to_string()
    return f"描述性统计:\n{overview}\n\n缺失值统计:\n{missing}"

为Analyst智能体封装工具

@tool
def calculate_monthly_sales(date_column: str, sales_column: str) -> str:
    """计算月度销售额。返回一个包含‘年月’和‘销售额’的DataFrame的字符串表示。"""
    df = global_workspace.get('dataframe')
    # ... 实现日期处理和分组聚合逻辑 ...
    monthly_df = df.resample('M', on=date_column)[sales_column].sum().reset_index()
    global_workspace['monthly_sales'] = monthly_df
    return monthly_df.to_string()

@tool
def plot_trend(data_key: str, x: str, y: str, title: str):
    """绘制趋势图并保存为图片。返回图片文件路径。"""
    data = global_workspace.get(data_key)
    # ... 使用matplotlib或plotly绘图 ...
    file_path = "/tmp/trend_plot.png"
    plt.savefig(file_path)
    plt.close()
    global_workspace['latest_plot'] = file_path
    return f"图表已保存至:{file_path}"

Manager智能体的提示词设计 : Manager的提示词需要清晰地定义其角色、可用Worker以及任务分解的格式。

你是一个数据分析项目主管。你的目标是根据用户需求,协调三个专家完成一份数据分析报告。
可用的专家有:
1. 数据探查员(Explorer):擅长数据加载、清洗和初步概览。
2. 数据分析师(Analyst):擅长计算指标、统计分析和制作图表。
3. 报告撰写员(Reporter):擅长整合分析结果,撰写结构化报告。

用户的需求是:{user_input}

请将整个任务分解为一系列子任务,并指定执行每个子任务的专家。
请严格按照以下JSON格式输出你的计划:
{
  "plan": [
    {"step": 1, "assigned_to": "Explorer", "instruction": "给Explorer的详细指令..."},
    {"step": 2, "assigned_to": "Analyst", "instruction": "给Analyst的详细指令,可以引用上一步的结果..."},
    {"step": 3, "assigned_to": "Reporter", "instruction": "给Reporter的详细指令,整合前几步的图表和结论..."}
  ]
}

3.3 系统集成与流程编排

使用像 CrewAI 这样的框架,可以非常优雅地实现上述架构。在CrewAI中,你可以直接定义 Agent (角色、目标、工具、LLM配置)、 Task (描述、期望输出、指派给哪个Agent)和 Crew (将Agents和Tasks组织起来,并定义执行流程,如顺序执行或分层执行)。框架会自动处理Agent间的上下文传递和任务触发。

如果选择更底层的实现,你需要自己编写一个 编排引擎(Orchestrator) 。这个引擎的核心是一个循环:

  1. 解析Manager生成的计划JSON。
  2. 按顺序,将每个子任务的 instruction 和当前累积的上下文(前面步骤的结果)发送给对应的Worker智能体。
  3. Worker智能体以ReAct模式运行,调用工具完成任务。
  4. 将Worker的输出收集起来,附加到上下文中,继续下一步。
  5. 所有步骤完成后,将最终上下文交给Reporter生成最终报告。

4. 常见陷阱、调试心得与进阶思考

在实际构建过程中,你会遇到无数细节上的挑战。以下是我从多个项目中总结出的核心经验。

4.1 智能体失效的五大常见原因及排查表

问题现象 可能原因 排查步骤与解决方案
智能体陷入循环 1. ReAct提示词中 Thought Action 的格式定义不清晰,导致模型输出无法被正确解析。
2. 工具执行失败但返回的错误信息过于笼统,模型无法理解。
3. 任务本身无解或超出模型能力。
1. 检查解析器 :首先确认你的代码能稳定解析模型的输出。可以打印出模型的原始响应查看。
2. 增强错误处理 :工具返回的错误信息应尽可能结构化、可读,例如“错误:API调用失败,原因为‘参数缺失’,请检查 city 字段”。
3. 设置最大循环次数 :在ReAct循环外设置一个硬性上限(如10次),达到后自动终止并总结当前状态。
工具调用错误或无效 1. 工具的描述(description)不够准确,模型不理解工具的用途。
2. 模型的 Action Input 格式与工具函数参数不匹配。
3. 工具本身有bug或依赖服务不可用。
1. 优化工具描述 :用模型能理解的语言重写描述,包含清晰的目的、输入参数示例和输出示例。
2. 使用Pydantic :用Pydantic模型严格定义工具的参数结构,并让LLM基于此生成JSON。这比让LLM生成自由文本要稳定得多。
3. 为工具添加单元测试 :确保每个工具函数在独立调用时都能正常工作。
上下文混乱或丢失 1. 多轮对话中,历史消息管理不当,重要信息被截断。
2. 在多智能体系统中,上下文在传递过程中被错误地修改或过滤。
1. 实施摘要策略 :当对话轮数增加时,主动触发一个摘要智能体,将冗长的历史压缩成精炼的要点,作为新的系统消息一部分。
2. 明确上下文边界 :为每个任务或会话维护独立的上下文存储。在传递消息时,清晰地标明哪些是“任务背景”,哪些是“上一步结果”。
性能低下,响应慢 1. 过度复杂的ReAct循环导致调用LLM的次数过多。
2. 工具本身是慢速I/O操作(如网络请求、大查询)。
3. 上下文过长,导致每次LLM调用都处理大量Token。
1. 优化任务粒度 :检查Manager的分解是否过于琐碎。有时合并几个小步骤能减少循环次数。
2. 异步与超时 :对可并行的工具调用使用异步IO。为每个工具设置合理的超时时间。
3. 压缩上下文 :除了摘要,还可以有选择地只保留最近几轮对话和最关键的历史信息。
输出质量不稳定 1. 对同一输入,LLM的生成具有随机性。
2. 缺乏后处理或验证步骤。
1. 降低温度参数 :对于确定性要求高的任务(如工具调用、计划生成),将LLM的 temperature 参数设为0或接近0。
2. 引入自我验证 :对于关键输出(如最终报告),可以增加一个“评审员”智能体,让其检查报告的完整性、逻辑性和准确性,并提出修改意见。

4.2 从模式使用者到模式设计者

当你熟练运用现有模式后,你会开始思考如何设计自己的模式。这通常源于解决一个现有模式无法很好处理的特定问题。例如,你可能需要处理一个流式任务,其中用户的需求会随着对话逐步展开和变化。

你可以设计一个 “动态范围界定(Dynamic Scoping)” 模式:

  1. 初始阶段 :智能体以标准ReAct开始,尝试解决用户提出的初始问题。
  2. 范围探测 :在交互中,智能体主动识别用户话语中隐含的、未明说的需求或可能的相关问题。
  3. 协商与确认 :智能体生成一个简短的“范围澄清”问题,与用户确认是否需要扩大任务范围。例如:“您刚才提到了Q2的数据,是否需要我将Q1和Q3的趋势也一并分析,以便对比?”
  4. 计划调整 :根据用户的反馈,动态调整内部的任务计划树。

这个模式结合了ReAct的循环、工具使用以及一些简单的意图识别能力。设计新模式的关键在于 明确要解决的核心痛点 ,并清晰地定义智能体在不同状态下的 行为规则 状态转换条件

最终, awesome-agentic-patterns 这样的资源库的价值,不仅在于提供现成的解决方案,更在于它展示了构建智能体系统的“设计语言”和“构建块”。它让你明白,复杂的智能体行为并非魔法,而是由这些可理解、可组合、可调试的基本模式构建而成。掌握这些模式,就如同掌握了软件设计模式一样,能让你在构建AI应用时更加得心应手,从被动地调参试错,转向主动地架构设计。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐