HoRain云--LangChain 模型调用 -- init_chat_model() 函数

📅 2026/7/10 21:49:26
HoRain云--LangChain 模型调用 -- init_chat_model() 函数
LangChain init_chat_model() 是 LangChain 中最常用的函数之一它让你用统一的方式连接 20 多种模型提供商不需要记忆每个提供商的类名和参数差异。语法init_chat_model() 函数语法如下from langchain.chat_models import init_chat_model # 完整语法 model init_chat_model( model, # str | None模型名称provider:model 格式 *, model_providerNone, # str | None单独的模型提供商 configurable_fieldsNone, # None | any | list[str]可运行时修改的字段 config_prefixNone, # str | None配置键前缀 **kwargs, # 模型特定参数temperature、max_tokens 等 )参数说明参数类型说明默认值modelstr 或 None模型名provider:model 格式。传 None 时可用于创建可配置模型无model_providerstr 或 None单独指定提供商。动态获取或 model 无法推断时使用Noneconfigurable_fieldsany 或 list 或 None可运行时修改的字段列表。None 表示固定模型Noneconfig_prefixstr 或 None多模型场景下配置键的前缀避免冲突None**kwargsdict传递给底层模型的参数无model 参数详解provider:model 格式推荐格式为 提供商:模型名用冒号分隔实例from langchain.chat_models import init_chat_model# provider:model 格式model init_chat_model(deepseek:deepseek-v4-flash)model init_chat_model(anthropic:claude-sonnet-4-5-20250929)model init_chat_model(deepseek:deepseek-chat)model init_chat_model(ollama:llama3.2)model init_chat_model(groq:llama-3.3-70b)自动推断模型提供商如果不指定提供商前缀LangChain 会尝试从模型名推断实例from langchain.chat_models import init_chat_model# 自动推断提供商基于模型名前缀model init_chat_model(deepseek-v4-flash) # → openaimodel init_chat_model(claude-sonnet-4-5) # → anthropicmodel init_chat_model(deepseek-chat) # → deepseekmodel init_chat_model(grok-3) # → xaimodel init_chat_model(mistral-large) # → mistralai模型名前缀推断提供商gpt-、o1、o3、chatgpt、text-davinciopenaiclaudeanthropicgeminigoogle_vertexaicommandcoheredeepseekdeepseekmistral、mixtralmistralaigrokxaisonarperplexityamazon.、anthropic.、meta.bedrock自动推断虽然方便但不保证 100% 正确。例如 gemini 前缀可能指向 google_vertexai 或 google_genai未来版本可能改变默认推断结果。生产环境建议始终使用 provider:model 格式。model_provider 参数当 model_provider 单独指定时效果等价于 provider:model 格式实例# 下面两种写法完全等价model init_chat_model(claude-sonnet-4-5, model_provideranthropic)model init_chat_model(anthropic:claude-sonnet-4-5)使用 model_provider 的场景从配置文件动态读取提供商名称时提供商名称和模型名需要独立配置时运行时分别切换模型名无法被自动推断且不方便拼接字符串时固定模型 vs 可配置模型init_chat_model() 有两种使用模式模式 1固定模型指定具体的 model 字符串返回可直接使用的 BaseChatModel 实例实例from langchain.chat_models import init_chat_model# 指定了 model返回固定模型model init_chat_model(deepseek:deepseek-v4-flash, temperature0.7)response model.invoke(介绍菜鸟教程 RUNOOB)print(response.content)如果 .env 是在当前目录下使用以下代码载入当前路径的配置import os from dotenv import load_dotenv # 加载当前目录 .env 文件 load_dotenv() from langchain.chat_models import init_chat_model # 指定了 model返回固定模型 model init_chat_model(deepseek:deepseek-v4-flash, temperature0.7) response model.invoke(介绍菜鸟教程 RUNOOB) print(response.content)模式 2可配置模型不指定 model或设为 None创建可在运行时动态切换的模型实例from langchain.chat_models import init_chat_model# 不指定 model返回可配置模型# 可以固定一些参数如 temperature0.7其余运行时指定configurable_model init_chat_model(temperature0.7)# 运行时通过 config 指定模型response configurable_model.invoke(介绍菜鸟教程 RUNOOB,config{configurable: {model: deepseek-v4-flash}})print(response.content)# 同一个模型实例可以用不同的模型来执行response configurable_model.invoke(介绍菜鸟教程 RUNOOB,config{configurable: {model: claude-sonnet-4-5}})print(response.content)可配置模型在 A/B 测试和成本优化中非常有用。你可以在不重启服务的情况下通过修改配置来切换模型或调整参数。所有支持的模型提供商以下是 init_chat_model() 内置支持的提供商及其安装包provider 名称安装包代表模型openailangchain-deepseekgpt-4o、gpt-4o-minianthropiclangchain-anthropicclaude-sonnet-4-5、claude-opus-4-7google_genailangchain-google-genaigemini-2.5-flash、gemini-2.5-progoogle_vertexailangchain-google-vertexaigemini-2.5-flash、gemini-2.5-prodeepseeklangchain-deepseekdeepseek-chat、deepseek-reasonermistralailangchain-mistralaimistral-large、mistral-smallgroqlangchain-groqllama-3.3-70b、mixtral-8x7bollamalangchain-ollamallama3.2、qwen2.5fireworkslangchain-fireworksaccounts/fireworks/models/llama-v3p1-70btogetherlangchain-togethermeta-llama/Llama-3.3-70Bxailangchain-xaigrok-3openrouterlangchain-openrouteropenai/gpt-4o、anthropic/claude-sonnetperplexitylangchain-perplexitysonar、sonar-prohuggingfacelangchain-huggingface各类 HuggingFace 模型coherelangchain-coherecommand-r-plus常用 kwargs 参数kwargs 参数会直接传递给底层模型类常用的包括实例from langchain.chat_models import init_chat_modelmodel init_chat_model(deepseek:deepseek-v4-flash,# 控制输出随机性0~2值越小输出越稳定temperature0.3,# 限制输出最大 token 数控制成本max_tokens200,# 请求超时时间秒timeout30,# 失败重试次数max_retries2,# 自定义 API 地址代理/中转场景# base_urlhttps://your-proxy.com/v1,# 速率限制器控制请求频率# rate_limiterMyRateLimiter(requests_per_second5),)response model.invoke(菜鸟教程 RUNOOB 是什么)print(response.content)参数类型说明适用提供商temperaturefloat控制随机性0~2默认值因模型而异大部分max_tokensint限制输出最大 Token 数全部timeoutint 或 float请求超时秒数全部max_retriesint请求失败后的重试次数大部分base_urlstr自定义 API 端点大部分rate_limiterBaseRateLimiter速率限制器实例大部分top_pfloat核采样参数0~1大部分stoplist[str]停止序列模型遇到这些词时停止生成大部分temperature 和 top_p 通常不同时设置。temperature 控制的是分布的形状top_p 控制的是候选范围。对于大多数场景只调整 temperature 就足够了。ConfigurableModel——运行时切换模型ConfigurableModel 是 init_chat_model() 的高级用法允许在运行时动态指定模型和参数实例from langchain.chat_models import init_chat_model# 创建可配置模型并设置默认值model init_chat_model(deepseek:deepseek-v4-flash, # 默认模型configurable_fieldsany, # 所有参数都可在运行时修改config_prefixmy, # 配置键前缀temperature0.3, # 默认温度)# 使用默认配置运行response model.invoke(介绍菜鸟教程)print(f默认配置: {response.content[:50]}...)# 运行时覆盖模型和参数注意 my_ 前缀response model.invoke(介绍菜鸟教程 RUNOOB,config{configurable: {my_model: deepseek:deepseek-v4-pro, # 切换模型my_temperature: 0.9, # 调整温度}})print(f覆盖配置: {response.content[:50]}...)configurable_fields 的取值值含义None不可配置返回普通的 BaseChatModel固定模型模式any所有参数可配置注意安全api_key 等也能被修改[model, temperature]只有列表中指定的字段可配置使用 configurable_fieldsany 时要注意安全如果信任了不安全的配置来源api_key 和 base_url 等敏感字段可能被篡改。生产环境建议显式列出可配置的字段。