LangChain.js 实战系列:如何统计大模型使用的 token 使用量和花费

📝 LangChain.js 是一个快速开发大模型应用的框架,它提供了一系列强大的功能和工具,使得开发者能够更加高效地构建复杂的应用程序。LangChain.js 实战系列文章将介绍在实际项目中使用 LangChain.js 时的一些方法和技巧。

统计调用大模型的 token 使用量,进而统计整体的账单花费,是一个非常基础的需求,在 LangChain.js 中统计 token 的方式有两种,一种是方法的返回,一种是利用回调函数:

1️⃣ 在方法中返回 token 的使用情况,比如 generate():

js 复制代码
const chat = new ChatOpenAI({
  modelName: 'gpt-4',
  openAIApiKey: 'YOUR_KEY',
})

const response = await chat.generate([
  [
    new SystemMessage(
      "你是一个翻译专家,可以将中文翻译成法语。"
    ),
    new HumanMessage(
      "把这个句子翻译从中文翻译成法语:我特别喜欢上班"
    ),
  ]
]);

generate() 方法会返回如下:

json 复制代码
{
  "generations": [
    [
      {
        "text": "J'aime beaucoup travailler."
        //...
      }
    ]
  ],
  "llmOutput": {
    "tokenUsage": {
      "completionTokens": 16,
      "promptTokens": 17,
      "totalTokens": 33
    }
  }
}

llmOutput 字段包含我们整个的 token 使用量,其中 promptTokens 对应的是输入 的 token,completionTokens 对应的是输出 的 token,对于 OpenAI 来说,输入输出的价格是不一的,如下表:

模型名 输入 输出
gpt-4 $0.03 / 1K tokens $0.06 / 1K tokens
gpt-3.5-turbo-1106 $0.0010 / 1K tokens $0.0020 / 1K tokens
gpt-4-1106-preview $0.01 / 1K tokens $0.03 / 1K tokens
gpt-4-1106-vision-preview $0.01 / 1K tokens $0.03 / 1K tokens

2️⃣ 使用回调函数 handleLLMEnd

LangChain 提供了大量方便的回调函数,我们可以利用其提供的内置的 handleLLMEnd() 函数来统计,我们可以在创建 ChatOpenAI 实例的时候注入回调函数:

js 复制代码
const chat = new ChatOpenAI({
  modelName: 'gpt-4',
  openAIApiKey: 'YOUR_KEY',
}, {
  callbacks: [
    {
      handleLLMEnd(llmResult) {
        console.log(JSON.stringify(llmResult, null, 2))
      },
    }
  ]
})

回调参数 llmResult 和 generate() 方法返回值是一样的,同样有包含 tokenUsage

另外也可以在调用的时候再注入回调函数,可以更精细地统计:

js 复制代码
model
  .invoke(
    [
      new SystemMessage('Only return JSON'),
      new HumanMessage('Hi there!')
    ],
    {
      callbacks: [
        {
          handleLLMEnd(llmResult) {
            console.log(JSON.stringify(llmResult, null, 2))
          },
        },
      ],
    }
  )

好了,希望以上两种方式可以帮助大家统计大模型的开销,护好钱兜。

推荐一个集聊天、工作流和知识库的AI 平台 StarFlow.tech 🚀 。在这里,你可以免费使用 ChatGPT3.5 和 3.5 16K,还有 GPT-4 Vision、DELL·E3、Midjourney 等多种模型可供选择。这个平台就像一个小型工作室,助力个人效率 Max!。

相关推荐
良逍Ai出海1 小时前
用上 Gemini 4 Carbon:比 GPT-6 Astra 还强
gpt
用户0044729538256 小时前
练歌镜:让眼镜听懂“循环这一句”
javascript
yuyuxun19 小时前
协同过滤的校园二手物品智能推荐系统的设计与实现 毕业设计-附源码40082
javascript·vue.js·spring boot·python·数据分析·django·课程设计
可乐ea12 小时前
智能体的模型列表为什么要从三处来源合成:一次让 GPT-6.1 Sol 选不上的发布延迟
人工智能·gpt·chatgpt·智能体框架·模型列表·多源数据合成·客户端工程
总要学点什么12 小时前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
AllData公司负责人13 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
Agent世界14 小时前
用 CDP 做发布自动化:四道机器闸门与产物验收
前端·javascript
总要学点什么14 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
程序员大阳14 小时前
副队长ES6+教程(3)--解构赋值
前端·javascript·es6·赋值·解构
神膘护体小月半14 小时前
css - 元素背景图由 hover 触发,初次加载时闪动的解决办法
前端·javascript·css