【零基础入门 LLM 开发 · Day 11】:ChatOpenAI vs init_chat_model——一行换供应商
【零基础入门 LLM 开发 · Day 11】ChatOpenAI vs init_chat_model——一行换供应商场景Day 10 起我们的代码都是这么开头的fromlangchain_openaiimportChatOpenAI llmChatOpenAI(model...,api_key...,base_url...)直接实例化直观明了。但它有个隐形约束类名焊死了供应商——ChatOpenAI只会说OpenAI 协议这一种话。哪天想试 Claude、Gemini 或本地模型每个文件都要改 import 和构造代码。最近的练习文件换成了另一种写法init_chat_model。这篇讲清两者区别顺便把常见供应商的接入写法一次备齐。姿势一ChatOpenAI 直连fromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelos.getenv(YUMC_MODEL_NAME),api_keyos.getenv(YUMC_MODEL_API_KEY),base_urlos.getenv(YUMC_MODEL_BASE_URL),# 指向任何 OpenAI 兼容端点temperature0.7,)优点类型明确IDE 补全参数一个不落装的包也最少langchain-openai一个就够局限只会 OpenAI 协议。对兼容端点来说这恰恰不是缺点见下文但要接原生 Anthropic / Google 接口就得换类、换包。姿势二init_chat_model 工厂fromlangchain.chat_modelsimportinit_chat_model modelinit_chat_model(modelos.getenv(YUMC_MODEL_NAME),model_provideropenai,# 决定实际造出哪个类temperature0,api_keyos.getenv(YUMC_MODEL_API_KEY),base_urlos.getenv(YUMC_MODEL_BASE_URL),)model_provider是工厂的图纸openai→ 内部实例化ChatOpenAIanthropic→ChatAnthropic……其余参数原样透传给对应的类。换供应商 改一个字符串。验证一下工厂没骗你modelinit_chat_model(modelgpt-4o-mini,model_provideropenai)print(type(model))# class langchain_openai.chat_models.base.ChatOpenAIChatOpenAI 直连init_chat_model 工厂本质具体类按字符串选类的工厂函数换供应商改 import 构造代码只改model_provider或配置IDE 补全好一般返回类型是动态的依赖只需对应一家的包用哪家就得装哪家的包适用教学/demo、只用一家多模型切换、通用工具不同供应商的写法速查表路线 A官方集成包——每家一个model_provider值 一个要单独安装的包供应商model_provider需要安装model 示例OpenAIopenailangchain-openaigpt-4o-miniAnthropicanthropiclangchain-anthropicclaude-sonnet-4-5Googlegoogle_genailangchain-google-genaigemini-2.0-flashDeepSeekdeepseeklangchain-deepseekdeepseek-chatOllama本地ollamalangchain-ollamaqwen2.5本地已 pull 的模型名modelinit_chat_model(claude-sonnet-4-5,model_provideranthropic)# api_key 从环境变量 ANTHROPIC_API_KEY 自动读取也可以显式传路线 BOpenAI 兼容协议——很多国产服务不提供官方集成包但都提供OpenAI 兼容接口统统走model_provideropenai 自家base_url服务base_url智谱 GLMhttps://open.bigmodel.cn/api/paas/v4Kimi月之暗面https://api.moonshot.cn/v1通义千问兼容模式https://dashscope.aliyuncs.com/compatible-mode/v1DeepSeek 官方https://api.deepseek.com你自己的 .envYUMC_MODEL_BASE_URL本系列一直在用的就是这种modelinit_chat_model(modelglm-5.3-flash,model_provideropenai,# 协议是 OpenAI 的base_urlhttps://open.bigmodel.cn/api/paas/v4,# 但地址是智谱的api_keyos.getenv(ZHIPU_API_KEY),)本系列的.envYUMC_MODEL_*就是路线 B协议标准、地址自选。所以代码从 Day 1 到今天几乎没变过。小技巧新版还支持冒号简写一行连供应商带模型名一起写modelinit_chat_model(openai:gpt-4o-mini)怎么选教学阶段 / 确定只用 OpenAI 系ChatOpenAI直连——直观、补全友好想随时切换模型对比效果 / 做通用工具init_chat_model——把供应商选择变成一行配置两者可以混用核心代码面向 LangChain 的统一消息/工具接口编程初始化交给工厂。今日踩坑点没装对应的集成包init_chat_model(model_provideranthropic)但没装langchain-anthropic报ModuleNotFoundError——工厂是按需导入的图纸认了、零件没货。兼容端点漏了base_url以为传了api_key就行请求直奔官方api.openai.com拿着智谱的 key 报 401。路线 B 的base_url是命根子。参数拼写错误被透传init_chat_model(..., temperatre0)不报参数不存在而是把未知参数转发给底层类最后在 API 调用时才炸TypeError: unexpected keyword argument temperatre——报错位置离案发现场很远Day 14 的methond同款坑。参数拼错先查构造处。换了供应商 ≠ 行为一致bind_tools、with_structured_output各家支持度不同Day 14 的json_schema假装支持问题就是典型。切了供应商这些能力要重新验证。今日小练习必做把 Day 10 的ChatOpenAI换成init_chat_model跑通同样的对话print(type(model))亲眼看看工厂造出了什么。进阶写一个load_model()函数——供应商、模型名、密钥全部从.env读取实现不改一行代码换供应商。思考把base_url改成一个不存在的地址和直接删掉base_url分别报什么错为什么报错不一样明日预告Day 12LangChain 流式输出——比 Day 5 手动拼 delta 简单得多一行for搞定。附录完整练习代码langchainTest4-tools2.py的初始化段tools 系列练习文件统一用这种写法importosfromdotenvimportload_dotenvfromlangchain.chat_modelsimportinit_chat_model load_dotenv()modelinit_chat_model(modelos.getenv(YUMC_MODEL_NAME),model_provideropenai,temperature0,api_keyos.getenv(YUMC_MODEL_API_KEY),base_urlos.getenv(YUMC_MODEL_BASE_URL),)换供应商实战只动.env代码零修改importosfromdotenvimportload_dotenvfromlangchain.chat_modelsimportinit_chat_model load_dotenv()# .env 里配什么就用什么# YUMC_MODEL_NAMEglm-5.3-flash# YUMC_MODEL_API_KEY你的密钥# YUMC_MODEL_BASE_URLhttps://open.bigmodel.cn/api/paas/v4# 想换 Kimi改这三行配置即可下面的代码原封不动。modelinit_chat_model(modelos.getenv(YUMC_MODEL_NAME),model_provideropenai,# 兼容协议走 openaiapi_keyos.getenv(YUMC_MODEL_API_KEY),base_urlos.getenv(YUMC_MODEL_BASE_URL),)responsemodel.invoke(用一句话介绍你自己)print(response.content)

相关新闻

住宅IP适用场景全解析:从跨境电商到防关联,一篇讲透真实家庭网络身份的价值

住宅IP适用场景全解析:从跨境电商到防关联,一篇讲透真实家庭网络身份的价值

在数字化业务越来越依赖网络身份的今天,IP地址早已不只是一个技术参数,而是平台风控系统判断用户真实性、地域属性和行为模式的核心依据之一。很多团队在运营过程中会遇到账号被封、广告被限流、数据抓取被拦截等问题,其中一个常见原因就是使…

2026/10/10 2:42:03 阅读更多 →
02linux进程与调度管理

02linux进程与调度管理

二、系统整理后的核心知识(运维视角)模块一:内核体系分层总览课程先纠偏驱动不属于硬件层,属于内核层:硬件是物理设备本身,驱动是内核里操控硬件的代码,是内核的核心组成部分。没有独立的 “服务…

2026/10/10 2:42:03 阅读更多 →
系统辨识教案:从黑匣子到可交付讲义的落地路径

系统辨识教案:从黑匣子到可交付讲义的落地路径

简介:这份系统辨识教案面向自动化专业学生与相关工程技术人员,围绕从输入输出数据中建立系统模型这一核心问题展开,帮助读者掌握辨识理论、实验设计与编程计算能力。内容涵盖实体与模型的分类、Zadeh 辨识定义的三要素、辨识目的与模型类选择…

2026/10/10 2:42:03 阅读更多 →

最新新闻

Oracle 19c Solaris x86-32 客户端安装包解析与实战避坑指南

Oracle 19c Solaris x86-32 客户端安装包解析与实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 4:59:23 阅读更多 →
PCA9422与STM32G071RB低功耗电源管理方案设计

PCA9422与STM32G071RB低功耗电源管理方案设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 4:59:23 阅读更多 →
金融风控智能欺诈检测:数据、规则与模型的三重博弈

金融风控智能欺诈检测:数据、规则与模型的三重博弈

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 4:59:23 阅读更多 →
广义S变换与逆变换实现:时频分析参数选型及信号重构

广义S变换与逆变换实现:时频分析参数选型及信号重构

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 4:59:23 阅读更多 →
PCA9422与PIC18F86K22协同实现高可靠性电源管理

PCA9422与PIC18F86K22协同实现高可靠性电源管理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 4:59:23 阅读更多 →
Linux上Redis源码编译安装与systemd托管避坑指南

Linux上Redis源码编译安装与systemd托管避坑指南

在Linux上安装Redis,最迷惑人的地方往往不是步骤本身,而是你五分钟跑起来之后,后面几天陆陆续续暴露出来的问题。yum install redis或者apt install redis-server确实快,但当你需要固定版本、自定义存储目录、把日志和数据分开放的…

2026/10/10 4:58:23 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →