从调API到搭积木:Langchain 入门学习
写在最前面:我对 LangChain 的理解
LangChain 是一个集成的、封装的 AI 开发框架,为 AI 编程开发优化了效率。它通过 Chain 机制,为 LLM 执行任务编排出一套清晰的行为流程,借此优化 LLM 的输出,增强了提示词约束的便利性和可靠性。
对于简单的任务,直接调 API 也能拿到回答,代码甚至更轻量;但对于多步骤的复杂任务(比如 RAG),裸 API 调用需要手写大量胶水代码,导致代码复杂度升高、可读性下降。LangChain 正好填补了这个空白。
为什么我开始关注 LangChain
在最初学习大模型时,需要调用大模型 API 时我会选择 requests。对于简单对话,直接调 API 很方便。但当我后来在学习搭建 RAG 的过程中,发现这样的调用代码量大,可读性也差。随着继续深入学习,我在 B 站了解到了 LangChain。
后来我意识到,我的需求不是"怎么发 HTTP 请求",而是:
- 如何把检索、提示、生成这几个步骤串联成一个可复用的流程?
- 如何让代码结构清晰,方便以后换模型或增加功能?
LangChain 恰好解决了我的问题。
我理解的核心概念:Chain 和 LCEL
LangChain 最打动我的不是它的 API 有多全,而是它的设计模式:一切皆 Chain。你可以把一次与 LLM 的交互拆成若干个小步骤,然后用 | 把它们连接起来,形成一个固定的工作流程。
比如一个简单的问答:接收用户问题 → 从字典里查产品信息 → 拼接到提示词 → 发给 LLM → 返回字符串。
如果用原生 API,我会写一个函数,里面包含检索、拼接、调用、解析——代码量大,写着写着头晕眼花。但用 LangChain,我可以这样表达:
检索产品 -> 格式化提示 -> 调用 LLM -> 解析输出
每一步都是独立的组件,可以单独测试、替换或复用。这种声明式的写法让代码读起来就像流程图。
从小玩具到向量数据库
一开始我用字典做检索(if "笔记本" in query),这显然很粗糙。后来我把产品信息向量化,存入 ChromaDB,用语义相似度来检索。
有意思的是,LangChain 的 Chain 几乎不需要改——我只需要替换掉"检索产品"这个组件,上层的提示模板、LLM 调用、输出解析完全不用动。这让我体会到框架抽象带来的便利。
LangChain vs 直接调 API
我的判断是:
- 简单任务(比如单轮问答、翻译一条文本)→ 直接用 requests 或官方 SDK,代码更轻量。
- 复杂任务(RAG、多轮对话、需要调用工具)→ 用 LangChain,流程更明确,开发效率更高。