跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.jsAI

LangChain.js 实战入门:从模型调用到函数调用详解

LangChain.js 是构建大模型应用的框架,提供模型调用、流式传输、函数调用等功能。环境准备、ChatModel 实例化、消息处理、流式响应实现、JSON Mode 配置及函数调用流程。内容涵盖基于 Zod 的 Schema 定义、链式编排示例以及错误处理策略,帮助开发者掌握从入门到实战的核心技术点,实现高效的大模型应用开发。

FrontendX发布于 2025/2/6更新于 2026/7/2040 浏览
LangChain.js 实战入门:从模型调用到函数调用详解

LangChain.js 实战入门:从模型调用到函数调用详解

LangChain.js 是一个用于快速开发大模型应用的框架,提供了一系列强大的功能和工具,使得开发者能够更加高效地构建复杂的人工智能应用程序。本文旨在介绍在实际项目中使用 LangChain.js 时的核心方法和技巧,涵盖基础配置、模型调用、流式传输及高级功能。

环境准备

在开始之前,请确保你的开发环境已安装 Node.js(推荐 v16+)。通过 npm 或 yarn 安装必要的依赖包。

npm install langchain @langchain/openai

对于 TypeScript 项目,建议同时安装类型定义文件:

npm install --save-dev @types/node

环境变量配置是管理 API Key 的最佳实践。在项目根目录创建 .env 文件,避免将敏感信息硬编码在代码中。

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
AZURE_OPENAI_API_KEY=your_azure_key
AZURE_OPENAI_API_INSTANCE_NAME=your_instance_name
AZURE_OPENAI_API_DEPLOYMENT_NAME=your_deployment_name

在代码中加载环境变量,可使用 dotenv 库或在运行时直接读取 process.env。

基础模型调用

LangChain.js 新架构区分了两种主要调用方式:LLM 和 ChatModel。虽然本质都是调用模型接口,但 ChatModel 更适合处理对话场景,支持多轮上下文交互,因此推荐使用后者。

实例化 ChatModel

以 OpenAI 为例,实例化 ChatModel 需要传入 API Key 或其他认证参数。Key 可以直接在构造函数中传入,也可以自动从环境变量中读取。

import { ChatOpenAI } from "@langchain/openai";

const chatModel = new ChatOpenAI({
  openAIApiKey: process.env.OPENAI_API_KEY,
  modelName: "gpt-3.5-turbo",
});

如果是 Azure OpenAI,则需要配置额外的连接参数:

const azureChatModel = new ChatOpenAI({
  azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
  azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME,
  azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME,
  azureOpenAIApiVersion: "2023-07-01-preview",
});

消息与调用

LangChain.js 提供了标准的消息类,如 SystemMessage 和 HumanMessage。系统消息用于设定 AI 的角色或指令,用户消息则是具体的问题。

import { SystemMessage, HumanMessage } from "@langchain/core/messages";

const messages = [
  new SystemMessage("你是一位专业的技术文档助手,请用简洁的语言回答。"),
  new HumanMessage("LangChain.js 的核心优势是什么?"),
];

// 使用 invoke 方法调用模型
const response = await chatModel.invoke(messages);
console.log(response.content);

invoke() 方法返回一个 Promise,解析后即为模型的回复内容。这种方式比旧版的 call() 更统一且易于维护。

流式传输 (Streaming)

流式传输是大模型应用提升用户体验的关键功能。它允许客户端实时接收生成的文本片段,而不是等待整个响应完成。

回调函数方式

早期版本主要依赖回调函数来处理流式输出。

const chat = new ChatOpenAI({
  streaming: true,
});

await chat.call([new HumanMessage("讲个笑话")], {
  callbacks: [
    {
      handleLLMNewToken(token) {
        process.stdout.write(token);
      },
    },
  ],
});

每当模型生成新的 token 时,handleLLMNewToken 会被触发。

异步迭代器方式

新版 LangChain.js 推荐使用 .stream() 方法,配合 for await 循环,代码更简洁且符合现代 JavaScript 规范。

const stream = await chat.stream([new HumanMessage("解释一下量子计算")]);

for await (const chunk of stream) {
  if (chunk.content) {
    process.stdout.write(chunk.content);
  }
}

stream 对象是一个 AsyncIterableIterator,可以方便地在浏览器或 Node.js 环境中遍历数据流。

JSON Mode 与结构化输出

JSON Mode 允许控制 AI 模型的输出格式,使其严格遵循指定的 JSON Schema。这对于需要将 LLM 集成到后端逻辑中的场景非常有用。

配置 JSON Mode

目前仅部分模型(如 gpt-4-1106-preview 及更新版本)支持此功能。需设置 response_format 为 json_object。

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 output."],
  ["human", "提取以下文本的情感:今天天气真好。"],
]);

const parsed = JSON.parse(res.content);
console.log(parsed);

函数调用 (Function Calling)

函数调用是 AI 应用与外部程序交互的重要协议。它允许 AI 根据用户意图选择并执行特定的函数,从而实现联网搜索、数据库查询等能力。

定义函数 Schema

OpenAI 使用 JSON Schema 来定义函数结构。可以使用原生对象或 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("The overall tone"),
      word_count: z.number().describe("Number of words"),
      chat_response: z.string().describe("Response to user"),
    })
  ),
};

绑定与调用

将定义的函数绑定到模型,并指定是否强制调用特定函数。

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("Function Args:", args);
  // 在此处执行实际的业务逻辑
}

链式编排 (Chains)

LangChain 的核心价值在于将多个组件串联成工作流。通过 Chains,可以将提示词模板、模型调用和后处理逻辑组合在一起。

简单链

最简单的链是将提示词模板与模型连接起来。

import { PromptTemplate } from "@langchain/core/prompts";
import { LLMChain } from "langchain/chains";

const prompt = PromptTemplate.fromTemplate("你好,我是{role},很高兴见到你");
const chain = new LLMChain({ llm: chatModel, prompt });

const result = await chain.run({ role: "人工智能助手" });
console.log(result);

顺序链

对于复杂任务,可以使用 SequentialChain 按顺序执行多个步骤。

import { SequentialChain } from "langchain/chains";

const firstPrompt = PromptTemplate.fromTemplate("翻译这句话:{input}");
const secondPrompt = PromptTemplate.fromTemplate("总结翻译结果:{translation}");

const chain1 = new LLMChain({ llm: chatModel, prompt: firstPrompt, outputKey: "translation" });
const chain2 = new LLMChain({ llm: chatModel, prompt: secondPrompt, outputKey: "summary" });

const sequentialChain = new SequentialChain({
  chains: [chain1, chain2],
  inputVariables: ["input"],
  outputVariables: ["summary"],
});

const finalResult = await sequentialChain({ input: "Hello world" });
console.log(finalResult.summary);

错误处理与最佳实践

在实际生产中,网络波动或模型异常可能导致调用失败。建议添加重试机制。

import { RetryError } from "langchain/errors";

try {
  const response = await chatModel.invoke(messages);
} catch (error) {
  if (error instanceof RetryError) {
    console.error("请求失败,稍后重试...");
  } else {
    console.error("其他错误:", error.message);
  }
}

此外,建议对输入内容进行清洗,防止注入攻击;对输出内容进行校验,确保符合预期格式。定期监控 Token 消耗,优化 Prompt 以减少成本。

总结

本文详细介绍了 LangChain.js 的基础用法和进阶功能。从环境搭建到模型调用,再到流式输出和函数调用,涵盖了构建 AI 应用所需的核心技能。通过合理使用 Chains 和 Prompt 模板,开发者可以大幅降低大模型集成的复杂度。随着 AI 技术的迭代,建议持续关注官方文档的更新,以利用最新的功能特性。

目录

  1. LangChain.js 实战入门:从模型调用到函数调用详解
  2. 环境准备
  3. 基础模型调用
  4. 实例化 ChatModel
  5. 消息与调用
  6. 流式传输 (Streaming)
  7. 回调函数方式
  8. 异步迭代器方式
  9. JSON Mode 与结构化输出
  10. 配置 JSON Mode
  11. 函数调用 (Function Calling)
  12. 定义函数 Schema
  13. 绑定与调用
  14. 链式编排 (Chains)
  15. 简单链
  16. 顺序链
  17. 错误处理与最佳实践
  18. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • ComfyUI 新手入门:零基础掌握 AI 绘画工作流
  • Elasticsearch 与 Kibana 实战:从部署到 C++ 客户端封装
  • 基于城市场景的无人机三维路径规划:导航变量多目标粒子群优化算法 NMOPSO
  • Spring Boot + DeepSeek 工具函数(Function Call)实战应用
  • Z-Image Turbo 极速生成电商海报实战
  • Leaflet 与 SpringBoot 实现地图点位点击获取当地时间
  • 低代码 AI 平台 Coze 核心功能与实战指南
  • 知网AIGC检测多少钱?各渠道价格对比和省钱攻略
  • 动手学大模型应用开发:从零构建个人知识库助手
  • 【Gradio系列】使用 Gradio 快速构建对话式 AI 应用
  • Cursor AI 编程工具深度解析
  • OpenClaw Zero Token 深度解析:浏览器自动化实现大模型免 Token 调用
  • Linux 下 Tomcat 结合内网穿透实现 Web 应用公网访问
  • Linux 网络基础:TCP/IP 协议栈与分层模型解析
  • Web 虚拟卡销售平台架构与实现详解
  • Web 虚拟卡销售平台:Spring Boot + Vue 全栈实现方案
  • 延迟退休时代,AI 能帮上哪些忙
  • Copilot Plan Mode 与多模型协同实战:复杂项目重构指南
  • Python 入门:核心数据结构详解
  • 数据结构核心:二叉树、堆与遍历算法实现

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online