news 2026/3/16 3:16:23

10分钟入门LangChain

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
10分钟入门LangChain

LangChain 是一个开源框架,内置了预构建的智能体(Agent)架构,并支持任意大语言模型(LLM)或工具集成——让你构建的智能体能够随生态系统的演进而快速适应。

LangChain 是构建基于大语言模型(LLM)的智能体和应用最简单的方式。仅需不到 10 行代码,你就可以连接 OpenAI、Anthropic、Google 等主流模型提供商(更多支持)。LangChain 提供了开箱即用的智能体架构和丰富的模型集成能力,帮助你快速上手,并无缝地将 LLM 融入你的智能体和应用程序中。

如果你希望快速构建智能体或自主应用,我们推荐使用 LangChain。

而当你有更高级的需求——例如需要结合确定性流程与智能体工作流、深度定制逻辑,或对延迟有严格控制时——建议使用我们的底层智能体编排框架和运行时 LangGraph。

LangChain 的 智能体(agents) 正是构建在 LangGraph 之上,从而天然支持 持久化执行(durable execution)、流式响应(streaming)、人在回路(human-in-the-loop)、状态持久化(persistence) 等高级能力。对于基础的 LangChain 智能体使用,你无需事先了解 LangGraph。

安装

要安装 LangChain 核心包,请使用以下命令:

  • pip:
pip install -U langchain # Requires Python 3.10+
  • uv:
uv add langchain # Requires Python 3.10+

LangChain 提供了对数百种大语言模型(LLM) 和数千种其他工具的集成支持。这些集成以独立的提供商包(provider packages) 形式存在。

例如,若要使用 OpenAI 或 Anthropic 的模型,需单独安装对应的集成包:

  • pip:
# Installing the OpenAI integration pip install -U langchain-openai # Installing the Anthropic integration pip install -U langchain-anthropic
  • uv:
# Installing the OpenAI integration uv add langchain-openai # Installing the Anthropic integration uv add langchain-anthropic

可以查看完整的集成列表,这个列表中可以查看如何安装对应的包。

核心优势

  1. 不同模型提供商的 API 各不相同,包括响应格式也存在差异。LangChain 对模型交互进行了标准化,让你可以无缝切换模型提供商,避免厂商锁定(vendor lock-in)。
  2. LangChain 的智能体抽象设计简洁,只需不到 10 行代码即可构建一个基础智能体。同时,它也提供了充分的灵活性,满足你对上下文工程(context engineering)的各种进阶需求。
  3. LangChain 的智能体底层基于 LangGraph 实现,因此能直接利用 LangGraph 提供的持久化执行、人在回路支持、状态持久化等强大能力。
  4. 借助可视化工具,LangSmith 可深入追踪复杂智能体的行为:展示执行路径、捕获状态变迁,并提供详细的运行时指标,大幅提升可观测性与调试效率。

快速入门

本快速入门指南将带你从一个简单的设置开始,在短短几分钟内构建出一个功能完整的 AI 智能体。

前提条件

要运行以下示例,你需要:

  • 安装 LangChain 软件包
  • 注册 Claude (Anthropic) 账户并获取 API 密钥
  • 在终端中设置 ANTHROPIC_API_KEY 环境变量

虽然这些示例使用的是 Claude,但你可以通过更改代码中的模型名称并设置相应的 API 密钥,来使用任何受支持的模型。

注:上面的官网给的前提条件,我由于本地有离线部署的大模型就不用Claude演示了。

构建一个基础智能体

首先创建一个可以回答问题并调用工具的简单智能体。该智能体将使用 本地部署的qwen 作为其语言模型,使用一个基础天气函数作为工具,并使用一个简单的提示词来指导其行为。

fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAI model=ChatOpenAI(model="qwen3-32b",base_url="https://xxxx,api_key="xxx",temperature=0.7)defget_weather(city:str)->str:"""获取指定城市的天气信息。"""returnf"{city}总是阳光明媚!"agent=create_agent(model="claude-sonnet-4-5-20250929",tools=[get_weather],system_prompt="你是一个乐于助人的助手",)# 运行智能体result=agent.invoke({"messages":[{"role":"user","content":"what is the weather in sf"}]})print(result["messages"][-1].content)

运行结果:

旧金山的天气总是阳光明媚,非常宜人!需要我提供更详细的天气信息吗?

要了解如何使用 LangSmith 追踪你的智能体,请参阅LangSmith 文档。

构建一个真实世界的智能体

接下来,我们将构建一个实用的天气预报智能体,展示关键的生产级概念:

  • 详细的系统提示词以改善智能体行为
  • 创建工具以集成外部数据
  • 模型配置以获得一致的响应
  • 结构化输出以确保可预测的结果
  • 对话记忆以实现类聊天交互
  • 创建并运行智能体以构建一个功能完整的智能体
  • 让我们逐步完成每个步骤:
  1. 定义系统提示词
    系统提示词定义了你的智能体的角色和行为。保持具体且可操作:
SYSTEM_PROMPT="""你是一位擅长双关语的天气预报专家。 你可以使用两个工具: - get_weather_for_location:用于获取特定位置的天气 - get_user_location:用于获取用户的位置 如果用户询问天气,请确保你知道位置。如果从问题中可以看出他们指的是自己所在的位置,请使用 get_user_location 工具来查找他们的位置。"""
  1. 创建工具
    工具 允许模型通过调用你定义的函数与外部系统交互。 工具可以依赖于运行时上下文,也可以与智能体记忆交互。

注意下面的get_user_location工具如何使用运行时上下文:

fromdataclassesimportdataclassfromlangchain.toolsimporttool,ToolRuntime@tooldefget_weather_for_location(city:str)->str:"""获取指定城市的天气。"""returnf"{city}总是阳光明媚!"@dataclassclassContext:"""自定义运行时上下文模式。"""user_id:str@tooldefget_user_location(runtime:ToolRuntime[Context])->str:"""根据用户 ID 检索用户信息。"""user_id=runtime.context.user_idreturn"佛罗里达"ifuser_id=="1"else"旧金山"

工具应该有良好的文档说明:它们的名称、描述和参数名称都会成为模型提示的一部分。
LangChain 的@tool装饰器会添加元数据,并通过ToolRuntime参数启用运行时注入。

  1. 配置大模型
    根据你的用例,使用正确的参数设置你的语言模型:
fromlangchain.chat_modelsimportinit_chat_model model=init_chat_model("claude-sonnet-4-5-20250929",temperature=0.5,timeout=10,max_tokens=1000)

根据所选的模型和提供商,初始化参数可能会有所不同;请参考它们的参考页面以获取详细信息。

  1. 定义返回格式
    如果需要智能体的响应符合特定模式,可以选择定义结构化响应格式。
fromdataclassesimportdataclass# 我们在这里使用 dataclass,但也支持 Pydantic 模型。@dataclassclassResponseFormat:"""智能体的响应模式。"""# 一个双关语响应(始终必需)punny_response:str# 如果有的话,关于天气的任何有趣信息weather_conditions:str|None=None
  1. 增加记忆
    为你的智能体添加记忆以在交互之间保持状态。 这使得智能体能够记住之前的对话和上下文。
fromlanggraph.checkpoint.memoryimportInMemorySaver checkpointer=InMemorySaver()

在生产环境中,应使用持久化的检查点器,将数据保存到数据库中。
有关更多详细信息,请参阅添加和管理记忆。

  1. 创建并运行agent
    现在,使用所有组件组装你的智能体并运行它!
fromlangchain.agents.structured_outputimportToolStrategy agent=create_agent(model=model,system_prompt=SYSTEM_PROMPT,tools=[get_user_location,get_weather_for_location],context_schema=Context,response_format=ToolStrategy(ResponseFormat),checkpointer=checkpointer)# `thread_id` 是特定对话的唯一标识符。config={"configurable":{"thread_id":"1"}}response=agent.invoke({"messages":[{"role":"user","content":"外面的天气怎么样?"}]},config=config,context=Context(user_id="1"))print(response['structured_response'])# ResponseFormat(# punny_response="佛罗里达今天依然'阳光灿烂'!阳光整天都在播放'射线电台'的热门歌曲!我得说,这是进行一些'太阳庆祝'的完美天气!如果你希望下雨,恐怕这个想法已经'泡汤'了——天气预报依然'清晰'明亮!",# weather_conditions="佛罗里达总是阳光明媚!"# )# 注意,我们可以使用相同的 `thread_id` 继续对话。response=agent.invoke({"messages":[{"role":"user","content":"谢谢!"}]},config=config,context=Context(user_id="1"))print(response['structured_response'])# ResponseFormat(# punny_response="你'雷'厉风行地受欢迎!帮助你随时了解天气总是'轻而易举'。我只是在'云'端徘徊,随时准备在你需要时'倾盆'而下更多天气预报。祝你在佛罗里达的阳光下度过'阳光灿烂'的一天!",# weather_conditions=None# )
完整代码
fromlangchain.toolsimporttool,ToolRuntimefromlangchain_openaiimportChatOpenAIfromdataclassesimportdataclassfromlanggraph.checkpoint.memoryimportInMemorySaverfromlangchain.agents.structured_outputimportToolStrategyfromlangchain.agentsimportcreate_agent SYSTEM_PROMPT="""你是一位擅长双关语的天气预报专家。 你可以使用两个工具: - get_weather_for_location:用于获取特定位置的天气 - get_user_location:用于获取用户的位置 如果用户询问天气,请确保你知道位置。如果从问题中可以看出他们指的是自己所在的位置,请使用 get_user_location 工具来查找他们的位置。"""@tooldefget_weather_for_location(city:str)->str:"""获取指定城市的天气。"""returnf"{city}总是阳光明媚!"@dataclassclassContext:"""自定义运行时上下文模式。"""user_id:str@tooldefget_user_location(runtime:ToolRuntime[Context])->str:"""根据用户 ID 检索用户信息。"""user_id=runtime.context.user_idreturn"佛罗里达"ifuser_id=="1"else"旧金山"model=ChatOpenAI(model="qwen3-32b",base_url="https://xxxx,api_key="xxx",temperature=0.7)# 我们在这里使用 dataclass,但也支持 Pydantic 模型。@dataclassclassResponseFormat:"""智能体的响应模式。"""# 一个双关语响应(始终必需)punny_response:str# 如果有的话,关于天气的任何有趣信息weather_conditions:str|None=Nonecheckpointer=InMemorySaver()agent=create_agent(model=model,system_prompt=SYSTEM_PROMPT,tools=[get_user_location,get_weather_for_location],context_schema=Context,response_format=ToolStrategy(ResponseFormat),checkpointer=checkpointer)# `thread_id` 是特定对话的唯一标识符。config={"configurable":{"thread_id":"1"}}response=agent.invoke({"messages":[{"role":"user","content":"外面的天气怎么样?"}]},config=config,context=Context(user_id="1"))print(response['structured_response'])

结果:

ResponseFormat(punny_response='佛罗里达的天气今天阳光明媚,温度宜人!不过要小心——这片土地上的‘橘’(Ji)祥如意可能比天气更让人惊喜哦~', weather_conditions='晴朗,28°C,微风')

总结

恭喜!你现在拥有一个能够:

  • 理解上下文并记住对话
  • 智能地使用多个工具
  • 以一致的格式提供结构化响应
  • 通过上下文处理用户特定信息
  • 在交互之间保持对话状态

的 AI 智能体!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 2:08:49

SpringBoot百万文件夹上传的目录结构保持技巧

大文件传输系统技术调研与解决方案设计 一、项目背景与需求分析 作为江苏某软件公司的前端工程师,我目前负责一个需要支持20GB级大文件传输的项目。该项目需要实现以下核心功能: 支持单文件和文件夹的上传下载(文件夹需保留完整层级结构&a…

作者头像 李华
网站建设 2026/3/12 22:42:22

洪水淹没范围评估:GLM-4.6V-Flash-WEB对比历史水位图像

洪水淹没范围评估:GLM-4.6V-Flash-WEB对比历史水位图像 极端天气频发的今天,一场暴雨就可能让城市陷入内涝困境。应急指挥中心的屏幕上,一张刚传来的现场照片——水面几乎淹没了桥墩,远处隐约可见标着“2016年最高水位”的红色警示…

作者头像 李华
网站建设 2026/3/11 7:45:58

新能源电池极片检测:GLM-4.6V-Flash-WEB分析涂布均匀性

新能源电池极片检测:GLM-4.6V-Flash-WEB分析涂布均匀性 在新能源汽车加速普及的今天,动力电池的生产质量已成为决定整车性能与安全的核心命脉。而在这条精密制造链条中,极片涂布作为锂电池前段工艺的关键环节,其均匀性直接影响电极…

作者头像 李华
网站建设 2026/3/12 12:48:48

springboot新能源科普知识网站商城考试论坛系统-vue

目录系统概述核心功能模块技术亮点应用场景项目技术支持论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统概述 SpringBoot新能源科普知识网站商城考试论坛系统-Vue是一个综合性平台…

作者头像 李华
网站建设 2026/3/13 12:32:29

交通拥堵热点发现:GLM-4.6V-Flash-WEB统计车辆密度

交通拥堵热点发现:基于 GLM-4.6V-Flash-WEB 的车辆密度统计新范式 在早晚高峰穿梭于城市主干道的司机们,或许都曾经历过那种“一眼望不到头”的车流——前方没有事故,信号灯也正常,但就是寸步难行。这种隐性的交通瓶颈&#xff0c…

作者头像 李华
网站建设 2026/3/9 21:58:30

眼科OCT图像分析:GLM-4.6V-Flash-WEB测量视网膜厚度

眼科OCT图像分析:GLM-4.6V-Flash-WEB测量视网膜厚度 在现代眼科临床实践中,医生每天要面对数十甚至上百张OCT图像。这些高分辨率的横截面影像虽然能清晰展示视网膜各层结构,但手动测量黄斑区厚度、追踪病灶变化的过程却极其耗时且易受主观因素…

作者头像 李华