从不屑到佩服,我见证了AI领域的飞速发展。今天,我要向各位介绍一个改变游戏规则的工具:LangChain.js。它不仅仅是一个库,更是构建下一代AI应用的基石。

什么是LangChain.js

LangChain.js是LangChain的JavaScript/TypeScript版本,是一个为大语言模型(LLM)应用开发而设计的框架。如果你曾经想过如何将ChatGPT这样的AI能力无缝集成到你的应用中,LangChain.js就是你的不二之选。

简单来说,LangChain.js就像是AI能力的"乐高积木",让你能够轻松组装出复杂的AI应用。

为什么选择LangChain.js?

当我第一次接触LangChain.js时,我的反应是:"这不就是我一直在寻找的东西吗?"作为一个经常与JavaScript打交道的开发者,我深知在JS生态中构建AI应用的挑战。

以下是LangChain.js的几大优势:

  1. 原生JavaScript支持:不需要Python环境,直接在Node.js或浏览器中运行
  2. 模块化设计:像搭积木一样构建你的AI应用
  3. 多模型支持:OpenAI、Anthropic、Hugging Face等,应有尽有
  4. 丰富的工具集:从文本处理到向量数据库,一应俱全
  5. 活跃的社区:问题解决和最佳实践触手可及

LangChain.js vs Python版本

"那么,LangChain.js和Python版本有什么区别呢?"这是我经常被问到的问题。

虽然两者在核心概念上保持一致,但LangChain.js针对JavaScript生态进行了优化:

  • 使用Promise而非异步/等待语法
  • 与Node.js和前端框架的无缝集成
  • 针对JavaScript开发者的API设计
  • 更轻量级的依赖

环境准备

在开始LangChain.js之旅前,你需要准备:

# 创建新项目
mkdir my-langchain-app
cd my-langchain-app
npm init -y

# 安装LangChain 核心库,提供langchain的基本能力
npm install @langchain/core

# 我们以使用deepseek llm为例,所以安装@langchain/deepseek,提供与deepseek交互的能力
npm install @langchain/deepseek

随后,在项目中找到package.json,添加 type为module配置,为让项目支持ES module形式的模块组织形式

# /package.json
{
  ...其他配置
  "type": "module",
}

你的第一个LangChain.js应用

让我们创建一个简单的应用,向deepseek的模型提问。

首先,在项目文件夹下,创建入口文件index.js,编写应用代码:

import { ChatDeepSeek } from "@langchain/deepseek";

// 初始化 DeepSeek 模型
const llm = new ChatDeepSeek({
  // DeepSeek API Key
  apiKey: "sk-xxxxxxxx",

  // 控制回答随机性
  // 0:最稳定,适合代码、数学
  // 0.7:平衡,适合日常聊天(常用)
  // 越大:回答越有创造性
  temperature: 0.7,

  // 使用的模型
  // deepseek-chat:通用聊天模型
  // deepseek-coder:代码模型
  // deepseek-reasoner:推理模型
  modelName: "deepseek-chat",

  // 最大输出 Token 数量
  // 越大,回答越长
  maxTokens: 100,
});


async function main() {

  // 调用模型发送问题
  const result = await llm.invoke(
    "解释一下量子计算的基本原理,用通俗的语言"
  );


  // 打印完整 AIMessage 对象
  console.log(result);


  // 只打印 AI 回复内容
  console.log(result.content);
}


// 执行函数
main();

2. 完成代码编写,可以运行你的AI 应用了

AIMessage {
  // AI 消息的唯一 ID
  "id": "a5c34373-4b81-4dea-b9a3-b1dbfa7d14bd",

  // AI 实际返回的文本内容
  "content": "好的,我们用最通俗的方式来聊聊量子计算。\n\n想象一下,你正在玩一个**迷宫游戏**,要找出口。\n\n**传统计算机(经典计算机)** 就像一个**很勤奋但一次只能走一条路**的探险家。他站在岔路口,先走左边,如果走不通,就退回来,再走右边。他速度很快,但本质上是一个一个地试,直到找到出口。\n\n**量子计算机** 则像一个\*\*会“分身术”的探险",

  // 额外参数
  "additional_kwargs": {},

  // 模型返回的元数据
  "response_metadata": {
    // Token 使用情况
    "tokenUsage": {
      // 输入 Token 数量
      "promptTokens": 14,

      // 输出 Token 数量
      "completionTokens": 100,

      // 输入 + 输出 Token 总数
      "totalTokens": 114
    },

    // 生成结束的原因
    // length 表示达到 maxTokens 限制,导致输出被截断
    "finish_reason": "length",

    // 模型提供商
    "model_provider": "deepseek",

    // 实际使用的模型
    "model_name": "deepseek-v4-flash",

    // 更详细的 Token 使用情况
    "usage": {
      // 输入 Token
      "prompt_tokens": 14,

      // 输出 Token
      "completion_tokens": 100,

      // 总 Token
      "total_tokens": 114,

      // 输入 Token 的详细信息
      "prompt_tokens_details": {
        // 缓存命中的 Token
        "cached_tokens": 0,

        // Prompt Cache 命中的 Token
        "prompt_cache_hit_tokens": 0,

        // Prompt Cache 未命中的 Token
        "prompt_cache_miss_tokens": 14
      }
    },

    // DeepSeek 当前模型/服务版本相关的指纹
    "system_fingerprint": "fp_a18b46594c_prod0820_fp8_kvcache_20260402"
  },

  // 工具调用相关的信息
  // [] 表示本次没有调用工具
  "tool_calls": [],

  // 无效的工具调用
  // [] 表示没有无效工具调用
  "invalid_tool_calls": [],

  // LangChain 对 Token 使用情况的统一记录
  "usage_metadata": {
    // 输出 Token
    "output_tokens": 100,

    // 输入 Token
    "input_tokens": 14,

    // 总 Token
    "total_tokens": 114,

    // 输入 Token 详细信息
    "input_token_details": {
      // 从缓存读取的 Token
      "cache_read": 0
    },

    // 输出 Token 详细信息
    "output_token_details": {}
  }
}

就这么简单!几行代码,你就已经创建了一个基础的与AI交互的应用。

结语

这只是LangChain.js的冰山一角。在接下来的系列文章中,我们将深入探讨LangChain.js的各个模块,从链式调用到代理系统,从记忆机制到工具集成。

无论你是想构建一个智能客服机器人,还是开发一个AI驱动的内容生成平台,LangChain.js都能为你提供所需的工具和抽象。

记住,AI应用开发的未来不在于谁能访问最强大的模型,而在于谁能最巧妙地组合和应用这些模型。而LangChain.js,正是这场游戏的重要玩家。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐