发布时间:2026/8/25 12:01:06
LangChain:ChatModel 聊天模型与可配置模拟器 目录一、什么是聊天模型1.1 什么是消息1.2 模型的分类1.2.1 真实聊天模型1.2.2 可配置模拟器模型1.3 与LLM的区别1.4 注意事项二、通过API来定义聊天模型2.1 ChatDeepSeek2.2 init_chat_model2.2.1 函数定义2.2.2 实例1创建无配置模型2.2.3 实例2创建可配置模型2.2.4 实例3创建带有默认值的可配置模型一、什么是聊天模型在 LangChain 体系里聊天模型 ChatModel是专门面向对话场景的模型抽象区别于老式的大文本 LLM。老式LLM输入字符串输出字符串ChatModel聊天模型输入消息对象列表输出消息对象AIMessage这就调用.invoke()拿到的返回值。1.1 什么是消息聊天模型不拿裸字符串当完整输入使用消息对象区分角色SystemMessage系统提示设定角色、规则HumanMessage用户输入人类说的话AIMessageAI 模型返回的消息ToolMessage工具调用返回结果from langchain_core.messages import HumanMessage, SystemMessage chat_model ChatDeepSeek( modeldeepseek-chat, # 或 deepseek-reasoner temperature0, max_tokensNone, timeoutNone, max_retries2, ) messages [ SystemMessage(content你是助手), HumanMessage(content你叫什么名字) ] res chat_model.invoke(messages) # res 得到 AIMessage 对象res.content 才是文本 print(res.content)1.2 模型的分类1.2.1 真实聊天模型代表ChatOpenAI、ChatAnthropic、ChatZhipuAI实例化的时候就创建底层 http 客户端构造时填入model、temperature、api_key、max_tokens直接向真实大模型服务发网络请求如果想要运行时动态修改参数需要混入RunnableConfigurable配置configurable_fields。chat_model ChatDeepSeek( modeldeepseek-chat, # 或 deepseek-reasoner temperature0, max_tokensNone, timeoutNone, max_retries2, )1.2.2 可配置模拟器模型init_chat_model()不传入model参数时返回它只是占位包装器不是真正的聊天模型。不会创建底层模型客户端不会发起网络请求实现了BaseChatModel全部接口对外 API 和真实模型一模一样。invoke 调用阶段读取config[configurable]里的运行时配置用拿到的model、model_provider和其他参数现场构建真实聊天模型实例。特例不传入model时model、model_provider无需写进configurable_fields就可以运行时配置其余所有参数必须加入configurable_fields白名单运行时才允许修改。使用场景开发通用框架把选用什么模型推迟到业务请求到来时才确定避免代码硬编码模型modelinit_chat_model(configurable_fields{model,model_provider, temperature, max_tokens}) aimessmodel.invoke( 你是谁, config{configurable:{ model:deepseek-chat,model_provider:deepseek,temperature:0.6,max_tokens:100}} ) print(aimess.content)1.3 与LLM的区别项目ChatModel聊天模型老式 LLM输入消息对象列表[HumanMessage,SystemMessage]原始字符串输出AIMessage对象.content拿文本原始字符串原生支持system 提示、工具调用、多轮对话需要手动拼接字符串代表ChatOpenAIOpenAI1.4 注意事项返回值是对象不是字符串直接打印对象会看到完整对象必须取.content工具调用场景AIMessage.content可以为空工具调用数据放在additional_kwargs[tool_calls]_ConfigurableModel模拟器只是包装只有 invoke 那一刻才创建真实模型模拟器本身没有 api_key、model 这些真实客户端属性模拟器仅model/model_provider享有默认可配置特权其余参数必须写进configurable_fields。简单总结聊天模型是 LangChain 针对对话任务的抽象接收结构化消息返回结构化消息对象模拟器是它的延迟实例化包装变体专门用于运行时动态选定模型。二、通过API来定义聊天模型2.1 ChatDeepSeekChatDeepSeek 是 LangChain 官方维护的 DeepSeek 云 API 聊天模型包装器属于 langchain-deepseek 包基类是 BaseChatOpenAIBaseLanguageModel └── BaseChatModel └── BaseChatOpenAI └── ChatDeepSeek # langchain-deepseek 提供参数说明model模型名如deepseek-v4-flash/deepseek-v4-protemperature采样温度默认 1max_tokens生成上限timeout/max_retries客户端超时与重试api_key不传则读系统环境变量DEEPSEEK_API_KEY代码示例from langchain_deepseek import ChatDeepSeek from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.output_parsers import StrOutputParser #直接定义模型自动读取系统环境变量中的 DEEPSEEK_API_KEY model ChatDeepSeek( modeldeepseek-chat, # 或 deepseek-reasoner temperature0, max_tokensNone, timeoutNone, max_retries2, ) messages[ SystemMessage(content), HumanMessage(contenthi!), ] parserStrOutputParser() 定义链 chainmodel | parser chainmodel.pipe(parser) 执行链 print(chain.invoke(messages))其中StrOutputParserLangChain是LangChain 最简单的输出解析器把大模型返回的AIMessage对象提取里面的文本.content输出普通 Python 字符串 str。关于的invoke() 调用。该方法是将单个输入转换为对应的输出。例如对于聊天模型来说就是根据用户的问题输入并输出相应的答案。2.2 init_chat_model上面的ChatDeepSeek 用于明确创建 DeepSeek 聊天模型的实例。而init_chat_model()是一个工厂函数它可以初始化多种支持的聊天模型如 OpenAI、Anthropic、FireworksAI 等不仅仅是 DeepSeek 的聊天模型。2.2.1 函数定义langchain.chat_models.base.init_chat_model( model: str, *, model_provider: str | None None, configurable_fields: Literal[None] None, config_prefix: str | None None, **kwargs: Any, ) - BaseChatModel参数名参数描述model要使用的模型的名称model_provider模型提供方。支持的 model_provider 值和相应的集成包有• openai - langchain-openai• anthropic - langchain-anthropic• google_genai - langchain-google-genai• ollama - langchain-ollama• deepseek - langchain-deepseek如果未指定将尝试从模型推断 model_providerconfigurable_fields设置哪些模型参数是可配置的。若配置为・None: 没有可配置的字段。・any所有字段都是可配置的类似 api_key、base_url 等可以在运行时更改。・Union [List [str], Tuple [str, …]]: 指定的字段是可配置的。config_prefix配置为非空字符串则模型将在运行时通过查找config[configurable][{config_prefix}_{param}]字段设置配置项。配置为空字符串那么模型将可以通过config[configurable][{param}]字段设置配置项。temperature采样温度温度值越高AI 回答越天马行空温度越低回答越保守靠谱。max_tokens要生成的最大令牌数timeout请求超时时间max_retries最大重试次数openai_api_key / api_keyOpenAI API 密钥。如果未传入将从环境变量中读取OPENAI_API_KEY。base_urlAPI 请求的基本 URL。……其他拓展参数init_chat_model() 返回值说明函数返回一个与指定的 model_name 和 model_provider 相对应的 BaseChatModel如 ChatOpenAIChatAnthropic 等。注意要是模型可配置则返回一个聊天模型模拟器该模拟器在传入配置后于运行时才会初始化底层模型。2.2.2 实例1创建无配置模型使用不同的模型提供方需要安装为其各自包与设置各自的 API Key 环境变量例如OpenAI 环境变量配置为OPENAI_API_KEY your_openai_api_key安装命令pip install -U langchain-openaiAnthropic 环境变量配置为ANTHROPIC_API_KEY your_anthropic_api_key安装命令pip install -U langchain-anthropicDeepSeek 环境变量配置为DEEPSEEK_API_KEY your_deepseek_api_key安装命令pip install -U langchain-deepseekGoogle VertexAI 环境变量配置为GOOGLE_API_KEY your_google_api_key安装命令pip install -U langchain-google-vertexai使用init_chat_model创建一个聊天模型deepseek_modeldeepseek_modelinit_chat_model(deepseek-chat,model_providerdeepseek,temperature0) print(deepseek_model.invoke(你是谁).content\n)2.2.3 实例2创建可配置模型以通过指定configurable_fields来创建一个运行时可配置的模型。如果不指定model值则“model”和“model_provider”将默认可配置。也就是说在使用init_chat_model()创建可配置模型时可以通过configurable_fields指定运行时可配置的参数未指定的参数默认不可配置。但model与model_provider这两个参数除外如果在调用init_chat_model()时未传递且未通过configurable_fields指定它们仍然可以在运行时进行配置。#这里我们没有事先指定model也没有通过configurable_fields将其指定为可配置项 modelinit_chat_model(temperature0) #但是我们在运行的时候依然可以配置model字段,且编译时会自动按照model推到provider print(model.invoke( 你是谁, config{configurable:{model:deepseek-chat}} ))除了model与model_provider之外的其他参数如果需要运行时配置必须在调用init_chat_model接口的时候通过参数configurable_fields来指定。modelinit_chat_model(modeldeepseek-chat,configurable_fields{model_provider, temperature, max_tokens}) #参数model_provider, temperature, max_tokens运行时指定 aimessmodel.invoke( 你是谁, config{configurable:{model_provider:deepseek,temperature:0.6,max_tokens:100}} ) print(aimess.content)2.2.4 实例3创建带有默认值的可配置模型如果我们在调用init_chat_model()接口的时候给参数添加了默认值我们还希望该参数在后续运行时也要动态配置与变化那么我们就可以创建出带有默认值的可配置模型。具体做法就是将该参数也添加到configurable_fields中.modelinit_chat_model(modeldeepseek-chat, temperature0.5, max_tokens50, configurable_fields{model_provider, temperature, max_tokens} ) #参数model_provider, temperature, max_tokens运行时指定 aimessmodel.invoke( 你是谁, config{configurable:{model_provider:deepseek,temperature:0.6,max_tokens:100}} ) print(aimess.content)

相关新闻

2026/8/25 12:01:06

从简历到技术面,Java面试考察的关键能力

一份简历躺在邮箱里七秒,决定它命运的不是学历栏,而是技术栈后面那行不起眼的“熟悉XXX”。绝大多数Java候选人死在第一关,不是技术不够,而是简历上的每一个关键词都在替面试官划好考点,而你自己根本没意识到。从简历初…

2026/8/25 14:36:45

内存一路缺货到2030年?我们的电脑手机该怎么买?

今年以来,受到内存短缺的影响,各大消费电子产品的价格是一路走高,甚至涨价不断,然而就在最近有媒体曝出内存一路缺货会缺到2030年,如此长期的短缺,我们的电脑手机到底该怎么买?一、内存一路缺货…

2026/8/25 14:36:45

光模块装配与耦合检测设备品牌推荐:艾利特选型指南

在 AI 算力集群与万亿参数大模型的强力拉动下,400G、800G、1.6T 及 CPO(光电共封装)光模块 的需求迎来了爆发式增长。 然而,光模块装配与光耦合检测是光通信制造中最严苛的工序:光发射/接收组件(TOSA/ROSA/OSA)与微型透镜(Lens)的光轴对位公差极小(微米甚至亚微米级…

2026/8/25 14:36:45

SqlSugar 生产落地全指南:从0到1完成.NET项目ORM封装

在工业上位机、设备数据采集以及业务后台系统的开发中,数据访问层的选型直接决定了项目的开发效率与运行性能。SqlSugar作为国产轻量级ORM,凭借全功能覆盖、高性能批量操作、多数据库兼容的特性,在信创适配、高频数据写入等场景下具备明显优势。本文从基础接入开始,逐步拆解…

2026/8/25 14:36:45

二极管设计核心和应用实战E01

在硬件电路中,二极管的角色就像城市中的单行道:控制电流单向流动,是非常重要的元器件。它虽然是最基础的电子元件之一,却几乎出现在每一个电子产品中,从充电器到服务器电源,从通信模块到汽车电子。工程师对二极管的理解,往往决定了产品的可靠性和效率。 很多初级工程师…

2026/8/25 14:31:44

Kimi LeetCode LCP 47. 入场安检 Java实现

以下是 LCP 47. 入场安检 的 Java 实现。题目分析- N 个安检室,容量分别为 capacities[i],总和为 M。 - 恰好 M1 位观众(编号 0 M)依次入场。 - 每个安检室可选择两种类型之一:- 先进先出(队列&#xff09…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…