惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
T
The Blog of Author Tim Ferriss
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog
L
LangChain Blog
博客园_首页
Vercel News
Vercel News
月光博客
月光博客
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - Franky
C
Check Point Blog
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
罗磊的独立博客
D
Docker
酷 壳 – CoolShell
酷 壳 – CoolShell
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
11. LangChain实用技巧,轻松切换AI大模型
老陈说编程 · 2026-05-06 · via 博客园_首页

在 AI 应用开发中,当我们需要集成并调用不同 AI 大模型来实现文本生成、代码补全、语义理解等多样化功能时,为了避免不同模型的配置参数(如 base_url、api_key 等)相互混淆,可通过 config_prefix 进行清晰的命名空间区分。

如果喜欢看视频学习的,可以看这个《11. LangChain实用技巧,轻松切换AI大模型》,喜欢看文章的接着往下看。

这里有一个关键前提需要特别注意:只有在 configurable_fields 中显式指定的参数,才会受 config_prefix 的影响,未指定的参数仍保持原有命名规则。

例如,当设置config_prefix="CODE"时,原本用于指定模型接口地址的参数base_url会自动变成CODE_base_url,从而与其他模型的base_url参数彻底隔离开来。

init_chat_model(
  model: str | None = None,
  *,
  model_provider: str | None = None,
  configurable_fields: Literal['any'] | list[str] | tuple[str, ...] | None = None,
  config_prefix: str | None = None,
  **kwargs: Any = {}
) -> BaseChatModel | _ConfigurableModel

image

 以下为.env 环境配置文件的内容,记得必将其中的 API_KEY 占位值,替换为您自行在对应平台申请的有效API密钥。

QWEN_API_KEY="你的QWEN API KEY"
QWEN_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
QWEN_MODEL="qwen3.6-plus"
MINIMAX_API_KEY='你的MiniMax API KEY'
MINIMAX_BASE_URL='https://api.minimaxi.com/v1'
MINIMAX_MODEL='MiniMax-M2.7'

当使用 LangChain 的init_chat_model初始化聊天模型并需要动态注入不同大模型的配置时,可按照以下步骤操作:首先将配置前缀config_prefix统一设置为"QWEN";接着构建config字典,需特别注意 LangChain 的明确要求:

所有需要在运行时生效的动态参数,必须统一放置在configurable层级下;在该层级内,完成核心参数配置:模型名称对应的键名为QWEN_model,base_url对应的键名为QWEN_base_url,api_key对应的键名为QWEN_api_key。

完成config字典的构建后,将其整体传入模型对象的invoke方法中,即可完成动态参数的注入,让上述配置的所有参数在模型调用时实时生效。对应的完整代码示例如下:

import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
 
load_dotenv()
prefix = "QWEN"
llm = init_chat_model(
    model_provider="openai",
    configurable_fields=["model", "api_key", "base_url"],
    config_prefix=prefix,
    temperature=0.5,
    max_tokens=200
)
config = {
    "configurable": {
        f"{prefix}_model": os.getenv(f"{prefix}_MODEL"),
        f"{prefix}_api_key": os.getenv(f"{prefix}_API_KEY"),
        f"{prefix}_base_url": os.getenv(f"{prefix}_BASE_URL")
    }
}
response = llm.invoke("请做一个自我介绍", config=config)
print(response.content)

接下来,我们将配置前缀及核心参数调整为适配 Minimax 大模型的设置,并用其来生成Python代码示例。

import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
 
load_dotenv()
prefix = "MINIMAX"
llm = init_chat_model(
    model_provider="openai",
    configurable_fields=["model", "api_key", "base_url"],
    config_prefix=prefix,
    temperature=0.5,
    max_tokens=200
)
config = {
    "configurable": {
        f"{prefix}_model": os.getenv(f"{prefix}_MODEL"),
        f"{prefix}_api_key": os.getenv(f"{prefix}_API_KEY"),
        f"{prefix}_base_url": os.getenv(f"{prefix}_BASE_URL")
    }
}
response = llm.invoke("生成Python打印Hello World的代码", config=config)
print(response.content)