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智能体开发免费获取。

相关推荐
AngelPP9 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年9 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼9 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS9 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
warm3snow9 小时前
Claude Code 黑客马拉松:5 个获奖项目,没有一个是"纯码农"做的
ai·大模型·llm·agent·skill·mcp
天翼云开发者社区10 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈10 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang11 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx
shengjk112 小时前
NanoClaw 深度剖析:一个"AI 原生"架构的个人助手是如何运转的?
人工智能