1. 项目概述
LangChain多智能体系统正在成为当前AI应用开发的热门方向。作为一个长期从事智能体开发的工程师,我发现越来越多的项目需要多个智能体协同工作来完成复杂任务。比如在电商场景中,可能需要商品推荐智能体、用户画像分析智能体和客服智能体共同协作。
LangChain提供的多智能体框架相比传统单智能体系统有几个显著优势:首先,它允许不同智能体专注于特定子任务,提高整体效率;其次,智能体间可以共享上下文和知识;最重要的是,这种架构更接近人类团队协作的模式,能够处理更复杂的业务逻辑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构模式解析
2.1 主从式架构
主从式架构是最基础的多智能体模式。在这种设计中:
- 主智能体负责任务分解和结果汇总
- 从智能体专注于执行具体子任务
- 通信是单向的(主→从)
我最近在一个客户支持系统中实现了这种架构。主智能体分析用户问题后,会将技术问题路由给技术支持从智能体,账单问题交给财务从智能体。这种模式的优点是实现简单,但缺点是主智能体可能成为性能瓶颈。
2.2 对等网络架构
在对等架构中:
- 所有智能体地位平等
- 智能体间可以直接通信
- 需要设计良好的协调机制
我在一个智能家居控制项目中采用了这种模式。灯光控制、温度调节和安全监控智能体可以直接交换信息。关键是要实现有效的消息路由和冲突解决机制。
2.3 分层架构
分层架构结合了前两种模式的优点:
- 上层智能体做战略决策
- 中层负责协调
- 底层执行具体操作
这种架构特别适合业务流程复杂的场景。我在一个供应链优化系统中使用三层架构,顶层分析市场趋势,中层协调库存和物流,底层处理具体订单。
2.4 联邦学习架构
联邦架构的特点是:
- 智能体在本地训练模型
- 定期同步全局知识
- 保护数据隐私
医疗领域特别适合这种模式。不同医院的诊断智能体可以在不共享原始数据的情况下,共同提升诊断准确率。
2.5 市场机制架构
市场机制架构模拟经济系统:
- 智能体通过"投标"获取任务
- 使用虚拟货币进行资源分配
- 动态调整智能体权重
我在一个云计算资源调度项目中成功应用了这种架构。不同服务智能体根据当前负载情况竞标计算资源,系统整体利用率提升了30%。
3. 搜索智能体实战开发
3.1 基础搜索智能体实现
让我们从最简单的搜索智能体开始:
python复制from langchain.agents import Tool, AgentExecutor, LLMSingleActionAgent
from langchain import OpenAI, SerpAPIWrapper
search = SerpAPIWrapper()
tools = [
Tool(
name="Search",
func=search.run,
description="用于搜索最新信息"
)
]
# 设置智能体提示模板
from langchain.agents import AgentOutputParser
from langchain.agents.conversational.prompt import FORMAT_INSTRUCTIONS
class SearchAgent(LLMSingleActionAgent):
@property
def input_keys(self):
return ["input"]
def plan(self, inputs, callbacks=None):
# 实现搜索逻辑
return {"output": "搜索结果"}
agent_executor = AgentExecutor.from_agent_and_tools(
agent=SearchAgent(),
tools=tools,
verbose=True
)
这个基础版本已经可以处理简单搜索任务。我在多个项目中使用的经验是:一定要为工具添加清晰的描述,这直接影响路由效果。
3.2 多智能体搜索系统
将搜索功能扩展到多智能体环境:
python复制from langchain.agents import AgentExecutor, MultiActionAgent
class SearchMasterAgent:
def __init__(self):
self.web_agent = WebSearchAgent()
self.db_agent = DatabaseSearchAgent()
self.doc_agent = DocumentSearchAgent()
def route_query(self, query):
# 基于查询类型选择智能体
if is_web_query(query):
return self.web_agent
elif is_database_query(query):
return self.db_agent
else:
return self.doc_agent
class WebSearchAgent:
def search(self, query):
# 实现网页搜索逻辑
return serpapi_search(query)
# 使用示例
master = SearchMasterAgent()
agent = master.route_query("最新的AI论文")
results = agent.search("最新的AI论文")
在实际部署时,我通常会添加缓存层来存储常用查询结果,这能显著降低API调用成本。
3.3 智能体间通信实现
智能体协作的关键是通信机制。这是我的实现方案:
python复制from typing import Dict, Any
from langchain.schema import AgentAction, AgentFinish
class MessageBus:
def __init__(self):
self.messages = {}
def publish(self, sender: str, message: Dict[str, Any]):
self.messages[sender] = message
def subscribe(self, receiver: str) -> Dict[str, Any]:
return self.messages.get(receiver, {})
class CollaborativeSearchAgent:
def __init__(self, name: str, bus: MessageBus):
self.name = name
self.bus = bus
def execute(self, task: str) -> AgentFinish:
# 执行任务前检查是否有相关消息
context = self.bus.subscribe(self.name)
# 执行搜索逻辑
result = do_search(task, context)
# 将结果发布到总线
self.bus.publish(f"result_{self.name}", {
"query": task,
"result": result
})
return AgentFinish(
return_values={"output": result},
log=f"{self.name} completed search"
)
这种发布-订阅模式在实践中表现良好,特别是在智能体数量较多时。我建议为消息添加TTL(生存时间)以避免过时信息堆积。
3.4 结果聚合与排名
多智能体系统的最后一步是结果聚合:
python复制from typing import List, Dict
from langchain.docstore.document import Document
class ResultAggregator:
def __init__(self, strategies: List[str] = ["weighted"]):
self.strategies = strategies
def aggregate(self, results: Dict[str, List[Document]]) -> List[Document]:
# 实现多种聚合策略
if "weighted" in self.strategies:
