从代码看 LangChain:大模型应用开发的工程化实践与环境准备
LangChain 作为连接大语言模型(LLM)与实际业务的桥梁,其核心价值在于将复杂的 AI 应用开发拆解为可复用、可编排的模块化组件。在开始使用前,我们需要先完成环境搭建,以下将结合代码片段详细说明 LangChain 的使用方式及安装步骤。
一、环境准备:安装 LangChain 及相关依赖
使用 LangChain 开发前,需先安装核心包及对应模型适配器(以代码中用到的 DeepSeek 为例),同时需安装dotenv处理环境变量(代码中通过import 'dotenv/config'加载 API 密钥等配置)。
安装命令(使用 npm):
bash
# 安装LangChain核心包、DeepSeek适配器及环境变量工具
npm install @langchain/core @langchain/deepseek dotenv
若使用 yarn:
sql
yarn add @langchain/core @langchain/deepseek dotenv
安装完成后,需在项目根目录创建.env文件,配置 DeepSeek API 密钥(代码中通过环境变量自动加载):
ini
DEEPSEEK_API_KEY=your_deepseek_api_key_here
二、基础调用:快速连接大模型
最基础的 LLM 应用开发,核心是实现与模型的交互。在main.js中,LangChain 通过适配器模式屏蔽了不同模型的底层差异:
javascript
// main.js 核心代码
import 'dotenv/config'
import { ChatDeepSeek } from '@langchain/deepseek';
const model = new ChatDeepSeek({
model: 'deepseek-reasoner',
temperature: 0 // 控制输出随机性,0表示确定性输出
});
// 直接调用模型
const res = await model.invoke('用一句话解释什么是RAG?');
console.log(res.content);
无需关注 DeepSeek 模型的 API 格式、请求头配置等细节,仅通过ChatDeepSeek类实例化模型,调用invoke方法即可完成交互。这种封装让开发者能快速切换不同模型(如从 DeepSeek 到 GPT),只需替换适配器类,大幅降低了多模型集成的成本。
三、提示词模板:结构化管理动态内容
提示词是 LLM 应用的 "输入大脑",但动态参数调整(如角色、字数限制)常让提示词维护变得繁琐。1.js展示了 LangChain 的PromptTemplate如何解决这一问题:
javascript
// 1.js 提示词模板示例
import 'dotenv/config';
import { ChatDeepSeek } from '@langchain/deepseek';
import { PromptTemplate } from '@langchain/core/prompts';
// 定义模板结构
const prompt = PromptTemplate.fromTemplate(`
你是一个{role}。
请用不超过{limit}字回答以下问题:
{question}
`);
// 动态填充参数
const promptStr = await prompt.format({
role: '前端面试官',
limit: '50',
question: '什么是闭包'
});
// 实例化模型并调用
const model = new ChatDeepSeek({
model: 'deepseek-reasoner',
temperature: 0.7
});
const res = await model.invoke(promptStr);
console.log(res.content);
通过模板定义固定格式,再用format方法注入动态参数,实现了 "模板与数据分离"。这种方式不仅让提示词更易复用(如同一模板可切换role为 "后端面试官"),还便于版本管理和测试,符合后端开发中 "配置与逻辑分离" 的工程化思想。
四、简单工作流:用 Chain 串联任务节点
实际业务中,AI 任务往往需要 "提示词处理→模型调用" 的固定流程。2.js展示了 LangChain 的pipe方法如何将组件串联为简单工作流(Chain):
javascript
// 2.js 简单Chain示例
import 'dotenv/config';
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 chain = prompt.pipe(model);
// 执行工作流(直接传入参数即可触发完整流程)
const response = await chain.invoke({ topic: '闭包' });
console.log(response.text);
prompt.pipe(model)的本质是将 "提示词格式化" 与 "模型调用" 两个步骤串联为一个可执行单元。开发者无需手动编写 "先格式化提示词、再调用模型" 的重复代码,直接通过invoke传入参数即可触发整个流程,简化了代码逻辑。
五、复杂工作流:多步骤任务的编排
当业务需要多轮 AI 交互(如 "先解释概念→再总结要点"),LangChain 的RunnableSequence可实现复杂工作流的编排。3.js展示了这一能力:
javascript
// 3.js 多步骤工作流示例
import 'dotenv/config';
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
})
// 第一步:定义"解释概念"的模板与Chain
const explainPrompt = PromptTemplate.fromTemplate(`
你是一个前端专家,请详细介绍以下概念: {topic}
要求:覆盖定义、原理、使用方式,不超过300字。
`);
const explainChain = explainPrompt.pipe(model);
// 第二步:定义"总结要点"的模板与Chain
const summaryPrompt = PromptTemplate.fromTemplate(`
请将以下前端概念总结为3个核心要点 (每点不超过20字):
{explanation}
`);
const summaryChain = summaryPrompt.pipe(model);
// 串联为完整工作流
const fullChain = RunnableSequence.from([
(input) => explainChain.invoke({ topic: input.topic }).then(res => res.text),
(explanation) => summaryChain.invoke({ explanation }).then(res => `知识点: ${explanation} 总结: ${res.text}`)
]);
// 执行完整流程
const response = await fullChain.invoke({ topic: '闭包' });
console.log(response);
通过RunnableSequence.from,我们将 "解释概念" 和 "总结要点" 两个步骤按顺序串联:第一步接收topic参数生成详细解释,第二步将解释结果作为输入生成总结,最终返回整合结果。这种编排能力让复杂 AI 任务(如智能分析、多轮对话)的开发变得直观可控,无需手动处理步骤间的参数传递与异步逻辑。
总结
通过安装指令与代码示例可以看出,LangChain 通过 "环境适配→模型封装→提示词管理→工作流编排" 的全流程支持,让大模型应用开发从 "零散脚本" 升级为 "工程化开发"。开发者只需关注业务逻辑,即可快速构建灵活、可扩展的 AI 应用,大幅降低了大模型集成的技术门槛。# 从代码看 LangChain:大模型应用开发的工程化实践与环境准备