LangChain.js


LangChain.js 是 Python 版 LangChain 的姊妹项目,也是由 Harrison Chase 主理。

特点:

  • 可以和 Python 版 LangChain 无缝对接
  • 抽象设计完全相同,概念一一对应
  • 所有对象序列化后都能跨语言使用
  • 但 API 差别挺大,不过在努力对齐

支持环境:

  • Node.js (ESM and CommonJS) - 18.x, 19.x, 20.x
  • Cloudflare Workers
  • Vercel / Next.js (Browser, Serverless and Edge functions)
  • Supabase Edge Functions
  • Browser
  • Deno
npm install langchain

如果想 npm update 能更新 LangChain.js 到最新版,需要修改 package.json

- "langchain": "^0.0.155",
+ "langchain": "~0.0.155",

文档质量还在持续提升,但稍微用深一些,还得读源码才行。

比如向 OpenAI 发出请求,最核心的一个 call函数 options 参数没有枚举可选值。

langchain-js-call

以下代码使用 LangChain.js 的 PromptTemplateChatOpenAIChatBaiduWenxin,测试批量 prompt 在不同大模型下的效果。

/**
 * Chatall.ts
 * 演示用 LangChain.js 实现的多 LLM 同时对话。
 * 运行:
 * $ npm install -g ts-node typescript @types/dotenv
 * $ npm install langchain dotenv
 * $ ts-node chatall.ts
 */

import { BaseChatModel } from "langchain/chat_models/base";
import { ChatOpenAI } from "langchain/chat_models/openai";
import { ChatBaiduWenxin } from "langchain/chat_models/baiduwenxin";
import { HumanMessagePromptTemplate } from "langchain/prompts";

import dotenv from 'dotenv';
dotenv.config();

// 1. 定义多个聊天模型
const models: BaseChatModel[] = [];
models.push(new ChatBaiduWenxin({}));
models.push(new ChatOpenAI({}));

// 2. 定义模板 prompt
const template = "怎样夸赞{object}";
const humanPrompt = HumanMessagePromptTemplate.fromTemplate(template);

// 3. 定义对象
const objects = [
    "领导",
    "同事",
    "女朋友",
    "男朋友",
    "老婆",
    "老公",
];

// 4. 开始对话
async function chatall() {
    try {
        for (const obj of objects) {
            const messages = await humanPrompt.formatMessages({
                object: obj,
            });
            console.log("===========\n提问:\n" + messages[0].content + "\n\n");
            for (const model of models) {
                const res = await model.call(messages);
                console.log(model._llmType() + ":\n" + res.content + "\n\n");
            }
        }
    } catch (e: any) {
        console.log(e.response.data);
    }
}

chatall();
  • 努力对齐 Python 版的能力(甚至为此做了一个基于 gpt-3.5-turbo 的代码翻译器)
  • 保持兼容尽可能多的环境
  • 对质量关注不多,但相信随时间自然能解决
提示

LangChain 做为 LLM 应用的浪尖项目,尽管它有很多缺点,但它所做的每件事,都有真实需求在背后推动。 就算不用 LangChain,也可以学习它的思路,了解它的变化,掌握前沿技术。

推荐订阅 LangChain 的 blog

未来产品经理和研发的分工可能有所改变:

  • 产品经理定义 promptchainagent(简称 PCA),研发开发调试环境和生产环境
  • PCA 的定义数据保存在独立 repo,独立进行版本管理,和代码解耦
  • 无需传统上线发布行为,就能改变产品的行为。这是另一种「热更新」
  • 以上工作就算都是一个人做,也值得解耦