LangChain 单智能体与多智能体编排模式总结
1. 智能体架构概述
LangChain的智能体系统是一个强大的框架,允许语言模型(LLMs)通过工具与外部环境交互,从而完成复杂任务。
1.1 智能体系统的核心组件
智能体 (Agent): 负责决策和推理的语言模型
工具 (Tools): 智能体可以使用的函数或API
执行器 (Executor): 协调智能体与工具之间的交互
记忆 (Memory): 存储对话或执行历史
观察 (Observation): 工具执行的结果反馈
2. 单智能体实现模式
2.1 ReAct 智能体
ReAct(Reasoning + Acting)智能体结合了推理和行动的能力,是最常用的智能体类型之一。
核心特性:
结合推理(思考)和行动的能力
提供中间推理步骤
支持"链式思考"过程
适用于需要复杂逻辑和推理的任务
实现方式:
from langchain.agents import AgentType, initialize_agent, Tool
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain_community.utilities import WikipediaAPIWrapper
# 创建工具
wikipedia = WikipediaAPIWrapper()
tools = [Tool(name="维基百科", func=wikipedia.run, description="用于查询信息的工具")]
# 创建LLM
llm = ChatOpenAI(temperature=0)
# 创建记忆组件
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# 初始化ReAct智能体
agent = initialize_agent(
tools,
llm,
agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
verbose=True,
memory=memory
)
2.2 OpenAI函数智能体
OpenAI函数智能体利用OpenAI模型的函数调用能力,提供更结构化的工具使用方式。
核心特性:
基于OpenAI的函数调用API
工具调用更加可靠
减少解析错误和幻觉
结构化输出
实现方式:
from langchain.agents import AgentType, initialize_agent, Tool
from langchain.chat_models import ChatOpenAI
# 创建工具
tools = [Tool(name="计算器", func=lambda x: eval(x), description="用于数学计算")]
# 创建OpenAI函数智能体
llm = ChatOpenAI(temperature=0)
agent = initialize_agent(
tools,
llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True
)
2.3 计划与执行智能体
计划与执行(Plan and Execute)智能体先制定计划,然后执行各个步骤,适合处理复杂任务。
核心特性:
分解任务为子任务
先规划后执行
处理多步骤复杂问题
自我监控和修正
实现方式:
from langchain.agents import AgentType, initialize_agent, Tool
from langchain.agents import AgentExecutor, PlanAndExecuteAgentExecutor
from langchain.chat_models import ChatOpenAI
# 创建工具
tools = [...] # 定义所需工具
# 创建语言模型
llm = ChatOpenAI(temperature=0)
# 初始化计划与执行智能体
agent_executor = PlanAndExecuteAgentExecutor.from_llm_and_tools(
llm=llm,
tools=tools,
verbose=True
)
3. 多智能体编排模式
3.1 团队监督者模式
团队监督者模式使用一个监督者智能体协调多个专家智能体,类似于团队领导与成员的关系。
核心特性:
一个监督者智能体协调多个专家智能体
任务分解与分配
结果整合和协调
解决冲突和问题
实现方式:
from langchain.agents import AgentType, initialize_agent, Tool
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# 创建专家智能体
researcher = initialize_agent(...) # 研究员智能体
coder = initialize_agent(...) # 编码员智能体
critic = LLMChain(...) # 评论员智能体
# 创建监督者
supervisor_prompt = PromptTemplate(template="...", input_variables=[...])
supervisor = LLMChain(llm=ChatOpenAI(), prompt=supervisor_prompt)
# 执行工作流
def run_workflow(task):
# 1. 监督者制定计划
plan = supervisor.run(task=task)
# 2. 研究员收集信息
research_result = researcher.run(task)
# 3. 编码员实现解决方案
code_solution = coder.run(f"{task}\n{research_result}")
# 4. 评论员评估解决方案
critique = critic.run(solution=code_solution)
# 5. 监督者整合结果
final_solution = supervisor.run(results=[research_result, code_solution, critique])
return final_solution
3.2 经理-工人模式
经理-工人模式中,一个经理智能体分配和协调任务,多个工人智能体执行具体工作。
核心特性:
层级结构的任务分配
经理智能体负责规划和监督
工人智能体负责执行具体任务
经理处理结果聚合和质量控制
实现方式:
# 经理-工人模式需要自定义实现,基本逻辑如下:
# 1. 创建经理智能体
manager_agent = create_manager_agent()
# 2. 创建多个工人智能体
worker_agents = create_worker_agents()
# 3. 实现工作流
def manager_worker_workflow(task):
# 经理分解任务
subtasks = manager_agent.plan_task(task)
# 分配任务给工人
results = {}
for subtask in subtasks:
worker = select_appropriate_worker(subtask, worker_agents)
results[subtask.id] = worker.execute(subtask)
# 经理整合结果
final_result = manager_agent.integrate_results(results)
return final_result
3.3 计划执行模式
计划执行模式中,一个智能体负责规划,另一个负责执行,适用于需要精确规划的复杂任务。
核心特性:
明确的规划-执行分离
规划者智能体设计详细计划
执行者智能体负责实施计划
适合需要精确步骤的任务
实现方式:
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.agents import initialize_agent
# 创建规划者智能体
planner_prompt = PromptTemplate(template="...", input_variables=["task"])
planner = LLMChain(llm=ChatOpenAI(), prompt=planner_prompt)
# 创建执行者智能体
executor = initialize_agent(...)
# 执行计划-执行模式
def plan_execute_workflow(task):
# 1. 制定计划
plan = planner.run(task=task)
# 2. 执行计划
execution_result = executor.run(f"根据以下计划执行任务:\n任务: {task}\n计划:\n{plan}")
return execution_result
4. 搜索与智能体集成
4.1 检索增强生成(RAG)与智能体结合
RAG系统可以增强智能体的知识,为其提供更多相关信息。
实现方法:
RAG作为工具: 智能体可以将RAG系统作为一个工具来使用
上下文增强: 在智能体处理之前使用RAG增强提示
RAG作为智能体工具示例:
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.agents import AgentType, initialize_agent, Tool
from langchain.chat_models import ChatOpenAI
# 创建RAG系统
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
chunks = text_splitter.split_documents(documents)
vectorstore = FAISS.from_documents(chunks, OpenAIEmbeddings())
retriever = vectorstore.as_retriever()
# 创建RAG查询工具
def query_knowledge_base(query):
docs = retriever.get_relevant_documents(query)
return "\n\n".join(doc.page_content for doc in docs)
# 将RAG作为智能体工具
rag_tool = Tool(
name="知识库查询",
func=query_knowledge_base,
description="当你需要查询专业知识时使用此工具"
)
# 创建使用RAG工具的智能体
agent = initialize_agent(
tools=[rag_tool],
llm=ChatOpenAI(),
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
5. 多智能体工作流设计模式
5.1 研究-规划-执行模式
这种模式将工作流分为三个阶段:研究、规划和执行,由不同专长的智能体负责。
工作流程:
研究阶段: 研究智能体收集和分析信息
规划阶段: 规划智能体基于研究结果制定计划
执行阶段: 执行智能体实施计划并完成任务
5.2 分析-创建-评估模式
这种模式适合创造性任务,包含问题分析、创建解决方案和评估改进三个阶段。
工作流程:
分析阶段: 分析智能体理解问题和需求
创建阶段: 创造智能体生成解决方案
评估阶段: 评估智能体检查和改进解决方案
5.3 协作迭代模式
多个智能体并行工作,定期同步和迭代改进解决方案。
工作流程:
问题分解: 将任务分解为可并行处理的部分
并行工作: 多个智能体同时处理不同子任务
同步协调: 定期交流和整合进展
迭代改进: 基于反馈不断调整和优化
6. 最佳实践与优化技巧
6.1 智能体设计原则
明确角色和职责: 每个智能体应有明确的专长和任务范围
提供足够上下文: 智能体需要充分的背景信息来做出决策
设计适当的提示: 提示模板直接影响智能体的效果
错误处理机制: 添加错误检测和恢复机制
循环避免: 防止智能体陷入无限循环
6.2 多智能体协作优化
有效的通信协议: 定义智能体间交流的格式和规则
任务分解粒度: 适当的任务分解粒度可提高效率
结果整合机制: 设计合理的结果整合和冲突解决方案
监控和干预: 实现监控机制,必要时允许人类干预
6.3 性能优化
批量处理: 尽可能批量处理查询以减少API调用
缓存机制: 缓存常用查询和中间结果
异步处理: 使用异步API减少等待时间
选择合适的模型: 根据任务复杂度选择合适的底层模型
- 感谢你赐予我前进的力量