从手搓请求到构建AI流水线:LangChain入门第一步

66 阅读2分钟

你有没有试过这样写一个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()promptmodel 连起来:

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() 串联流程

未来,当你需要增加“总结”“校验”“记忆”等功能时,只需在链条中插入新节点,而不用重写整个逻辑。