【模型之美】13、LangChain智能代理系统全攻略:从工具调用到多特工协同决策

在这里插入图片描述

引言:为什么需要“会做决策”的AI代理?

在AI应用中,简单任务(如查询天气、翻译文本)可通过单工具调用完成,但复杂任务(如“推出一款新智能手表的市场策略”“分析股票投资价值”)需要多步骤推理、多工具协同和专业领域知识——这正是LangChain智能代理系统的核心价值。

传统AI工具存在三大局限:

  • 单工具依赖:无法根据任务自动切换工具(如查订单→推荐商品→解答售后政策);
  • 无专业分工:面对跨领域任务(如“财务分析+市场调研”)时表现不佳;
  • 决策能力弱:无法像人类团队一样分解任务、协调资源、解决冲突。

LangChain的代理系统(Agent)通过“决策+工具+协同”三大能力突破这些局限:

  • 基础Agent:自动选择工具处理单领域任务(如电商客服查订单);
  • 多代理系统:由“决策中介”协调“专业特工”,处理跨领域复杂任务(如产品上市策略)。

本文整合两大文档核心技术,详解从基础工具调用到多特工协同的完整方案,包含60+代码片段、8张架构图和10个实战场景,帮你构建能“自主决策”的智能代理系统。

一、基础Agent:让AI学会“选择工具”

1.1 Agent的核心原理:从“被动执行”到“主动决策”

基础Agent通过“观察-思考-行动”循环实现自主决策,核心流程为:

  1. 接收用户问题;
  2. 分析是否需要工具(或直接回答);
  3. 选择最合适的工具并调用;
  4. 根据工具返回结果继续决策(或结束)。

基础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(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无心水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值