为了账号安全,请及时绑定邮箱和手机立即绑定

从脚本到系统:用 LangChain.js 构建真正可维护的 AI 应用

2024 年起,大模型(LLM)开发正式告别“玩具阶段”。当企业开始将 AI 能力嵌入核心业务流程时,一个现实问题浮出水面:仅靠几行 fetch 调用 API 的方式,根本无法支撑生产级系统的稳定性、可维护性与扩展性

我们很快发现,真正的挑战不在于“能不能调通”,而在于:

  • 提示词散落在代码各处,修改一次要改十处;
  • 想换模型?光是调整请求格式就得重写半套逻辑;
  • 复杂任务需要多轮交互,但上下文管理一团乱麻;
  • 业务逻辑和 AI 调用深度耦合,测试与调试举步维艰。

正是在这样的背景下,LangChain 应运而生——它不是另一个大模型,而是一个面向 LLM 应用的工程框架,目标是把 AI 能力封装为像函数、组件一样可组合、可复用、可测试的单元。

本文将以 LangChain.js 与国产高性能模型 DeepSeek(深度求索) 为例,通过四个层层递进的实践阶段,带你完成从“能跑就行”到“工业级交付”的思维跃迁。


阶段一:统一接口 —— 用适配器终结 API 碎片化

在没有框架的时代,调用不同厂商的 LLM 就像在不同国家开车:方向盘位置、油门刹车布局、交通规则全都不一样。

LangChain 的第一步,就是提供统一驾驶舱

// main.js
import 'dotenv/config';
import { ChatDeepSeek } from '@langchain/deepseek';

const model = new ChatDeepSeek({
  model: 'deepseek-reasoner',
  temperature: 0, // 确定性输出,适合逻辑推理
});

const response = await model.invoke('用一句话解释什么是 RAG?');
console.log(response.content);

为什么这很重要?

ChatDeepSeek 是一个典型的适配器(Adapter)。它屏蔽了底层细节:

  • 自动读取 DEEPSEEK_API_KEY 环境变量;
  • 正确构造请求头与 JSON Body;
  • 统一响应解析逻辑。

最关键的是:所有模型在 LangChain 中都暴露相同的 .invoke() 接口。未来若要切换至 OpenAI 或 Claude,只需更换类名,业务逻辑纹丝不动。

💡 温度(temperature)是控制输出风格的“旋钮”:0 表示最严谨(适合代码、推理),0.7+ 则更富创造性(适合文案、故事)。


阶段二:提示词工程化 —— 让 Prompt 成为可管理的资产

直接在代码里拼接字符串式提示词,就像在 HTML 里硬编码样式——短期快,长期痛。

LangChain 提供了 PromptTemplate,让提示词变成“带参数的模板”:

// prompt.js
import { PromptTemplate } from '@langchain/core/prompts';
import { ChatDeepSeek } from '@langchain/deepseek';

const template = PromptTemplate.fromTemplate(`
你是一位{role}。
请用不超过{limit}字回答以下问题:
{question}
`);

const formatted = await template.format({
  role: '前端面试官',
  limit: '50',
  question: '什么是闭包?'
});

const model = new ChatDeepSeek({ model: 'deepseek-reasoner', temperature: 0.7 });
const res = await model.invoke(formatted);
console.log(res.content);

工程价值何在?

  • 复用:同一模板可用于“后端工程师”、“产品经理”等角色;
  • 集中维护:优化提示逻辑(如增加“用中文回答”)只需改一处;
  • 类型安全:在 TypeScript 项目中,模板变量可被静态校验,避免运行时错误。

但注意:这段代码仍是“命令式”的——先格式化,再调用。有没有更优雅的方式?


阶段三:声明式流水线 —— 用 LCEL 实现自动流转

LangChain 的灵魂在于 Chain(链)。通过 LCEL(LangChain Expression Language),我们可以像 Unix 管道一样,将组件串联成自动化流水线。

// chain.js
import { ChatDeepSeek } from '@langchain/deepseek';
import { PromptTemplate } from '@langchain/core/prompts';

const model = new ChatDeepSeek({ model: 'deepseek-reasoner', temperature: 0.7 });
const prompt = PromptTemplate.fromTemplate(`你是一位前端专家,请用一句话解释:{topic}`);

// 关键:用 .pipe() 连接
const workflow = prompt.pipe(model);

const result = await workflow.invoke({ topic: '闭包' });
console.log(result.content);

声明式编程的威力

我们不再写“怎么做”,而是定义“数据流是什么”:

  1. 输入 { topic: '闭包' } 进入 Prompt;
  2. Prompt 生成完整提示字符串;
  3. 字符串自动流入 Model;
  4. 返回最终结果。

所有组件(Prompt、Model、Parser)都实现了 Runnable 接口,支持 .invoke().stream().batch() 等统一操作。这种设计,是构建智能体(Agent)的基石。


阶段四:复杂任务编排 —— 拆解问题,分而治之

现实需求往往不止一步。比如:“先详细解释闭包原理,再提炼三个核心要点”。

如果塞进一个 Prompt,模型容易顾此失彼。更好的做法是:任务分解 + 顺序执行

// workflow.js
import { ChatDeepSeek } from '@langchain/deepseek';
import { PromptTemplate } from '@langchain/core/prompts';
import { RunnableSequence } from '@langchain/core/runnables';

const model = new ChatDeepSeek({ model: 'deepseek-reasoner', temperature: 0.7 });

const explain = PromptTemplate.fromTemplate(`
  请详细介绍:{topic}(含定义、原理、用法,≤300字)
`);
const summarize = PromptTemplate.fromTemplate(`
  将以下内容总结为3个要点(每点≤20字):
  {explanation}
`);

const explainChain = explain.pipe(model);
const summaryChain = summarize.pipe(model);

const fullWorkflow = RunnableSequence.from([
  async (input) => {
    const detail = await explainChain.invoke({ topic: input.topic });
    return detail.content;
  },
  async (detail) => {
    const summary = await summaryChain.invoke({ explanation: detail });
    return `【详解】\n${detail}\n\n【摘要】\n${summary.content}`;
  }
]);

console.log(await fullWorkflow.invoke({ topic: '闭包' }));

为什么拆解更有效?

  • 专注力提升:每个子任务目标单一,模型输出更精准;
  • 可观测性增强:可单独测试“解释”是否准确,无需重跑整个流程;
  • 发挥模型优势deepseek-reasoner 在逻辑推理与归纳总结上表现卓越,任务拆解能最大化其能力。

总结:AI 开发的工程化进化路径
阶段 核心思想 解决的问题
1. 适配器 统一模型接口 API 格式碎片化,切换成本高
2. 模板化 提示词参数化 Hardcoding 导致维护困难
3. 链式化 声明式数据流 手动串联逻辑冗余
4. 编排化 任务分解执行 单 Prompt 无法处理复杂逻辑

LangChain.js + DeepSeek 的组合,不只是让你“调用一个大模型”,而是为你提供了一套构建可扩展、可维护、可测试的 AI 应用脚手架

✅ 别忘了:在项目根目录创建 .env 文件,并设置 DEEPSEEK_API_KEY=your_key_here

在这个 AI 原生时代,前端或全栈开发者的真正竞争力,已不再是“会不会调 API”,而是能否用软件工程的方法,将概率性的 AI 能力转化为确定性的产品价值

掌握这种“搭积木式”的 AI 开发范式,你就能在浪潮中,不仅站稳脚跟,更能引领架构。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消