
本教程详细介绍了如何在LangChain.js项目中准确追踪OpenAI模型(如GPT-3.5-turbo)的Token用量和运行成本。针对LangChain.py中`get_openai_callback()`在J*aScript框架中缺失的问题,我们将重点讲解如何利用LangChain.js的`callbacks`属性,通过实现`handleLLMEnd`回调函数来实时捕获并累计每次LLM运行的提示词和完成Token,从而有效管理和分析模型消耗。
在开发基于大型语言模型(LLM)的应用时,准确追踪Token的消耗至关重要,它直接关系到成本控制和性能优化。在LangChain的Python版本中,get_openai_callback()提供了一个便捷的方式来获取LLM调用的Token用量和成本。然而,在LangChain.js框架中,并没有一个直接对应的getOpenAICallback()函数,这使得许多开发者在尝试获取这些数据时遇到了困难。
例如,一些开发者可能会尝试使用如下代码(由一些AI助手提供),但会发现chain.getOpenAICallback等方法并不存在于LangChain.js的实际API中:
// 这是一个错误的尝试,该函数在LangChain.js中不存在
const { Chain } = require("langchain");
async function getChainRunCost(chainRunId) {
const chain = new Chain();
const callback = await chain.getOpenAICallback(chainRunId); // ❌ 此函数不存在
const cost = callback.cost;
return cost;
}本文将深入探讨LangChain.js中正确追踪OpenAI模型Token用量的方法,核心在于利用其强大的回调(Callbacks)机制。
LangChain.js提供了一个灵活的回调系统,允许开发者在LLM或链(Chain)执行过程中的不同阶段插入自定义逻辑。这些回调函数可以在LLM开始、结束、错误发生时被触发,从而提供了一个观察和干预执行流程的窗口。对于Token用量追踪,我们主要关注handleLLMEnd这个回调事件,它在每次LLM调用完成时触发,并提供该次调用的详细输出信息,包括Token用量。
要在LangChain.js中追踪Token用量,我们需要在初始化LLM实例时,通过callbacks属性配置一个回调处理器。在这个处理器中,我们将实现handleLLMEnd方法来捕获Token数据。
以下代码展示了如何使用ChatOpenAI模型,并配置handleLLMEnd回调函数来累计Prompt Token、Completion Token和总Token用量:
达奇AI论文写作
达奇AI论文辅助写作平台,在校学生、职场精英都在用的AI论文辅助写作平台
106
查看详情
import { ChatOpenAI } from 'langchain/chat_models/openai';
import { HumanMessage } from 'langchain/schema'; // 用于构造Chat模型输入
// 定义全局变量用于累计Token用量
// 在实际应用中,这些变量可能需要存储在更持久的存储中,或与用户会话关联
let totalCompletionTokens = 0;
let totalPromptTokens = 0;
let totalExecutionTokens = 0;
// 初始化ChatOpenAI模型实例,并配置回调
const llm = new ChatOpenAI({
// 配置回调函数数组
callbacks: [
{
/**
* 在LLM调用结束时触发
* @param {object} output - LLM调用的输出结果
* @param {string} runId - 当前运行的唯一ID
* @param {string} [parentRunId] - 父级运行的ID
* @param {string[]} [tags] - 与运行相关的标签
*/
handleLLMEnd: (output, runId, parentRunId, tags) => {
// 从输出中提取Token用量信息
// 注意:llmOutput?.tokenUsage 结构可能因模型和版本而异,建议进行空值检查
const { completionTokens, promptTokens, totalTokens } = output.llmOutput?.tokenUsage || {};
// 累计Token用量
totalCompletionTokens += completionTokens ?? 0;
totalPromptTokens += promptTokens ?? 0;
totalExecutionTokens += totalTokens ?? 0;
console.log(`--- LLM Run ID: ${runId} ---`);
console.log(` Prompt Tokens (本次): ${promptTokens ?? 0}`);
console.log(` Completion Tokens (本次): ${completionTokens ?? 0}`);
console.log(` Total Tokens (本次): ${totalTokens ?? 0}`);
console.log(` 累计 Prompt Tokens: ${totalPromptTokens}`);
console.log(` 累计 Completion Tokens: ${totalCompletionTokens}`);
console.log(` 累计 Total Tokens: ${totalExecutionTokens}`);
},
},
],
modelName: 'gpt-3.5-turbo-0613', // 推荐使用此模型版本以确保Token追踪的准确性
temperature: 0.7, // 其他LLM配置,例如温度
// openaiApiKey: process.env.OPENAI_API_KEY, // 确保您的API Key已配置
});
// 示例:如何使用这个LLM实例进行多次调用
async function runTokenTrackingExample() {
console.log("--- 第一次LLM调用 ---");
const response1 = await llm.call([
new HumanMessage('请用一句话介绍大型语言模型。')
]);
console.log("Response 1:", response1.content);
console.log("\n--- 第二次LLM调用 ---");
const response2 = await llm.call([
new HumanMessage('请简述LangChain框架的核心作用。')
]);
console.log("Response 2:", response2.content);
console.log("\n--- 所有LLM调用结束 ---");
console.log(`最终累计 Prompt Tokens: ${totalPromptTokens}`);
console.log(`最终累计 Completion Tokens: ${totalCompletionTokens}`);
console.log(`最终累计 Total Tokens: ${totalExecutionTokens}`);
// 根据Token用量估算成本 (示例,实际成本请参考OpenAI定价)
// 以下价格基于GPT-3.5 Turbo 0613模型,请查阅最新官方定价
const promptCostPerKToken = 0.0015; // 每千个输入Token的价格 (美元)
const completionCostPerKToken = 0.002; // 每千个输出Token的价格 (美元)
const estimatedCost =
(totalPromptTokens / 1000) * promptCostPerKToken +
(totalCompletionTokens / 1000) * completionCostPerKToken;
console.log(`估算总成本: $${estimatedCost.toFixed(6)}`);
}
// 运行示例函数
runTokenTrackingExample();模型与版本兼容性:
,甚至可能无法获取。建议开发者在实际项目中进行测试验证。集成到复杂链中:
成本估算:
数据持久化与监控:
健壮性与错误处理:
通过利用LangChain.js提供的回调机制,特别是handleLLMEnd函数,开发者可以有效地追踪OpenAI模型在每次运行中的Token用量。这种方法不仅解决了LangChain.py中get_openai_callback()在J*aScript框架中缺失的问题,还提供了一个灵活且强大的方式来监控和管理LLM应用的资源消耗。掌握这一技术,对于构建成本效益高、可观测性强的LLM应用至关重要。
以上就是LangChain.js中追踪OpenAI模型Token用量与成本的实现指南的详细内容,更多请关注其它相关文章!
# 运算符
# 淡水营销推广网站
# 专业的网站建设与推广
# 吴中seo优化营销推广
# 天蒙山网络营销推广渠道
# 天河高端网站建设哪个好
# 白云网站seo排名
# seo每周计划
# 抖音的seo服务
# 网站推广火丶星21
# 象山网站改版建设
# 有何
# 不存在
# 有所不同
# 它是
# javascript
# 剪切板
# 论文写作
# 它在
# 全局变量
# 回调
# cos
# gpt
# openai
# ai
# 回调函数
# 处理器
# js
# java
# python
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明
Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程
使用Google服务账号实现Google Drive API无缝集成与文件访问
Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】
管理打开的编辑器:固定、分组和关闭技巧
解决Flex容器横向滚动内容截断与偏移问题
AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用
《via浏览器》强制缩放网页设置方法
Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型
德邦物流在线查询系统 德邦快递货物运输追踪
《下一站江湖2》风神腿获取攻略
苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作
解决Windows上Composer PATH变量冲突导致的命令无法识别问题
获取WooCommerce产品在后台编辑页面的分类ID
Safari浏览器自动填表功能失效怎么办 Safari表单管理修复
mysql中如何配置字符集和排序规则_mysql字符集排序配置
《波斯王子:失落的王冠》剑术大师打法攻略
铁路12306官网登录入口 铁路12306在线购票官方平台
WPS文字如何进行简繁转换
b站如何管理订阅_b站订阅标签分类管理
我居然低估了 DeepSeek,这次更新它做到了这些!
mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法
yy漫画登录页面官方入口_yy漫画在线阅读网址入口
AO3官方镜像链接 | 最新防走失网址永久收藏
Python模块化编程:避免循环导入与共享函数的最佳实践
优化Leaflet弹出层图片显示:条件渲染策略
《腾讯相册管家》注销账号方法
PHP页面重载后变量状态保持:实现用户档案连续浏览的教程
三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧
Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理
济南公交卡手机充值指南
谷歌浏览器怎么把网页翻译成中文_Chrome网页翻译功能使用方法
苹果如何下载nanobanana
《偃武》甘宁技能详解
TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法
口腔诊所管理软件推荐
《暗黑破坏神4》国服回归送狂欢礼包 价值6916元
盲鳗善于分泌黏液猜猜主要用来做什么
餐馆菜篮选购指南
cad视图选项卡不见了怎么办_cad视图标签恢复显示方法
OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南
《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊
KFC邀请码怎么使用领额外优惠_KFC邀请码输入方式与额外优惠代码获取方法
网站体验不好=浪费钱:如何提升-用户体验效果差
iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程
优化 React onClick 事件处理:函数引用与箭头函数的对比
荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化
江苏大剧院会员卡购买步骤
基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口
抖音作品被限流怎么办 抖音内容优化与流量恢复方法
2025-11-24
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。