从 Java 后端转 Agent 开发,第一座要爬的脚手架叫 LangChain
你在面试或选题时一定见过这个名字:LangChain。它可能是 “Agent 开发第一大框架”,也可能被吐槽 “包多、版本乱”。对于从 Java 后端切过来的工程师,真正要搞懂的其实不是它的某个具体 API,而是它想解决的工程问题——用一句话:它帮你把"调用大模型"这件简单事,升级成"编排一套能做事的系统"。
这篇当作第一讲,只讲三件事:①LangChain 到底站在解决什么问题的位置上;②它的核心组件分别是什么;③一个最小可跑的示例,让你知道"上手"不等于"写死一行 API 调用"。
一、LangChain 解决的是"贴胶水"问题
如果只是"发一个请求给模型然后打返回",那不需要任何框架,一个requests.post就够了。真正的分水岭在第二件、第三件事发生之后:
- 同一个模型请求,要配不同的提示词模板、不同的解析方式;
- 你要能换模型供应商,而不改动业务代码;
- 一段对话需要有记忆,任务需要调用工具,答案要引用你私有文档里的资料。
这些需求堆叠的结局,就是到处重复的"胶水代码"——每个项目都在重写一遍"构造输入、调模型、解析输出、存上下文"。**LangChain 的价值是把这层胶水制度化、可插拔。**它不替你做业务,它替你搭"模型 + 周边能力"的脚手架。
二、一次认清核心组件
| 组件 | 干什么 | 对应工程里谁 |
|---|---|---|
| ChatModel | 调大模型,统一抽象不同供应商 | 一个"发模型的客户端" |
| PromptTemplate | 把提示词变成带变量的模板 | 标注"/格式化参数的模板" |
| OutputParser | 把模型返回的字符串解析成结构化对象 | 一个"反序列化器" |
| Retriever | 从私有知识里找出相关内容 | 一个"索引查询" |
| Tool / Agent | 让模型能用外部工具、做决策循环 | 一个"执行器 + 调度循环" |
| Memory(过渡态) | 记住上下文 | 会话状态表;v0.3+ 已弃用直接封装,迁移方向是 LangGraph 的 checkpointer |
注:Memory 组件在 v0.3+ 官方已标记弃用,长期记忆的能力被并入 LangGraph 的状态 / checkpointer 体系。初学阶段不必刻意去记旧的
ConversationBufferMemory这类 API,知道"历史上下文要存"这一概念即可,具体怎么做我们在后面讲 LangGraph 时落地。
可以这样理解:**模型是你的算力,其余组件是把它改造成"会干活的系统"的零件。**对 Java 工程师,这个映射会很亲切——你会发现 LangChain 的角色分布,跟你在 Spring 里做依赖注入、编排时想的事几乎同构。
三、一个最小但"真的能跑"的例子
下面这段是当前 LangChain(v0.3 主流写法,langchain-openai包)的骨架。重点不是执行结果,而是看几个组件如何"组合"成一条链,而不是写死。
fromlangchain_openaiimportChatOpenAIfromlangchain_core.output_parsersimportStrOutputParser# 1) 模型——密钥从环境变量读,不写死在代码里(Java 读者对配置外置再熟悉不过)importos llm=ChatOpenAI(model="gpt-4o",api_key=os.getenv("OPENAI_API_KEY"))# 2) 用管道符把"模型 + 解析"串成一条链chain=llm|StrOutputParser()# 3) 调一次print(chain.invoke("用一句话介绍你自己"))观察这个llm | parser:这是 LangChain 新一代的本命——LCEL(LangChain Expression Language,管道表达式语法)。它不是魔法,是一个可以随意重组的管线:prompt | llm | parser也一样合法。把提示词模板加进来,代码就开始像"可插拔管线"了:
fromlangchain_core.promptsimportChatPromptTemplate prompt=ChatPromptTemplate.from_template("你是资深{role}工程师。请回答:{question}")chain=prompt|llm|StrOutputParser()print(chain.invoke({"role":"后端","question":"什么是幂等?"}))到这里你已经能感到分野:不写框架时,每次请求都要手动塞模板、手动解析、手动建上下文;用 LangChain,它们变成一行行可复用的"链"。
四、工程化的第一反应
处理工程,顺序比冲动重要。建议在进入实战前依次掌握:先是模板(不要string.format硬拼),再是解析(不要索引切片),然后是检索与状态(让答案引用来源、让上下文可管理)。正式章节我们把这些组件逐个打开看、逐个跑去,别急着一次看全部。
这里补一句给后端读者:LangChain 的"组件-链"思维,就是把"调模型"当成一个要能被替换、被测试的 I/O。你在 Spring 里做接口抽象的道理,在这里以"可插拔组件"的形式重现——把握住这点,学习成本会低一大截。
小结
| 维度 | 要点 |
|---|---|
| 一句话 | LangChain 让"调模型"升级成"编排模型成系统" |
| 第一个动作 | 用 LCEL 管道串prompt | llm | parser |
| 核心组件 | 模型 / 模板 / 解析 / 检索 / 工具(记忆过渡到 LangGraph) |
| 下一篇预告 | 第 02 篇:用 ChatModel 跑通第一次真实调用,看清模型 / 模板 / 解析三者的分工 |
想真正理解 LangChain,别从"最新酷炫 API"开始,从"它替我做了哪些原本手写的编排"开始——理解了编排,就理解了 LangChain。