你有没有试过这样写一个AI功能?
const response = await fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: { "Authorization": `Bearer ${API_KEY}` },
body: JSON.stringify({
model: "gpt-4o",
messages: [{ role: "user", content: "用一句话解释什么是闭包?" }]
})
});
看起来很简单对吧?
但问题很快来了——如果我想把“闭包”换成“原型链”,是不是得重新拼整个字符串?
如果我还想控制回答长度、语气、格式……是不是得在 content 里硬编码一堆逻辑?
更麻烦的是,一旦需求变复杂——比如先让模型详细解释,再让它总结成三点——你就得发起两次请求,手动处理中间结果,还得自己解析 JSON、处理错误、管理上下文……
那怎么办呢?
我们真的要一遍遍重复这些底层操作吗?
有没有一种方式,能让我们像搭积木一样,把“提示词 → 模型 → 后处理”串成一条自动运行的流水线?
答案就是:LangChain。
一、为什么我们需要 LangChain?
LangChain 并不是一个大模型,而是一个帮你高效构建 AI 应用的框架。
它的核心思想是:把和大模型交互的过程,拆解成可组合、可复用的“节点” 。
你可以把这些节点连起来,形成一条“工作流”——就像工厂里的装配线,原料进去,成品出来,中间每一步都清晰可控。
那如何去实现呢?
我们从最简单的开始:搭建项目 + 写第一条链。
二、初始化你的 LangChain 项目
首先,创建一个新目录并初始化 Node.js 项目:
在指定目录中输入以下命令运行
npm init -y
然后安装必要依赖(以 DeepSeek 为例,你也可以换 OpenAI、Claude 等):
npm install @langchain/deepseek @langchain/core dotenv
别忘了在项目根目录创建
.env文件,并填入你的 API 密钥:DEEPSEEK_API_KEY=your_api_key_here
现在,项目骨架就搭好了。接下来,我们来写第一段真正属于 LangChain 的代码。
三、第一步:用 PromptTemplate 告别“字符串拼接”
想象你要问大模型:“请用不超过50字解释{concept}”。
传统做法是:
const prompt = `请用不超过50字解释${concept}`;
但这样很容易出错——比如漏了标点、变量名写错、特殊字符没转义……
那怎么办呢?
LangChain 提供了 PromptTemplate,让你用声明式的方式定义模板:
import { PromptTemplate } from "@langchain/core/prompts";
const prompt = PromptTemplate.fromTemplate(`
你是一个前端专家。
请用不超过{limit}字解释以下概念:
{concept}
`);
现在,无论 concept 是“闭包”还是“事件循环”,你只需要调用:
const formatted = await prompt.format({
limit: "50",
concept: "闭包"
});
它会自动安全地替换变量,生成干净的提示词。
更重要的是——这个模板可以被复用、测试、共享,而不是散落在各个 fetch 调用里。
四、第二步:接入大模型,让 AI 真正“动”起来
有了提示词,下一步就是调用大模型。
在 LangChain 中,这非常简单:
import { ChatDeepSeek } from "@langchain/deepseek";
import 'dotenv/config';
const model = new ChatDeepSeek({
model: "deepseek-reasoner",
temperature: 0 // 控制随机性,0 表示最确定
});
注意:这里我们创建的是一个 ChatModel 实例,它原生支持消息列表格式,比裸调 API 更贴近现代大模型的使用习惯。
那如何去执行呢?
你可以直接调用:
const response = await model.invoke(formatted);
console.log(response.content);
但这还不够“工作流”。我们希望:提示词生成后,自动传给模型,无需手动中转。
五、第三步:用 .pipe() 连接节点,构建第一条工作流
LangChain 最强大的地方在于——一切皆可串联。
你可以用 .pipe() 把 prompt 和 model 连起来:
const chain = prompt.pipe(model);
这一行代码意味着什么?
它定义了一条数据流:
用户输入 → 经过 prompt 模板填充 → 自动传给 model → 返回结果
现在,你只需要这样调用:
const result = await chain.invoke({
limit: "50",
concept: "闭包"
});
console.log(result.content); // 直接拿到 AI 的回答!
看,你已经使用langchain构建了人生第一条 AI 工作流!
没有手动拼接,没有重复请求,没有中间变量——只有清晰的输入和输出。
六、小结:从“手工作坊”到“自动化流水线”
回顾一下:
- 传统方式:每次都要手动构造请求体,逻辑散落,难以维护
- LangChain 方式:用
PromptTemplate定义输入结构,用ChatModel封装调用,用.pipe()串联流程
未来,当你需要增加“总结”“校验”“记忆”等功能时,只需在链条中插入新节点,而不用重写整个逻辑。