跳到主要内容LangChain.js 实战指南:基础调用与功能应用 | 极客日志JavaScriptNode.jsAI
LangChain.js 实战指南:基础调用与功能应用
LangChain.js 是构建大模型应用的框架,支持多种模型接口与功能。介绍基础调用流程,涵盖环境搭建、ChatModel 使用、流式传输、JSON 模式及函数调用。包含环境变量配置、错误处理及性能优化建议,帮助开发者快速上手并构建稳定应用。
www1 浏览 LangChain.js 是一个用于快速开发大模型应用的框架,提供了一系列强大的功能和工具,使得开发者能够更加高效地构建复杂的人工智能应用程序。它封装了多种大模型接口,简化了提示词工程、链式调用及上下文管理,是 JavaScript/TypeScript 生态中构建 AI 应用的首选库之一。
环境准备与安装
在使用 LangChain.js 之前,需要确保开发环境满足以下要求:
- Node.js 版本:建议安装 Node.js 16.x 或更高版本,以支持最新的异步特性。
- 包管理器:推荐使用 npm 或 yarn 进行依赖管理。
- API Key:准备好 OpenAI 或其他大模型提供商的 API Key。
npm install langchain @langchain/openai zod zod-to-json-schema
创建 .env 文件存储敏感信息,避免硬编码密钥:
OPENAI_API_KEY=your_api_key_here
在代码中通过 process.env 读取环境变量,提升安全性。
模型调用基础
LangChain.js 区分了两种主要的调用方式:LLM(语言模型)和 ChatModel(聊天模型)。虽然本质都是调用模型,但 ChatModel 更适合处理多轮对话和结构化消息。
实例化 ChatModel
import { ChatOpenAI } from "@langchain/openai";
const chatModel = new ChatOpenAI({
openAIApiKey: process.env.OPENAI_API_KEY,
modelName: "gpt-4-turbo",
});
如果未传入 API Key,LangChain 会自动尝试从环境变量 OPENAI_API_KEY 中读取。对于 Azure OpenAI,需配置 AZURE_OPENAI_API_KEY、AZURE_OPENAI_API_INSTANCE_NAME 等参数。
消息构造与调用
LangChain.js 提供了标准的消息类,包括 SystemMessage(系统指令)、HumanMessage(用户输入)和 AIMessage(模型回复)。
import { SystemMessage, HumanMessage } from "@langchain/core/messages";
const messages = [
new SystemMessage("你是一位专业的技术文档助手,请简洁回答。"),
new HumanMessage("LangChain.js 的核心优势是什么?"),
];
const response = await chatModel.invoke(messages);
console.log(response.content);
invoke() 方法返回一个 Promise,解析后即为模型的文本回复。在实际项目中,建议对响应内容进行类型检查或格式化输出。
流式传输处理
流式传输允许开发者实时接收模型生成的内容,提升用户体验。LangChain.js 支持回调函数和流式迭代器两种方式。
回调函数方式
const chat = new ChatOpenAI({ streaming: true });
await chat.call([new HumanMessage("讲个笑话")], {
callbacks: [
{
handleLLMNewToken(token) {
process.stdout.write(token);
},
},
],
});
流式迭代器方式
const stream = await chat.stream([new HumanMessage("写一首关于春天的诗")]);
for await (const chunk of stream) {
if (chunk.content) {
process.stdout.write(chunk.content);
}
}
stream 是一个 AsyncIterableIterator,配合 for await...of 语法可逐块处理数据。这种方式适合前端展示打字机效果或后端日志记录。
JSON 模式输出
JSON Mode 允许强制模型输出符合特定格式的 JSON 数据,便于程序解析。目前主要支持部分 GPT 模型。
配置 JSON 模式
const jsonModeModel = new ChatOpenAI({
modelName: "gpt-4-1106-preview",
}).bind({
response_format: {
type: "json_object",
},
});
注意:某些模型要求 SystemMessage 必须包含 "JSON" 字样以确保格式约束生效。
const res = await jsonModeModel.invoke([
["system", "Only return JSON data."],
["human", "提取这句话的情感倾向:今天天气真好!"],
]);
const parsed = JSON.parse(res.content);
console.log(parsed);
后续模型迭代可能会放宽此限制,建议始终验证输出合法性。
函数调用能力
函数调用(Function Calling)是大模型与外部程序交互的重要协议。模型根据用户意图选择调用预定义的函数,并传递参数。
定义函数 Schema
可以使用原生对象或 Zod 库定义函数结构。Zod 能提供更强的类型安全。
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";
const extractionFunctionSchema = {
name: "extractor",
description: "Extracts fields from the input text.",
parameters: zodToJsonSchema(
z.object({
tone: z.enum(["positive", "negative"]).describe("情感倾向"),
word_count: z.number().describe("字数统计"),
chat_response: z.string().describe("回复内容"),
})
),
};
绑定与执行
将函数 Schema 绑定到模型,并指定是否强制调用。
const model = new ChatOpenAI({
modelName: "gpt-4",
}).bind({
functions: [extractionFunctionSchema],
function_call: { name: "extractor" },
});
const result = await model.invoke([new HumanMessage("What a beautiful day!")]);
if (result.additional_kwargs?.function_call) {
const args = JSON.parse(result.additional_kwargs.function_call.arguments);
console.log("调用函数:", args);
}
解析 additional_kwargs 中的 function_call 字段获取参数,随后在业务层执行对应逻辑。
错误处理与最佳实践
异常捕获
网络波动或 API 限流可能导致调用失败,务必包裹在 try-catch 块中。
try {
const response = await chatModel.invoke(messages);
} catch (error) {
console.error("调用失败:", error.message);
}
成本与性能优化
- 缓存策略:对相同 Prompt 的结果进行缓存,减少重复调用。
- 流式输出:优先使用流式传输降低首字延迟。
- Prompt 精简:缩短上下文长度以降低 Token 消耗。
- 监控日志:记录每次调用的耗时和 Token 使用情况。
总结
本文详细介绍了 LangChain.js 的核心功能,包括模型初始化、消息管理、流式传输、JSON 模式及函数调用。通过规范的环境配置和错误处理机制,开发者可以构建稳定可靠的大模型应用。随着 AI 技术的迭代,建议持续关注官方文档更新,及时适配新特性。
相关免费在线工具
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online