LangChain 技术栈全解析:从模型编排到 RAG 实战

引言

随着大语言模型能力的快速演进,真正的技术挑战已经不再是"如何调用模型",而是:

  • 如何组织 Prompt
  • 如何管理上下文
  • 如何接入外部数据
  • 如何构建多步骤推理流程
  • 如何让模型在复杂任务中稳定工作

LangChain 正是为解决这些问题而诞生的框架。

它不是一个模型,也不是一个简单的 SDK,而是一个用于构建 LLM 应用的应用层编排框架

1. LangChain 是什么

LangChain 是一个用于构建大模型应用(LLM Applications)的开源框架,其核心目标是:

将模型、提示词、数据源、工具和控制逻辑组织成可复用、可组合、可维护的应用流程。

在架构层面,LangChain 处于:

  • 大模型 API 之上
  • 具体业务逻辑之下

它承担的是 "AI 应用的中间层 / 编排层" 角色。

2. LangChain 解决了哪些问题

在没有 LangChain 的情况下,LLM 应用通常存在以下问题:

  1. Prompt 分散在代码中,难以维护
  2. 多轮对话上下文不可控
  3. 检索、生成、工具调用逻辑耦合严重
  4. 难以构建多步骤推理流程
  5. 应用无法演进为复杂系统

LangChain 的设计目标正是系统性地解决上述问题。

3. LangChain 的核心抽象模型

LangChain 的能力建立在一组高度内聚的抽象之上:

抽象 作用
LLM / ChatModel 大模型统一接口
PromptTemplate 结构化提示词
Chain 可组合的执行流程
Memory 上下文与状态管理
Retriever 检索接口
VectorStore 向量存储
Tool 外部能力封装
Agent 推理 + 决策控制器

这些抽象共同构成了 LangChain 的技术骨架。

4. 安装与基础调用

JavaScript

bash 复制代码
npm install langchain @langchain/openai
js 复制代码
import { ChatOpenAI } from "@langchain/openai";

const model = new ChatOpenAI({
  model: "gpt-4o-mini"
});

const res = await model.invoke("用一句话说明 LangChain 的作用");
console.log(res.content);

Python

bash 复制代码
pip install langchain langchain-openai
python 复制代码
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-4o-mini")
resp = model.invoke("用一句话说明 LangChain 的作用")
print(resp.content)

5. PromptTemplate:结构化提示词

PromptTemplate 用于将 Prompt 从字符串提升为可配置对象。

js 复制代码
import { PromptTemplate } from "langchain/prompts";

const prompt = new PromptTemplate({
  template: "请解释 {concept} 的核心作用",
  inputVariables: ["concept"]
});

const text = await prompt.format({ concept: "LangChain" });

优势在于:

  • 参数明确
  • 可复用
  • 易组合

6. Chain:构建可组合的执行流程

Chain 是 LangChain 的核心执行单元。

js 复制代码
import { LLMChain } from "langchain/chains";
import { ChatOpenAI } from "@langchain/openai";

const chain = new LLMChain({
  llm: new ChatOpenAI({ model: "gpt-4o-mini" }),
  prompt
});

const result = await chain.invoke({ concept: "Chain 机制" });

Chain 使得 Prompt → 模型 → 输出 成为一个标准化流程单元。

7. Memory:上下文与状态管理

Memory 用于控制模型可感知的历史上下文。

js 复制代码
import { ConversationChain } from "langchain/chains";
import { BufferMemory } from "langchain/memory";

const chain = new ConversationChain({
  llm: new ChatOpenAI(),
  memory: new BufferMemory()
});

Memory 的存在,使多轮对话和状态管理成为一等能力。

8. 向量化与检索:RAG 的技术基础

RAG(Retrieval-Augmented Generation)并不是一个模型,而是一种架构模式。

LangChain 将 RAG 拆解为三个核心组件:

  1. Text Splitter:文本分割
  2. Embedding:向量化
  3. VectorStore / Retriever:检索接口

9. LangChain RAG 实战案例

下面是一个结构完整、可运行的 LangChain RAG 示例(简化版)。

9.1 文档准备与切分

js 复制代码
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";

const text = `
LangChain 是一个用于构建大语言模型应用的框架,
核心目标是将模型、数据、工具组织成可维护的流程。
`;

const splitter = new RecursiveCharacterTextSplitter({
  chunkSize: 100,
  chunkOverlap: 20
});

const docs = await splitter.splitText(text);

9.2 向量化并存入向量库

js 复制代码
import { OpenAIEmbeddings } from "@langchain/openai";
import { MemoryVectorStore } from "langchain/vectorstores/memory";

const vectorStore = await MemoryVectorStore.fromTexts(
  docs,
  docs.map(() => ({})),
  new OpenAIEmbeddings()
);

9.3 基于检索的问答

js 复制代码
const results = await vectorStore.similaritySearch(
  "LangChain 的核心作用是什么?",
  2
);

console.log(results.map(r => r.pageContent));

9.4 结合模型生成最终回答

js 复制代码
import { ChatOpenAI } from "@langchain/openai";

const context = results.map(r => r.pageContent).join("\n");

const answer = await new ChatOpenAI().invoke(
  `基于以下资料回答问题:\n${context}\n\n问题:LangChain 的作用是什么?`
);

console.log(answer.content);

10. Agent 与工具调用(进阶能力)

LangChain 的 Agent 允许模型在运行时:

  • 判断是否需要工具
  • 选择合适的工具
  • 执行并整合结果

这是构建复杂 AI 系统的重要基础。

11. LangChain 的典型应用方向

  • 企业知识库问答(RAG)
  • 智能客服系统
  • AI 助手与自动化 Agent
  • 多步骤任务执行系统
  • AI 中台与能力编排层

结语

LangChain 的价值不在于"帮你写 Prompt", 而在于 让大模型应用具备工程结构和系统能力

当 LLM 应用从 Demo 走向生产环境, LangChain 几乎是绕不开的技术栈之一。

如果你正在构建真实的 AI 应用系统, 理解并掌握 LangChain,是非常值得投入的一步。

相关推荐
百锦再2 小时前
京东云鼎入驻方案解读——通往协同的“高架桥”与“快速路”
android·java·python·rust·django·restful·京东云
1024肥宅2 小时前
工程化工具类:实现高效的工具函数库
前端·javascript·面试
Nick_zcy2 小时前
基于Vue和Python的羽毛球拍智能推荐系统, 从“不会选羽毛球拍”到“选对拍”的一站式小工具
前端·vue.js·python·算法·推荐算法
invicinble2 小时前
关于对前端项目(架子级别)的理解和认识
前端
冰冰菜的扣jio2 小时前
理解类加载过程
开发语言·python
qilei20102 小时前
【Python】创建日期列表
python
Sapphire~2 小时前
【前端基础】02-命令式组件系统 | 声明式组件系统 | 响应式组件系统
前端
骑驴看星星a2 小时前
【回顾React的一些小细节】render里不可包含的东西
前端·javascript·react.js
小白阿龙2 小时前
浮动元素导致父元素高度塌陷
前端