标记 (tokens) 相关问题 - easydu2002/chat_gpt_oicq GitHub Wiki

标记 (tokens)

OpenAI的模型将文本分解为 标记 的更小单元来处理文本,同时也是收费的一个标准。标记可以是单词、单词块或单个字符。可以通过官方的 tokenizer 来了解标记的分割方式。如果你使用Playground,下面也有一行小字标注了标记数量。

1.1 token分割规则

英语

I have an orange cat named Butterscotch.

这句话将会本分解成 I have an orange cat named But ters cot ch . (总计占用11个标记)

以上,类似cat这种常见的单词即为一个标记,而不太常见的单词就被分解为多个标记,比如 Butterscotch

中文

一个汉字通常需要占用2个标记,少量非常常见的汉字(例如人)占用1个标记,罕见的汉字甚至可以占用4个标记。中文标点通常也比英文标点更占用标记,代码中已经对标点做了优化,实际发送消息时可以忽略这些问题。

其他字符

只要是Unicode的内容,AI都可以分析。例如Unicode表情也可以作为输入或者输出。(甚至你可以教AI用表情包说话 什么抽象AI

1.2 标记和参数的关系

提问+回答的标记总数不能超过API参数中的max_tokens。提问标记长度小于max_tokens时,AI会尝试使用剩余的标记额度(man_tokens减去你提问占用的标记)来回答你的问题。如果实在不行,问题会被截断。如果你的问题标记长度已经大于max_tokens,API会直接报错。

1.3 节约标记的一些技巧

语文功底

发挥你的语文功底,长话短说:

  • 缩词为字(“应该”换成“应”)
  • 省去非必须的成分(“接下来,你将扮演一只猫娘”中“接下来”和“将”的时间词与时间副词并不影响请求的含义;“一只”的量词也可有可无。直接主谓宾“你扮演猫娘”虽然在对话上很奇怪,但作为AI命令非常合适)
  • 短句变长句(“你扮演猫娘,名字是xxx”变为“你扮演名字是xxx的猫娘”。虽然少了个标点多个了字,看上去没省,但是经测试前者token是24,后者是21。)
  • 多用抽象词汇来进行简洁精确的指代。(“回答应该密切围绕当前的话题,像两个人交流对话那样。”改为“回答应情景式,对话式。”)

英语魔法

你可以用英语作为提示词,这样可以显著节约标记。操作的时候,你要在提示的最后加入:the following conversation should be in Chinese。另外,示范的一问一答中,AI的回答必须是中文,否则这对于AI的用于是一个糟糕的示范,会有很浓的翻译腔。

这种提示词确实很省token,但是AI偶尔会对某些特定的的单词产生混淆(例如偶尔会称自己为"猫女"而非"猫娘"),这类翻译的误差则较为难以消除。

⚠️ **GitHub.com Fallback** ⚠️