You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenAI Assistants API单次请求Token消耗过高问题求助

问题描述

我用NodeJS开发了一个程序,通过OpenAI Assistant API创建消息,已按照官方文档完成以下操作:

  • 创建了基于gpt-4-1106-preview的Assistant及对应交互线程;
  • 向线程添加经OpenAI Token工具检测约1000Token的消息:
openai.beta.threads.messages.create(threadId, {
    role: "user",
    content: createMessage(),
});
  • 运行助手:
await openai.beta.threads.runs.create(threadId, {
    assistant_id: assistantId,
    instructions:
         "Please address the user as Mahesh. The user is an administrator.",
});
  • 每5秒轮询运行状态直至变为"completed":
await openai.beta.threads.runs.retrieve(threadId, runId);
  • 获取助手最新响应:
const messages = await openai.beta.threads.messages.list(threadId, {
  limit: 1,
});

但单次请求完成时Token消耗约25万,以下是今日三次请求的Token使用情况:
Token使用截图

现咨询该异常高Token消耗的原因及解决办法。

可能原因
  1. 线程历史上下文累积:Assistant API默认会将线程内的所有历史消息作为上下文传入模型。如果线程中存在大量未清理的历史消息(比如多次测试留下的旧内容),每次运行都会将全部历史上下文计入Token消耗,导致总量激增。
  2. 助手绑定大体积知识库文件:如果你的Assistant关联了大文件作为知识库,每次运行时模型会加载整个文件的内容作为上下文,这会直接导致prompt Token数大幅增加。
  3. 输入内容Token数检测误差:你使用的Token工具检测结果可能与OpenAI API实际计算的Token数存在差异,createMessage()返回的内容实际Token数可能远高于1000。
  4. 重复触发助手运行:代码逻辑可能存在重复调用threads.runs.create的情况,多次运行助手会累积Token消耗。
  5. 模型上下文窗口的隐性计算:gpt-4-1106-preview的上下文窗口为128k,但如果运行过程中存在自动扩展上下文或重复处理内容的情况,也会导致Token消耗异常。
解决办法
  1. 清理或隔离线程上下文
    • 每次用户请求时创建新的线程,避免历史消息累积;
    • 如果需要保留部分上下文,在每次运行前清理线程中无关的旧消息,仅保留必要的对话内容。
  2. 优化知识库文件使用
    • 检查Assistant绑定的文件大小,将大文件拆分为多个小文件;
    • 使用向量数据库检索知识库的相关片段,仅将与当前问题相关的内容传入模型,而非加载整个文件。
  3. 准确计算输入Token数
    • 使用OpenAI官方的tiktoken库本地计算createMessage()返回内容的Token数,确保与API计算结果一致;
    • 限制单条消息的Token数,避免超出预期。
  4. 排查代码逻辑
    • 检查是否存在重复调用threads.runs.create的情况,确保单次请求仅触发一次助手运行;
    • 确认轮询逻辑不会意外触发新的运行请求。
  5. 查看详细Token消耗数据
    • 在助手运行完成后,获取run对象的usage字段,查看prompt_tokens和completion_tokens的具体数值,定位是输入还是输出导致的高消耗。

内容的提问来源于stack exchange,提问作者Mahesh Samudra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:20:01