AI 智能体设计模式:构建智能系统的实战指南
本项目是《Agentic Design Patterns》一书的完整中文翻译,由 Antonio Gulli 撰写。本书系统性地介绍了构建 AI Agent 系统的核心设计模式,从基础概念到高级架构,提供了构建可靠、高效、自主智能体的实战蓝图。
项目地址:github.com/xindoo/agen…
在线阅读:adp.xindoo.xyz/
✨ 功能特性
- 21个核心设计模式:覆盖从基础到高级的完整模式体系,包括提示词链、路由、并行化、反思、规划、多智能体协作等
- 7个附录深度扩展:高级提示技术、智能体框架对比、推理引擎剖析等实用内容
- 完整术语体系:统一的技术术语翻译标准,确保全书概念一致性
- 实战代码示例:各章节配套 LangChain、LangGraph、Google ADK、CrewAI 等框架的实践代码
- 多框架视角:涵盖主流 Agentic 框架(LangChain、LangGraph、CrewAI、Google ADK)的实现对比
- 高质量翻译:遵循严格的翻译规范和术语统一标准,确保技术准确性与中文表达流畅性
📚 内容概览
第一部分:核心模式(103页)
| 章节 | 模式 | 说明 |
|---|---|---|
| 第1章 | 提示词链 | 将复杂任务分解为线性子任务序列 |
| 第2章 | 路由 | 基于条件逻辑动态选择执行路径 |
| 第3章 | 并行化 | 并发执行独立子任务提升效率 |
| 第4章 | 反思 | 自我评估与迭代优化输出质量 |
| 第5章 | 工具使用 | 调用外部 API、数据库与代码执行 |
| 第6章 | 规划 | 制定多步骤行动计划 |
| 第7章 | 多智能体协作 | 专业化智能体协同工作 |
第二部分:认知机制(61页)
- 第8章 记忆管理:短期/长期记忆、向量数据库与语义检索
- 第9章 学习与适应:强化学习、RLHF、DPO 等自适应机制
- 第10章 模型上下文协议(MCP):LLM 与外部资源的标准化接口
- 第11章 目标设定与监控:目标驱动行为与进度追踪
第三部分:容错与扩展(34页)
- 第12章 异常处理与恢复:重试、回退与优雅降级机制
- 第13章 人机协同:人类监督、反馈与决策增强
- 第14章 知识检索(RAG):嵌入、向量搜索与检索增强生成
第四部分:高级架构(114页)
- 第15章 智能体间通信(A2A):开放标准的跨框架协作协议
- 第16章 资源感知优化:成本、延迟与计算资源的动态权衡
- 第17章 推理技术:思维链、思维树、ReAct 等推理框架
- 第18章 安全模式:输入验证、输出过滤与护栏机制
- 第19章 评估与监控:性能指标、A/B 测试与漂移检测
- 第20章 优先级排序:多目标任务的重要性评估
- 第21章 探索与发现:主动信息寻求与假设生成
附录(74页)
- 附录 A:高级提示技术
- 附录 B:AI 智能体交互——从 GUI 到真实环境
- 附录 C:Agentic 框架快速概览
- 附录 D:使用 AgentSpace 构建智能体
- 附录 E:命令行中的 AI 智能体
- 附录 F:智能体推理引擎内部机制
- 附录 G:编程智能体
🔧 安装与使用
环境要求
- Ruby 2.7+ 和 Bundler(用于 Jekyll 站点构建)
- Node.js(用于 Markdown 检查工具,可选)
依赖安装
# 安装 Ruby 依赖
bundle install
# 安装 Node.js 代码检查工具(可选)
npm install -g markdownlint-cli markdown-link-check
本地构建与运行
# 构建静态站点
bundle exec jekyll build
# 本地启动服务(支持热重载)
bundle exec jekyll serve --livereload
# 生产环境构建
JEKYLL_ENV=production bundle exec jekyll build
质量检查命令
# 检查所有章节的 Markdown 格式
npx markdownlint-cli chapters/
# 检查指定章节的链接有效性
npx markdown-link-check chapters/Chapter\ 1_\ Prompt\ Chaining.md
# 验证 Jekyll 配置
bundle exec jekyll doctor
💻 使用说明
在线阅读
项目已部署为 GitHub Pages 静态站点,可直接访问:adp.xindoo.xyz/
本地阅读
- 克隆仓库后运行本地服务器
- 访问
http://localhost:4000浏览全部章节 - 支持中英文双语对照阅读
代码示例使用
各章节配套代码示例位于 Google Colab 或 Google Drive 链接中,可直接在线运行:
# 示例:LangChain 中的提示词链
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# 第一步:生成大纲
outline_prompt = PromptTemplate(
input_variables=["topic"],
template="为以下主题生成文章大纲:{topic}"
)
outline_chain = LLMChain(llm=llm, prompt=outline_prompt)
# 第二步:基于大纲撰写文章
article_prompt = PromptTemplate(
input_variables=["outline"],
template="基于以下大纲撰写完整文章:\n{outline}"
)
article_chain = LLMChain(llm=llm, prompt=article_prompt)
# 链式调用
outline = outline_chain.run("AI Agent 设计模式")
article = article_chain.run(outline)
🧠 核心代码示例
1. 反思模式(生成器-评审者)
# 反思模式的生成-评审双智能体架构
# 来源:第4章 - 反思模式代码示例
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(temperature=0.7)
# 生成器:输出初始草稿
generator_prompt = ChatPromptTemplate.from_messages([
("system", "你是一位专业的AI内容写手。请撰写关于{subject}的{content_type}。"),
("human", "撰写一篇专业的{content_type}。")
])
# 评审者:批判性评估输出
reflector_prompt = ChatPromptTemplate.from_messages([
("system", """你是一位高级编辑,擅长提供建设性反馈。
请评估以下内容,考虑:准确性、清晰度、完整性、风格。
指出具体问题并提供改进建议。
输出格式:问题列表 -> 改进建议"""),
("human", "请评审以下内容:\n\n{content}")
])
generator_chain = generator_prompt | llm
reflector_chain = reflector_prompt | llm
# 迭代优化过程
def generate_with_reflection(subject, content_type, iterations=2):
content = generator_chain.invoke({
"subject": subject,
"content_type": content_type
}).content
for i in range(iterations):
feedback = reflector_chain.invoke({"content": content}).content
content = generator_chain.invoke({
"subject": subject,
"content_type": content_type,
"feedback": feedback
}).content
return content
2. 多智能体协作(CrewAI)
# 多智能体协作模式示例
# 来源:第7章 - 多智能体协作代码示例
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4-turbo")
# 定义专业化智能体
researcher = Agent(
role='研究员',
goal='查找并总结相关技术信息',
backstory='精通信息检索与技术文献分析',
llm=llm,
allow_delegation=False
)
writer = Agent(
role='技术作家',
goal='基于研究内容撰写清晰的技术文章',
backstory='擅长将复杂技术概念转化为易懂内容',
llm=llm,
allow_delegation=False
)
editor = Agent(
role='编辑',
goal='审核并完善文章质量',
backstory='拥有敏锐的技术内容眼光',
llm=llm,
allow_delegation=False
)
# 定义任务
research_task = Task(
description="研究并总结主题:{topic} 的核心概念",
expected_output="结构化的研究发现摘要",
agent=researcher
)
writing_task = Task(
description="基于研究发现撰写技术文章",
expected_output="完整的 Markdown 格式文章",
agent=writer
)
editing_task = Task(
description="审核文章,检查技术准确性和语言流畅度",
expected_output="优化后的最终文章",
agent=editor
)
# 组建协作流程
crew = Crew(
agents=[researcher, writer, editor],
tasks=[research_task, writing_task, editing_task],
process=Process.sequential,
verbose=True
)
result = crew.kickoff(inputs={"topic": "RAG检索增强生成"})
3. 工具使用模式(函数调用)
# 工具使用/函数调用模式
# 来源:第5章 - 工具使用模式
from langchain.tools import tool
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_openai import ChatOpenAI
# 定义工具
@tool
def get_weather(location: str) -> str:
"""获取指定位置的当前天气信息"""
# 实际实现中调用天气 API
return f"{location} 的天气:晴朗,25°C"
@tool
def calculate(expression: str) -> str:
"""计算数学表达式结果"""
try:
result = eval(expression)
return f"计算结果:{result}"
except Exception as e:
return f"计算错误:{str(e)}"
@tool
def search_database(query: str) -> str:
"""搜索内部知识库"""
# 实际实现中查询向量数据库
return f"关于 '{query}' 的搜索结果:..."
# 配置智能体
tools = [get_weather, calculate, search_database]
llm = ChatOpenAI(model="gpt-4-turbo", temperature=0)
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 智能体自动决定调用哪个工具
response = agent_executor.invoke({
"input": "上海天气怎么样?然后计算 125*32 的结果"
})
4. 知识检索(RAG)核心流程
# RAG 检索增强生成核心实现
# 来源:第14章 - 知识检索模式
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
# 1. 文档处理与分块
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["\n\n", "\n", " ", ""]
)
chunks = text_splitter.split_documents(documents)
# 2. 嵌入与向量存储
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)
# 3. 检索器配置
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 4}
)
# 4. RAG 问答链
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4-turbo"),
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
# 5. 执行查询
result = qa_chain.invoke({"query": "用户的问题"})
print(f"答案:{result['result']}")
print(f"来源:{result['source_documents']}")
📖 翻译规范
本项目采用严格的翻译标准,确保技术准确性与阅读流畅性:
核心原则
- 准确性优先:完整保留所有技术含义,不遗漏、不曲解
- 术语一致性:所有专业术语参考
glossary.md统一译法 - 自然流畅:使用符合中文表达习惯的句式
章节固定标题译法
| 原文 | 译文 |
|---|---|
| At a Glance | 速览 |
| What | 问题背景 |
| Why | 解决方案 |
| Rule of Thumb | 实践建议 |
本书所有版税将捐赠给救助儿童会 (Save the Children) G1AmrjT7e+s43sQmHzvA6psrNpj/WzXc3sU1oxNYZvFI6jPyFEH9TfWoOj0hTp31