LLM 上下文 Token 的分配思路
最新更新:2024-02-21

LLM 上下文 Token 的分配思路

上下文是什么?

LLM(大语言模型)的上下文(Context)通常指的是模型在生成文本时,能够考虑的前文信息范围。

对于语言模型来说,上下文就像它的「记忆」,它能够根据之前看到或生成的内容来决定下一步的行动。上下文可以是单个句子、段落、文档,甚至是多个文档的集合,这取决于模型的架构和设计。

上下文对于语言模型来说至关重要,因为它帮助模型理解当前的任务,并基于之前的信息生成连贯、相关的回答。例如,在一个对话中,上下文可能包括对话到目前为止的所有交流,这样模型就能生成符合对话主题和情感的回答。

然而,由于计算资源和内存的限制,语言模型通常有一个固定的上下文长度。例如,有些模型可能只能处理大约 2K Tokens 的上下文。当上下文长度超过这个限制时,模型可能就无法考虑到超出部分的信息,这可能导致生成的内容不够准确或相关。

1 K = 1024 一个 Token 可以是单词、标点符号或任何其他语言单元。

例如,我们所熟知的 OpenAI 推出的 ChatGPT 的gpt-3.5-turbo的上下文窗口为 16K Tokens,gpt-4-turbo的上下文窗口则达到了 128K Tokens。由 Anthropic 推出的claude-2.1的上下文窗口则是达到了 200K Tokens。由中国公司「智谱 AI」研发的glm-4的上下文窗口也达到了 128K Tokens。

一言以蔽之,LLM 的上下文窗口长度,就是它能「单次处理的信息量」。

和人类一样,社会上层人士(如教授、科学家或企业家等)有能力一次处理海量信息,从中处理并提炼出有价值的信息出来,而一个没有接受过教育的人则做不到。

也正因为如此,LLM 的上下文长度,是衡量 LLM 能力的重要指标之一。

配置思路

既然我们知道了上下文是 LLM 能「单次处理的信息量」,那么如何为这个有限的信息空间分配资源,就成为了 Bot 设计的关键。

GPTBots 将 LLM 上下文分为了几个类别,这几个类别共同相加,构成了完整的上下文。我们可以为每个部分设置一个「占比」(最小值为 5%),作为该部分内容在上下文中占据的篇幅长度。

注意,若某类别实际的长度,超过了我们为该类别分配的长度,则系统会截断超出的部分。例如,您为 Bot 设置了长度为 1000 Tokens 的身份提示,但您仅为身份提示部分分配了 800 Tokens,则系统只会取您设置的身份提示的前 800 Tokens 部分作为身份提示。

在进行分配时,每个类别,分别需要考虑以下细节。

身份提示

Bot 配置内设定的身份信息。

在配置时,需要考虑:

  • 如果您为 Bot 设置的身份提示比较长,请注意为它分配足够的空间。刚刚超过身份提示的长度就够了。
  • 身份提示非常重要,值得您为它撰写多一些内容。

知识数据

基于用户输入内容,到 Bot 知识库内执行向量检索后,召回的知识数据。当 Bot 没有知识库内容,或检索不到结果时,该部分为空。

在配置时,需要考虑:

  • 若 Bot 不涉及知识库查询,则可将该部分调整至最小值,为其他部分腾出空间。
  • 若 Bot 对知识库查询的结果非常依赖(例如文档问答等场景),您需要基于您在「知识库」部分设置的最大知识召回数、单个切片的长度等参数,以及 Bot 的实际应用情况,来判断需要为该部分分配多大的占比。

短期记忆

最近几轮对话的信息。若该项处于关闭状态,或对话是新创建的,该部分为空。

在配置时,需要考虑:

  • 若 Bot 的场景不涉及上下文,则可以关闭它,为其他部分腾出空间。

长期记忆

对话的完整信息。若该项处于关闭状态,或对话是新创建的,该部分为空。

在配置时,需要考虑:

  • 若 Bot 的场景不涉及需要使用到从对话开始到目前为止的所有上下文内容,则可以关闭它,为其他部分腾出空间。

Tool

调用 Bot 内的 Tool 后,Tool 的返回结果。若 Bot 无 Tool,或对话没有调用 Tool,这部分为空。

在配置时,需要考虑:

  • 若 Bot 的场景不涉及使用 Tool,则可以不为 Bot 添加 Tool,为其他部分腾出空间。
  • 若 Bot 需要使用 Tool,则您需要考虑 Tool 的数量以及它们各自调用信息及返回信息的可能最大长度,以此为依据,考虑该部分的比例。因为,有些 Tool 的调用信息和返回信息很短,有些则可能很长。

用户输入

用户与 Bot 对话时的输入内容。

在配置时,需要考虑:

  • Bot 的功能和定位,决定了 Bot 用户可能会输入多长的内容作为输入。需要以此作为依据,考虑该部分的比例。

LLM 输出

Bot 以上所有部分整合后作为输入,提交给 LLM 后,LLM 的返回结果。

在配置时,需要考虑:

  • Bot 的功能和定位,决定了 Bot 最终可能会输出多长的内容。需要以此作为依据,考虑该部分的比例。

场景举例

综上所述,您对于 Bot 的功能定位越清晰,对用户场景的理解越深刻,越是能够合理地分配上下文。

为了帮助您更进一步的理解上下文分配的思路,我们在此列举几个例子。

企业问答

以简单的企业制度问答为例,一般来说,涉及到的场景都是单轮对话,例如:

问:公司为员工提供了多少天年假? 答:不同的员工年假数都不同,例如经理级别,每年年假为 10 天,具体信息请参考《公司福利》文件。 问:出差产生的费用如何报销? 答:您可以到公司的 OA 系统提交报销申请,并按系统要求提供对应的信息即可。
          问:公司为员工提供了多少天年假?
答:不同的员工年假数都不同,例如经理级别,每年年假为 10 天,具体信息请参考《公司福利》文件。
问:出差产生的费用如何报销?
答:您可以到公司的 OA 系统提交报销申请,并按系统要求提供对应的信息即可。

        
此代码块在浮窗中显示

这些回答的来源是 Bot 知识库,没有使用到 Tool。提问和回答都很简短。每轮问答都是各自独立的,依赖上下文理解。

因此我们可以这样考虑配置策略:

  • 身份提示:5%
  • 知识数据:65%
  • 短期记忆:0%
  • 长期记忆:0%
  • Tool:0%
  • 用户输入:10%
  • LLM 输出:20%

在线客服

以一个快递查询的咨询场景为例:

问:我的快递发了吗? 答:您好,请问快递号是多少? 问:ABCD123456 答:您好,单号 ABCD123456 的包裹已经发出了。 问:大概多久能到? 答:大概 2 天后,您就可以收到包裹了。
          问:我的快递发了吗?
答:您好,请问快递号是多少?
问:ABCD123456
答:您好,单号 ABCD123456 的包裹已经发出了。
问:大概多久能到?
答:大概 2 天后,您就可以收到包裹了。

        
此代码块在浮窗中显示

在这个场景中,回答的来源是通过 Tool 调用获取的。提问和回答都很简短。问答依赖上下文理解,但可能不需要依赖太长的上下文。

因此我们可以这样考虑配置策略:

  • 身份提示:10%
  • 知识数据:5%
  • 短期记忆:25%
  • 长期记忆:0%
  • Tool:30%
  • 用户输入:10%
  • LLM 输出:20%

绘画创作

以一个调用DALLE-3来执行绘画的工具为例,用户输入画面描述信息,Bot 先将用户输入的描述优化为更加精致和细致的「文生图」提示词,然后利用该提示词调用DALLE-3进行绘画,由DALLE-3返回一张图片。例如:

问:raining, logo, minimalist, flat style, ratio 1:1 答:To refine the user's narrative, we could interpret it as follows: "A minimalist, flat-style logo that depicts the concept of rain, designed in a 1:1 ratio." Now, let's use this refined narrative to guide the 'DALL E 3 by GPTBots' plugin in image production.Here is the image based on your request: a minimalist, flat-style logo that visually represents the concept of rain. The design is in a square format, following a 1:1 ratio, with clean lines, simplified shapes, and minimal color usage. The aesthetic is modern and effectively communicates the rain theme through its visual elements. ![image](https://xxxxx/xxx.png)
          问:raining, logo, minimalist, flat style, ratio 1:1
答:To refine the user's narrative, we could interpret it as follows: "A minimalist, flat-style logo that depicts the concept of rain, designed in a 1:1 ratio."

Now, let's use this refined narrative to guide the 'DALL E 3 by GPTBots' plugin in image production.Here is the image based on your request: a minimalist, flat-style logo that visually represents the concept of rain. The design is in a square format, following a 1:1 ratio, with clean lines, simplified shapes, and minimal color usage. The aesthetic is modern and effectively communicates the rain theme through its visual elements.

![image](https://xxxxx/xxx.png)

        
此代码块在浮窗中显示

在这个场景中,绘画生成需要用到 Tool,提问可能很短,也可能稍微长一些(因为某些高级用户对画面的描述可能会非常细致),回答会比较短(只会有一些文字回答以及生成的图片的 URL)。这个行为不依赖上下文理解,每次提问都是独立任务。

因此我们可以这样考虑配置策略:

  • 身份提示:5%
  • 知识数据:5%
  • 短期记忆:0%
  • 长期记忆:0%
  • Tool:30%
  • 用户输入:40%
  • LLM 输出:20%

文章创作

以一个简单的营销文案创作场景为例:

问:你是一名文案撰稿人,请根据以下要求撰写营销文案: 文案主题:传承与创新:桂花手表的故事 文案内容:结合桂花手表的历史背景和现代设计,撰写引人入胜的故事 答:传承与创新:桂花手表的故事 在时间的长河中,桂花手表以其独特的韵味和精湛的工艺,讲述着一个关于传承与创新的故事。这个故事,从历史的长河中缓缓流淌而来,又向着未来延伸。 桂花手表的历史,可以追溯到上世纪的某个金秋。那时,桂花盛开,空气中弥漫着淡淡的清香。我国一位钟表大师,在一次偶然的机会下,灵感迸发,决定以桂花为灵感,设计一款独特的手表。于是,桂花手表应运而生,成为我国钟表制造业的瑰宝。 ……
          问:你是一名文案撰稿人,请根据以下要求撰写营销文案:
文案主题:传承与创新:桂花手表的故事
文案内容:结合桂花手表的历史背景和现代设计,撰写引人入胜的故事
答:传承与创新:桂花手表的故事
在时间的长河中,桂花手表以其独特的韵味和精湛的工艺,讲述着一个关于传承与创新的故事。这个故事,从历史的长河中缓缓流淌而来,又向着未来延伸。
桂花手表的历史,可以追溯到上世纪的某个金秋。那时,桂花盛开,空气中弥漫着淡淡的清香。我国一位钟表大师,在一次偶然的机会下,灵感迸发,决定以桂花为灵感,设计一款独特的手表。于是,桂花手表应运而生,成为我国钟表制造业的瑰宝。
……

        
此代码块在浮窗中显示

在这个场景中,没有使用到知识库和 Tool,提问可长可短(取决于对文章生成的要求的多少),回答会比较长(因为是文章撰写)。这个行为不依赖上下文理解,每次提问都是独立任务。

因此我们可以这样考虑配置策略:

  • 身份提示:5%
  • 知识数据:5%
  • 短期记忆:0%
  • 长期记忆:0%
  • Tool:0%
  • 用户输入:30%
  • LLM 输出:60%