ingFang SC";font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">人工智能领域正围绕“智能体(Agents)”这一概念蓬勃发展——这些自主的 AI 系统能够推理、规划,并与环境交互以实现目标。但如何构建高效且可靠的智能体呢?答案就在于智能体设计模式(agentic design patterns)。这些可复用的蓝图为构建复杂的 AI 智能体提供了框架。本文将详细介绍四种基本模式,并通过不同框架下的简单实现示例,助你入门。ingFang SC";font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">一、反思模式:促进自我提升ingFang SC";font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">反思模式的核心是让 AI 智能体能够批判并改进自己的工作。这种自我提升的迭代过程能带来更高质量、更准确的输出。想象一个负责撰写博客文章的 AI,借助反思模式,它会先生成初稿,然后由一个独立的“批评家”智能体从清晰度、连贯性和语气等方面进行审查。原始智能体再根据这些反馈修改初稿。ingFang SC";font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">(一)反思模式的工作原理ingFang SC";font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">反思模式的关键在于构建“生成-批判-修正”的闭环。以撰写文章为例,生成智能体先完成初稿,批评智能体从多个维度进行评估并给出具体建议,生成智能体依据建议进行修改,如此循环,直至达到理想效果。这种模式模拟了人类写作中反复修改的过程,通过内部的自我审视不断提升成果质量。ingFang SC";font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">在复杂任务中,反思模式能帮助智能体发现自身的不足。比如在进行数据分析报告撰写时,生成智能体可能会遗漏某些关键数据的分析,批评智能体可以指出这一问题,并建议补充相关内容,从而让报告更加全面、深入。ingFang SC";font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">(二)基于 LangGraph 的简单实现示例ingFang SC";font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">首先,创建生成器:from langchain_core.messages import AIMessage, BaseMessage, HumanMessage from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_fireworks import ChatFireworks
prompt = ChatPromptTemplate.from_messages( [ ( "system", "你是一名作文助手,负责撰写优秀的五段式作文。" "根据用户的要求生成最佳作文。" "如果用户提供批评意见,请根据之前的尝试生成修改版本。", ), MessagesPlaceholder(variable_name="messages"), ] ) llm = ChatOpenAI( model="gpt-4.1-mini-2025-04-14", temperature=0.7 ) generate = prompt | llm
ingFang SC";font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">反思部分:reflection_prompt = ChatPromptTemplate.from_messages( [ ( "system", "你是一名批改作文的老师。对用户提交的作文生成批评和建议。" "提供详细的建议,包括对长度、深度、风格等方面的要求。", ), MessagesPlaceholder(variable_name="messages"), ] ) reflect = reflection_prompt | llm
ingFang SC";font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">定义图:from typing import Annotated, List, Sequence from langgraph.graph import END, StateGraph, START from langgraph.graph.message import add_messages from langgraph.checkpoint.memory import MemorySaver from typing_extensions import TypedDict
class State(TypedDict): messages: Annotated[list, add_messages]
async def generation_node(state: State) -> State: return {"messages": [await generate.ainvoke(state["messages"])]}
async def reflection_node(state: State) -> State: # 需要调整的其他消息 cls_map = {"ai": HumanMessage, "human": AIMessage} # 第一条消息是原始用户请求。在所有节点中保持不变 translated = [state["messages"][0]] + [ cls_map[msg.type](content=msg.content) for msg in state["messages"][1:] ] res = await reflect.ainvoke(translated) # 我们将此输出视为生成器的人工反馈 return {"messages": [HumanMessage(content=res.content)]}
builder = StateGraph(State) builder.add_node("generate", generation_node) builder.add_node("reflect", reflection_node) builder.add_edge(START, "generate")
def should_continue(state: State): if len(state["messages"]) > 6: # 3次迭代后结束 return END return "reflect"
builder.add_conditional_edges("generate", should_continue) builder.add_edge("reflect", "generate")
memory = MemorySaver() graph = builder.compile(checkpointer=memory)
config = {"configurable": {"thread_id": "1"}}
async for event in graph.astream( { "messages": [ HumanMessage( content="生成一篇关于人工智能如何改变当今创意工作的文章?" ) ], }, config, ): print(event) print("---")
二、工具使用模式:拓展能力边界AI 智能体通过与外部工具和 API 交互,能够显著增强自身能力。这正是工具使用模式的核心。可以把它想象成给 AI 智能体一个工具箱。例如,智能体可以使用计算器进行数学运算,使用搜索引擎 API 获取实时信息,或者使用天气 API 获取最新预报。
(一)工具使用模式的优势与应用场景工具使用模式极大地拓展了 AI 智能体的应用范围。在处理需要实时数据的任务时,如查询某一地区的实时天气、了解最新的新闻动态等,智能体可以调用相应的 API 快速获取信息,而无需依赖自身有限的知识库。 在科学研究领域,AI 智能体可以利用数据分析工具处理大量实验数据,快速得出结论;在商业决策中,它可以借助市场调研工具收集市场信息,为企业提供决策支持。例如,当用户询问“某支股票过去一个月的走势如何”时,智能体可以调用股票数据 API,获取相关数据并进行分析后,给用户一个详细的答复。 (二)基于 Google ADK 的简单实现示例以下是一个智能体从其工具集中选择最佳工具来回答特定用户请求的示例。 from google.adk.agents import Agent from google.adk.tools import google_search, calculator
# 定义自定义工具 def get_weather(location: str) -> dict: """获取特定地点的当前天气信息。
参数: location: 需要获取天气的城市或地区
返回: 包含天气信息的字典 """ # 在实际实现中,这里会调用天气 API return {"temperature": "72°F", "condition": "晴", "humidity": "45%"}
# 创建一个使用工具的智能体 tool_agent = Agent( name="multi_tool_assistant", model="gemini-2.0-pro", instruction="""你是一个有多种工具可供使用的得力助手。 根据用户的请求使用适当的工具: - 对于事实性问题,使用搜索工具 - 对于计算问题,使用计算器 - 对于天气查询,使用天气工具 解释你使用的工具及原因。""", description="一个使用多种工具回答问题的助手", tools=[google_search, calculator, get_weather] )
三、规划模式:为复杂任务绘制路线图高效的 AI 智能体不仅能对环境做出反应,还能进行规划。规划模式指的是智能体制定一系列行动以实现特定目标。这既可以是简单的短期计划,也可以是复杂的、能适应不断变化环境的分层计划。规划使智能体能够未雨绸缪,预见挑战,并朝着长期目标努力,使其行为更具目的性和效率。 (一)规划模式的重要性在面对复杂任务时,规划模式能帮助 AI 智能体理清思路,明确步骤。例如,在进行一次长途旅行规划时,智能体需要考虑交通方式的选择、住宿的安排、景点的游览顺序等诸多因素。通过规划模式,它可以制定出详细的行程计划,确保旅行的顺利进行。 在项目管理中,AI 智能体可以运用规划模式,将一个大型项目分解为多个小任务,明确每个任务的时间节点和负责人,从而提高项目的执行效率。 (二)基于 CrewAI 的简单实现示例以下是一个智能体规划前往目的地的路线,同时考虑中间步骤的示例。 import os from crewai import Agent, Task, Crew, Process from crewai.llms import ChatOpenAI
# 设置 API 密钥 os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY_HERE"
# 定义要使用的特定 LLM llm = ChatOpenAI(model_name="gpt-4.1-mini-2025-04-14", temperature=0.7)
# 定义智能体 规划者 = Agent( role='旅行规划师', goal='制定从起点到目的地的详细、分步旅行计划。', backstory="""你是一位细致的旅行规划师。擅长将旅程分解为一系列清晰、易于管理的步骤。你会考虑旅行的各个方面,包括步行、公共交通和自驾。""", verbose=True, allow_delegation=False )
执行者 = Agent( role='旅行路线执行者', goal='一步一步地遵循给定的旅行计划。', backstory="""你是一位勤奋且严谨的旅行助手。你的工作是按照预先制定的计划,在执行每个步骤前进行宣布,确保严格按照计划行进。""", verbose=True, allow_delegation=False, )
# 定义任务 # 任务 1:规划任务 # 规划者智能体将承担此任务并制定计划。 规划任务 = Task( description='制定一个从“家”到“公司”办公室的简单旅行计划。该计划至少包含 3 个步骤,包括乘坐公交车。', expected_output='一个带编号或项目符号的步骤列表。', agent=规划者 )
# 任务 2:执行任务 # 执行者智能体将获取规划任务的输出并进行“执行”。 # 这里的 'context' 参数是关键,因为它将任务串联起来。 执行任务 = Task( description='执行提供的旅行计划。在继续之前清晰地宣布每个步骤。', expected_output='计划中每个步骤的确认信息。', agent=执行者, context=[规划任务] # 这告诉任务使用“规划任务”的结果作为输入。 )
# 创建团队 旅行团队 = Crew( agents=[规划者, 执行者], tasks=[规划任务, 执行任务], process=Process.sequential, # 任务将依次运行。 llm=llm )
# 开始团队工作 print("## 启动旅行规划团队...") 结果 = 旅行团队.kickoff() print("最终结果:") print(结果)
四、多智能体协作模式:团队合作的力量有些问题单靠一个 AI 智能体难以解决。多智能体协作模式指的是多个 AI 智能体协同工作,每个智能体都有自己的角色和职责,共同实现一个目标。这可能包括专门负责不同任务的智能体、共享信息的智能体以及协调行动的智能体。通过发挥各自的优势,协作的智能体能够应对单个智能体无法解决的挑战,从而构建更强大、更智能的系统。 (一)多智能体协作的优势多智能体协作可以实现优势互补。不同的智能体在不同的领域拥有专长,通过协作,它们可以整合各自的优势,完成复杂的任务。例如,在软件开发过程中,一个智能体负责编写代码,另一个智能体负责测试代码,还有一个智能体负责优化代码,三者协作能提高软件开发的效率和质量。 在客服领域,多个智能体可以分工合作,有的负责解答产品咨询,有的负责处理售后问题,有的负责收集客户反馈,从而为客户提供更全面、高效的服务。 (二)基于 AutoGen 的简单实现示例以下是两个智能体的示例:一个负责编写代码,另一个负责运行代码并提供反馈。 import autogen import os
# OpenAI 模型的配置 config_list = [ { "model": "gpt-4.1-2025-04-14", "api_key": os.environ.get("OPENAI_API_KEY"), } ]
# 1. 创建编码智能体 # 该智能体编写 Python 代码来解决任务。 编码者 = autogen.AssistantAgent( name="Coder", llm_config={"config_list": config_list} )
# 2. 创建执行智能体 # 该智能体作为用户的代理来执行代码并报告结果。 用户代理 = autogen.UserProxyAgent( name="Executor", human_input_mode="NEVER", # 完全自动化协作 code_execution_config={ "work_dir": "coding_output", # 用于保存和运行代码的目录 "use_docker": False, # 为安全起见,如果你安装了 Docker,可以设置为 True }, )
# 3. 开始聊天 # 执行智能体启动与编码智能体的对话。 用户代理.initiate_chat( recipient=编码者, message="""编写一个打印斐波那契数列前 8 个数的 Python 脚本。""" )
这四种设计模式——反思模式、工具使用模式、规划模式和多智能体协作模式——是构建 AI 智能体的基础,它们不仅能让智能体变得聪明,还能使其具备适应性、高效性,并有能力应对现实世界的复杂问题。通过理解和应用这些模式,我们可以释放 AI 的全部潜力,创建真正智能的系统。在未来的 AI 发展中,这些模式将不断演进和完善,为更多领域带来革命性的变化。无论是在医疗、教育、金融还是工业等领域,基于这些设计模式构建的 AI 智能体都将发挥越来越重要的作用,推动社会的进步和发展。我们有理由相信,随着技术的不断进步,AI 智能体将能够处理更加复杂的任务,为人类创造更大的价值。 |