引言:从"执行者"到"决策者"的进化
2025年某跨国电商的物流系统接入LangChain代理框架后,异常订单处理时效从45分钟缩短至3分钟。本文将揭示如何通过动态工具调用+多智能体协作,让大模型从"被动应答"升级为"自主行动",并拆解3个行业级落地案例。
一、Agent的核心能力矩阵
1.1 传统Chain vs Agent
维度 | Chain | Agent |
---|---|---|
决策能力 | 固定流程 | 动态规划 |
工具使用 | 预定义组合 | 按需调用 |
适应性 | 结构化场景 | 开放域问题 |
典型延迟 | 200-500ms | 500-1500ms |
1.2 Agent类型全景图
1.3 支持tool模型
deepseek-r1执行agent相关代码会报以下错误:
ollama._types.ResponseError: registry.ollama.ai/library/deepseek-r1:latest does not support tools (status code: 400)
以下示例会使用qwen2.5模型。
二、Agent实战
2.1 工具调用型(最常用)
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_community.tools import TavilySearchResults
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.tools import Tool
from langchain_ollama import ChatOllama
import os
# 设置Tavily API密钥(实际开发建议使用环境变量管理密钥)
os.environ["TAVILY_API_KEY"] = "tvly-dev-xxxxxx"
def search(query: str) -> str:
"""
实时信息搜索工具
参数:
query (str): 搜索关键词
返回:
str: 搜索结果摘要
"""
print("查询关键词为:" + query) # 调试日志:显示搜索关键词
tool = TavilySearchResults(
max_results=5,
search_depth="advanced",
include_answer=True,
)
response = tool.invoke(query)
return response
# 定义工具集
tools = [
Tool(
name="search",
func=search,
description="只有需要了解实时信息的时候才会使用这个工具" # 工具用途说明
)
]
# 配置带格式要求的提示模板
prompt = ChatPromptTemplate.from_messages([
("system", """你是一个智能助手,用中文回答用户问题。请遵守以下规则:
1. 对于货币计算问题,先根据查询工具获取实时汇率
2. 最终回答需包含计算结果和汇率说明(例:当前汇率1:1.0676)"""),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad")
])
# 创建智能体实例
agent = create_tool_calling_agent(
llm=ChatOllama(model="qwen2.5"),
tools=tools,
prompt=prompt
)
# 配置执行器(增强错误处理)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # 开启详细日志模式
handle_parsing_errors=True, # 自动处理解析错误
max_iterations=3 # 限制最大迭代次数
)
# 测试用例(实际生产环境应移除)
try:
result = agent_executor.invoke({
"input": "请根据最新汇率计算100元人民币等于多少港元"
})
print("执行结果:", result)
except Exception as e:
print("发生错误:", str(e)) # 异常捕获处理
输出为:
> Entering new AgentExecutor chain...
Invoking: `search` with `人民币对港元的汇率`
查询关键词为:人民币对港元的汇率
[{'title': '人民币至港元汇率历史| 汇率换算器 - Wise', 'url': 'https://wise.com/zh-cn/currency-converter/cny-to-hkd-rate/history', 'content': '全球 1600 万人使用的账户,让生活、工作、旅行和汇款变得更轻松。\n\n人民币 至港元 历史汇率\n\n欢迎查看 人民币 至港元 历史摘要。这是 人民币 (CNY) 至港元 (HKD) 汇率历史摘要页面,详细介绍了从 06-04-2020 到 06-04-2025 5 年的 CNY 和 HKD 历史数据。\n\n¥1.000 CNY = $1.068 HKD\n\n跨境汇款时省钱\n\nCNY 兑 HKD 换算表\n\n1 CNY = 1.06762 HKD\n\n0\n\nWe use the real, mid-market rate with no sneaky mark-up to hide the fees.Learn more\n\n还在苦等更高的汇率?\n\n立即设置提醒,我们会在汇率上升时通知您。借助我们的每日摘要,您将不会错过任何最新消息。\n\n每日动态\n\n达到以下条件时向我发送电子邮件\n\n人民币 至港元 汇率历史\n\n今日 人民币 至港元 的汇率目前为 1.068,较昨日变动 0.000%。过去一周,人民币 的值保持相对稳定,与 7 天前的价值相比下降了 -0.322%。\n\n2025年4月6日 的热门货币 [...] | USD | HKD | CAD | EUR | GBP | AUD | INR | SGD\n1USD | 1 | 7.775 | 1.423 | 0.912 | 0.775 | 1.655 | 85.498 | 1.348\n1HKD | 0.129 | 1 | 0.183 | 0.117 | 0.1 | 0.213 | 10.997 | 0.173\n1CAD | 0.703 | 5.464 | 1 | 0.641 | 0.545 | 1.163 | 60.083 | 0.947\n1EUR | 1.096 | 8.521 | 1.56 | 1 | 0.85 | 1.814 | 93.71 | 1.477\n当心不良汇率。\xa0银行和传统提供商通常会收取额外费用,该费用会通过暗升汇率的手段转嫁给您。我们的智能技术使我们更高效 – 这意味着您在每次交易中都能享受到更划算的汇率。\n\n如何将人民币兑换成港元\n\n输入金额\n\n只需在框中输入您要换算的金额。\n\n选择您的货币\n\n点击下拉列表,在第一个下拉列表中选择CNY作为要换算的原始货币,在第二个下拉列表中选择HKD作为要换算的目标货币。 [...] 就是这么简单\n\n我们的汇率换算器将为您显示CNY兑HKD的当前汇率,以及过去一天、一周或一个月的汇率变化。\n\n下载汇率换算器应用\n\n有关 汇率的常见问题 (FAQ)\n\n人民币 至港元 在过去 6 个月内的最高汇率是多少?\n\n人民币 至港元 在过去 6 个月内的最低汇率是多少?\n\n人民币 至港元 在过去 6 个月内的平均汇率是多少?\n\n公司与团队\n\nWise 产品\n\n资源\n\n关注我们\n\n© Wise Payments Limited 2025\n\nWise 由英国金融行为监管局 (FCA) 根据《2011 年电子货币条例》授权发行电子货币,公司参考编号为 900507。', 'score': 0.92091084}, {'title': '人民币至港元汇率。将CNY 兑换成HKD - Wise', 'url': 'https://wise.com/zh-cn/currency-converter/cny-to-hkd-rate', 'content': '人民币/港元汇率\n1 CNY | 1.06762 HKD\n5 CNY | 5.33810 HKD\n10 CNY | 10.67620 HKD\n20 CNY | 21.35240 HKD\n50 CNY | 53.38100 HKD\n100 CNY | 106.76200 HKD\n250 CNY | 266.90500 HKD\n500 CNY | 533.81000 HKD\n1,000 CNY | 1,067.62000 HKD\n2,000 CNY | 2,135.24000 HKD\n5,000 CNY | 5,338.10000 HKD\n10,000 CNY | 10,676.20000 HKD\n港元/人民币汇率\n100 HKD | 93.66660 \n CNY\n200 HKD | 187.33320 \n CNY\n300 HKD | 280.99980 \n CNY\n500 HKD | 468.33300 \n CNY [...] 全球 1600 万人使用的账户,让生活、工作、旅行和汇款变得更轻松。\n\n人民币兑港元\n\n按实际汇率将 CNY 换算成 HKD\n\n¥1.000 CNY = $1.068 HKD\n\n跨境汇款时省钱\n\nCNY 兑 HKD 换算表\n\n1 CNY = 1.06762 HKD\n\n0\n\nWe use the real, mid-market rate with no sneaky mark-up to hide the fees.Learn more\n\n还在苦等更高的汇率?\n\n立即设置提醒,我们会在汇率上升时通知您。借助我们的每日摘要,您将不会错过任何最新消息。\n\n每日动态\n\n达到以下条件时向我发送电子邮件\n\n1 CNY兑HKD | 过去 30 天 | 过去 90 天\n高 | 1.0753 | 1.0760\n低 | 1.0676 | 1.0610\n一般 | 1.0719 | 1.0701\n更改 | -0.47% | 0.62%\n查看完整历史记录\n1 CNY 兑 HKD 统计信息 [...] | USD | HKD | CAD | EUR | GBP | AUD | INR | SGD\n1USD | 1 | 7.775 | 1.423 | 0.912 | 0.775 | 1.655 | 85.498 | 1.348\n1HKD | 0.129 | 1 | 0.183 | 0.117 | 0.1 | 0.213 | 10.997 | 0.173\n1CAD | 0.703 | 5.464 | 1 | 0.641 | 0.545 | 1.163 | 60.083 | 0.947\n1EUR | 1.096 | 8.521 | 1.56 | 1 | 0.85 | 1.814 | 93.71 | 1.477\n当心不良汇率。\xa0银行和传统提供商通常会收取额外费用,该费用会通过暗升汇率的手段转嫁给您。我们的智能技术使我们更高效 – 这意味着您在每次交易中都能享受到更划算的汇率。\n\n如何将人民币兑换成港元\n\n输入金额\n\n只需在框中输入您要换算的金额。\n\n选择您的货币\n\n点击下拉列表,在第一个下拉列表中选择CNY作为要换算的原始货币,在第二个下拉列表中选择HKD作为要换算的目标货币。', 'score': 0.91988057}, {'title': '1 兑换为| 将中国人民币转换为Hong Kong Dollars - XE.com', 'url': 'https://www.xe.com/zh-cn/currencyconverter/convert/?Amount=1&From=CNY&To=HKD', 'content': '將中国人民币转换为港币 ; 1 CNY. 1.06775 HKD ; 5 CNY. 5.33873 HKD ; 10 CNY. 10.6775 HKD ; 25 CNY. 26.6937 HKD ; 50 CNY. 53.3873 HKD.', 'score': 0.8775715}, {'title': '今日人民币对港币汇率(CNY HKD) - 英为财情', 'url': 'https://cn.investing.com/currencies/cny-hkd', 'content': '查询今日人民币对港币汇率(CNY HKD)最新行情,实时走势图表,专业技术分析,投资者论坛,历史交易数据,最新消息和未来汇率预测。把握人民币兑港币投资机会。', 'score': 0.72814995}, {'title': '人民幣/港元(CNYHKD=X) 股價、新聞、報價和記錄 - Yahoo 財經', 'url': 'https://hk.finance.yahoo.com/quote/CNYHKD%3DX/', 'content': 'EURHKD=X · 歐元/港元. 8.4216 ; AUDHKD=X · 澳元/港元. 4.8648 ; JPYHKD=X · 日圓/港元. 0.0517 ; GBPHKD=X · 英鎊/港元. 10.0590 ; HKDCNY=X · 港元/人民幣. 0.9333.', 'score': 0.71088976}]根据提供的信息,当前人民币(CNY)兑换香港元(HKD)的汇率大约是:
- **1 CNY ≈ 1.06775 HKD**
这意味着如果你有1个人民币,你可以兑换到约1.068香港元。
具体转换如下:
- 1 CNY = 1.06775 HKD
- 5 CNY = 5.33873 HKD
- 10 CNY = 10.6775 HKD
- 25 CNY = 26.6937 HKD
- 50 CNY = 53.3873 HKD
请注意,汇率会波动,实际交易时请以银行或货币兑换机构的实时汇率为准。
> Finished chain.
执行结果: {'input': '请根据最新汇率计算100元人民币等于多少港元', 'output': '根据提供的信息,当前人民币(CNY)兑换香港元(HKD)的汇率大约是:\n\n- **1 CNY ≈ 1.06775 HKD**\n\n这意味着如果你有1个人民币,你可以兑换到约1.068香港元。\n\n具体转换如下:\n- 1 CNY = 1.06775 HKD\n- 5 CNY = 5.33873 HKD\n- 10 CNY = 10.6775 HKD\n- 25 CNY = 26.6937 HKD\n- 50 CNY = 53.3873 HKD\n\n请注意,汇率会波动,实际交易时请以银行或货币兑换机构的实时汇率为准。'}
# 未完成100元人民币到港币的最终转换,跟模型大小有关
2.2多智能体协作
from langchain.agents import AgentExecutor, create_structured_chat_agent
from langchain_core.tools import Tool
from langchain_ollama import ChatOllama
from langchain import hub
# 初始化Ollama
llm = ChatOllama(model="qwen2.5")
prompt = hub.pull("hwchase17/structured-chat-agent")
# 定义示例工具(即使不使用也要保留空列表)
def dummy_tool(query):
"""示例工具函数"""
return "No external tools used"
tools = [
Tool(
name="DummyTool",
func=dummy_tool,
description="占位工具,实际未使用"
)
]
researcher_agent = create_structured_chat_agent(llm, tools, prompt)
researcher_executor = AgentExecutor(agent=researcher_agent, tools=tools, verbose=True)
editor_agent = create_structured_chat_agent(llm, tools, prompt)
editor_executor = AgentExecutor(agent=editor_agent, tools=tools, verbose=True)
# 协作流程
def collaborative_writing(topic):
# 第一阶段:研究员生成草稿
research_result = researcher_executor.invoke({
"input": f"请收集关于{topic}的最新发展,生成包含技术细节的研究报告",
"chat_history": []
})
# 第二阶段:编辑进行优化
final_report = editor_executor.invoke({
"input": f"请优化以下技术报告:\n{research_result['output']}",
"chat_history": []
})
return final_report['output']
# 执行协作任务
if __name__ == "__main__":
topic = "2025年人工智能领域的新进展"
report = collaborative_writing(topic)
print("\n最终技术报告:")
print(report)
输出为:
> Entering new AgentExecutor chain...
Action:
```
{
"action": "Final Answer",
"action_input": "为了提供一份高质量的技术研究报告,请稍等我进行收集和整理。"
}
```
> Finished chain.
> Entering new AgentExecutor chain...
Action:
```
{
"action": "Final Answer",
"action_input": "为提高技术研究报告的质量,我将先进行资料的搜集与整理。随后根据整理出的信息进一步优化报告内容,使其更加清晰、详尽并具有可读性。"
}
```
> Finished chain.
最终技术报告:
为提高技术研究报告的质量,我将先进行资料的搜集与整理。随后根据整理出的信息进一步优化报告内容,使其更加清晰、详尽并具有可读性。
三、企业级案例:智能物流系统
3.1 架构设计
3.2 关键指标提升
指标 | 改进前 | 改进后 |
---|---|---|
异常处理时效 | 45分钟 | 3分钟 |
人工干预率 | 68% | 12% |
客户满意度 | 82% | 96% |
四、避坑指南:Agent开发七大陷阱
-
无限循环:未设置
max_iterations
导致死循环 -
工具冲突:多个工具同名引发调用错误
-
权限失控:Agent意外执行高危操作
-
成本失控:频繁调用付费API
-
幻觉决策:缺乏事实核查机制
-
监控缺失:无法追踪Agent决策过程
-
版本兼容:工具定义随版本升级变化
防护方案:
# 安全Agent配置示例
agent = AgentExecutor(
agent=agent,
tools=tools,
max_iterations=5,
early_stopping_method="force", # 超时强制终止
handle_parsing_errors=True # 解析错误处理
)
下期预告
《索引与检索(Indexing & Retrieval):构建企业级知识库的基石》
-
揭秘:如何让大模型精准"记住"百万级文档?
-
实战:基于FAISS+BERT构建法律条文检索系统
-
陷阱:向量漂移与冷启动难题
Agent系统正在重塑人机协作的边界。记住:优秀的Agent设计,不仅要"聪明",更要"可靠"!