news 2026/6/23 14:58:31

【LangChain】-- 定义聊天模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【LangChain】-- 定义聊天模型

1. 方式一:直接API调用–DeepSeek

这种方式相当于是三方集成包提供的。
聊天模型的API KEY,可以在定义的时候可以直接写在里面,也可以配置在环境变量中(推荐配置在环境变量中)。
![[Pasted image 20260605131142.png]]

fromlangchain_core.messagesimportHumanMessage,SystemMessagefromlangchain_deepseekimportChatDeepSeek# 1. 定义 DeepSeek 模型model=ChatDeepSeek(model="deepseek-chat",# api_key="sk-34a424135c6d499e91ab32951a4ec0bf")# 2. 定义消息(保持不变)messages=[SystemMessage(content="请帮我进行翻译,由英文翻译成中文!"),HumanMessage(content="my name is xiaobu")]# 3. 调用大模型result=model.invoke(messages)print(result)# 输出翻译结果

ChatDeepSeek继承了BaseChatOpenAIBaseChatOpenAI实现了标准的Runnable接口。

chat DeepSeek常用初始化参数说明

fromlangchain_deepseekimportChatDeepSeek model=ChatDeepSeek(model="...",# 要使用的 OpenAI 模型的名称temperature=0,# 采样温度,温度值越高,AI 回答越天马行空;温度越低,回答越保守靠谱。有些模型的温度范围是0~1,有的是0~2.max_tokens=None,# 输出文本的最大token数(英文:一个token约等于4个字符或者0.75个单词;中文:一个汉字约等于1.5-2个token)timeout=None,# 请求超时时间max_retries=2,# 最大重试次数# api_key="...", # API密钥# other params...)

2. 方式二:init_chat_model

相当于是langchain包提供的。Langchain封装了更上层的方法,让我们初始化模型。这种方法可以定义所有的大模型,这就体现出来了LangChain的封装性,所有的大模型都只需要实现一种标准。

2.1 基本用法

fromlangchain.chat_modelsimportinit_chat_model# 第二种定义聊天模型的方式# 指定厂商 和 模型名称# 返回的是Runnable实例deepseek_model=init_chat_model(model="deepseek-chat",model_provider="deepseek")print(f"deepseek-chat:{deepseek_model.invoke("你是谁?").content}")

可以看到它就是创建了一个ChatDeepSeek。
![[Pasted image 20260605140236.png]]

上面API调用可以设置的初始化参数,这种方式也同样支持。

2.2 可配置模型(模型模拟器)

fromlangchain.chat_modelsimportinit_chat_model# 定义可配置模型(模型模拟器)config_model=init_chat_model()print(f"deepseek-chat:{config_model.invoke("你是谁?").content}")

直接这样调用是会报错的。
![[Pasted image 20260605142146.png|479]]

在调试中可以看到,这是一个可配置模型,不是一个真正的模型,只是初始化了一下,并没有实际的定义出来model.
![[Pasted image 20260605142446.png]]

这个模型模拟器在运行的时候才能被定义出来,在进行invoke的时候,invoke方法中有一个配置字段,可以对其进行配置:

@abstractmethod# 这是一个抽象方法definvoke(self,input:Input,# 输入一个Runnable实例,可以Message, 聊天模型也可以直接传入一个字符串config:RunnableConfig|None=None,# 是配置runnable实例的选项(input选项传入了一个Runnable,config选项就对这个Runnable进行配置),config就相当于是input的一个辅助工具。**kwargs:Any,)->Output:
fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.messagesimportSystemMessage,HumanMessage# 定义可配置模型(模型模拟器)config_model=init_chat_model()# 定义消息messages=[SystemMessage(content="请帮我进行翻译,由英文翻译成中文!"),HumanMessage(content="my name is xiaobu")]print(f"deepseek-chat:{config_model.invoke(input=messages, config={"configurable": {"model": "deepseek-chat"}}).content}")

2.3 可配置模型(带默认配置值)

fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.messagesimportSystemMessage,HumanMessage deepseek_model=init_chat_model(model="deepseek-chat",model_provider="deepseek",temperature=0.3,max_tokens=1024,# 无法直接修改已经存在的属性configurable_fields=["max_tokens"],# 配置可修改的字段,当然其他字段都可以配置进去,都可以在后续进行修改,包括模型config_prefix="first"# 指定可修改字段的前缀)messages=[SystemMessage(content="请补全一段故事,100个字以内"),HumanMessage(content="一只猫正在 "),]# 我们想一次完成两个版本的的输出(1. 原本的版本;2. 精简之后的版本)result=deepseek_model.invoke(input=messages,config={"configurable":{"first_max_tokens":10,#修改带有默认配置的字段(要加上前缀)}})# 输出结果:一只猫正在窗台上打盹,忽然print(result.content)

3. 与原生大模型调用的区别

![[Pasted image 20260605131825.png]]

  • 消息封装:LangChain 使用SystemMessageHumanMessageAIMessage等标准化消息类型,自动管理角色,原生调用需要手动构造"role": "user"字典。

  • 统一调用接口:无论底层是 OpenAI、DeepSeek 还是本地模型,都通过model.invoke()调用,更换模型无需修改调用逻辑。

  • 返回对象invoke返回AIMessage,可以直接获取.content,还附带response_metadata等额外信息;原生调用只返回纯 JSON。

  • 与链/Agent 集成:LangChain 封装的模型可以直接传入PromptTemplateChainAgent中,构成可组合的工作流;原生调用需要手动处理每一步的输入输出拼接。

  • 对话历史管理:LangChain 会自动将消息列表传递并处理多轮对话,原生调用需要自行维护并拼接历史消息。

  • 流式输出:通过model.stream()一句代码实现流式响应,原生需要处理 SSE 或分块解析。

    通俗理解:原生调用是“裸调”,你得自己拼请求、解响应、管状态;LangChain 封装像一个“适配器”,把异构的模型服务统一成标准件,方便你拼装复杂应用。

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

3分钟快速备份微博:Speechless终极PDF导出指南

3分钟快速备份微博:Speechless终极PDF导出指南 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 还在担心珍贵的微博记忆会随着时间流逝而消…

作者头像 李华
网站建设 2026/6/5 17:27:39

Loop:重新定义macOS窗口管理的免费开源解决方案

Loop:重新定义macOS窗口管理的免费开源解决方案 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否经常在多个应用间切换时,需要反复拖拽窗口边缘?或者在进行多任…

作者头像 李华
网站建设 2026/6/5 17:27:35

DxWrapper终极指南:让经典DirectX游戏在Windows 10/11上完美运行

DxWrapper终极指南:让经典DirectX游戏在Windows 10/11上完美运行 【免费下载链接】dxwrapper Fixes compatibility issues with older games running on Windows 10/11 by wrapping DirectX dlls. Also allows loading custom libraries with the file extension .a…

作者头像 李华
网站建设 2026/6/5 17:23:05

iPhone 5延期背后:一体化金属与In-Cell屏幕的供应链良率挑战

1. 项目概述:一场由供应链良率引发的旗舰手机上市延期风波作为一名在消费电子供应链摸爬滚打了十几年的老兵,我几乎每年都会见证几场由某个不起眼的元器件或工艺引发的“蝴蝶效应”,最终演变成影响全球市场格局的大事件。最近,关于…

作者头像 李华
网站建设 2026/6/5 17:20:03

RAG实战:从PDF文档到可交付的医疗法规问答系统

1. 这不是又一个“Hello World”式聊天机器人教程你点开这个标题,大概率已经踩过至少三个坑:第一次跑通LangChain示例时兴奋地敲下pip install langchain,结果发现连OpenAI的API密钥都配不对;第二次照着某篇博客搭了个带记忆的聊天…

作者头像 李华
网站建设 2026/6/5 17:19:50

PKSM终极指南:3DS宝可梦存档管理神器,一键备份编辑全世代精灵

PKSM终极指南:3DS宝可梦存档管理神器,一键备份编辑全世代精灵 【免费下载链接】PKSM Gen I to GenVIII save manager. 项目地址: https://gitcode.com/gh_mirrors/pk/PKSM 还在为宝可梦存档丢失而烦恼吗?想要轻松备份珍贵进度、编辑理…

作者头像 李华