一、LangChain Agent API 简介
LangChain的“链”式结构存在执行方式不灵活的重大问题。比如我们上篇文章搭建的链封装了天气工具,但如果用户在使用过程中并没有询问相关天气情况,反而提问了“决策树是什么?”类似的机器学习问题,那该链该如何执行呢?
面对这种情况大家考虑链中是否要跳过一些节点或者构建不同链满足复杂需求,但很显然这增加了开发复杂度。目前大模型经过迅猛发展已经具备了自动规划对工具串联、并联等相关操作的能力,基于此LangChain在链的基础上抽象出更高级的封装Agent,LangChain对于Agent的定义是“由大模型规划并自由组装各种链来满足用户需求”。更重要的,LangChain还在Agent的基础上封装了更高级的LangGraph(LangGraph类似Multi-Agent多智能体协同的概念,LangChain内容分享完毕后会分享LangGraph的教程)。
从本期内容开始,笔者就为大家分享LangChain Agent API抽象层的相关知识。
二、LangChain快速接入工具搭建智能体
LangChain Agent API的基本使用方法十分简单,下面还是通过天气助手小案例带大家快速上手Agent API的基本使用:
- 导入相关依赖包并编写查询天气的函数,注意本案例导入
create_tool_calling_agent
函数和AgentExecutor
类,是本节智能体构建内容的关键。
import requests
from langchain.agents import create_tool_calling_agent, tool, AgentExecutorfrom langchain.chat_models import init_chat_modelfrom langchain_core.prompts import ChatPromptTemplate
@tooldef get_weather(loc): """ 查询即时天气函数 :param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\ :return:心知天气 API查询即时天气的结果,具体URL请求地址为:"https://api.seniverse.com/v3/weather/now.json" 返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息 """ url = "https://api.seniverse.com/v3/weather/now.json" params = { "key": "你注册的心知天气api", "location": loc, "language": "zh-Hans", "unit": "c", } response = requests.get(url, params=params) temperature = response.json() return temperature['results'][0]['now']
- 构建提示词模板组件和大模型组件(注意提示词模板中的
agent提示符
),为保证大模型具备更强的Agent能力,本期内容不再使用硅基流动的免费模型Qwen3-8B
, 而是使用DeepSeek-V3
模型
# 构建提示模版, 提示词模板对于Agent的构建是必须的prompt = ChatPromptTemplate.from_messages( [ ("system", "你是天气助手,请根据用户的问题,给出相应的天气信息,并具备将结果写入文件的能力"), ("human", "{input}"), ("placeholder", "{agent_scratchpad}"), # 这部分agnet提示符写法是写死的不可以修改 ])
# 使用 DeepSeek 模型model = init_chat_model( model='deepseek-chat', # deepseek-chat表示调用DeepSeek-v3模型 model_provider='deepseek',# 模型提供商写deepseek api_key="你注册的deepseek api key",)
- 本项目中不再使用
model.bind()
绑定模型组件和工具,而是使用create_tool_calling_agent
快速构建代理,代码如下:
#定义工具tools = [get_weather]
# 直接使用`create_tool_calling_agent`创建代理agent = create_tool_calling_agent(model, tools, prompt)
- 使用
AgentExecutor
构建Agent并快速运行代理, 代码和执行结果如下, 可以看到LangChain构建Agent是不是特别简单
# 使用AgentExecutor运行当前Agentagent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # Verbose表示是否要打印执行细节response=agent_executor.invoke({"input":"请问今天北京天气怎么样?"})
print(response)
从执行结果中可以看到LangChain Agent灵活的、全自动的创建了一个chain
并invoke
执行得到了北京的天气情况,执行结果通过{ input: , output: }
格式返回。看到这大家一定会感慨LangChain构建智能体竟然如此简单!
三、LangChain Agent 多工具调用
得益于LangChain Agent API 底层自建了很多优化去引导大模型的工具调用工作,LangChain Agent可以快速准确的调用各种工具,准确性和稳定性也要比单纯使用Function Calling
能力要强一些。LangChain Agent可以通过串联
,并联
以及串并联组合
的方式调用工具,下面提供这两种调用方法的示例让大家直观感受LangChain Agnet功能的强大。
3.1 并联调用
如果用户同时询问北京和杭州的天气,LangChain Agent会并联查询两个地方的天气,大家可以修改以上代码的提示词进行尝试:
response=agent_executor.invoke({"input":"请问今天北京和杭州的天气怎么样,哪个城市更热??"})print(response)
执行结果如下:
可以看到LangChain 同时调用get_weather
工具获取了北京和杭州的天气情况并回答了用户问题,从上面可以看出LangChain Agent执行并联调用的流程如下:
这里给大家设立一个思考题,假如我们还是想通过Chains
底层API的方法实现串并联调用该如何设计呢?欢迎大家在评论区和笔者讨论~
3.2 串联调用
如果用户想“查询北京和杭州现在的温度,并将结果写入本地的文件中。”,LangChain该如何执行呢?我们设想LangChain Agent的执行结果如下图:
编写代码验证一下是否正确:
- 在上述代码中添加写入文件函数
write_file()
@tooldef write_file(content): """ 将指定内容写入本地文件。 :param content: 必要参数,字符串类型,用于表示需要写入文档的具体内容。 :return:是否成功写入 """ with open('res.txt', 'w', encoding='utf-8') as f: f.write(content) return "已成功写入本地文件。"
- 将
write_file
函数加入工具列表,并在提示词模板中说明大模型具备写入文件的能力
#定义工具tools = [get_weather, write_file]
# 构建提示模版, 提示词模板对于Agent的构建是必须的prompt = ChatPromptTemplate.from_messages( [ ("system", "你是天气助手,请根据用户的问题,给出相应的天气信息,并具备将结果写入文件的能力"), ("human", "{input}"), ("placeholder", "{agent_scratchpad}"), # 这部分agnet提示符不需要人工输入,同时也是写死的不可以修改 ])
- 调用
create_tool_calling_agent
创建代理,并使用AgentExecutor
执行当前Agent,可以看到LangChain Agent并联搜索得到了北京杭州的天气后,又串联使用文件写入工具把结果写入到res
文件中:
# 使用 DeepSeek 模型model = init_chat_model( model='deepseek-chat', # deepseek-chat表示调用DeepSeek-v3模型 model_provider='deepseek',# 模型提供商写deepseek api_key="",)
# 直接使用`create_tool_calling_agent`创建代理agent = create_tool_calling_agent(model, tools, prompt)
# 使用AgentExecutor运行当前Agentagent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # Verbose表示是否要打印细节信息
response=agent_executor.invoke({"input":"查一下北京和杭州现在的温度,并将结果写入本地的文件中。"})print(response)
四、LangChain使用内置搜索工具搭建联网搜索智能体
既然LangChain Agent能够快速灵活的调用外部工具, 那调用内置工具的能力更是不在话下,接下来我们通过一个联网搜索功能的内置工具Agent来学习LangChain接入内置工具的方法。(注意; 需要科学上网)
LangChain内置工具可参考官方网站https://python.langchain.com/docs/integrations/tools/ 。本次网络搜索功能我们使用的是Tavily Search这个工具,文档在https://python.langchain.com/docs/integrations/tools/tavily_search/ 。TavilySearch是目前对大语言模型非常友好的搜索工具之一,可以方便地处理文本、图像等不同类型的内容并代入大语言模型进行解析。我们以前分享过的[Suna]和Google Agent都推荐使用Tavily Search作为联网搜索工具。
- 执行命令
pip install langchain-tavily
安装Tavily
依赖包
- 登录 Tavily官网, 可以用github账号登录,然后到
Overview
注册一个API Key
, 每个月有1000次免费搜索案例。我们还需要将API KEY写入环境变量中,环境变量名为TAVILY_API_KEY
。
- 先来测试一下
Tavily Search
的基本功能, 编写如下代码:
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=2)search.invoke("苹果2025WWDC发布会")
执行结果如下,可以看到Tavily Search
输出了两个结果:
4. Tavily Search 接入Agent的流程和上面讲述的相同,这里不加赘述了,完整代码如下:
from langchain.agents import AgentExecutor, create_tool_calling_agent, toolfrom langchain_core.prompts import ChatPromptTemplatefrom langchain.chat_models import init_chat_modelfrom langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=2)
tools = [search]
prompt = ChatPromptTemplate.from_messages( [ ("system", "你是一名助人为乐的助手,并且可以调用工具进行网络搜索,获取实时信息。"), ("human", "{input}"), ("placeholder", "{agent_scratchpad}"), ])# 初始化模型# 使用 DeepSeek 模型model = init_chat_model( model='deepseek-chat', # deepseek-chat表示调用DeepSeek-v3模型 model_provider='deepseek',# 模型提供商写deepseek api_key="你注册的api key",)agent = create_tool_calling_agent(model, tools, prompt)agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)agent_executor.invoke({"input": "请问苹果2025WWDC发布会召开的时间是?"})
执行结果如下, 可以看到LangChain成功执行并通过搜索给出了精确的召开时间:
五、 总结
本篇文章分享了LangChain Agent API快速搭建智能体的方法,关键步骤通过create_tool_calling_agent
创建模型和工具的Agent,并使用AgentExecutor
执行当前Agent。总而言之在当今大模型强大能力的加持下,LangChain Agent API搭建智能体的方法还是非常简单的。
普通人如何抓住AI大模型的风口?
领取方式在文末
为什么要学习大模型?
目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!
最后
只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!
在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
大模型全套学习资料展示
自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。
希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!
01 教学内容
-
从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!
-
大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
02适学人群
应届毕业生: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
vx扫描下方二维码即可
本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!
03 入门到进阶学习路线图
大模型学习路线图,整体分为5个大的阶段:
04 视频和书籍PDF合集
从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)
新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
05 行业报告+白皮书合集
收集70+报告与白皮书,了解行业最新动态!
06 90+份面试题/经验
AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)
07 deepseek部署包+技巧大全
由于篇幅有限
只展示部分资料
并且还在持续更新中…
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发