关注我~第一时间学习如何更好地使用AI。
重要的不是我们是否会被AI替代,
而是我们要比被替代的人更懂AI。
大家好,从本篇起,我计划开始一个以LangChain v0.3官方教程为基础的学习笔记系列。
LangChain是最主流的AI应用开发框架之一,它为我们提供了很多现成的组件来降低AI应用搭建的门槛。如果你对AI应用开发,或者说用酷炫的方式使用AI感兴趣,那么学习LangChain绝对是一个不错的选择。
今天学习的主题是LangChain框架中最基础,也是最重要的组件之一:Chat Model。
Chat Model 概述
所谓AI应用开发,本质就是利用大模型的各种神奇能力来实现一个解决具体问题的方案。因此,如何调用大模型,自然是AI应用开发的起点。
在LangChain中,Chat Model就是为我们提供大模型调用能力的关键组件,它为我们使用各式各样的模型提供了统一的接口,让我们无须事先学习不同厂家的模型API调用方式,就能简单地通过几行代码去使用它们。
Chat Model 基本使用方法
Step 1.前置准备工作
(1)安装所需的模型集成
第一步当然是安装好LangChain。
pip install langchain
然后,你需要根据你的任务需求,确定具体想要使用的模型。而在LangChain中使用特定模型的最基本方式,就是利用现成的第三方模型集成(third-party integrations)。
目前,LangChain已经集成了近80多种第三方模型服务,覆盖了从OpenAI、Anthropic、Google等国外大厂,到DeepSeek、Qwen、ZHIPU等民族之光的丰富资源。
这些模型集成根据维护方式又可以分为两个大类:
-
- 官方模型集成 : 即由LangChain和/或模型供应商提供维护、支持的模型集成,这些模型各自有以
langchain-<provider>
形式命名的独立包;
- 官方模型集成 : 即由LangChain和/或模型供应商提供维护、支持的模型集成,这些模型各自有以
-
- 社区模型集成 : 即主要由开发者社区提供维护、支持的模型集成,这些模型都在
langchain-community
包中。
- 社区模型集成 : 即主要由开发者社区提供维护、支持的模型集成,这些模型都在
你可以在LangChain官网上轻松找到你所需要的模型集成的安装方法,以DeepSeek为例:
pip install -qU "langchain-deepseek"
从安装包的命名可以看出,DeepSeek在LangChain中拥有官方模型集成。
(2)获取并设置模型的API key
API Key的获取方式此处不再赘述,实在不知道的朋友可以直接问AI:如何获取xx模型的API key。
在API key设置方面主要注意尽量不要把它明文写在你的代码里,这样会存在因为代码分享而暴露密钥的风险。
推荐使用LangChain官方示例的API Key设置方式:
import getpass
import os
if not os.environ.get("DEEPSEEK\_API\_KEY"):
os.environ["DEEPSEEK\_API\_KEY"] = getpass.getpass("Enter API key for DeepSeek: ")
即先检测系统环境变量中是否已设置所需的API key,如果没有,将用户输入的API key设置为"DEEPSEEK_API_KEY"环境变量的值。
Step 2. 初始化Chat Model
(1)基本初始化
根据你需要使用的模型,查阅官方文档,使用对应包中的Chat Model子类来进行初始化。
from langchain\_deepseek import ChatDeepSeek
llm = ChatDeepSeek(
model="deepseek-chat",
temperature=0,
max\_tokens=None,
timeout=None,
max\_retries=2,
# other params...
)
(2)使用init_chat_model函数初始化
对于某些供应商的模型,我们还可以利用init\_chat\_model
函数来初始化Chat Model。
from langchain.chat\_models import init\_chat\_model
model = init\_chat\_model("deepseek-chat", model\_provider="deepseek")
可以看到,与基本初始化相比,使用init\_chat\_model
函数除了传入模型名称 (model)参数,还需要传入模型供应商 (model_provider)参数(当然temperature之类的常规参数也可以传)。
另外,对于model参数,还允许直接传入结构为{model\_provider}:{model}
的键值对来实现初始化,这样,配合一个模型字典,可以让模型切换变得更加简洁。
目前支持使用init\_chat\_model
函数的供应商及对应的包名列表如下:
(3)暂没有集成的模型供应商的使用
虽然LangChain目前已经集成了数量可观的模型服务集成,但有些我们比较常用的供应商仍然没有独立的包,比如openrouter、硅基流动。
这时,我们可以看看想要使用的供应商是否兼容OpenAI API,如果是,那么就可以在LangChain中利用ChatOpenAI
来调用。以硅基流动为例:
首先,安装openai的包。
pip install -qU langchain-openai
然后,填入硅基流动的base\_url
进行实例化。这里有个细节,因为用的是openai的包,所以前面在系统变量里存入API Key的时候也要用“OPENAI\_API\_KEY”
的表述。
from langchain\_openai import ChatOpenAI
llm = ChatOpenAI(
model="xxxxxxxx",
temperature=0,
max\_tokens=None,
timeout=None,
max\_retries=2,
api\_key=""
base\_url="https://api.siliconflow.cn/",
)
让我们看下效果,通过硅基流动使用Qwen3-235B-A22B-Thinking-2507模型:
Step3. 使用Chat Model
(1)Chat Model的主要方法(method)
初始化完成后,我们就可以使用Chat Model的各种方法来使用大模型,其中比较常用的方法如下:
- • invoke :与Chat Model交互的最基本方式,就是聊天本身,它接收一段消息列表作为输入,并返回一段消息列表作为输出。
- • stream :允许Chat Model在生成输出时采用流式输出的方式。
- • batch :允许用户将多个请求批量传入Chat Model以提高处理效率。
- • bind_tools :允许用户将一个工具绑定给Chat Model,使模型能在执行上下文时使用这个工具。
- • with_structured_output :针对支持结构化输出的模型,这个方法能够自动完成将模式绑定到模型并按给定模式解析输出的过程。
以最常用的invoke方法为例,括号内输入我们需要传给模型的信息:
model.invoke("Hello")
上述代码将生成一个AIMessage
对象,这个对象包含了一个content
属性,它的值就是模型对我们回复的内容。
我们也可以只获取content的内容:
(2)关于Message对象
上述代码结果引出了一个与Chat Model使用相关的重要知识点,即Message对象 。
事实上,Chat Model的定义就是一种以一个消息(Message)列表作为输入,并将一段消息作为输出的模型接口。
反过来看,Message是Chat Model中进行信息交流的基本单位,它们用于表示聊天模型的输入与输出,以及与对话可能相关的任何额外上下文或元数据。一般来说,每条消息都包含一个role(如"用户"、"助手")和content(如文本、多模态数据),并附带根据聊天模型提供商而异的额外元数据。
LangChain提供了一种统一的消息格式,可适用于所有聊天模型,使用户能够与不同的聊天模型协作,而无需担心各模型提供商所使用的消息格式的具体细节。主要的Message类型包括:
- • SystemMessage :对应的角色是系统,用来设定模型的基本身份、行为模式,属于一种系统Prompt。
- • HumanMessage :对应的角色是用户,代表用户输入的信息。
- • AIMessage :对应的角色是助手(assistant),代表模型回复的消息。
- • ToolMessage :对应的角色是工具,它包含的内容主要是工具的调用。
如果你要使用LangChain的消息格式,你需要引入相关的依赖,例如:
from langchain\_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!"),
]
model.invoke(messages)
对于用户输入信息而言,LangChain同样支持直接以字符串的形式输入,或者用OpenAI格式输入,这意味着下列三种消息输入方式是等价的:
model.invoke("Hello")
model.invoke([{"role": "user", "content": "Hello"}])
model.invoke([HumanMessage("Hello")])
好了,以上就是本期的全部内容,祝大家玩得开心!
—— END——
往期精华:
1.COZE教程
AI工作流编排手把手指南之一:Coze智能体的创建与基本设置
AI工作流编排手把手指南之二:Coze智能体的插件添加与调用
Agent | 工作流编排指南4:萌新友好的Coze选择器节点原理及配置教程
Agent | 工作流编排指南5:长文扩写自由 — Coze循环节点用法详解
Coze工作流编排指南6:聊天陪伴类智能体基本工作流详解-快来和玛奇玛小姐姐谈心吧~
PPT自由!Coze工作流 X iSlide插件-小白也能看懂的节点参数配置原理详解
2.MCP探索
Excel-MCP应用 | 自动提取图片数据到Excel的极简工作流手把手教程
markitdown-mcp联动Obsidian-mcp | 一个极简知识管理工作流
【15合1神器】不会代码也能做高级图表!这个MCP工具让我工作效率翻了不止三倍!
【效率翻倍】Obsidian自动待办清单实现:MCP联动Prompt保姆级教程(萌新3分钟上手)
萌新靠MCP实现RPA、爬虫自由?playwright-mcp实操案例分享!
高德、彩云MCP全体验:让Cherry Studio化身私人小助理的喂饭版指南!
3.Prompt设计
干货分享 | Prompt设计心法 - 如何3步做到清晰表达需求?