《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 实测有问题欢迎评论区交流。
企业数字化 ERP 产品动态
相关推荐
基于VGG16的水稻病害检测机器学习实战项目python数据分析与可视化 ✅源码获取:
🍅--------------------【点击左上方头像,在置顶文章上方的wx】联系我们-------------🍅✌网站介绍:✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。✌服务范围:大数据、机器学习… · 2026/9/26 4:04:47
friend 友元:什么时候值得破坏封装 友元(friend)是 C 里唯一一种「光明正大绕过 private 访问控制」的机制——它被设计出来不是让你随便用的,而是给少数「必须紧密协作」的场景留一个受控的后门。这篇把友元的三种写法、三条铁律,以及「什么时候真该用、什么时候该… · 2026/9/26 4:04:41
如何写好一个 Skills? 名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录1. Skills 是什么?什么时候值得写?2. 写好六件事,… · 2026/9/26 4:04:34
Steam游戏启动卡在正在启动?17步底层诊断与修复指南 1. 项目概述:为什么“正在启动”成了Steam玩家最熟悉的等待界面 你点开《赛博朋克2077》,鼠标悬停在“播放”按钮上,指尖一按——屏幕右下角弹出小窗口:“正在启动”,进度条纹丝不动。你盯着它看了30秒、60秒、两分钟… · 2026/9/26 5:25:48
【行空板K10】从环境搭建到用华为云码道生成「中秋快乐」 文章目录一、前言二、软件安装与工程配置2.1 安装 PlatformIO(以 VSCode 为例)2.2 新建工程并配置 platformio.ini2.3 跑通官方测试代码三、踩坑记录:中文路径/文件名导致的编译错误四、用华为云码道(CodeArts)生成「中秋快乐」彩色文字4.1 需… · 2026/9/26 5:25:48
SSM后端+微信小程序:社区垃圾回收管理系统全栈实战教程 简介:一套基于微信小程序的社区垃圾回收管理系统SSM后端毕业设计源码案例,面向计算机专业毕业生、课程设计学习者及微信小程序/后端开发爱好者。系统涵盖用户管理、垃圾回收请求提交、垃圾分类指导、任务分配、进度跟踪与数据统计等核心功能,… · 2026/9/26 5:25:48
SSM+微信小程序社区养老服务系统:环境搭建、业务走读与避坑指南 简介:基于微信小程序与SSM后端的高分毕业设计完整源码包可用于毕业设计、课程设计及期末大作业,面向计算机专业毕业生和需要项目实战练习的学习者。项目以社区养老服务为业务场景,围绕护理预约、健康管理、日常生活照料、文化娱乐活动等模块展… · 2026/9/26 5:25:48
120套财务分析报告模板RAR实战指南:从解压安全到Excel合并分析 我一直觉得,做财务这行的人,谁电脑里没几个“模板大礼包”都说不过去。今天要聊的这份《120套财务分析报告模板.rar》,可能你也在某个资料群里见过。问题在于,很多人把文件下载完、解压完、看一眼目录,然后就没有然后了… · 2026/9/26 5:25:48
VS Code 从C语言到嵌入式与AI编程:一套可复现的完整配置指南 简介:微软Visual Studio Code(简称VS Code)是微软推出的免费开源代码编辑器,长期活跃于Web前端、服务端脚本、桌面与移动应用等各类开发场景,既适合初学者熟悉编码流程,也适合专业开发者进行多项目协同与复… · 2026/9/26 5:25:42
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46