之前我的想法是这样的:ChatGPT这么强,怎么才能把它接到我的 Node 项目里?直接调 API 不行吗?
当然可以。但如果你的需求不只是"发一句话等回复",而是想让 AI 记住对话上下文 、从自己的知识库里找答案 、甚至自己决定调用哪个函数------这时候 LangChain 就派上用场了。
我也是个 JS/TS 开发者,之前翻 LangChain 官方文档,满眼都是 Python 示例,倒不是说不能看,但是确实看着不太舒服,偶尔遇到不熟悉的api还需要查文档或问AI。好在现在 1.0 版本已经很成熟,今天我就用最少的代码,带你跑通第一个 LangChain.js 应用,而且用的是国内友好的 DeepSeek API。
第一步:装包
新建一个空目录,初始化并安装依赖:
bash
mkdir langchain-demo
cd langchain-demo
npm init -y
npm install langchain @langchain/openai
等等,你不是说用 DeepSeek 吗,怎么装的是
@langchain/openai?因为 DeepSeek 提供了完全兼容 OpenAI 的接口 ,我们只需要改一行
baseURL就行,这是 LangChain 统一接口设计的好处。
第二步:拿个 API Key
去 DeepSeek 开放平台 注册个账号,在 API Keys 页面生成一个密钥,复制下来。
第三步:写代码
项目根目录新建 index.js,把下面这段粘进去:
js
import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";
// 1. 用 DeepSeek 的接口,只改 baseURL 和 model 名
const model = new ChatOpenAI({
apiKey: '你的api key',
model: "deepseek-chat",
temperature: 0.7,
baseURL: "https://api.deepseek.com/v1",
});
// 2. 写个提示词模板,{topic} 是占位符
const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "你是一个幽默的脱口秀演员。"],
["human", "给我讲一个关于{topic}的笑话。"],
]);
// 3. 输出解析器:把 AI 的回复转成纯文本
const outputParser = new StringOutputParser();
// 4. 用 .pipe() 串成一条链
const jokeChain = promptTemplate.pipe(model).pipe(outputParser);
// 5. 执行
async function main() {
const joke = await jokeChain.invoke({
topic: "程序员",
});
console.log(joke);
}
main().catch(console.error);
然后跑起来:
node index.js
如果一切顺利,你会看到类似这样的输出:
ini
为什么程序员总分不清万圣节和圣诞节?
因为 Oct 31 == Dec 25!
(八进制31等于十进制25)
简单来说,一个典型的链式工作流是:
用户输入 + 提示词模板 ➡️ 构造完整提示 ➡️ 发送给模型 ➡️ 获取模型原始输出 ➡️ 解析为可用格式
这短短十几行,藏了 LangChain 四个最核心的概念
| 概念 | 在你的代码中对应 | 作用 |
|---|---|---|
| 📝 提示词模板 (Prompt Templates) | ChatPromptTemplate |
将用户输入(如{topic})和固定指令组合,构造出给模型的完整提示。它使提示可复用、可管理。 |
| 🧠 模型 (Models) | ChatOpenAI |
这是与大语言模型(LLM)交互的接口。LangChain支持多种提供商(OpenAI、Anthropic、本地模型等),通过统一的接口调用。 |
| 🔧 输出解析器 (Output Parsers) | StringOutputParser |
将模型输出的原始响应(通常是复杂的对象)解析、转换成你应用程序容易处理的格式(如字符串、JSON对象)。 |
| ⛓️ 链 (Chains) | promptTemplate.pipe(model).pipe(outputParser) |
链是LangChain的灵魂 。它通过 .pipe() 方法,将多个组件(模板、模型、解析器等)按顺序组合 成一个可执行的工作流。jokeChain.invoke 就是执行这个工作流。 |
跑通之后,建议你动手改一改
-
把
topic换成"猫"、"面试"、"股票"......看看 AI 的幽默感稳不稳定; -
把
temperature改成 0.1 和 0.9 各跑一次,感受一下"确定性"和"创造力"的区别; -
删掉
.pipe(outputParser),看看invoke返回的原始对象长什么样。
这些改动花不了两分钟,但对理解 LangChain 的工作流非常有帮助。
写在最后
这只是 LangChain 世界里的 "Hello World" 。一旦你习惯了 模型 → 模板 → 解析器 → 链 这个模式,后面学 RAG(检索增强生成)、Agent(智能体)都会非常顺畅。
这篇文章用的是 LangChain.js 1.0 的最新 API。如果你也在用 JS/TS 做 AI 应用,别再被 Python 教程劝退了------这套工具链,我们前端用着也挺顺手,希望可以帮助你入门~