引言:为什么需要“会做决策”的AI代理?
在AI应用中,简单任务(如查询天气、翻译文本)可通过单工具调用完成,但复杂任务(如“推出一款新智能手表的市场策略”“分析股票投资价值”)需要多步骤推理、多工具协同和专业领域知识——这正是LangChain智能代理系统的核心价值。
传统AI工具存在三大局限:
- 单工具依赖:无法根据任务自动切换工具(如查订单→推荐商品→解答售后政策);
- 无专业分工:面对跨领域任务(如“财务分析+市场调研”)时表现不佳;
- 决策能力弱:无法像人类团队一样分解任务、协调资源、解决冲突。
LangChain的代理系统(Agent)通过“决策+工具+协同”三大能力突破这些局限:
- 基础Agent:自动选择工具处理单领域任务(如电商客服查订单);
- 多代理系统:由“决策中介”协调“专业特工”,处理跨领域复杂任务(如产品上市策略)。
本文整合两大文档核心技术,详解从基础工具调用到多特工协同的完整方案,包含60+代码片段、8张架构图和10个实战场景,帮你构建能“自主决策”的智能代理系统。
一、基础Agent:让AI学会“选择工具”
1.1 Agent的核心原理:从“被动执行”到“主动决策”
基础Agent通过“观察-思考-行动”循环实现自主决策,核心流程为:
- 接收用户问题;
- 分析是否需要工具(或直接回答);
- 选择最合适的工具并调用;
- 根据工具返回结果继续决策(或结束)。
基础Agent工作流程图:
graph LR
A[用户问题] --> B{Agent思考}
B -->|无需工具| C[直接生成回答]
B -->|需要工具| D[选择工具]
D --> E[调用工具获取结果]
E --> F{结果是否足够?}
F -->|是| C
F -->|否| D[继续调用工具]
关键代码:初始化基础Agent
from langchain.agents import initialize_agent, Tool
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 1. 定义工具(以电商客服为例)
def search_order(order_id: str) -> str:
"""查询订单状态的工具"""
# 实际应用中连接数据库
mock_data = {
"ORD-2023-1234": "已发货,预计3天后送达",
"ORD-2023-5678": "未付款,订单保留24小时"
}
return mock_data.get(order_id, f"订单号{
order_id}不存在")
def recommend_product(category: str) -> str:
"""推荐商品的工具"""
mock_rec = {
"手机": "推荐iPhone 15(新品优惠)、华为Mate 60(续航强)",
"耳机": "推荐AirPods Pro(降噪好)、小米Buds 4(性价比高)"
}
return mock_rec.get(category, "暂无推荐商品")
# 2. 封装工具列表
tools = [
Tool(
name="SearchOrder", # 工具名称
func=search_order, # 工具函数
description="查询订单状态,输入为订单号(如ORD-2023-1234)" # 工具描述(关键:帮助Agent判断何时使用)
),
Tool(
name="RecommendProduct",
func=recommend_product,
description="推荐商品,输入为商品类别(如手机、耳机)"
)
]
# 3. 初始化Agent
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 零样本决策(根据工具描述选择)
verbose=True, # 打印决策过程
max_iterations=3 # 最大迭代次数(避免死循环)
)
# 4. 测试Agent
result = agent.run("我的订单ORD-2023-1234到哪里了?")
print(result) # 输出:已发货,预计3天后送达
result = agent.run("我想买耳机,有什么推荐?")
print(result) # 输出:推荐AirPods Pro(降噪好)、小米Buds 4(性价比高)
决策过程解析(verbose=True
打印):
> Entering new AgentExecutor chain...
我的订单ORD-2023-1234到哪里了?
我需要查询订单状态,应该使用SearchOrder工具。
Action: SearchOrder
Action Input: ORD-2023-1234
Observation: 已发货,预计3天后送达
Thought: 我已经获取了订单状态,可以直接回答用户。
Final Answer: 您的订单已发货,预计3天后送达。
> Finished chain.
1.2 工具封装技巧:让Agent“看懂”工具用途
工具描述(description
)是Agent选择工具的关键,需清晰说明适用场景和输入格式,避免歧义。
反例与正例对比:
工具 | 错误描述(模糊) | 正确描述(精确) |
---|---|---|
查订单 | “用于订单查询” | “查询订单状态,输入为订单号(格式:ORD-年份-数字,如ORD-2023-1234)” |
推荐商品 | “推荐东西” | “根据商品类别推荐产品,输入为类别名称(如手机、耳机、笔记本)” |
1.3 多工具协同:处理复杂任务
当任务需要多个工具协同(如“查订单→推荐相关配件”),Agent会自动规划步骤:
# 测试多工具协同任务
result = agent.run("我的订单ORD-2023-1234买的是手机,能推荐配套的耳机吗?")
print(</