当前位置: 首页 > news >正文

D04-L3-LangChain入门

LangChain 入门:一文理解 LCEL,跑通你的第一个可运行链

适合人群:已能调用大模型 API、想系统学习 LangChain 的开发者


📌 引言:为什么值得学 LangChain?

自己用 SDK 调大模型很简单,但一旦任务变复杂——要做提示词模板、要接多个工具、要控制流程、要加记忆——代码就会失控。LangChain 是生态最全的 LLM 应用框架:模型接入、提示词管理、输出解析、记忆、工具、Agent、可观测,都有现成组件。

不过 LangChain 的版本迭代很快、旧教程遍地都是,很多初学者被过时的写法带偏。这篇文章只讲当前主流推荐的写法:LCEL(LangChain Expression Language),并给出可运行的完整示例。


一、LangChain 的核心抽象

用一句话建立心智模型:LangChain = 一堆组件 + 一种把它们串起来的语法(LCEL)

抽象作用类比
ChatPromptTemplate管理提示词模板(system/human 消息)预制的"话术模板"
ChatModel封装大模型调用(OpenAI/通义/文心…)“大脑”
OutputParser解析模型输出(纯文本/JSON/结构化)“翻译官”
Runnable可执行单元,一切组件的统一接口乐高积木
LCEL 管道|把 Runnable 串成链积木的拼接槽

核心洞察:在 LangChain 里,几乎一切都是 Runnable——模型是、解析器是、模板是、整条链也是。它们都能被|拼接,这是 LCEL 的基础。


二、LCEL 是什么?为什么推荐它?

LCEL 是 LangChain 提供的声明式管道语法,本质就是 Python 的|运算符重载:

chain=prompt|model|parser
  • prompt输入用户的原始问题,输出标准消息;
  • model接收消息,输出模型响应;
  • parser把响应转成干净文本。

数据像流水线一样从左到右流动,每一步的输入是上一步的输出。对比旧写法(LLMChain(prompt=..., llm=...)),LCEL 的优势:

  1. 写法直观:流水线一目了然,新人很快就能读懂;
  2. 原生并行/流式/异步.batch().stream().ainvoke()开箱即用;
  3. 易组合:链本身也是 Runnable,可以被更大的链嵌套;
  4. 官方主推:新功能都优先在 LCEL 上实现,旧 API 在逐步淘汰。

三、快速上手:跑通第一个 LCEL 链

3.1 准备工作

pipinstalllangchain langchain-openai

并设置环境变量OPENAI_API_KEY

3.2 示例一:最简问答链(三个组件拼一条链)

fromlangchain_core.promptsimportChatPromptTemplatefromlangchain_openaiimportChatOpenAIfromlangchain_core.output_parsersimportStrOutputParser# 1) 提示词模板:声明 system 与 human 两段消息,用 {变量} 占位prompt=ChatPromptTemplate.from_messages([("system","你是一位严谨的{role},请用简洁的中文回答,不要编造事实。"),("human","{question}"),])# 2) 模型:指定模型与采样参数model=ChatOpenAI(model="gpt-4o-mini",temperature=0)# 3) 输出解析器:把模型响应转成纯字符串parser=StrOutputParser()# 4) LCEL 管道:拼成一条链chain=prompt|model|parser# 5) 调用:传入模板中的所有变量answer=chain.invoke({"role":"技术顾问","question":"什么是向量数据库?它和普通数据库有什么区别?",})print(answer)

运行后会输出一段中文回答。整个链条只有 4 行核心代码,且chain.invoke({...})传入的字典恰好填满模板变量——这就是 LCEL 的"约定优于配置"。

3.3 示例二:并行分发 + 汇总(感受 LCEL 的组合能力)

业务里常需要"先并行收集多个角度的答案,再汇总"。LCEL 用RunnableParallel一行搞定:

fromlangchain_core.runnablesimportRunnableParallel# 三个并行分支:各自独立的提示词 + 模型 + 解析器branch_a=ChatPromptTemplate.from_template("从【优点】角度评价:{topic}")|model|parser branch_b=ChatPromptTemplate.from_template("从【风险】角度评价:{topic}")|model|parser branch_c=ChatPromptTemplate.from_template("用一句话总结:{topic}")|model|parser# 并行执行三分支,结果以字典形式汇总parallel=RunnableParallel(优点=branch_a,风险=branch_b,总结=branch_c)# 再拼一个汇总链final=parallel|ChatPromptTemplate.from_template("请综合以下三个视角输出完整结论:\n{优点}\n{风险}\n{总结}")|model|parser result=final.invoke({"topic":"把 AI Agent 引入客服系统"})print(result)

💡 三个分支会并发执行(同一批请求),比串行调用快 3 倍。RunnableParallel 的每个 key 对应一个分支,输出直接作为下游模板的变量。


四、LCEL 与旧写法对比:别再学过时代码

网上大量教程还在用这类旧写法:

# ❌ 旧写法(已不推荐)fromlangchainimportLLMChain chain=LLMChain(prompt=prompt,llm=model)
# ✅ 现代写法(LCEL)chain=prompt|model|parser

判断新旧的标准:from langchain import还是from langchain_core import。凡是直接from langchain import ...的教程大概率过时。LangChain 现在把核心抽象拆到langchain-core,模型接入放在各家的扩展包里(如langchain-openailangchain-community),组件更清晰、依赖更轻。


五、刚上手最容易踩的 3 个坑

5.1 坑一:invoke 参数没传全

chain.invoke({"role":"技术顾问"})# ❌ 缺少 questionchain.invoke({"role":"技术顾问","question":"..."})# ✅

模板里声明了几个变量,invoke就必须传全,否则报KeyError。排查时先看模板里的{}占位符。

5.2 坑二:把旧 API 当新 API 用

报错ModuleNotFoundError: No module named 'langchain.llms'之类,多半是教程太老。装包时优先langchain-openai而不是langchain[openai];拿不准就看官方文档(docs.langchain.com)的示例,别照抄博客。

5.3 坑三:忽略流式与异步

LCEL 的.stream()能在首 token 到达后立刻输出,是做聊天体验的刚需;.ainvoke()/.abatch()用于异步场景。上手时顺手把invoke换成stream体验一下逐字输出,后面做产品会少走很多弯路。


六、常见报错速查表

报错信息常见原因处理办法
ModuleNotFoundError: langchain.llms教程/代码过时改用langchain_openai.ChatOpenAI
KeyError: 'question'invoke 变量没传全对照模板{}占位符补全参数
OutputParserException模型输出不符合解析格式换结构化输出或在提示词中强调格式
RateLimitError触发限流加指数退避重试、降并发
中文乱码 / 编码异常终端编码或响应解析问题统一 UTF-8,检查 print 环境
AttributeError: 'RunnableLambda' has no attribute ...自定义函数签名不符函数参数改为单个 dict 输入

记不住没关系:先看报错出处(哪个包),再查该包的官方文档,比搜博客靠谱。


七、给新手的两个练习

练习 1:角色参数化
把示例一的role分别换成"法务顾问"“健身教练”“小学老师”,各问同一个问题,观察回答风格的差异。感受 Prompt 模板里"角色设定"对输出的影响。

练习 2:扩展并行分支
给示例二的RunnableParallel增加第四个分支"从【实施成本】角度评价",并在汇总模板中加入{成本},跑通后你就掌握了 LCEL 并行扩展的套路。

做完这两个练习,你已经能独立拼装"多视角分析链",这是做 Agent 前最有价值的一步热身。


八、下一步学什么?(学习路径建议)

阶段内容难度
本课LCEL 基础链、并行、输出解析入门
进阶记忆(对话历史)、检索(RAG 接入)进阶
高阶工具调用、Agent、状态图(LangGraph)高阶
工程可观测(LangSmith/Langfuse)、部署工程

学习心法:先吃透"一切皆 Runnable、管道即组合",LangChain 的其余功能都是在这两个概念上长出来的。


✅ 总结

  • LangChain 的三大核心抽象:模板、模型、解析器,全部统一为 Runnable;
  • LCEL 用|管道把组件串成链,推荐取代旧LLMChain写法;
  • RunnableParallel一行实现并行分支,stream/batch/async开箱即用;
  • 判断教程新旧看 import 来源:langchain_core才是现代写法;
  • 上手路线:基础链 → 并行组合 → 记忆 → 检索 → Agent → 可观测

📌 觉得有用就点赞 + 收藏 + 关注,更多 AI Agent 干货持续输出。

http://www.jsqmd.com/news/1394008/

相关文章:

  • 低代码平台核心原理深度解析:三层抽象模型与实战避坑指南
  • Claude Code命令行AI助手:基于DeepSeek API的智能编程工具实战指南
  • DDrawCompat 使用全记录:经典游戏兼容性修复,让老游戏在 Windows 11 满帧运行
  • Altium Designer PCB各层作用详解
  • 2026 年武汉不同业态卫生许可证要求有差异吗?详细办理攻略 - 招小财
  • 2026 中泰物流外贸人避坑指南:合规清关 + 退税实操,5 家服务商深度对比 - 优质品牌中立测评推荐
  • Deepseek代码智能体实战:从概念到IDE集成与自定义开发
  • 自适应数字预失真算法实战:LMS与RPEM在功放线性化中的工程权衡
  • 低代码平台集成高德地图实战:AI辅助与性能优化指南
  • 猫抓cat-catch浏览器扩展:5分钟快速上手,轻松捕获网页视频和音频资源
  • 从零构建高效语音输入模块:Web Speech API与云端ASR集成实战
  • 2026 武汉初创化工企业如何合规拿证?危化品许可证深度办理指南 - 招小财
  • ModbusTool 深度上手指南:一台电脑 30 分钟跑通 TCP/UDP/RTU 主从联调
  • 构建AI长期记忆系统:从向量检索到记忆宫殿的工程实践
  • LLM社会模拟器审计:基于理性中介行为模型的安全评估框架
  • 旧房翻新 vs 毛坯装修,东莞业主到底该怎么选? - 米諾
  • 百万上下文多模态AI:长文档分析与跨模态理解的技术实现与应用
  • 2026年北京朝阳区汽车贴膜店挑选指南:避坑标准+正规门店实测参考 - 米諾
  • 专业应变传感器供应商,你了解吗? - 米諾
  • AI模型推理服务性能差异15倍?五大核心环节与评估调优全解析
  • FFmpeg 新手入门:从安装到实战,快速掌握音视频处理核心技能
  • 旅游行业GEO优化公司哪家更适合?从内容资产的长期复利看 - 品牌前沿专家
  • LangGraph通讯机制解析:从状态管理到条件路由的AI应用构建
  • Android应用级虚拟定位技术深度解析:FakeLocation专业配置指南
  • 深耕大健康家居赛道 芝康家居:以匠心打造瑜伽冥想家纺全球供应链 - 米諾
  • 闭口合同终身保修到底是什么意思?东莞业主最容易误解的 5 个装修名词 - 米諾
  • 【Kubernetes从入门到精通】第37篇:PV和PVC——存储的“供需匹配“平台
  • 5步完成缠论插件安装,通达信自动画好笔、线段和中枢
  • 北京石景山区GEO服务商代理加盟怎么选?2026年国内靠谱GEO服务商综合推荐指南 - 企业新闻快传
  • Windows系统文件ucrtbase.dll丢失找不到问题解决