尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

LangChain 1.x 实战笔记(一):接入模型 —— 一个 base_url 打通所有大模型

发布时间:2026/9/26 4:04:47

资讯中心
01
ARTICLE

LangChain 1.x 实战笔记(一):接入模型 —— 一个 base_url 打通所有大模型

LangChain 1.x 实战笔记(一):接入模型 —— 一个 base_url 打通所有大模型
《LangChain RAG 全链路学习笔记》系列 · 第 1 篇共 13 篇作者AvA环境Python 3.11 LangChain 1.x⚠️看之前先注意一件事网上大量 LangChain 教程还是 0.3.x 版本导入路径已经变了照抄会直接ModuleNotFoundError: No module named langchain。本系列每一处都标注了新旧路径差异代码全部本机实测跑通。这一章解决什么问题不解决任何业务问题只回答一件事怎么用一行invoke把一句话发给大模型并把回答拿出来。听起来简单但这里有一个国内开发者绕不开的问题模型厂商这么多难道每换一家就要换一套 SDK、改一遍代码这一章给出了答案。核心结论OpenAI 兼容协议国内主流厂商——DeepSeek、通义、月之暗面、智谱——都提供了「OpenAI 兼容接口」它们的 API 形态和 OpenAI 一模一样只是域名不同。所以只要改一个base_url同一个ChatOpenAI类就能调所有厂商不需要为每家装一个专用包。importosfromlangchain_openaiimportChatOpenAI llmChatOpenAI(modeldeepseek-chat,base_urlhttps://api.deepseek.com/v1,# ← 精髓就这一行api_keyos.environ.get(DEEPSEEK_API_KEY),temperature0,)课程里演示了四种接法结论如下接法写法评价直连 OpenAIChatOpenAI(model...)最标准厂商专用包langchain_deepseek.ChatDeepSeek要额外装包且只认一家社区包langchain_community的ChatTongyi需要dashscope依赖兼容协议ChatOpenAIbase_url⭐推荐一个类通吃最小可运行代码importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAI load_dotenv()# ① 必须在创建客户端之前llmChatOpenAI(modeldeepseek-chat,base_urlhttps://api.deepseek.com/v1,api_keyos.environ[DEEPSEEK_API_KEY],# 用中括号拼错会当场 KeyErrortemperature0,)responsellm.invoke(你是谁)# ② 返回 AIMessage 对象print(response.content)# ③ 要 .content 才是正文两个必须记住的约定load_dotenv()必须在创建客户端之前调用—— 客户端在构造的那一刻就去读环境变量。拿到的是AIMessage对象不是字符串—— 要.content取正文。⚠️ 我踩到的坑1.load_dotenv()放错位置报错却和.env无关放到ChatOpenAI(...)后面 → key 读不到 → 报鉴权错误AuthenticationError而不是「找不到 .env 文件」。报错信息会把你往错误的方向带。2.os.environ.get(XXX)拼错变量名不报错它会静默返回None一路传到 API 那里才炸表现为鉴权失败。想立刻发现用方括号os.environ[DEEPSEEK_API_KEY]—— 键不存在直接KeyError当场暴露。3.import成功 ≠ 能用ChatTongyi的dashscope是在构造时才 import 的。所以fromlangchain_community.chat_modelsimportChatTongyi# ✅ 成功llmChatTongyi(...)# ❌ 这里才 ImportError这是个思维陷阱别人说「装了这个包」不代表你 import 一下就能用。4.model还是model_nameChatOpenAI两个都能用字段真名是model_namemodel是别名但ChatDeepSeek/ChatTongyi只认model。统一写model最安全。5. 忘了.content直接print(response)会打出一坨content... additional_kwargs{} response_metadata{} ...⚠️ 1.x 和 0.3.x 的导入路径差异这条是本篇相对网上教程最大的不同# 网上 0.3.x 教程fromlangchain.chat_modelsimportChatOpenAI# 本机 1.x 实际fromlangchain_openaiimportChatOpenAI# ⭐ 单独成包了照抄老教程会直接ModuleNotFoundError: No module named langchain。补充 ①我为什么选了 DeepSeek主要还是控制成本。我平时用的 Claude Code里面接的就是我自己配的deepseek-v4-flash加上最近 DeepSeek 出了 v4.1价格也往下调了截至 2026 年 9 月。补充 ②我实际遇到的第一个报错第一个错误就是这个ModuleNotFoundError: No module named langchain这个是因为课程使用的是老的版本他和新版本之间的导入不同。第二个错误是我导入的时候包的大小写错了一处。这个错误其实会报错但从报错信息里看不出是大小写的问题 —— 我盯着代码看了半天就是没发现最后问 AI 才找出来。人眼对大小写是真的不敏感。补充 ③为什么改一个base_url就能调所有厂商我个人觉得这个东西可能和我现在使用的这个 Claude 比较像就是这个 openai 设置的是一个通用接口所以只需要提供模型商的网址就是 base_url 就可以了然后每个模型商会给自己的模型提供专用的接口这个可能是比这个统一的接口更加适配包括速度快损耗少啥的。✅ 自测三问ChatOpenAI(...).invoke(你好)返回什么类型要打印纯文本该怎么写AIMessage是一个消息对象不是字符串。正文在它的.content里所以打印纯文本要写print(response.content)。我一开始以为print(response)会报错其实不会—— 它会把content、response_metadata、usage_metadata等 9 个字段一股脑全打出来。不报错反而更坑报错你会去查不报错你只会纳闷「这什么玩意儿」。顺带一提那一坨不是 JSON是 Python 对象的 repr —— 看引号就能分单引号...是 Python双引号...才是 JSON。真要存它或者传给前端才需要json.dumps(response.model_dump())。想用ChatOpenAI调 DeepSeek最少传哪几个参数model、base_url、api_key。把load_dotenv()挪到ChatOpenAI(...)后面报错信息为什么看起来跟.env无关因为那时候环境变量还没来得及加载key 读到的是None一路传到 API 那里才以「鉴权失败」的形式炸出来。本系列共 13 篇下一篇02 模型与消息 ——LLM和ChatModel到底差在哪笔记同步更新在 GitHubgithub.com/MaDai66/langchain-rag-notes代码基于 LangChain 1.x 实测有问题欢迎评论区交流。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。