当前位置: 首页 > news >正文

AI 入门开发之 LangChain.js 与 LCEL

目录

    • 一、大模型很火,开发却很难
    • 二、LangChain 是什么?它解决了什么问题?
    • 三、langchain.js:为前端开发者量身打造的版本
    • 四、LCEL(LangChain Expression Language)
      • 1. 什么是“链式思维”?(Chain-Based Thinking)
      • 2. LCEL 到底是什么?

这几年 AI 火的一塌糊涂,各家大模型竞争如火如荼,我有一种强烈的感觉,现在正是 AI 大模型应用爆发的前夜,或者说已经到了爆发的点。所以除了使用 AI 工具提效外,我也非常想加入 AI 应用开发的浪潮,所以就有了这篇文章,千里之行始于足下,记录自己学习过程的同时,希望也能帮到同样感兴趣的你。

一、大模型很火,开发却很难

2023 年以来,大语言模型(如 GPT-4、Claude、Gemini 等)横空出世,引爆了 AI 技术的新一轮浪潮。但如果作为开发者,尝试动手调用一下这些大模型时,就会碰到下面这种问题:

  • 翻文档半小时,只为找到一个简单的 API 调用方式;
  • 想把模型回答“连起来用”,发现流程控制、状态维护全靠自己写逻辑;
  • 每家模型厂商接口都不一样,代码越写越乱,维护困难;
  • 加点搜索、调用数据库、整理上下文?直接让你头大;

这就像你站在了一座 AI 金矿前,兴奋又无从下手。

这正是 LangChain 诞生的初衷:帮开发者用“人类思维”方式构建 AI 应用,而不是用“API 拼图”的方式。


二、LangChain 是什么?它解决了什么问题?

LangChain(JavaScript/TypeScript 版本即 langchain.js)是一个用于构建大模型驱动应用的开发框架

说白了,它让你更轻松地把大模型接入业务,像写流程图一样编排复杂的 AI 应用逻辑。

它主要解决了三个问题:

  1. 模型调用抽象化
    你不用再关心每个模型的底层调用细节,LangChain 提供统一接口,屏蔽底层差异。

  2. 上下文管理和链式调用
    可以把多个步骤串联成思考链(Chain),像这样:

    用户提问 → 让模型分析 → 查询数据库 → 整理回答 → 输出给用户

  3. 工具集成能力
    模型不只是语言生成器,还可以调用工具。LangChain 支持搜索引擎、向量数据库、网页抓取、代码执行等各种外部工具集成。

用一个比喻:LangChain 就像是 Node.js 里的 Express——不是模型本身,但可以帮你用模型造出强大 App 的基础框架。


三、langchain.js:为前端开发者量身打造的版本

LangChain 最早由 Python 实现,但 JavaScript/TypeScript 社区也迅速跟进,推出了 langchain.js

只要你熟悉 JS,就能快速上手。

来一些例子简单直观感受一下:

✅ 示例一:最简单的模型调用

import { ChatOpenAI } from "langchain/chat_models/openai";// 创建一个模型实例
const model = new ChatOpenAI({temperature: 0.7, // 控制模型回答的“随机性”:越高越有创造力,越低越稳定
});// 向模型发送一句话,得到回复
const res = await model.invoke("用一句话介绍 JavaScript");
console.log(res.content);
  • ChatOpenAI:LangChain 封装的 ChatGPT 调用接口。你不用再手动写 HTTP 请求。
  • invoke(prompt):调用模型,传入提示词(Prompt),返回完整回答对象。
  • temperature:控制模型输出的风格,是最常用的参数之一。

✅ 示例二:链式调用,把流程拆分成“拼图”

import { ChatOpenAI } from "langchain/chat_models/openai";
import { PromptTemplate } from "langchain/prompts";
import { StringOutputParser } from "langchain/schema/output_parser";// 1. 定义模型:ChatGPT 的封装调用方式
const model = new ChatOpenAI({temperature: 0.7,modelName: "gpt-3.5-turbo", // 可指定模型版本,默认也可以不写
});// 2. 创建一个提示词模板
const prompt = PromptTemplate.fromTemplate("请用简洁中文回答:{question}");// 3. 创建一个输出解析器,把模型返回处理成文本
const outputParser = new StringOutputParser();// 4. 用 pipe 串联步骤:提示词 → 模型 → 输出解析
const chain = prompt.pipe(model).pipe(outputParser);// 5. 执行整条链,传入变量
const result = await chain.invoke({ question: "React 是什么?" });console.log(result);
// 输出示例:React 是一个用于构建用户界面的 JavaScript 库。
  • PromptTemplate:用于定义可复用的“模板提示词”,可以插入变量。
  • pipe():LangChain 的精髓,用来把多个步骤串起来执行,每一步处理上一部的结果。(是不是很像 .then().catch() )
  • StringOutputParser:模型可能返回复杂 JSON、Markdown、代码块等,这个解析器可以提取最常见的纯文本。

✅ 示例三:接入搜索,做一个“智能问答助手”

import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
import { RetrievalQAChain } from "langchain/chains";// 准备一些“知识”内容(文档、文章、FAQ)
const docs = [{ pageContent: "JavaScript 是一种浏览器端的脚本语言。" },{ pageContent: "React 是由 Facebook 开发的 UI 库。" },
];// 把文本转换成“向量”,便于后续搜索(embedding 处理)
const vectorStore = await MemoryVectorStore.fromDocuments(docs,new OpenAIEmbeddings()
);// 构建一个“检索 + 回答”的链条(Retrieval-Augmented QA)
const chain = RetrievalQAChain.fromLLM(model, vectorStore.asRetriever());// 进行问答
const res = await chain.call({ query: "谁开发了 React?" });
console.log(res.text); // → Facebook
  • MemoryVectorStore:内存中的向量数据库,用于“相似内容搜索”。开发时可快速测试,生产可换 Pinecone/Supabase 等。
  • OpenAIEmbeddings:将文本转成向量的工具,类似为模型理解做准备
  • RetrievalQAChain:LangChain 内建的一个链条,自动完成:“搜索 + 构造上下文 + 提问 + 回答”全过程。

从代码可以直观地体会到,以前这可能需要几十行代码,现在只要几行,你只需要关注业务逻辑。你写的不是“模型代码”,而是“业务逻辑”。LangChain.js 把大模型开发的门槛从“懂 AI 算法”降到了“懂函数组合”。

四、LCEL(LangChain Expression Language)

非常好的问题!你问到了 LCEL 的核心所在:它到底是个“什么东西”?和“链式思维”有什么本质区别?

我们就来深入拆解这个点,尽量把它讲透、讲清楚,让你不仅“看懂代码”,更要“理解思想”。


1. 什么是“链式思维”?(Chain-Based Thinking)

链式思维是 LangChain 最初提出的理念:

人类的复杂思考过程,其实可以被拆解为多个小步骤,每一步都可以由一个模型(或工具)来完成。

比如你要问一个问题:“特斯拉的创始人是谁,他最近有什么新闻?”

人类的思考可能是这样的:

  1. 理解问题
  2. 提取实体:特斯拉
  3. 查询知识:创始人是谁?
  4. 查新闻:和这个人相关的最近动态
  5. 整理信息,形成自然语言回答

在 LangChain 中,每一步可以看作一个“链”(Chain):

const chain = new SequentialChain({chains: [entityExtractor, knowledgeSearcher, newsFetcher, summarizer],
});

这就是所谓的“链式编排”——你把多个组件像串糖葫芦一样串起来,形成一个 pipeline。

那么,问题来了:

  • 每个环节都要 new 一个对象、设置 input/output key
  • 想调试中间结果?麻烦
  • 想组合多个逻辑流?臃肿
  • 太多样板代码,阅读和维护成本高

于是,LangChain 团队决定用一种更简洁、更声明式的方式来描述这种链式组合


2. LCEL 到底是什么?

LCEL 全称是:LangChain Expression Language。

它既不是一门“语言”(不用学新语法),也不是一个单独的框架。

它是 LangChain 推出的一种组合模型调用逻辑的新“表达方式”,本质上是一套语法糖 + 运行时抽象。

让我们用代码对比,感受一下差异:

传统 Chain 编排(冗长)

const chain = new SequentialChain({chains: [new LLMChain({ prompt: prompt1, llm }),new LLMChain({ prompt: prompt2, llm }),new StuffDocumentsChain({ documentCombiner }),],
});

LCEL 编排(清爽)👇

const chain = prompt1.pipe(llm).pipe(prompt2).pipe(llm).pipe(documentCombiner);

这里的 .pipe() 就是 LCEL 的核心操作符:管道式组合

你只需要把输入和处理步骤按顺序“串”起来,它会自动帮你管理数据流、输入输出、异常处理等逻辑。每个环节都是独立组件,天然适合单元测试、mock 调试。

相关文章:

  • 重塑智慧出行新生态,德赛西威全新战略愿景发布
  • 西门子S7-200SMART 控制Profinet闭环步进MD-4250-PN (1)
  • 0基础可以考MySQL OCP么?备考时间需要多久?
  • 父组件弹窗调用子组件时,无法通过ref、provide、inject等方法调用子组件的方法
  • Dhtmlx Gantt教程
  • kubernetes》》k8s》》证书有效期
  • 2.第二章:政策法规与标准体系
  • c++中的enum变量 和 constexpr说明符
  • 【项目篇】仿照RabbitMQ模拟实现消息队列
  • 咖啡机语音芯片方案-WTN6040FP-14S直接驱动4欧/3W喇叭-大功率输出
  • 彻底禁用windows的语音识别快捷键win+ctrl+s
  • date-picker组件的shortcuts为什么不能配置在vue的data的return中
  • 量子混合计算革命:Qiskit 3.0开启云上量子开发新时代
  • 为什么圆形在GeoJSON中被表示为多边形(Polygon)而不是圆形类型
  • 2025职业本科网络安全课程体系设计:如何培养行业急需的实战型人才?
  • 飞帆控件:在编辑模式下额外加载的库
  • 【Amazing晶焱科技高速 CAN Bus 传输与 TVS/ESD/EOS 保护,将是车用电子的生死关键无标题】
  • 【新能源科学与技术】MATALB/Simulink小白教程(二)Buck电路【新能源电力转换与控制仿真】
  • 嵌入式WebRTC音视频实时通话EasyRTC助力打造AIOT智能硬件实时通信新生态
  • 用Python解锁链上数据的奥秘:从数据分析到可视化洞察
  • 2025年超长期特别国债24日首次发行
  • 停止水资源共享、驱逐武官,印度对巴基斯坦宣布多项反制措施
  • 俄总理:2024年俄罗斯GDP增长4.3%
  • 世界免疫周丨专家呼吁加快HPV疫苗纳入国家免疫规划进程
  • 中国建设银行原党委委员、副行长章更生严重违纪违法被开除党籍
  • 上海一小学百名学生齐聚图书馆:纸质书的浪漫AI无法取代