掘金 人工智能 前天 17:55
深入浅出LangChain AI Agent智能体开发教程(六)—两行代码LangChain Agent API快速搭建智能体
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入介绍了LangChain Agent API在构建AI智能体方面的强大能力,阐述了与传统Chain工作流相比,Agent如何利用大模型的规划能力,通过灵活组合工具(如查询天气、写入文件、联网搜索等)来应对复杂的用户需求。文章通过具体的代码示例,演示了如何使用`create_tool_calling_agent`和`AgentExecutor`快速搭建能够处理单工具、多工具并行及串联调用的智能体,并介绍了如何集成Tavily Search等内置工具实现联网搜索功能。整体而言,LangChain Agent API为开发者提供了一种高效、简洁的方式来构建具备强大智能体能力的AI应用。

💡 **LangChain Agent API的出现解决了Chain工作流的局限性**:当用户需求超出预设的Chain结构时,Agent能够利用大模型的规划能力,动态地组装和调用不同的工具(如天气查询、文件写入等),实现更灵活、智能的响应,从而应对更复杂的应用场景。

🛠️ **快速搭建智能体的核心是`create_tool_calling_agent`与`AgentExecutor`**:通过`create_tool_calling_agent`函数,开发者可以方便地将大模型、工具集和提示词模板结合,创建一个能够理解并执行工具调用的Agent。随后,`AgentExecutor`负责管理Agent的执行流程,包括工具调用、结果反馈以及与用户的交互,大大简化了智能体的开发过程。

🔄 **Agent支持多工具的并行与串联调用**:LangChain Agent API能够智能地处理用户同时查询多个地点天气(并行调用)或先查询信息再写入文件(串联调用)等复杂任务。这种能力使得AI智能体能够执行更精细、更有逻辑的工作流程,满足多样化的用户指令。

🌐 **集成内置工具实现联网搜索**:文章展示了如何利用LangChain的内置工具,特别是Tavily Search,来构建联网搜索智能体。通过配置Tavily Search工具并将其整合进Agent,可以实现AI智能体获取实时网络信息的能力,例如查询特定事件的召开时间,极大地扩展了AI的应用范围。

前言

本系列分享前五篇分别讲述了

学完以上内容大家会发现伴随着用户应用和开发需求的复杂化,LangChain使用底层API搭建的Chain工作流逐渐显的力不从心。而DeepSeek-V3Qwen3等大模型经过飞速发展已经具备极强的Agent能力,对于工具函数的串联、并联和错误循环的编排已经成为当前大模型的基本操作。面对现状,LangChain是如何快速将大模型构建为AI Agent智能体呢?本期分享笔者将和大家一起学习LangChain Agent API的调用方法~

本系列分享是笔者结合自己学习工作中使用LangChain&LangGraph经验倾心编写,力求帮助大家体系化快速掌握LangChain&LangGraph AI Agent智能体开发的技能!大家感兴趣可以关注笔者掘金账号和系列专栏。更可关注笔者同名微信公众号: 大模型真好玩, 每期分享涉及的代码均可在公众号私信: LangChain智能体开发获得。

一、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 requestsfrom 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模型,具体配置大家可参考LangChain接入大模型的基本方法
# 构建提示模版, 提示词模板对于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灵活的、全自动的创建了一个chaininvoke执行得到了北京的天气情况,执行结果通过{ 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内置工具可参考官方网站python.langchain.com/docs/integr… 。本次网络搜索功能我们使用的是Tavily Search这个工具,文档在python.langchain.com/docs/integr…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 TavilySearchResultssearch = TavilySearchResults(max_results=2)search.invoke("苹果2025WWDC发布会")

执行结果如下,可以看到Tavily Search输出了两个结果:

    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 TavilySearchResultssearch = 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搭建智能体的方法还是非常简单的。下期分享我们将通过大模型调用浏览器自动化网络爬虫实战的项目带大家完整搭建一个Agent,大家一起期待一下吧~

本系列分享预计会有20节左右的规模,保证大家看完一定能够掌握LangChain&LangGraph的开发能力,大家感兴趣可关注笔者掘金账号和专栏,更可关注笔者的同名微信公众号:大模型真好玩, 本系列分享的全部代码均可在微信公众号私信笔者: LangChain智能体开发 免费获得。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain AI Agent 大模型 工具调用 智能体开发
相关文章