深入浅出LangChain AI Agent智能体开发教程(六)—两行代码LangChain Agent API快速搭建智能体

前言

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

学完以上内容大家会发现伴随着用户应用和开发需求的复杂化,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的基本使用:

  1. 导入相关依赖包并编写查询天气的函数,注意本案例导入create_tool_calling_agent函数和AgentExecutor类,是本节智能体构建内容的关键。
python 复制代码
import requests

from langchain.agents import create_tool_calling_agent, tool, AgentExecutor
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate

@tool
def 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']
  1. 构建提示词模板组件和大模型组件(注意提示词模板中的agent提示符),为保证大模型具备更强的Agent能力,本期内容不再使用硅基流动的免费模型Qwen3-8B, 而是使用DeepSeek-V3模型,具体配置大家可参考LangChain接入大模型的基本方法
python 复制代码
# 构建提示模版, 提示词模板对于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",
)
  1. 本项目中不再使用model.bind()绑定模型组件和工具,而是使用create_tool_calling_agent快速构建代理,代码如下:
python 复制代码
#定义工具
tools = [get_weather]

# 直接使用`create_tool_calling_agent`创建代理
agent = create_tool_calling_agent(model, tools, prompt)
  1. 使用AgentExecutor构建Agent并快速运行代理, 代码和执行结果如下, 可以看到LangChain构建Agent是不是特别简单
python 复制代码
# 使用AgentExecutor运行当前Agent
agent_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会并联查询两个地方的天气,大家可以修改以上代码的提示词进行尝试:

python 复制代码
response=agent_executor.invoke({"input":"请问今天北京和杭州的天气怎么样,哪个城市更热??"})
print(response)

执行结果如下:

可以看到LangChain 同时调用get_weather工具获取了北京和杭州的天气情况并回答了用户问题,从上面可以看出LangChain Agent执行并联调用的流程如下:

这里给大家设立一个思考题,假如我们还是想通过Chains底层API的方法实现串并联调用该如何设计呢?欢迎大家在评论区和笔者讨论~

3.2 串联调用

如果用户想"查询北京和杭州现在的温度,并将结果写入本地的文件中。",LangChain该如何执行呢?我们设想LangChain Agent的执行结果如下图:

编写代码验证一下是否正确:

  1. 在上述代码中添加写入文件函数write_file()
python 复制代码
@tool
def write_file(content):
    """
    将指定内容写入本地文件。
    :param content: 必要参数,字符串类型,用于表示需要写入文档的具体内容。
    :return:是否成功写入
    """
    with open('res.txt', 'w', encoding='utf-8') as f:
        f.write(content)
    return "已成功写入本地文件。"
  1. write_file函数加入工具列表,并在提示词模板中说明大模型具备写入文件的能力
python 复制代码
#定义工具
tools = [get_weather, write_file]

# 构建提示模版, 提示词模板对于Agent的构建是必须的
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是天气助手,请根据用户的问题,给出相应的天气信息,并具备将结果写入文件的能力"),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}"), # 这部分agnet提示符不需要人工输入,同时也是写死的不可以修改
    ]
)
  1. 调用create_tool_calling_agent创建代理,并使用AgentExecutor执行当前Agent,可以看到LangChain Agent并联搜索得到了北京杭州的天气后,又串联使用文件写入工具把结果写入到res文件中:
python 复制代码
# 使用 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运行当前Agent
agent_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作为联网搜索工具。

  1. 执行命令pip install langchain-tavily安装Tavily依赖包
  1. 登录 Tavily官网, 可以用github账号登录,然后到Overview注册一个API Key, 每个月有1000次免费搜索案例。我们还需要将API KEY写入环境变量中,环境变量名为TAVILY_API_KEY
  1. 先来测试一下Tavily Search的基本功能, 编写如下代码:
python 复制代码
from langchain_community.tools.tavily_search import TavilySearchResults

search = TavilySearchResults(max_results=2)
search.invoke("苹果2025WWDC发布会")

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

  1. Tavily Search接入Agent的流程和上面讲述的相同,这里不加赘述了,完整代码如下:
python 复制代码
from langchain.agents import AgentExecutor, create_tool_calling_agent, tool
from langchain_core.prompts import ChatPromptTemplate
from langchain.chat_models import init_chat_model
from 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搭建智能体的方法还是非常简单的。下期分享我们将通过大模型调用浏览器自动化网络爬虫实战的项目带大家完整搭建一个Agent,大家一起期待一下吧~

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

相关推荐
一只鹿鹿鹿16 分钟前
【网络安全】信息网络安全建设方案(WORD)
人工智能·安全·spring·web安全·低代码
小拇指~17 分钟前
梯度下降的基本原理
人工智能·算法·计算机视觉
AndrewHZ38 分钟前
【图像处理基石】如何对遥感图像进行实例分割?
图像处理·人工智能·python·大模型·实例分割·detectron2·遥感图像分割
No0d1es1 小时前
第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2021年11月27日真题
python·青少年编程·蓝桥杯·选拔赛
CodeShare1 小时前
某中心将举办机器学习峰会
人工智能·机器学习·数据科学
天天找自己1 小时前
精通分类:解析Scikit-learn中的KNN、朴素贝叶斯与决策树(含随机森林)
python·决策树·机器学习·分类·scikit-learn
那就摆吧1 小时前
U-Net vs. 传统CNN:为什么医学图像分割需要跳过连接?
人工智能·神经网络·cnn·u-net·医学图像
深度学习实战训练营2 小时前
中英混合的语音识别XPhoneBERT 监督的音频到音素的编码器结合 f0 特征LID
人工智能·音视频·语音识别
WADesk---瓜子2 小时前
用 AI 自动生成口型同步视频,短视频内容也能一人完成
人工智能·音视频·语音识别·流量运营·用户运营
赵英英俊2 小时前
Python day31
开发语言·python