一、问题背景

在使用大模型(如基于 Spring AI 构建应用)时,我们常会遇到两个典型问题:

  • 对话变长后,模型开始“忘记之前的内容”

  • Prompt 越长,调用成本越高

这些现象的背后,其实都与一个核心机制有关:Token体系

但仅仅理解 Token 本身是不够的,还必须结合:

  • Tokenization(分词机制)

  • Context Window(上下文窗口)


二、什么是 Token?

对于不同的场景Token其实有不同的解释,在我们平常使用大模型对话中:

Token 是模型处理文本的最小单位,而不是简单的“单词”。

例如一句话:

ChatGPT is powerful

可能被拆分为多个 Token:

  • "Chat"

  • "G"

  • "PT"

  • " is"

  • " powerful"

不同模型的切分方式不同,因此 Token 数量也不同。

而对于大模型应用开发工程师来说,Token是API的计费单位,通过合理控制token数量和优化分词策略,工程师能显著提升模型性能与经济效益。


三、Tokenization:Token 是如何产生的?

Tokenization 是将文本转换为 Token 的过程,其本质是:

文本 → Token → Token ID → 模型输入

常见的实现方式包括:

  • BPE(Byte Pair Encoding)

  • SentencePiece

需要注意的是:

同一句话,在不同模型中的 Token 数量可能完全不同。

这会直接影响:

  • API 调用成本

  • Prompt 设计策略

  • RAG 检索效果


四、大模型的本质:Token 预测器

大语言模型(LLM)的核心机制是通过概率预测下一个 token(词元),其本质是一个基于上下文生成概率分布的 token 预测器。这一设计理念决定了模型的生成逻辑、能力边界及局限性。

模型接收输入的 token 序列(如文本片段),通过神经网络计算下一个 token 的概率分布。每一步生成时,模型选择概率最高的 token 或通过随机采样(如温度参数调控)生成多样化输出。

P(tₙ₊₁ | t₁, t₂, ..., tₙ)

也就是说,模型只是基于已有的 Token 序列进行概率计算。

本文是对于token机制的简单概述,对于Token预测的关键技术就不多赘述了。


五、Context Window:模型的“记忆上限”

Context Window 指的是模型一次最多能处理的 Token 数量。

它满足如下约束:

Input Tokens + Output Tokens ≤ Context Window

例如:

  • 一个 8K 上下文窗口的模型

  • 如果输入占用了 7000 tokens

  • 那么最多只能生成 1000 tokens


六、为什么模型会“忘记”?

原因并不是模型能力不足,而是:

1. 上下文窗口限制

当 Token 数超过上限时,早期内容会被截断。


2. 模型没有真实记忆

每一次请求,实际上都是:

  • 拼接历史对话

  • 加入当前问题

  • 重新发送给模型


七、Spring AI 中的体现

在 Spring AI 中:

chatClient.prompt()
    .messages(history)
    .user("继续")
    .call();

history 中的所有内容都会被拼接为 Token 并发送给模型。

如果超过上下文窗口:

  • 要么被截断

  • 要么请求失败


八、工程优化策略

在实际开发中,需要重点控制 Token 使用:

  1. 截断历史对话(Sliding Window)

  2. 压缩上下文(对历史进行总结)

  3. 控制输出长度(maxTokens)

  4. 限制 RAG 返回数量(topK)

更多推荐