坊钰头像
关注
【LangChain框架入门级】2. 聊天模型的三种定义方式封面图

【LangChain框架入门级】2. 聊天模型的三种定义方式

聊天模型的三种定义方式(ChatOpenAI / init_chat_model / ChatOllama)

上一篇我们完成了 LangChain 的快速上手,学会了「定义大模型 → 定义消息 → invoke 调用 → 输出解析 → 链式执行」的完整流程。
本篇我们聚焦第一步——聊天模型到底怎么定义,一共介绍三种方式:直接用 ChatOpenAI、用工厂函数 init_chat_model、以及接入本地模型的 ChatOllama。

目录

  1. 先搞清楚:LLM 和聊天模型是一回事吗
  2. 方式一:ChatOpenAI
  3. invoke() 调用与配置参数
  4. 方式二:init_chat_model 工厂函数
  5. 方式三:ChatOllama 接入本地模型
  6. 三种方式怎么选
  7. 本篇小结

1. 先搞清楚:LLM 和聊天模型是一回事吗

大语言模型(LLM)在文本生成、翻译、摘要、问答等任务上表现出色。现代 LLM 通常通过聊天模型接口访问:输入是一个消息列表,输出是一条 AI 消息,而不是简单的纯文本进、纯文本出。

两者的区别:

  • LLM(纯文本补全模型):接收一个字符串提示,输出一个字符串补全结果。OpenAI 的 GPT-5 就是作为 LLM 来实现的。
  • 聊天模型:通常由 LLM 提供支持,但经过专门调整用于对话。它不接收单个字符串,而是接收聊天消息列表,并返回一条 AI 消息。

用一张图理解:

纯文本 LLM:  "输入字符串"  →  [LLM]  →  "输出字符串"

聊天模型:     Message
              Message      →  [聊天模型]  →  AIMessage
              Message

一句话总结:聊天模型 = 面向对话封装的 LLM,输入输出都是「消息」而不是「字符串」。


2. 方式一:ChatOpenAI

ChatOpenAI 是 LangChain 为 OpenAI 的聊天模型(如 gpt-5、gpt-5-mini)提供的具体实现类,它实现了标准的 Runnable 接口。

2.1 安装

pip install -U langchain-openai

2.2 定义模型

from langchain_openai import ChatOpenAI

# 最简单的定义方式
model = ChatOpenAI(model="gpt-5-mini")

2.3 常用初始化参数

参数名参数描述
model要使用的 OpenAI 模型名称
temperature采样温度。值越高,回答越天马行空;值越低,回答越保守靠谱
max_tokens要生成的最大令牌数
timeout请求超时时间
max_retries最大重试次数
openai_api_key / api_keyOpenAI 密钥。不传则从环境变量 OPENAI_API_KEY 读取
base_urlAPI 请求的基本 URL
organizationOpenAI 组织 ID,不传则从环境变量 OPENAI_ORG_ID 读取

完整示例:

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="gpt-5-mini",
    temperature=0,
    max_tokens=None,
    timeout=None,
    max_retries=2,
    # api_key="...",
    # base_url="...",
    # organization="...",
)

2.4 接入 OpenAI 兼容的大模型(重点)

很多国产大模型(如 DeepSeek)都提供了与 OpenAI 兼容的接口,此时不用换类,只改两个参数即可:

import os
from langchain_openai import ChatOpenAI

# 密钥建议从环境变量读取
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

model = ChatOpenAI(
    base_url="https://api.deepseek.com/v1",
    openai_api_key=OPENAI_API_KEY,
    model="deepseek-chat",
)

参数说明:

  • base_url:出于兼容考虑,要设置为对方的接口地址,例如 https://api.deepseek.com/v1。注意这里的 v1 与模型版本无关,只是接口路径的固定写法。
  • openai_api_key:需要单独申请 DeepSeek 的 API Key,再配置到环境变量中。DeepSeek 申请地址:https://platform.deepseek.com/api_keys

提示:DeepSeek、通义、月之暗面、智谱等大多数国产模型都兼容 OpenAI 接口格式,这是实际开发中最常用的接入方式。


3. invoke() 调用与配置参数

model 是一个 Runnable(可运行)实例,调用它最直接的方法就是 .invoke():把单个输入转换为对应的输出。

3.1 invoke() 方法定义

def invoke(
    input,                      # 输入一个 Runnable 实例(字符串或消息列表)
    config: RunnableConfig | None = None,   # 可选配置
    **kwargs
):
    ...
  • input:输入,可以是字符串或消息列表。
  • config:用于 Runnable 的运行时配置。

3.2 RunnableConfig 常用参数

参数名参数描述
configurable在此 Runnable 或子 Runnable 上配置的属性运行时值
run_id本次调用的唯一标识符,不传则自动生成 UUID
run_name本次调用的名称,默认为类名
metadata本次调用和子调用的元数据,键为字符串、值为 JSON

3.3 最简单的调用

# 聊天模型可以直接接收字符串,内部会自动包装成消息
result = model.invoke("你好,介绍一下你自己")
print(result.content)

4. 方式二:init_chat_model 工厂函数

ChatOpenAI 只能创建 OpenAI(或兼容 OpenAI)的实例。如果你想在一套代码里灵活切换多家模型,推荐用工厂函数 init_chat_model(),它可以初始化 OpenAI、Anthropic、FireworksAI、DeepSeek、Ollama 等多种模型。

4.1 函数定义

def init_chat_model(
    model: str,
    *,
    model_provider: str | None = None,
    configurable_fields: Literal[None] = None,
    config_prefix: str | None = None,
    **kwargs
) -> BaseChatModel:
    ...

4.2 常用参数

参数名参数描述
model要使用的模型名称
model_provider模型提供方,如 openai、anthropic、google_genai、ollama、deepseek;不传则尝试从模型名推断
configurable_fields设置哪些模型参数可在运行时配置
config_prefix配置前缀,用于在 config 中查找参数
temperature / max_tokens / timeout 等与 ChatOpenAI 相同

model_provider 与需要安装的集成包对应关系:

  • openai → langchain-openai
  • anthropic → langchain-anthropic
  • google_genai → langchain-google-genai
  • ollama → langchain-ollama
  • deepseek → langchain-deepseek

4.3 示例1:基本用法

使用不同提供方前,先安装各自的包并配置对应 API Key 环境变量:

pip install -U langchain-openai        # 环境变量 OPENAI_API_KEY
pip install -U langchain-deepseek      # 环境变量 DEEPSEEK_API_KEY
from langchain.chat_models import init_chat_model

# 返回 langchain_openai.ChatOpenAI 实例
gpt_model = init_chat_model("gpt-5-mini", model_provider="openai", temperature=0)

# 返回 langchain_deepseek.ChatDeepSeek 实例
deepseek_model = init_chat_model("deepseek-chat", model_provider="deepseek", temperature=0)

# 所有模型都实现了统一接口,调用方式完全一致
print("gpt-5-mini: " + gpt_model.invoke("what's your name").content + "\n")
print("deepseek-chat: " + deepseek_model.invoke("what's your name").content + "\n")

4.4 示例2:创建「可配置模型」(运行时再决定用哪个模型)

不传具体模型名,模型会变成一个「模拟器」,在 invoke 时通过 config 动态指定:

# 可配置模型模拟器
configurable_model = init_chat_model(temperature=0)

# 动态传入配置,初始化模型并调用
result = configurable_model.invoke(
    "what's your name",
    config={"configurable": {"model": "gpt-5-mini"}}
)
print("configurable: " + result.content)

4.5 示例3:带默认值的可配置模型

通过 configurable_fields 指定哪些字段可运行时修改,通过 config_prefix 给配置加前缀:

configurable_model_2 = init_chat_model(
    model="gpt-5-mini",
    temperature=0,
    configurable_fields=("model", "model_provider", "temperature", "max_tokens"),
    config_prefix="first",
)

result = configurable_model_2.invoke(
    "what's your name?",
    config={
        "configurable": {
            "first_model": "deepseek-chat",
            "first_temperature": 0.5,
            "first_max_tokens": 100,
        }
    },
)
print("configurable2: " + result.content)

适用场景:一个服务要同时支持多家模型、或需要在不重启程序的情况下切换模型时,用 init_chat_model 最方便。


5. 方式三:ChatOllama 接入本地模型

如果数据敏感、不想把请求发到云端,或者想免费跑开源模型,可以用 Ollama 在本地部署模型,再用 ChatOllama 接入。

5.1 安装

pip install -U langchain_ollama

前提:本机(或局域网内某台机器)已经安装并运行 Ollama,且通过 ollama pull 拉取了对应模型。

5.2 ChatOllama 常用参数

参数名参数描述
model要使用的 Ollama 模型名称
temperature采样温度
timeout请求超时时间
base_urlOllama 服务的地址
num_ctx上下文窗口大小(默认 2048)
num_gpu使用的 GPU 数量,macOS 上默认 1 表示启用金属支持,0 表示禁用

5.3 示例

from langchain_ollama import ChatOllama

ollama_model = ChatOllama(
    model="deepseek-r1:70b",
    base_url="http://192.168.100.220:11434",  # Ollama 默认端口 11434
)

result = ollama_model.invoke("what's your name?")
print(result)

如果 Ollama 就跑在本机,base_url 默认指向 http://localhost:11434,可以不写。


6. 三种方式怎么选

方式适用场景不适用场景
ChatOpenAI只用 OpenAI,或接入 OpenAI 兼容的国产模型(最常用)需要在多家非兼容模型间切换
init_chat_model一套代码对接多家模型、运行时动态切换模型只固定用一家时略显啰嗦
ChatOllama本地部署、数据不出内网、免费跑开源模型没有本地 GPU / 不想自己运维模型

7. 本篇小结

  1. 聊天模型接收消息列表、返回 AI 消息,是面向对话封装的 LLM。
  2. ChatOpenAI 是最常用的定义方式,改 base_url 和密钥即可接入 DeepSeek 等 OpenAI 兼容模型。
  3. init_chat_model 是工厂函数,支持多家提供方,并能通过 config 在运行时切换模型。
  4. ChatOllama 用于接入本地部署的开源模型,数据安全、零 API 费用。
  5. 无论哪种方式,得到的都是 Runnable 实例,都可以用 .invoke() 调用、用 | 串成链——这正是 LangChain 统一接口的好处。

下一篇我们讲聊天模型最核心的进阶能力——工具调用(Tool Calling),让大模型能够调用搜索、数据库等外部工具。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/Gao123456fy/article/details/166596113

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--