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

本文介绍了如何在LangChain.js中通过方法返回和回调函数统计大模型的token使用,包括generate()方法和handleLLMEnd回调的使用示例,以及不同模型的费用结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

const chat = new ChatOpenAI({
  modelName: 'gpt-4',
  openAIApiKey: 'YOUR_KEY',
})

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

generate() 方法会返回如下:

{
  "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 实例的时候注入回调函数:

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

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

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

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!。

### 错误分析 `Uncaught SyntaxError: Unexpected token '<'` 是一种常见的 JavaScript 加载错误,表明浏览器尝试解析 JavaScript 文件时遇到了意外的 `<` 字符。这通常是由于以下原因之一引起的: 1. **文件路径错误**:JavaScript 文件未能正确加载,服务器返回了一个 HTML 响应(可能是 404 页面或其他错误页面)。这种情况下,HTML 的起始字符 `<` 导致了解析失败[^2]。 2. **服务器配置问题**:Web 服务器未正确处理静态资源请求,导致本该返回 JavaScript 文件的内容被替换成了 HTML 内容。 3. **构建工具问题**:如果项目使用了 Webpack 或其他打包工具,可能会因为路径设置不当或环境变量未正确配置而导致资源无法正常加载[^1]。 --- ### 解决方案 #### 方法一:验证文件路径 确保 `jquery.min.js`, `layer.js`, `H-ui.min.js`, `H-ui.admin.js`, `jquery.ztree.all-3.5.min.js`, `WdatePicker.js`, `jquery.dataTables.min.js`, `laypage.js` 等文件的实际路径与脚本标签中的 `src` 属性一致。例如: ```html <script src="/path/to/jquery.min.js"></script> ``` 可以通过在浏览器地址栏中输入对应的 URL 来测试这些文件是否可以成功加载。如果显示的是 HTML 内容而非 JavaScript,则说明路径有问题[^2]。 #### 方法二:检查网络请求 打开浏览器开发者工具(按 F12),切换到 "Network" 面板,刷新页面并观察相关 JS 文件的加载情况。点击具体的文件名查看其响应内容 (`Response`)。如果是 HTML 而非 JavaScript,则需调整路径或重新部署资源。 #### 方法三:修正 Webpack 配置 对于基于 Webpack 构建的应用程序,确保 `index.html` 中引用的静态资源路径前缀正确设置了动态基础路径。例如,在 Vue CLI 或 React 应用中,可采用如下方式引入 JS 文件: ```html <script src="<%= BASE_URL %>assets/js/jquery.min.js"></script> ``` 此处 `<%= BASE_URL %>` 动态指向项目的根目录,避免硬编码路径带来的兼容性问题[^1]。 #### 方法四:排查服务器端问题 确认服务器已正确定义 MIME 类型以支持 `.js` 文件传输。某些轻量级 HTTP 服务可能默认不识别此类扩展名,从而将其作为纯文本甚至 HTML 发送回客户端。必要时修改 Nginx/Apache 配置文件添加类似条目: ```nginx types { application/javascript js; } ``` #### 方法五:清理缓存重试 有时旧版本的缓存数据会干扰新更改后的行为表现。强制清除本地存储以及重启开发环境有助于排除潜在冲突因素影响最终效果呈现准确性方面起到积极作用作用[^2]. --- ### 总结 通过以上措施能够有效定位并解决因各种原因引发的 "`Unexpected token '<'`" 报错现象。具体操作还需依据实际情况灵活运用不同手段逐一排查直至恢复正常运行状态为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值