LangChain1.0速通指南(二)——LangChain1.0 create_agent api 基础知识

前言

上篇分享LangChain1.0速通指南(一)------LangChain1.0核心升级笔者分享了Langchain1.0三大核心升级:全新智能体构建 API create_agent、标准化内容块接口和精简的包结构。从笔者的分享中大家也能感受到在这些新特性中,create_agent 作为新一代智能体构建的标准 API,凭借其灵活的中间件机制和内置的结构化输出能力,不仅大幅提升了开发效率,也进一步拓展了智能体的功能边界。本期分享开始笔者将正式讲解create_agent, 本篇将聚焦于 create_agent 的基本使用方法,帮助大家快速掌握这一核心 API 的基础操作。

本系列内容适合所有对 LangChain 感兴趣的学习者,无论之前是否接触过 LangChain。当然,如果大家已经学习过我的专栏《深入浅出LangChain&LangGraph AI Agent 智能体开发》,相信可以更快上手。该专栏基于笔者在实际项目中的深度使用经验,系统讲解了使用LangChain/LangGraph如何开发智能体,目前已更新 23 讲,并持续补充实战与拓展内容。欢迎感兴趣的同学关注笔者的掘金账号与专栏,也可关注笔者的同名微信公众号 大模型真好玩 ,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。

一、环境搭建

LangChain 1.0 的环境搭建过程较为简单。笔者推荐使用 anaconda 创建一个新的虚拟环境(这里命名为 langchainenvnew),并建议将 Python 版本设置为 3.12 。创建环境的命令如下:

python 复制代码
conda create -n langchainenvnew python=3.12

环境创建完成后,安装本实验所需的依赖包。请执行以下命令:

复制代码
pip install -u langchain langchain-community langchain-deepseek

完成上述步骤后环境准备就绪,接下来开始编写今天的代码。

二、create_agent三要素:提示词,大模型和工具函数

在笔者文章深入浅出LangGraph AI Agent智能体开发教程(二)---LangGraph预构建图API快速创建Agent中提到,要利用create_react_agent api 构建一个基础的智能体,提示词,大模型和工具函数三要素必不可少。作为升级版,create_agent 同样基于这三个要素构建。接下来笔者使用经典的天气助手案例为大家详细说明create_agent的基本使用方法。

  1. 首先导入代码所需依赖,并通过自定义函数的方式编写一个模拟天气查询函数,注意工具函数必须包含清晰的函数说明,这是大模型判断是否调用自定义函数的重要依据。从依赖包的导入方式大家可以看出langchain的依赖包命名更加简洁明了。

    python 复制代码
    from langchain.chat_models import init_chat_model
    from langchain.tools import tool
    from langchain.agents import create_agent
    
    @tool
    def get_weather(loc:str)->str:
        """
        根据地点参数可以返回该地点的天气情况
        """
        return f"{loc} 天气是晴!气温23°"
  2. 现在已经具备了工具函数,接下来需要准备提示词和大语言模型,然后使用这三要素创建智能体:

    python 复制代码
    SYSTEM_PROMPT = "你是一个天气助手,具备调用get_weather天气函数获取指定地点天气的能力"
    
    model = init_chat_model(
        model="deepseek-chat",
        base_url="https://api.deepseek.com",
        api_key="你注册的deepseek api key"
    )
    
    agent = create_agent(
        model=model,
        tools=[get_weather],
        system_prompt=SYSTEM_PROMPT
    )
  3. 编写问题"北京天气怎么样"来测试智能体,并使用 agent.stream 方法实现流式输出,通过 pretty_print() 方法格式化显示每次的输出结果:

    python 复制代码
    question="北京的天气怎么样?"
    
    for step in agent.stream(
    {'messages': question},
        stream_mode="values"
    ):
        step["messages"][-1].pretty_print()
  4. 运行上述代码后,我们可以清晰地观察到 LangChain 1.0 智能体的完整执行流程:

    • 用户提问:接收到问题"北京天气怎么样"
    • 模型分析 :大语言模型识别出自身无法直接回答,决定调用工具函数 get_weather,并自动生成调用参数 {loc: 北京}
    • 工具执行:执行工具函数并获取返回结果
    • 结果整合:大语言模型根据工具函数的执行结果,生成格式化的最终回答

三、模型与消息机制

3.1 LangChain模型支持

在上述代码中,笔者使用了 DeepSeek 模型。LangChain 1.0 已经集成了超过 100 个模型供应商 ,为开发者提供了极大的灵活性。不同模型的具体使用方法都可以在 LangChain 官网的 Chat 模型集成页面 找到详细的文档说明,包括我们上面使用的DeepSeek 模型配置方法:

现代大语言模型(LLMs)不仅能够生成文本,还支持多种高级功能,包括工具调用 (调用外部工具如数据库查询或API)、结构化输出 (使模型响应遵循预定义格式)、多模态处理 (处理图像、音频等非文本数据)以及多步推理能力

3.2 LangChain消息类型解析

观察前面程序的运行结果,可以看到 create_agent 执行过程中产生了多种类型的消息。LangChain 定义了一套完整的消息类型系统,主要包括以下几种

  • SystemMessage:系统消息,用于设定智能体的角色定位与工具能力。精心设计的系统提示对智能体性能至关重要,它可以定义模型行为、回复风格,并对应答格式进行约束。
  • HumanMessage:人类消息,通常是用户的初始提问,也可以是必要的反馈或人为干预(例如决定是否继续执行特定操作)。
  • ToolMessage:工具消息,封装了函数调用结果的相关数据,显示工具调用的执行结果。
  • AIMessage:AI消息,包含大模型生成的所有响应内容。

create_agent 的消息管理机制与笔者在 深入浅出LangGraph AI Agent智能体开发教程(八)---LangGraph底层API实现ReACT智能体 中讲解的 messages 系统一脉相承。所有对话产生的历史消息都会被智能体完整保存下来,形成完整的对话上下文。智能体在决策时会综合分析所有历史消息,包括原始问题、工具调用记录和观察结果,并基于这些信息进行逐步推理。这种设计使得 create_agent 智能体天然具备多轮对话的能力,能够处理复杂的多步骤任务。

3.3 消息的多种表示方式

在实际编码中,LangChain 提供了灵活的消息表示方法。前面程序中的输出代码实际上是 HumanMessage(question) 的简写形式:

python 复制代码
for step in agent.stream(
    {'messages': HumanMessage(question)},
    stream_mode="values"
):
    step["messages"][-1].pretty_print()

除了直接使用消息对象外,还可以使用字典来表示消息,这种情况下需要明确指定消息的角色类型:

python 复制代码
for step in agent.stream(
    {'messages': {"role": "user", "content": question}},
    stream_mode="values"
):
    step["messages"][-1].pretty_print()

其他类型的消息用字典表示的格式如下:

python 复制代码
{"role": "system", "content": system_prompt}
{"role": "assistant", "content": ai_response}

3.4 消息的元数据与详细信息

前面程序中使用的 pretty_print() 方法用一种美观的格式展示了不同消息的内容,但实际上每条消息都包含了丰富的元数据信息。如果改用以下代码:

python 复制代码
for step in agent.stream(
    {'messages': question},
    stream_mode="values"
):
    # step["messages"][-1].pretty_print()
    print(step['messages'][-1])

查看输出的最后一条消息,可以看到 messages 消息列表中返回了详细的内容结构:其中content是模型的主要输出内容,usage_metadata包含了输入输出token的使用量统计,response_metadata包含了更详细的输入输出信息包括令牌使用,模型提供商,模型名称等。这些丰富的元数据为开发者监控智能体行为、优化性能和分析成本提供了宝贵的信息基础。

四、流式输出模式详解

在大语言模型或交互式智能体的应用中,由于计算复杂度较高,常常会遇到显著的响应延迟。为了提升用户体验,LangChain 提供了多种流式传输模式,让用户能够逐步获取生成内容,而不是等待完整响应。

4.1 不使用流模式

不使用流模式采用invoke方法,在这种情况下会等到产生最终结果后一次性显示出来,而不是逐个token传输:

python 复制代码
question="北京的天气怎么样?"

print(agent.invoke(
    {'messages': question},
)['messages'][-1].content)

4.2 值流模式

上面的示例程序中使用的是值流模式,该模式会在智能体的每个执行步骤完成后传输中间数据,让开发者能够观察到完整的决策过程,如上例所示,值流模式会分四次更新数据:HumanMessage(用户输入)、AIMessage(模型初始响应)、ToolMessage(工具调用结果)和最终的AIMessage(总结回答)。

python 复制代码
for step in agent.stream(
    {'messages': question},
    stream_mode="values"
):
    step['messages'][-1].pretty_print()

4.3 消息流模式

消息流模式会将模型的最终响应内容逐个token输出,而不是分步输出。

python 复制代码
question="北京的天气怎么样?"


for token, metadata in agent.stream(
    {'messages': question},
    stream_mode="messages"
):
    print(f"{token.content}", end="")

4.4 自定义模式

LangChain 还支持用户自定义流式传输,特别是在工具函数中插入自定义的输出内容。通过 get_stream_writer 可以获取图的流式传输对象,当流模式设置为 custom 时,输出将只包含在工具函数中自定义的内容:

python 复制代码
from langgraph.config import get_stream_writer

@tool
def get_weather(loc:str)->str:
    """
    根据地点参数可以返回该地点的天气情况
    """
    writer = get_stream_writer()
    writer(f"正在查询天气信息....")
    return f"{loc} 天气是晴!气温23°"


for chunk in agent.stream(
    {'messages': question},
    stream_mode="custom"
):
    print(chunk)

流模式还支持以数组形式指定多个模式,实现同时输出多种类型的内容:

python 复制代码
for chunk in agent.stream(
    {'messages': question},
    stream_mode=["values", "custom"]
):
    print(chunk)

可以看到,除了 values 模式的四个标准输出外,在工具函数调用阶段还输出了我们自定义的内容。系统通过元组对象对 valuescustom 输出进行区分:

自定义流式传输的核心优势在于:用户能够在数据逐步生成的过程中就进行自定义处理(例如在工具函数中感知执行阶段),而无需等待所有内容生成完毕。这显著提升了应用的响应速度和用户体验。

五、总结

本篇深入解析LangChain 1.0的create_agent API,涵盖环境搭建、智能体三要素(提示词、模型、工具函数)、消息类型及四种流模式。通过天气助手实例演示智能体完整执行流程,帮助大家快速掌握新一代智能体开发标准。当然本文讲述的仅仅是create_agent的基础使用,这次更新还有更多的核心特性尤其是中间件机制,下期内容我们接着分享,大家敬请期待!(本周出)

《深入浅出LangChain&LangGraph AI Agent 智能体开发》专栏内容源自笔者在实际学习和工作中对 LangChain 与 LangGraph 的深度使用经验,旨在帮助大家系统性地、高效地掌握 AI Agent 的开发方法,在各大技术平台获得了不少关注与支持。目前已更新23讲,正在更新实战篇和LangChain1.0速通指南速通指南篇,并随时补充笔者在实际工作中总结的拓展知识点。如果大家感兴趣,欢迎关注笔者的掘金账号与专栏,也可关注笔者的同名微信公众号 大模型真好玩 ,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。

相关推荐
开放知识图谱4 小时前
论文浅尝 | 图约束推理:在知识图谱上实现大语言模型的忠实推理(ICML2025)
人工智能·语言模型·自然语言处理·知识图谱
机器之心4 小时前
英伟达发射了首个太空AI服务器,H100已上天
人工智能·openai
西柚小萌新4 小时前
【深入浅出PyTorch】--8.1.PyTorch生态--torchvision
人工智能·pytorch·python
m0_650108245 小时前
【论文精读】迈向更好的指标:从T2VScore看文本到视频生成的新评测范式
人工智能·论文精读·评估指标·文本到视频生成·t2vscore·tvge数据集·视频质量评估
算家计算5 小时前
一张白纸,无限画布:SkyReels刚刚重新定义了AI视频创作
人工智能·aigc·资讯
Kandiy180253981875 小时前
PHY6252国产蓝牙低成本透传芯片BLE5.2智能灯控智能家居
人工智能·物联网·智能家居·射频工程
机器之心5 小时前
字节Seed团队发布循环语言模型Ouro,在预训练阶段直接「思考」,Bengio组参与
人工智能·openai
新智元6 小时前
AI 教父 Hinton 末日警告!你必须失业,AI 万亿泡沫豪赌才能「赢」
人工智能·openai
新智元6 小时前
CUDA 再见了!寒武纪亮出软件全家桶
人工智能·openai