这里就正式进入LangChain的详细解析了感兴趣可以持续关注。1. 内容与目标LangChain它是一个用于开发由大语言模型 (LLM) 驱动的应用程序的框架。通过前几篇我们已经说明尽管大模型在某些方面表现振奋人心但使用原生 LLM 可能会存在一些问题。例如将其当作搜索引擎去使用LLM 生成的答案可能要比其他搜索引擎查到的答案更符合你的预期但要是在复杂的场景下使用如将 LLM 嵌入应用程序时却遭遇了全新难题简单提示词Prompt得到的答案经常出现幻觉提示词结构是否可以统一规范如何实现开发过程中大模型的轻松、灵活切换大模型输出是非结构化的怎样与要求结构化数据的程序接口交互如何克服预训练模型知识陈旧的问题引入实时更新如何连接模型与外部工具或系统执行具体任务...LangChain 框架的核心目标就是应对这些挑战。它通过将自然语言处理流程拆解为标准化组件让开发者能够自由组合并高效定制工作流。2. LangChain软件安装包LangChain 生态系统包含不同的包用来准确选择要安装的功能。如下图所示主 langchain 包这个包是使用 LangChain 的起点安装方式如下pip install langchainlangchain-core 包除了 langsmith SDK 之外LangChain 生态系统中的所有包都依赖于 langchain-core包含其它包使用的基类和抽象以及 LangChain LCEL表达式语言。它由 langchain 包自动安装不需要显式安装该包。但是如果使用的功能仅在该依赖项的特定版本中可用则可以选择手动安装。如果手动安装则应确保已安装或固定的版本与所使用的任何其他集成包兼容。pip install langchain-coreIntegrations 集成包LangChain 的大部分价值来自于将各种能力进行集成如各类模型集成如 OpenAI 和 Anthropic、各类组件集成如数据存储、工具等等。LangChain 中集成好的包见这里。对于所需依赖项我们需要单独安装。例如要使用 OpenAI可以运行pip install langchain-openailangchain-community 包简单来说任何尚未拆分到独立包中的集成都存在于 langchain-community 包中。安装方式pip install langchain-communitylanggraph 包langgraph 是一个库用于使用 LLM 构建有状态的应用程序。它与 LangChain 顺利集成。安装方式pip install langgraphLangSmith SDKLangSmith SDK 由 LangChain 自动安装。但它不依赖于 langchain-core如果需要可以独立安装和使用安装方式pip install langsmith3. 详细过程3.1 步骤 1申请 API key 并配置环境变量1. 申请 API key以 DeepSeek 为例官网地址DeepSeek如果没有账号先注册账号登录成功后找到个人中心选择 API keys 配置页面点击 “Create new secret key” 按钮新增 API key将 API Key 在自己本地保存好后续接入 DeepSeek 大模型时需要使用。2. 配置环境变量将 API Key 配置在环境变量中主要是为了保证其隐私性。由于 api key 比较隐私为避免在程序中暴露可提前将 api key 配置在环境变量中这样在程序中就可以通过获取对应环境变量拿到 api key保证了 api key 的隐私。3.2 步骤 2定义大模型1.安装 DeepSeek 集成包pip install -U langchain-deepseek2.定义大模型核心代码# 定义大模型 from langchain_deepseek import ChatDeepSeek model ChatDeepSeek(modeldeepseek-chat)3.3 步骤 3定义消息列表核心代码# 定义消息列表 from langchain_core.messages import HumanMessage, SystemMessage messages [ SystemMessage(contentTranslate the following from English into Chinese), HumanMessage(contenthi!), ]参数说明SystemMessage表示系统角色消息系统消息通常作为输入消息序列中的第一条传入是用来启动 AI 行为的消息。HumanMessage表示用户角色消息是来自用户的、从用户传递到模型的消息。3.4 步骤 4调用大模型model 是 LangChainRunnable可运行接口的实例这意味着 model 提供了一个标准接口供我们与之交互。要简单地调用模型我们可以将消息列表传递给 .invoke 方法。使用 .invoke 方法进行大模型调用核心代码result model.invoke(messages) print(result)输出结果调试可以看见 result 类型为 AIMessagecontent你好! additional_kwargs{refusal: None} response_metadata {token_usage: {completion_tokens: 2, prompt_tokens: 20, total_tokens: 22, completion_tokens_details: {accepted_prediction_tokens: 0, audio_tokens: 0, reasoning_tokens: 0, rejected_prediction_tokens: 0}, prompt_tokens_details: {audio_tokens: 0, cached_tokens: 0}}, model_name: deepseek-chat, system_fingerprint: None, id: chatcmpl-C5l29mi6KkQSFO3qaElDJD5Lj9nBn, service_tier: default, finish_reason: stop, logprobs: None} idrun--777ef0be-55c2-411a-a4ab-104a45c22f20-0 usage_metadata{input_tokens: 20, output_tokens: 2, total_tokens: 22, input_token_details: {audio: 0, cache_read: 0}, output_token_details: {audio: 0, reasoning: 0}}输出说明AIMessage来自 AI 的消息。从聊天模型返回作为对提示输入的响应。content消息的内容。additional_kwargs与消息关联的其他有效负载数据。对于来自 AI 的消息可能包括模型提供程序编码的工具调用。response_metadata响应元数据。例如响应标头、logprobs、令牌计数、模型名称。侧重于 “响应” 本身的信息比如这次请求的 ID、使用的模型版本、以及服务提供商返回的所有原始元数据。它主要用于调试、日志记录和获取请求的上下文信息。usage_metadata消息的使用元数据例如令牌计数。侧重于 “资源消耗” 的量化信息即这次请求消耗了多少 Token。它主要用于成本计算、监控和预算控制。3.5 步骤 5输出解析若只想输出聊天模型返回的结果字符串可以使用 StrOutputParser 输出解析器组件将大模型输出结果解析为最可能的字符串。核心代码# 定义str字符串输出解析器 from langchain_core.output_parsers import StrOutputParser parser StrOutputParser() print(parser.invoke(result))输出结果你好!3.6 步骤 6链式执行通过上述步骤无论是调用大模型还是输出解析我们发现每次都调用了一个 invoke() 方法最终才会得到我们想要的结果。对于 LangChain它给我们提供了链式执行的能力即我们只需要定义各个 “组件”将它们 “链起来”一次性执行即可得到最终效果。核心代码如下# 定义大模型 model ChatDeepSeek(modeldeepseek-chat) # 定义消息列表 messages [ SystemMessage(contentTranslate the following from English into Chinese), HumanMessage(contenthi!), ] # 定义输出解析器 parser StrOutputParser() # 定义链 chain model | parser # 执行链 result chain.invoke(messages) print(result)输出结果你好!快速上手完整代码参考from langchain_deepseek import ChatDeepSeek from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.output_parsers import StrOutputParser # 定义大模型 model ChatDeepSeek(modeldeepseek-chat) # 定义消息列表 messages [ SystemMessage(contentTranslate the following from English into Chinese), HumanMessage(contenthi!), ] # 定义输出解析器 parser StrOutputParser() # 定义链 chain model | parser # 执行链 result chain.invoke(messages) print(result)3. 引出 LangChain 相关概念3.1 Runnable 接口Runnable 接口是使用 LangChain Components组件的基础。概念说明Components组件用来帮助当我们在构建应用程序时提供了一系列的核心构建块例如语言模型、输出解析器、检索器、编译的 LangGraph 图等。Runnable 定义了一个标准接口允许 Runnable 组件Invoked调用: 单个输入转换为输出。Batched批处理: 多个输入被有效地转换为输出。Streamed流式传输: 输出在生成时进行流式传输。Inspected检查: 可以访问有关 Runnable 的输入、输出和配置的原理图信息。Composed组合: 可以组合多个 Runnable使用 LCEL 协同工作以创建复杂的管道。因此在快速上手中我们定义的语言模型model、输出解析器StrOutputParser都是Runnable接口的实例他们都使用了 Invoked调用的能力回顾一下# 语言模型model model ChatOpenAI(modelgpt-5-mini) result model.invoke(messages) # 语言模型是 Runnable 接口实例允许invoke调用 # 输出解析器StrOutputParser parser StrOutputParser() parser.invoke(result) # 输出解析器是 Runnable 接口实例允许invoke调用3.2 LangChain Expression LanguageLangChain Expression LanguageLCEL采用声明性方法从现有 Runnable 对象构建新的 Runnable 对象。通过 LCEL 构建出的新的 Runnable 对象被称为 RunnableSequence表示可运行序列。 RunnableSequence 就是一种链参考步骤 6。通过调试步骤 6 就能发现chain 的类型就是 RunnableSequence。重要的是RunnableSequence 也是 Runnable 接口的实例它实现了完整的 Runnable 接口因此它可以用与任何其他 Runnable 相同的姿势使用。回顾一下chain model | parser chain.invoke(messages) # 链是 Runnable 接口实例允许invoke调用可以看到LCEL 其实是一种编排解决方案它使 LangChain 能够以优化的方式处理链的运行时执行。任何两个 Runnable 实例都可以 “链” 在一起成序列。上一个可运行对象的.invoke()调用的输出作为输入传递给下一个可运行对象。方法就是使用|管道 / 运算符chain model | parser它通过两个 Runnable 对象去创建一个 RunnableSequence。实际上 LangChain 重载了|运算符使用|运算符就相当于from langchain_core.runnables import RunnableSequence chain RunnableSequence(firstmodel, lastparser)除此之外可以使用.pipe方法代替。这也相当于|运算符在 Unix/Linux 系统中pipe () 系统调用和 | 管道操作符都用于实现进程间通信这里同样也是迁移过来的用法。chain model.pipe(parser)以上内容就是为了大家能够快速上手LangChain而准备的内容下一篇我们将要介绍关于聊天模型的相关内容。
企业数字化 ERP 产品动态
相关推荐
Dota 2玩家遥测二分类实战 从行为数据预测高水平玩家概率 这道 Kaggle 题目的核心不在游戏背景,而在行为遥测建模。任务要求根据 Dota 2 对局中的操作与交互数据,预测玩家属于高水平类别的概率,评估标准采用 AUC,重点考察排序能力而非固定阈值下的分类结果。
从技术实践看,这类题目非常适合用来训练结构化数据项目的完整闭环能力… · 2026/9/26 15:59:21
交易流水多标签分类实战 用 Kaggle 预测客户未来一周品类购买概率 这道 Kaggle 竞赛的价值,不在于做一次普通二分类练习,而在于把一年期交易流水还原成真实可用的客户意图预测任务。目标是针对 8 个商品类别,判断客户在未来 7 天内发生购买的概率,本质上属于零售金融场景下的多标签分类问题。
这类题目很适合作为从数据分析迈向机器学习建… · 2026/9/26 15:59:21
银行交易年龄分组预测实战 从交易流水到客户画像分类建模 这道 Kaggle 赛题聚焦银行客户年龄分组预测,输入并不是现成用户特征,而是近两千万条交易流水。真正的建模对象并非单笔消费,而是客户长期行为在金额、频次、品类和时间上的组合模式。
这类任务很接近真实金融与零售运营场景。年龄段标签看似简单,背后考验的是如何把明细表… · 2026/9/26 15:59:21
KernelSU元模块开发实战:架构设计、挂载策略与性能优化 1. 元模块到底解决了什么问题1.1 从模块系统的痛点说起KernelSU 的模块机制本质上是一套“开机时把文件挂载到系统分区”的方案。传统模块的做法很直接:模块包里放一个module.prop描述信息,再放一堆脚本和文件,开机时由内核态的模块加载器把内… · 2026/9/26 16:24:37
nvidia-smi详解:从GPU利用率到工程级日志监控与故障排查 训练跑着跑着,终端里敲下nvidia-smi,看到 GPU-Util 在 30% 到 40% 之间来回跳,这种事情我相信很多人都不陌生。网上一搜,有人说数据加载太慢,有人说是 kernel 没写好,也有人怀疑自己是不是买到了有问题的卡… · 2026/9/26 16:24:37
Claude Code 被通报禁用后,开发者如何用 TaoToken 统一 Key 管理 AI 编程工具? /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:24:37
短波红外成像:从原理到选型,解决可见光检测盲区 入行机器视觉这些年来,我最大的感受是:项目卡壳,很多时候不是算法不够强,而是镜头里的世界分辨率太低了。拿可见光相机去拍浅色塑料瓶、湿漉漉的纸张、未剥壳的坚果,经常是一片糊——你看得见颜色和轮廓,却… · 2026/9/26 16:24:31
NB-IoT+边缘网关破解800米电表远距通信难题 1. 项目概述:为什么远距离连接智能电表与传感器成了“卡脖子”环节?最近帮一个做能源监测的客户做现场调试,发现他们用的旧方案——RS485线缆直连电表和温湿度、电流互感器、漏电传感器——在厂区二期扩建后彻底崩了。原来300米内稳如老狗的通… · 2026/9/26 16:24:31
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46