1.前端使用Node + LangChain快速入门与底层原理

108 阅读7分钟

简介

LangChain 是一个开源的 Python AI、Node AI 应用开发框架, 它提供了构建基于大模型的 AI 应用所需的模块和工具。通过 LangChain, 开发者可以轻松地与大型语言模型 (LLM) 集成, 完成文本生成、问答、翻译、对话等任务。LangChain 降低了 AI 应用开发的门槛, 让任何人都可以基于 LLM 构建属于自己的创意应用。

LangChain 特性:

  1. 模块化与可组合性
  • 原子化组件设计:将 Prompt 模板、模型调用、工具调用、记忆、链(Chains)等拆分为独立组件,可自由拼接组合;
  • 灵活的链(Chains)能力:支持顺序链、分支链、并行链等,轻松串联多步 LLM 调用 / 工具操作(如「分类→生成→校验」);
  • 可插拔性:模型层可无缝切换 Ollama(本地)、OpenAI 等,工具层可对接数据库、API、本地脚本等。
  1. 上下文与记忆管理
  • 内置多类型记忆模块:支持短期对话记忆(ConversationBufferMemory)、长期向量记忆等,实现多轮对话上下文连贯;
  • 记忆优化:可裁剪、压缩历史对话,避免 LLM 上下文窗口超限,平衡效果与成本。
  1. 工具调用能力
  • 原生支持主流工具:可调用搜索引擎、代码执行器、文件读写、数据库(SQL/NoSQL)等;
  • 自定义工具扩展:简单封装即可接入自研工具(如企业内部系统、本地脚本),打通 LLM 与实际业务场景。
  1. 本地化与多模型适配
  • 兼容本地 LLM 部署:完美对接 Ollama、LocalAI 等本地模型服务,摆脱云端 API 依赖,保障数据隐私;
  • 多模型协同:支持不同任务调用不同模型(如轻量模型分类、大模型生成),平衡速度与效果。
  1. 生态与可观测性
  • 多语言支持:适配 Python、JavaScript/TypeScript(Node.js)等,贴合全栈开发场景;
  • 调试与评估:内置日志、追踪能力,支持自动化评估 LLM 生成结果,便于优化流程。

LangChain 框架组成

596267428b6d6ef3057389e489953d0d.svg

LangChain 框架由几个部分组成,包括:

  • LangChain 库:Python 和 JavaScript 库。包含接口和集成多种组件的运行时基础,以及现成的链和代理的实现。
  • LangChain 模板:Langchain 官方提供的一些 AI 任务模板。
  • LangServe:基于 FastAPI 可以将 Langchain 定义的链 (Chain),发布成为 REST API。
  • LangSmith:开发平台,是个云服务,支持 Langchain debug、任务监控。

LangChain 库 (Libraries)

LangChain 库本身由几个不同的包组成。

  • langchain-core:基础抽象和 LangChain 表达语言。
  • langchain-community:第三方集成,主要包括 langchain 集成的第三方组件。
  • langchain:主要包括链 (chain)、代理(agent) 和检索策略。

langchain 任务处理流程

368630f893b7ef3c3224d33e9ef165b664c12bf4a0075.jpeg 如上图,langChain 提供一套提示词模板 (prompt template) 管理工具,负责处理提示词,然后传递给大模型处理,最后处理大模型返回的结果。 LangChain 对大模型的封装主要包括 LLM 和 Chat Model 两种类型。

  • LLM - 问答模型,模型接收一个文本输入,然后返回一个文本结果。
  • Chat Model - 对话模型,接收一组对话消息,然后返回对话消息,类似聊天消息一样。

核心概念

  1. 模型层(Models) :LLM 交互核心,支持对接各类模型(如 Ollama 本地模型、OpenAI/Anthropic 云端模型),包含聊天模型、文本生成模型、嵌入模型等,负责实际的文本生成与理解。
  2. 提示词层(Prompts) :模型交互的 “语言桥梁”,包含 Prompt 模板、示例选择器、提示词序列化等,用于标准化、动态生成提示词,提升 LLM 输出稳定性。
  3. 链(Chains) :流程编排核心,将多步操作(模型调用、工具调用、数据处理)串联为自动化工作流,支持顺序链、分支链、并行链等复杂逻辑。
  4. 记忆(Memory) :上下文管理模块,负责存储和提取对话历史 / 任务状态(如短期对话记忆、长期向量记忆),保障多轮交互的连贯性。
  5. 工具(Tools) :LLM 的 “能力延伸”,包含原生工具(搜索引擎、代码执行器、数据库)和自定义工具(本地脚本、企业系统接口),让 LLM 能与外部世界交互。
  6. 代理(Agents) :智能决策模块,基于用户需求自动规划步骤、选择工具 / 链执行,无需手动编排流程(如 “帮我查询数据并生成报告” 的端到端完成)。
  7. 数据连接(Data Connectivity) :外部数据接入层,支持加载(文件、数据库、API 数据)、转换(文本分割、格式处理)、存储(向量数据库),为 LLM 提供私有数据支持(如本地知识库)。
  8. 输出解析器(Output Parsers) :结果格式化模块,将 LLM 生成的自然语言转换为结构化数据(JSON、数组、自定义格式),便于后续业务系统调用。

快速入门

安装LangChain

要安装LangChain,可以使用npm或pnpm进行安装。以下是安装LangChain的步骤:

npm install langchain @langchain/core @langchain/community @langchain/ollama
pnpm add langchain @langchain/core @langchain/community @langchain/ollama

初始化模型

本文以学习为主,直接在本地部署,使用ollama启动一个大语言模型(如 gpt-oss、Gemma 3、DeepSeek-R1、Qwen3 等),ollama部署流程请参考docs.ollama.com/ 本地部署与云端服务的 AI 模型平台对比 juejin.cn/spost/75758…

使用LLM

使用LLM来回答问题非常简单。可以直接调用LLM的invoke方法,并传入问题作为参数。此外,还可以通过提示模板(prompt template)生成提示词,用于向模型(LLM)发送指令。

下面演示了如何构建一个简单的LLM示例:

import { ChatOllama } from '@langchain/ollama';
import { HumanMessage, SystemMessage } from '@langchain/core/messages';

const chat = async () => {
  const llm = new ChatOllama({
    model: 'qwen3:0.6b',
    temperature: 0.7,
  });
  const message = [];
  message.push(new SystemMessage(`你是一个专业的翻译,能将中文翻译成英文。请只返回翻译结果,不要添加任何解释。`));
  message.push(new HumanMessage(`请将以下中文翻译成英文:\n\n我爱编程。`));
  const response = await llm.invoke(message);
  console.log(response);
  console.log(response.content);
};
chat();

下面演示了如何构建一个简单的LLM链(chains):

import { ChatOllama } from '@langchain/ollama';
import { ChatPromptTemplate } from '@langchain/core/prompts';

const chat = async () => {
  const llm = new ChatOllama({
    model: 'qwen3:0.6b',
    temperature: 0.7,
  });

  // 使用 ChatPromptTemplate 创建提示模板
  const prompt = ChatPromptTemplate.fromMessages([
    ['system', '你是一个专业的翻译,能将中文翻译成英文。请只返回翻译结果,不要添加任何解释。'],
    ['human', '请将以下中文翻译成英文:\n\n{text}'],
  ]);

  // 将 prompt 和 llm 组合成链
  // 基于LCEL 表达式构建LLM链,lcel语法类似linux的pipeline语法,从左到右按顺序执行
  // 下面编排了一个简单的工作流,首先执行prompt完成提示词模板(prompt template)格式化处理, 然后将格式化后的prompt传递给llm模型执行,最终返回llm执行结果。
  const chain = prompt.pipe(llm);

  // 调用链并传入参数
  const response = await chain.invoke({
    text: '我爱编程。',
  });

  console.log(response);
  console.log(response.content);
};
chat();

image.png

输出转换

import { ChatOllama } from '@langchain/ollama';
import { ChatPromptTemplate } from '@langchain/core/prompts';
import { StringOutputParser } from '@langchain/core/output_parsers';

const chat = async () => {
  const llm = new ChatOllama({
    model: 'qwen3:0.6b',
    temperature: 0.7,
  });

  // 使用 ChatPromptTemplate 创建提示模板
  const prompt = ChatPromptTemplate.fromMessages([
    ['system', '你是一个专业的翻译,能将中文翻译成英文。请只返回翻译结果,不要添加任何解释。'],
    ['human', '请将以下中文翻译成英文:\n\n{text}'],
  ]);
  // 创建一个字符串输出解析器
  const output_parsers = new StringOutputParser();
  // 将 prompt 和 llm 组合成链,并添加 StringOutputParser 将结果转换为字符串
  const chain = prompt.pipe(llm).pipe(output_parsers);

  // 调用链并传入参数
  // 将输出解析器添加到LLM链中,跟前面的例子,区别就是工作流编排,最后一步将llm模型输出的结果传递给output_parser进行格式转换
  const response = await chain.invoke({
    text: '我爱编程。',
  });

  console.log(response);
};
chat();

image.png

以上是关于LLM链的介绍,希望能帮助您更好地理解如何安装LangChain并构建不同类型的链。