AI使用token的原理

        AI 模型本身不会自动区分“不同的上下文”,它完全依赖应用程序向它发送数据。 如果应用程序设计不当,确实会导致 Token 无限累积,直到超出限制或成本爆炸。

        LLM 是一个纯粹的数学函数( f(input)→outputf(input)→output )。它没有“时间”概念,也不知道什么是“上一次聊天”或“新的话题”。

  • 如果你把 100 轮对话全部发给它:它会认为这 100 轮都是当前语境的一部分,试图在所有历史中寻找逻辑关联。
  • 如果你只发最近的 5 轮:它只会基于这 5 轮进行回答,之前的内容对它来说仿佛从未存在过。

        在一个持续的对话窗口中,每多一轮交互,输入给模型的 Token 数就会增加:

  • 本次输入 Token=系统提示词+∑(历史所有问答)+当前问题

Token带来的问题

不做token管理会导致了两个严重后果:

  1. 触达上限 (Context Limit):每个模型都有最大上下文窗口(例如 128k tokens)。一旦历史对话总长度超过这个值,程序必须报错,或者强制丢弃最早的记忆,否则无法生成回复。
  2. 成本与速度激增
    • 费用:大多数 API 是按输入 Token 收费的。对话越长,每次提问的费用越高(因为你要为重复发送的历史记录付费)。
    • 延迟:模型处理 100k token 的速度远慢于处理 1k token。随着对话变长,你会明显感觉到 AI 变慢了。

如何解决token过多的问题

方案1. 滑动窗口 (Sliding Window) - 最常见

系统只保留最近的 N 轮对话(例如最近 10 轮或最近 2000 个 token)。

  • 操作:当第 11 轮到来时,系统自动丢弃第 1 轮的内容。
  • 效果:Token 数量保持在一个恒定范围内,不会随时间无限增长。
  • 缺点:AI 会彻底“忘记”很久以前说过的细节。
方案二. 摘要压缩 (Summarization)

当对话过长时,系统调用一个小模型(或同一个大模型)将早期的对话历史总结成一段简短的摘要。

  • 操作:将前 50 轮对话压缩成:“用户询问了关于 Python 的基础语法,并解决了两个报错问题。”然后用这段摘要代替原始的 50 轮详细记录。
  • 效果:保留了核心语义记忆,同时大幅减少了 Token 占用。
  • 缺点细节丢失,数字/代码易错
方案三. 向量检索 (RAG - Retrieval Augmented Generation)

这是高级玩法。系统不把历史记录全部发给模型,而是把历史记录存入向量数据库。

  • 操作:当你问一个新问题时,系统先去数据库里搜索“与当前问题最相关的几条历史记录”,只把这几条相关的片段 + 当前问题发给模型。
  • 效果:即使你有 1000 轮对话,每次只发送最相关的 3-5 轮。Token 数量很小,但 AI 能“回忆”起很久以前的关键信息。
  • 缺点检索不准,漏掉关键前提
方案四. 显式会话分割

通过用户手动点击“新建对话”或系统强制重置,彻底切断历史,开启一个全新的空白上下文。

  • 操作:界面上提供“新建聊天”按钮。一旦点击,后端生成一个新的 Session ID,之前的聊天记录被归档,不再参与当前的 Token 计算。
  • 效果:Token 计数从零开始重新计算。
  • 缺点记忆清零,需重复输入
方案无:混合架构-未来趋势

由于单一方法都有缺陷,目前最先进的 AI 系统(如 Cursor, Devin, 高级客服机器人)通常采用混合策略

  1. 短期记忆:保留最近 10-20 轮完整对话(滑动窗口)。
  2. 长期记忆:将更早的对话进行摘要,并将关键事实(如用户名字、项目路径)提取出来存入向量库
  3. 动态触发:当用户提到“之前说的那个...”时,自动触发 RAG 检索;当检测到话题完全转移时,建议用户开启新会话。

这种组合旨在在成本速度记忆准确性之间寻找最佳平衡点。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐