【LangChain 1.x】03、Models 模型层简介与 init_chat_model 模型统一初始化

前言

基于 LangChain 1.x 版本(最新版本1.2),从基础初始化、调用方式、工具调用、结构化输出、多模态、本地私有化模型、生产级配置、动态可配置模型到综合项目实战,分8篇完整拆解 LangChain 模型层核心能力

LangChain 1.x 对模型模块做了大规模重构,废弃 0.x 时代分散、碎片化的模型实例化写法,推出统一入口 init_chat_model,大幅降低多厂商模型切换开发成本

本篇,聚焦 Models 模型层架构、标准化模型初始化,多厂商大模型一键接入

一、LangChain 1.x-Models 模型层

1,LangChain 1.x 六大核心模块简介

  1. Models:统一封装各类大模型(对话模型 ChatModel、基础补全 LLM),提供标准化调用、工具、结构化输出能力,是整个框架的底层算力底座;
  2. Prompts:提示词模板、消息组装、变量渲染;
  3. Chains:业务流程串联,Runnable 流水线;
  4. Memory:会话历史持久化管理;
  5. Retrieval:向量库、文档加载、文本分割、检索;
  6. Agents:基于模型工具调用的自主执行智能体。

整个应用的输入理解、逻辑推理、结果生成全部依赖 Models 层,所有上层组件(Chain/Agent/RAG)都依赖统一模型接口实现解耦。

2,LangChain 1.x Models 核心亮点

  1. 统一入口 init_chat_model:摒弃旧版 ChatOpenAI / ChatAnthropic 等各类厂商独立类,一套方法初始化所有模型;
  2. 跨厂商统一接口规范invoke/stream/batch 等调用方法、参数命名、返回结构完全对齐;
  3. 能力统一抽象:工具调用、结构化输出、多模态、Token 统计、限流、缓存对所有模型提供一致 API;
  4. 可配置运行时 :支持通过 RunnableConfig 动态修改模型参数、埋点追踪;
  5. 兼容私有化部署:自定义 base_url 对接 vLLM、本地 Ollama、自研大模型服务。

二、模型初始化-Model Class VS init_chat_model

上一篇,已经介绍了项目初始化、虚拟环境管理、依赖安装,本篇不再赘述

传送门:【LangChain 1.x】02、LangChain 1.x 快速上手

1,Model Class 方式

Model Class 方式初始化模型是最直接的,根据需要使用的模型提供商,导入对应的具体类并进行实例化即可,比如:ChatOpenAI、ChatAnthropic、ChatDeepSeek、ChatZhipuAI、ChatOllama...

1.1 安装对应模型依赖包

bash 复制代码
# 激活python虚拟环境
conda activate langchain_v1.2

# ChatDeepSeek
pip install langchain-deepseek==1.0.1

# ChatOpenAI
pip install langchain-openai==1.1.6

# ChatAnthropic
pip install langchain-anthropic==1.3.1

# 兼容 LangChain 统一接口,包含 ChatTongyi, ChatZhipuAI 等
pip install langchain-community==0.4.1
# ChatZhipuAI 依赖 pyjwt
pip install pyjwt==2.10.1

# DashScope
pip install dashscope==1.25.6

# ChatOllama
pip install langchain-ollama==1.0.1

1.2 配置环境变量 .env 文件

在 .env 中,配置各个模型所需的 API_KEYBASE_URL 环境变量

ini 复制代码
# DeepSeek 大模型配置
DEEPSEEK_API_KEY=sk-9fe...cbc
DEEPSEEK_BASE_URL=https://api.deepseek.com

# OpenAI 大模型配置-中转站
OPENAI_API_KEY=sk-GiX...E0M
OPENAI_BASE_URL=https://xiaoai.plus/v1

# Anthropic 大模型配置-中转站
ANTHROPIC_API_KEY=sk-GiX...E0M
ANTHROPIC_BASE_URL=https://xiaoai.plus/

# 阿里云百炼 大模型配置
DASHSCOPE_API_KEY=sk-ws-H.EM...wZ8
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

# 智普 大模型配置
ZHIPUAI_API_KEY=249...3h8
ZHIPUAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4

1.3 封装环境变量工具类 env_util.py

在 env_util.py 文件中,获取环境变量 API_KEY、BASE_URL 的值

python 复制代码
import os
from dotenv import load_dotenv

# override=True 确保本地 .env 文件配置优先覆盖系统环境变量
load_dotenv(override=True)

# 从环境变量读取DeepSeek模型配置
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
DEEPSEEK_BASE_URL = os.getenv("DEEPSEEK_BASE_URL")

OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL")

ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
ANTHROPIC_BASE_URL = os.getenv("ANTHROPIC_BASE_URL")

DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")
DASHSCOPE_BASE_URL = os.getenv("DASHSCOPE_BASE_URL")

ZHIPUAI_API_KEY = os.getenv("ZHIPUAI_API_KEY")
ZHIPUAI_BASE_URL = os.getenv("ZHIPUAI_BASE_URL")

1.4 模型初始化文件 init_llm_modelclass.py

创建 init_llm_modelclass.py 文件,使用 Model Class 方式初始化模型

注意:不同模型的入参名称可能不同,可以参考对应的源码

python 复制代码
from langchain_anthropic import ChatAnthropic
from langchain_community.chat_models import ChatTongyi, ChatZhipuAI
from langchain_deepseek import ChatDeepSeek
from langchain_ollama import ChatOllama
from langchain_openai import ChatOpenAI

from env_utils import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL, OPENAI_API_KEY, OPENAI_BASE_URL, ANTHROPIC_API_KEY, \
    ANTHROPIC_BASE_URL, DASHSCOPE_API_KEY, ZHIPUAI_API_KEY

deepseek_llm = ChatDeepSeek(
    api_key=DEEPSEEK_API_KEY,
    api_base=DEEPSEEK_BASE_URL, # 注意:这里是api_base,不是base_url
    model="deepseek-v4-flash",  # deepseek-chat 即将弃用
)

openai_llm = ChatOpenAI(
    api_key=OPENAI_API_KEY,
    base_url=OPENAI_BASE_URL,
    model="gpt-3.5-turbo",
)

anthropic_llm = ChatAnthropic(
    api_key=ANTHROPIC_API_KEY,
    base_url=ANTHROPIC_BASE_URL,
    model="claude-haiku-4-5-20251001",
)

tongyi_llm = ChatTongyi(
    api_key=DASHSCOPE_API_KEY,
    model="qwen-plus",
)

zhipu_llm = ChatZhipuAI(
    api_key=ZHIPUAI_API_KEY,
    model="glm-4",
)

ollama_llm = ChatOllama(
    base_url="http://127.0.0.1:11434",
    model="qwen3.5:9b",
)

1.5 模型测试文件 test_llm_modelclass.py

创建 test_llm_modelclass.py 文件,测试调用大模型

python 复制代码
from my_llm import openai_llm, anthropic_llm, deepseek_llm, ollama_llm, hunyuan_llm, tongyi_llm, zhipu_llm

print(openai_llm.invoke("请介绍一下你自己"))
print(anthropic_llm.invoke("请介绍一下你自己"))
print(deepseek_llm.invoke("请介绍一下你自己"))
print(ollama_llm.invoke("请介绍一下你自己"))
print(hunyuan_llm.invoke("请介绍一下你自己"))
print(tongyi_llm.invoke("请介绍一下你自己"))
print(zhipu_llm.invoke("请介绍一下你自己"))

1.6 测试结果

python 复制代码
# openai - gpt-3.5-turbo
content='你好!我是ChatGPT,一个由OpenAI开发的大型语言模型,基于GPT-4架构。我可以用多种语言进行交流,帮助解答问题、提供建议、撰写文章、翻译文本、生成创意内容等等。无论你是需要学习帮助、工作助理,还是日常交流,我都很乐意为你提供支持。有什么需要帮忙的,随时告诉我吧!' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 93, 'prompt_tokens': 12, 'total_tokens': 105, '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}, 'input_tokens': 0, 'output_tokens': 0, 'input_tokens_details': None}, 'model_provider': 'openai', 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': 'fp_a89d652ac6', 'id': 'chatcmpl-DzKauYabckzpw4D9Z87ENwywbscQ3', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019f4173-ea0b-7e21-b8fe-d70b8ea217bd-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 12, 'output_tokens': 93, 'total_tokens': 105, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}
# anthropic - claude-haiku-4-5-20251001
content='我是 Kiro,一个 AI 助手。我的设计目的是帮助开发者专注于系统设计、探索解决方案和做出决策,同时由我来负责编码实现。\n\n我的主要能力包括:\n\n**开发工作**\n- 编写、审查、测试和调试软件\n- 与你合作交流想法,识别问题,确定正确的方向\n- 与本地文件系统交互(读写文件、列出目录)\n- 执行终端命令和自动化 CLI 任务\n- 排查和优化基础设施问题\n\n**专业工作**\n- 写作和分析\n- 规划和研究\n- 以及其他你需要的工作\n\n**工作风格**\n- 我会直接回答问题,避免冗余\n- 提供完整、可执行的代码\n- 遵循安全最佳实践\n- 在进行有风险的操作前会告知你\n\n我现在通过 `kiro-cli chat` 命令在你的环境中运行。有什么我可以帮助你的吗?' additional_kwargs={} response_metadata={'id': 'msg_016DV8oxMW7FNk2I66At74gB', 'container': None, 'model': 'claude-haiku-4-5-20251001', 'stop_details': None, 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'cache_creation': {'ephemeral_1h_input_tokens': 0, 'ephemeral_5m_input_tokens': 0}, 'cache_creation_input_tokens': 0, 'cache_read_input_tokens': 0, 'inference_geo': 'not_available', 'input_tokens': 222, 'output_tokens': 703, 'output_tokens_details': {'thinking_tokens': 358}, 'server_tool_use': None, 'service_tier': 'standard'}, 'model_name': 'claude-haiku-4-5-20251001', 'model_provider': 'anthropic'} id='lc_run--019f4176-5656-7901-be99-1adcb66ea3b2-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 222, 'output_tokens': 703, 'total_tokens': 925, 'input_token_details': {'cache_read': 0, 'cache_creation': 0, 'ephemeral_5m_input_tokens': 0, 'ephemeral_1h_input_tokens': 0}}
# deepseek - deepseek-v4-flash
content='你好呀!我是DeepSeek,由深度求索公司创造的AI助手!很高兴认识你~😊\n\n让我简单介绍一下自己:\n\n**我的能力:**\n- 💬 **纯文本对话**:擅长回答问题、写作、分析、编程、翻译等各种文本任务\n- 📎 **文件处理**:支持上传图片、PDF、Word、Excel、PPT、TXT等文件,能从中提取文字信息帮你分析\n- 🌐 **联网搜索**:需要时可以帮你查找最新信息(需要手动开启联网功能)\n- 📚 **超大上下文**:1M token的记忆力,能一次性处理像《三体》三部曲那么多的内容!\n\n**我的特点:**\n- ✅ **完全免费**:目前没有任何收费计划\n- 📱 **多平台支持**:网页版和App都可以用,App还支持语音输入\n- 🎯 **知识更新**:知识截止到2025年5月\n- 🎭 **灵活角色**:可以切换不同风格,比如"走心"模式给你温暖回应\n\n**我不能做什么:**\n- ❌ 不支持图像识别(但能读取图片中的文字)\n- ❌ 不能生成图片、视频或音频\n\n简单来说,我就是你的智能助手朋友,随时准备帮你解决问题、提供建议、一起脑暴!有什么想聊的,或者需要我帮忙的吗?😊' additional_kwargs={'refusal': None, 'reasoning_content': '好的,用户让我介绍一下自己。这是一个非常常见且基础的问题,用户可能是第一次接触我,想了解我的基本情况和能力范围。我需要给出一个清晰、全面但不过于冗长的自我介绍。\n\n想到了可以从几个核心方面来组织回复:先说明我的身份和创造者,然后介绍我的核心能力(比如文本处理、文件支持、上下文长度等),接着列举一些我能提供的具体帮助领域,最后补充一些重要特点(如免费、平台支持、限制条件等),并以一个友好的邀请结束。这样结构比较完整,能覆盖用户可能关心的信息点。\n\n嗯,回复的语言要热情、亲切,让用户感受到我是乐于助人的。开头直接打招呼,结尾可以加个表情符号增加亲和力。'} response_metadata={'token_usage': {'completion_tokens': 436, 'prompt_tokens': 7, 'total_tokens': 443, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 150, 'rejected_prediction_tokens': None}, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 7}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': 'b98268ac-edcf-47e4-b874-40a9b4ab1818', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019f4174-1a3d-7e63-aebe-90e9afbd5a61-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 7, 'output_tokens': 436, 'total_tokens': 443, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 150}}
# ollama - qwen3.5:9b
content='你好呀!很高兴见到你~ 👋\n\n我是 **通义千问(Qwen)**,是阿里巴巴集团旗下的**通义实验室**自主研发的超大规模语言模型。我致力于成为你在工作和生活中最智能、高效的 AI 助手。✨\n\n关于我自己,主要有以下几个特点:\n\n👨\u200d💻 **我的能力:**\n*   **自然对话与写作**:无论是日常闲聊、写文章、润色文案,还是创作诗歌故事,我都能提供流畅自然的表达。\n*   **逻辑推理与分析**:在数学计算、科学问题解答以及复杂逻辑任务上经过专门优化,能辅助你处理难题。\n*   **代码编程**:我能编写多种语言的代码(如 Python, Java, JavaScript 等),并能帮你进行调试或理解复杂的算法文档。\n*   **多语言支持**:除了中文和英文之外,我还支持全球超过百种其他语言的流畅交互。\n\n⚠️ **关于我的一些小注脚:**\n*   我是一个人工智能助手,没有人类的情感意识,但我能尽力用友好、耐心的语气与你交流。\n*   我会严格遵守安全准则和内容规范,不提供违法违规或可能造成伤害的信息。\n\n🤝 **如何开始?**\n无论你是有具体的任务需要解决(比如分析文档)、想要学习新知识,还是单纯想找人聊天解闷,随时都可以告诉我!你想从哪里聊起呢?' additional_kwargs={} response_metadata={'model': 'qwen3.5:9b', 'created_at': '2026-07-08T11:19:55.780563Z', 'done': True, 'done_reason': 'stop', 'total_duration': 33880572458, 'load_duration': 206203875, 'prompt_eval_count': 13, 'prompt_eval_duration': 304131000, 'eval_count': 1732, 'eval_duration': 33355385000, 'logprobs': None, 'model_name': 'qwen3.5:9b', 'model_provider': 'ollama'} id='lc_run--019f4174-3228-74f0-903e-918e15b1b82c-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 13, 'output_tokens': 1732, 'total_tokens': 1745}
# tongyi - qwen-plus
content='你好!😊 我是通义千问(Qwen),由通义实验室研发的超大规模语言模型。我能够理解并生成多种语言,包括中文、英文、法语、西班牙语、葡萄牙语、俄语、阿拉伯语、日语、韩语、越南语、泰语、印尼语等,支持广泛的国际交流需求。\n\n我可以帮助你:\n✅ 回答问题(无论是常识、科学、历史、文化,还是专业领域的问题)  \n✅ 创作文字(写故事、写公文、写邮件、写剧本、逻辑推理、编程等)  \n✅ 进行逻辑推理与数学计算  \n✅ 支持多轮对话,理解上下文,提供连贯、自然的交互体验  \n✅ 生成和理解代码(支持Python、Java、C++、JavaScript等多种编程语言)  \n✅ 表达观点、辅助思考,甚至陪你聊天、 brainstorming 或情感陪伴  \n\n我注重事实准确性、内容安全与价值观对齐,始终遵循法律法规,尊重多元文化与用户隐私。\n\n如果你有任何问题、需要帮助完成某项任务,或者只是想聊聊------欢迎随时告诉我!🌟  \n我很期待和你一起探索、学习与创造 🌍✨' additional_kwargs={} response_metadata={'model_name': 'qwen-plus', 'finish_reason': 'stop', 'request_id': 'ef5cd98a-3485-9585-9751-eb93c9abed1b', 'token_usage': {'input_tokens': 11, 'output_tokens': 256, 'total_tokens': 267, 'prompt_tokens_details': {'cached_tokens': 0}}} id='lc_run--019f4174-b686-7630-8022-56b19de06ded-0' tool_calls=[] invalid_tool_calls=[]
# zhipu - glm-4
content='你好!我是由智谱AI训练的大语言模型,设计用来提供知识解答、创意支持以及各类信息处理需求。\n\n我的主要能力包括:\n- 回答问题:无论是学术、技术、日常生活还是其他领域的疑问,我都可以尽力提供准确的解答。\n- 创意协助:比如帮你写文案、构思故事、设计活动方案等。\n- 信息整理:帮你总结资料、梳理逻辑,或解释复杂概念。\n- 轻松对话:我可以陪你聊天,倾听你的想法,也乐于提供建议。\n\n如果你有任何具体需求,比如想了解某个知识、解决某个问题,或者只是随便聊聊,都可以直接告诉我!你希望我从哪个方面开始帮你呢?' additional_kwargs={} response_metadata={'token_usage': {'completion_tokens': 145, 'prompt_tokens': 12, 'total_tokens': 157}, 'model_name': 'glm-4', 'finish_reason': 'stop'} id='lc_run--019f4174-c79b-7e43-b7f8-c01108a60537-0' tool_calls=[] invalid_tool_calls=[]

2,init_chat_model 方式

init_chat_model 初始化模型是 LangChain v1.0 版本后推出的模型统一初始化方法,该方法像一个智能工厂,需要传入"model"(模型)、"model_provider"(模型提供商)、"api_key"、"base_url"参数自动创建出对应的模型实例。初始化模型后,调用模型方式与ModelClass 方式完全一致;

model_provider支持的常见参数:openai、anthropic、deepseek、ollama;如果模型供应商支持标准OpenAI访问,可以设置"model_provider"为"openai";

2.1 模型初始化文件 init_llm_initchatmodel.py

创建 init_llm_initchatmodel.py 文件,使用 init_chat_model 方式初始化模型

python 复制代码
from langchain.chat_models import init_chat_model
from langchain_core.language_models import BaseChatModel

from env_utils import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL, OPENAI_API_KEY, OPENAI_BASE_URL, ANTHROPIC_API_KEY, \
    ANTHROPIC_BASE_URL, DASHSCOPE_API_KEY, DASHSCOPE_BASE_URL, ZHIPUAI_API_KEY, ZHIPUAI_BASE_URL

deepseek_llm: BaseChatModel = init_chat_model(
    model="deepseek-v4-flash",
    model_provider="deepseek",
    api_key=DEEPSEEK_API_KEY,
    base_url=DEEPSEEK_BASE_URL,
)

openai_llm = init_chat_model(
    model="gpt-3.5-turbo",
    model_provider="openai",
    api_key=OPENAI_API_KEY,
    base_url=OPENAI_BASE_URL,
)

anthropic_llm = init_chat_model(
    model="claude-haiku-4-5-20251001",
    model_provider="anthropic",
    api_key=ANTHROPIC_API_KEY,
    base_url=ANTHROPIC_BASE_URL,
)

ollama_llm = init_chat_model(
    model="qwen3.5:9b",
    model_provider="ollama",
    base_url="http://127.0.0.1:11434",
)

tongyi_llm = init_chat_model(
    model="qwen-plus",
    model_provider="openai",
    api_key=DASHSCOPE_API_KEY,
    base_url=DASHSCOPE_BASE_URL,
)

zhipu_llm = init_chat_model(
    model="glm-4",
    model_provider="openai",
    api_key=ZHIPUAI_API_KEY,
    base_url=ZHIPUAI_BASE_URL,
)

2.2 模型测试文件 test_llm_initchatmodel.py

创建 test_llm_initchatmodel.py 文件,测试调用大模型

python 复制代码
from init_llm_initchatmodel import deepseek_llm, openai_llm, anthropic_llm, ollama_llm, tongyi_llm, zhipu_llm

print(openai_llm.invoke("请介绍一下你自己"))
print(anthropic_llm.invoke("请介绍一下你自己"))
print(deepseek_llm.invoke("请介绍一下你自己"))
print(ollama_llm.invoke("请介绍一下你自己"))
print(tongyi_llm.invoke("请介绍一下你自己"))
print(zhipu_llm.invoke("请介绍一下你自己"))

2.3 测试结果

python 复制代码
# openai - gpt-3.5-turbo
content='你好!我是ChatGPT,一个由OpenAI开发的大型语言模型,基于GPT-4架构。我的主要功能是通过自然语言处理技术,帮助用户回答问题、提供信息、进行文本创作和交流。我可以用多种语言进行对话,涵盖广泛的主题,包括科技、文化、教育、娱乐等。如果你有什么问题或需要帮助,随时告诉我!' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 86, 'prompt_tokens': 12, 'total_tokens': 98, '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}, 'input_tokens': 0, 'output_tokens': 0, 'input_tokens_details': None}, 'model_provider': 'openai', 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': 'fp_a89d652ac6', 'id': 'chatcmpl-DzKkwse6BtYijegmP3uVrSJtRvySY', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019f417d-61f9-7ce2-a09b-8c2bfa167e85-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 12, 'output_tokens': 86, 'total_tokens': 98, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}
# anthropic - claude-haiku-4-5-20251001
content='我是 Kiro,一个 AI 助手。我的设计目的是帮助开发者专注于系统设计、探索解决方案和做出决策,同时由我来负责编码实现。\n\n我的主要能力包括:\n\n**开发工作**\n- 编写、审查、测试和调试软件\n- 与你合作交流想法,识别问题,确定正确的方向\n- 与本地文件系统交互(读写文件、列出目录)\n- 执行终端命令和自动化 CLI 任务\n- 排查和优化基础设施问题\n\n**专业工作**\n- 写作和分析\n- 规划和研究\n- 以及其他你需要的工作\n\n**工作风格**\n- 我会直接回答问题,避免冗余\n- 提供完整、可执行的代码\n- 遵循安全最佳实践\n- 在进行有风险的操作前会告知你\n\n我现在通过 `kiro-cli chat` 命令在你的环境中运行。有什么我可以帮助你的吗?' additional_kwargs={} response_metadata={'id': 'msg_016DV8oxMW7FNk2I66At74gB', 'container': None, 'model': 'claude-haiku-4-5-20251001', 'stop_details': None, 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'cache_creation': {'ephemeral_1h_input_tokens': 0, 'ephemeral_5m_input_tokens': 0}, 'cache_creation_input_tokens': 0, 'cache_read_input_tokens': 0, 'inference_geo': 'not_available', 'input_tokens': 222, 'output_tokens': 703, 'output_tokens_details': {'thinking_tokens': 358}, 'server_tool_use': None, 'service_tier': 'standard'}, 'model_name': 'claude-haiku-4-5-20251001', 'model_provider': 'anthropic'} id='lc_run--019f4176-5656-7901-be99-1adcb66ea3b2-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 222, 'output_tokens': 703, 'total_tokens': 925, 'input_token_details': {'cache_read': 0, 'cache_creation': 0, 'ephemeral_5m_input_tokens': 0, 'ephemeral_1h_input_tokens': 0}}
# deepseek - deepseek-v4-flash
content='嗨!很高兴认识你!🌟\n\n我是**DeepSeek**,由**深度求索公司**创造的AI助手。让我给你介绍一下我的"超能力":\n\n💬 **对话能力**:我能用自然语言和你聊天、回答问题、帮你写作、分析问题......几乎什么都能聊!\n\n📚 **超长记忆**:我的上下文长度达到1M,可以一次性处理像《三体》三部曲那么厚的书(约70万字),然后和你讨论其中的细节!\n\n🔗 **联网搜索**:虽然我的知识截止于2025年5月,但如果你需要最新信息,可以手动开启联网搜索功能,我就能帮你查找实时内容。\n\n📎 **文件处理**:支持上传图片、PDF、Word、Excel、PPT、TXT等文件,我会从中提取文字信息帮你分析处理。\n\n🎤 **语音输入**:在App端,你还可以用语音跟我说话,非常方便!\n\n**关键信息**:\n- 完全**免费**使用\n- 知识截止:2025年5月\n- 支持Web端和移动App\n\n我的风格是**热情、细腻、乐于助人**。无论你是想聊天、学习、工作还是解决问题,我都愿意陪你一起探索!有什么想聊的吗?😊' additional_kwargs={'refusal': None, 'reasoning_content': '好的,用户让我介绍一下自己,这是一个非常常见且简单的问题。用户可能是第一次接触我,想了解我的基本身份和能力。\n\n我需要提供一个清晰、全面且友好的自我介绍。应该直接说明我是谁、由谁创造、核心能力特点、服务方式以及一些关键事实,比如知识截止日期和是否收费。最后可以表达一下我的态度和提供帮助的意愿,让用户感觉友好和开放。\n\n想到了可以从名称、创造者、能力、使用方式、关键信息和个人风格这几个方面来组织回复。用热情的语气开头,然后分点说明,最后以开放性问题结束,邀请用户进一步提问。'} response_metadata={'token_usage': {'completion_tokens': 391, 'prompt_tokens': 7, 'total_tokens': 398, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 127, 'rejected_prediction_tokens': None}, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 7}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': 'a023c447-47d1-498b-a132-3d8bc219f1a0', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019f417d-8e3f-7e23-b0df-9eed205cc719-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 7, 'output_tokens': 391, 'total_tokens': 398, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 127}}
# ollama - qwen3.5:9b
content='你好!我是 Qwen3.5,是阿里巴巴通义实验室研发的超大规模语言模型版本之一。我具备以下核心能力:  \n- **超长上下文处理**:原生支持 256K tokens 的输入窗口(例如轻松处理数十万字的长文档、代码库或视频字幕);  \n- **精准信息抽取与知识整合**:可快速梳理复杂文献中的关键数据,并跨学科领域生成综合性回答;  \n- **全栈开发辅助**:从需求分析到部署运维的全流程支持;  \n- **智能体自主规划能力**:能独立拆解任务(如多轮对话中逐步解决用户问题),甚至调用工具完成自动化操作;  \n- **全球视野与深度理解**:除中文外,精通 100+ 种语言,并能基于专业知识进行逻辑推理、代码生成及数学计算。  \n\n如果您有具体场景需要帮助(例如分析技术文档、创作多语种营销文案或调试复杂算法),随时告诉我~ 🌟  \n想试试我的能力吗?可以提问任何问题!' additional_kwargs={} response_metadata={'model': 'qwen3.5:9b', 'created_at': '2026-07-08T11:29:51.419523Z', 'done': True, 'done_reason': 'stop', 'total_duration': 11594868083, 'load_duration': 3076729833, 'prompt_eval_count': 13, 'prompt_eval_duration': 125850000, 'eval_count': 446, 'eval_duration': 8390796000, 'logprobs': None, 'model_name': 'qwen3.5:9b', 'model_provider': 'ollama'} id='lc_run--019f417d-9fee-7f40-9d02-4067b0d0e2c8-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 13, 'output_tokens': 446, 'total_tokens': 459}
# tongyi - qwen-plus
content='你好!😊 我是通义千问(Qwen),由通义实验室研发的超大规模语言模型。我能够理解并生成多种语言,包括中文、英文、法语、西班牙语、葡萄牙语、俄语、阿拉伯语、日语、韩语、越南语、泰语、印尼语等,支持跨语言交流与创作。\n\n我的能力涵盖:\n🔹 **多轮对话**:能连贯理解上下文,进行自然、深入的交流;\n🔹 **内容创作**:写故事、公文、邮件、剧本、逻辑推理、编程等都不在话下;\n🔹 **知识问答**:基于训练数据(截至2024年10月)提供准确、可靠的常识与专业知识(但不实时联网,如需最新信息建议查阅权威渠道);\n🔹 **逻辑与数学**:具备较强的推理和计算能力;\n🔹 **代码理解与生成**:支持多种主流编程语言,可写代码、解释算法、调试建议;\n🔹 **多模态能力(部分版本)**:在通义万相、通义听悟等兄弟模型协同下,还能处理图像、语音、视频等任务(当前纯文本对话中,我主要专注于语言理解和生成)。\n\n我注重安全、尊重事实、遵守法律法规,也乐于倾听、耐心帮助------无论是学习、工作、创作,还是日常解惑、情感陪伴,都很乐意为你效劳 🌟\n\n如果你有任何问题、想法或需要协助的地方,随时告诉我吧!🙂' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 317, 'prompt_tokens': 11, 'total_tokens': 328, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}}, 'model_provider': 'openai', 'model_name': 'qwen-plus', 'system_fingerprint': None, 'id': 'chatcmpl-497b71dd-79f1-9903-bab9-969894c8f0df', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019f417d-cd3d-7cf3-ac03-2d69be094e82-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 11, 'output_tokens': 317, 'total_tokens': 328, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}}
# zhipu - glm-4
content='您好!我是一个由智谱AI训练的大语言模型,旨在通过自然语言处理技术为您提供帮助。我的知识库涵盖多个领域,包括科学、文化、技术、日常生活等,可以回答问题、提供建议或协助完成文本创作。\n\n无论是学习中的难题,工作中的需求,还是生活中的小困扰,我都非常乐意与您交流。如果您有任何问题,请随时告诉我,我会尽力为您提供支持!' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 86, 'prompt_tokens': 12, 'total_tokens': 98, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_provider': 'openai', 'model_name': 'glm-4', 'system_fingerprint': None, 'id': '20260708192957f141411b5d8f4d5e', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019f417d-e56c-7d52-83af-a3555926f0c2-0' tool_calls=[] invalid_tool_calls=[] usage_metadata={'input_tokens': 12, 'output_tokens': 86, 'total_tokens': 98, 'input_token_details': {}, 'output_token_details': {}}

3,对比总结

通过使用对比 0.x 旧版 Model Class 与 1.x 新版 init_chat_model 的差异,init_chat_model具有以下优点:

1、模型参数标准化,适配厂商差异化

旧版 Model Class 方式,模型参数不统一:DeepSeek 必须传 api_base,OpenAI、Anthropic 只能用 base_url,多模型接入需要记忆多套规则;

新版 init_chat_model 方式,全厂商统一 base_url、api_key,一套参数规则通用所有模型;

2、代码极简,彻底消灭冗余重复逻辑

旧版 Model Class 方式,接入多厂商模型,需要导入多个专属模型类、逐一遍历初始化;

新版 init_chat_model 方式,仅依赖一个工厂方法,只需修改 model、model_provider 即可无缝切换各类大模型,减少代码量;

3、通用 OpenAI 协议一键兼容,接入更高效

旧版 Model Class 方式,通义、智谱等兼容 OpenAI 协议的国产模型,需引入社区专属类;

新版 init_chat_model 方式,直接配置 model_provider="openai" 即可适配,无需额外依赖;

4、模型热切换,业务代码零改动

旧版 Model Class 方式,切换模型需要改导入、改参数、适配字段;

新版 init_chat_model 方式,仅修改模型与厂商配置,调用逻辑、返回结构、链式流程完全通用,极大降低多模型迭代、兜底切换成本;

两种方式核心差异对照:

对比维度 Model Class(0.x 旧版) init_chat_model(1.x 新版)
参数规范 厂商参数不统一,差异化严重 全平台统一标准参数
代码结构 多类导入、代码零散冗余 单工厂方法,极简统一
国产模型适配 依赖社区专属类,接入繁琐 支持 OpenAI 协议一键兼容
模型切换成本 高,需修改多处代码 极低,仅改配置参数
版本生态 仅兼容维护,不再迭代 适配1.x全量新特性

init_chat_model 是 LangChain 1.x 模型层核心优化,解决了旧版 API 碎片化、不统一的痛点,具备标准化、极简、易扩展优势。

新项目推荐使用init_chat_model统一初始化;老旧项目迁移如需使用厂商独有私有参数的场景,可局部保留 Model Class 写法。

三、模型统一初始化 init_chat_model 深入解析

新版 init_chat_model 在通用性、规范性上具有优势,接下来介绍init_chat_model标准语法、核心参数与适配规则。

1. 基础语法

init_chat_model 为 LangChain 1.x 统一模型工厂入口,支持所有主流大模型厂商、本地私有化模型,语法高度统一,完整用法如下:

python 复制代码
from langchain.chat_models import init_chat_model

model = init_chat_model(
    model_spec: str,	# 模型标识:provider:model_name 核心字段
    *,
    temperature: float = 0.7,
    max_tokens: int | None = None,
    timeout: int | None = None,
    max_retries: int = 2,
    api_key: str | None = None,
    base_url: str | None = None,
    **kwargs
)

2. 核心参数详细说明

2.1 model_spec(唯一核心必填参数)

model_spec 是 LangChain 1.x 区分模型、绑定厂商的核心规范,格式固定为 厂商标识:模型名称,彻底告别旧版杂乱的导入与实例化逻辑,一套格式适配所有模型。主流厂商标准写法如下:

  • OpenAI 系列:openai:gpt-4o-miniopenai:gpt-4o
  • Claude 系列:anthropic:claude-3-sonnet-20240229
  • Gemini 系列:google-genai:gemini-1.5-flash
  • 本地 Ollama 模型:ollama:qwen2:7bollama:deepseek-r1:1.5b

2.2 全平台通用基础参数

以下参数为所有模型通用标准参数,适配云端厂商、本地私有化模型,参数命名、作用完全统一,无厂商差异化问题,适配各类生产场景。

参数名 核心作用 业务适用场景
temperature 控制模型生成随机性,取值范围 0~2;数值越小越精准,数值越大越发散创意,默认值 0.7 代码生成、智能问答、知识库问答设为 0,保证结果精准固定;文案创作、脑洞生成、对话闲聊设为 0.7~1.0
max_tokens 限制模型单次输出的最大 Token 长度 长文本生成场景限制输出长度,同时控制接口调用成本、避免无效超长返回
timeout 设置接口请求超时时间(单位:秒) 生产环境必备,防止模型接口响应缓慢导致服务卡死、接口阻塞
max_retries 接口请求失败自动重试次数,默认值为 2 应对网络波动、厂商限流、瞬时接口报错,提升服务稳定性
api_key 临时传入模型密钥,优先级高于本地 .env 环境变量 多租户系统、动态切换密钥、临时调试场景,灵活适配多账号模型调用
base_url 自定义模型接口请求地址 适配代理地址、Azure OpenAI、vLLM 私有化部署、本地 Ollama 模型服务等自定义场景

四、小结

本篇,介绍了 LangChain 1.x Models 模型层的职责、核心亮点、与老版本 Model Class 对比使用、简单说明了 API 参数

下一篇:核心调用API|invoke/stream/batch 三种模型调用方式

涉及同步调用、流式实时输出、批量并发请求、异步事件监听,覆盖业务开发中90%的模型交互场景

相关推荐
先吃饱再说1 小时前
手写一个 mini-cursor:LangChain Agent 开发完全实战
langchain·llm·agent
风吹夏回2 小时前
LangChain Agent 入门实战:从报错到跑通带记忆的交互式智能体(初学者保姆级教程)
langchain
大鹅同志21 小时前
Agent Runtime Evaluation Platform — AI Agent 运行时全维度质量评估平台
ai·langchain·agent·rag·langgraph·vibecoding·llm-as-judge
闲猫1 天前
深入理解 Skills:从 API 调用到智能体行为封装
人工智能·python·langchain
BraveWang1 天前
【LangChain 1.x】02、LangChain 1.x 快速上手
langchain
白白白飘1 天前
【9】Langchain实战案例:构建一个聊天机器人
microsoft·langchain·机器人
白白白飘1 天前
【8】补充与拓展:Langchain的联网搜索Agent,使用Tavily工具
服务器·网络·langchain
爱奥尼欧1 天前
【LangChain】2.提示词工程
人工智能·microsoft·langchain
白白白飘1 天前
【10】Langchain读取数据库
数据库·langchain