回复限制和上下文限制不是一样的概念。
上下文(英文通常翻译为 context)指对话聊天内容前、后的内容信息。使用时,上下文长度限制了模型一次交互中能够处理的最大 token 数量,而上下文窗口限制了模型在生成每个新 token 时实际参考的前面内容的范围。
回复限制通常是指对模型生成回复内容的各种约束条件,例如让模型基于一个固定知识片段去回复内容,为避免模型产生幻觉而对提示词进行优化,将 Constraints 前置以更好地控制模型行为。例如在一些测试中,会出现模型在没有上下文时不回复,按照提供的知识准确回复但透露原文,知识片段大小影响回复,以及有错误知识片段时不回复等情况,这表明模型在处理用户输入时会进行一定程度的推理和验证,生成回复时会考虑多种因素,包括上下文的准确性、问题的合理性以及模型内部的约束机制等。
首先我们给出一些常见缩写和专业词汇的“人话”解释,它们十分基础,但理解他们至关重要。为了讨论更加聚焦,接下来的内容将主要围绕大语言模型为主进行展开(对于其他模态的大模型,我们暂且放放):LLM:Large language model的缩写,即大语言模型,前面百团大战中的各类大模型,说的都是大语言模型(极其应用)Prompt:中文译作提示词,就是我们输入给大模型的文本内容,可以理解为你和大模型说的话,下达的指令。提示词的质量好坏,会显著影响大模型回答的质量,很多时候如果你觉得大模型回答的太差了,AI味儿太浓了,很可能是你的提示词写的不够好,换言之,不是AI不行,而是你不行😌Token:就像人类有着不同的语言,大模型也有着自己的语言体系,如图9,我们发送文本给大模型时,大模型会先把文本转换为他自己的语言,并推理生成答案,而后再翻译成我们看得懂的语言输出给我们。正如人类不同语言都有最小的字词单元(汉语的字/词,英语的字母/单词),大模型语言体系中的最小单元就称为Token。这种人类语言到大模型语言的翻译规则,也是人类定义的,以中文为例,由于不同厂商的大模型采用了不同的文本切分方法,因此一个Token对应的汉字数量也会有所不同,但在通常情况下,1Token≈1-2个汉字。请注意,大模型的收费计算方法,以及对输入输出长度的限制,都是以token为单位计量的。上下文:英文通常翻译为context,指对话聊天内容前、后的内容信息。使用时,上下文长度和上下文窗口都会影响AI大模型回答的质量。上下文长度限制了模型一次交互中能够处理的最大token数量,而上下文窗口限制了模型在生成每个新token时实际参考的前面内容的范围(关于这一点,你需要看完3.2中关于GPT的讨论,方能更好理解)
往往在很多时候,我们需要让模型基于一个固定知识片段去回复内容,但有很多情况下在检索阶段会查找不出知识片段,此时模型则会进行基于内部知识进行答复,这样仍然会有产生幻觉的可能性。为了解决这个问题,我们对提示词做进一步优化,将Constraints前置,同时改进Example中描述整个知识检索的流程步骤。可能有人会问:为什么要这么做?原因很简单,GPT模型对提示词的注意力主要集中在头部和尾部,如果将约束前置,可以更好的控制模型行为。以下是经过调整的第三版提示词:首先,测试了Context标签没有上下文的情况,发现模型不会进行回复。接着,我们又开始测试一个正确问题&正确答案。发现模型完全按照我们的提供的知识进行了准确回复,但是似乎透露了原文,这与我们最初的要求不符。不过,会不会是知识片段过段而导致的?果然,当我们把知识片段增大时,回复内容就不会“全文背诵”了。最后,我们再测试一下“有知识片段,但问题和知识不相符”的情况:我在Context中输入了一个知识片段,然后提问“东京在哪里?”,发现依然不能获得回复,这个结果表明,模型在处理用户输入时,确实会进行一定程度的推理和验证过程。即使在上下文中存在知识片段但确是错误知识的情况下,模型仍然没有直接回答问题,这可能是因为模型在生成回答时,会考虑到多种因素,包括但不限于上下文的准确性、问题的合理性以及模型内部的约束机制。
往往在很多时候,我们需要让模型基于一个固定知识片段去回复内容,但有很多情况下在检索阶段会查找不出知识片段,此时模型则会进行基于内部知识进行答复,这样仍然会有产生幻觉的可能性。为了解决这个问题,我们对提示词做进一步优化,将Constraints前置,同时改进Example中描述整个知识检索的流程步骤。可能有人会问:为什么要这么做?原因很简单,GPT模型对提示词的注意力主要集中在头部和尾部,如果将约束前置,可以更好的控制模型行为。以下是经过调整的第三版提示词:首先,测试了Context标签没有上下文的情况,发现模型不会进行回复。接着,我们又开始测试一个正确问题&正确答案。发现模型完全按照我们的提供的知识进行了准确回复,但是似乎透露了原文,这与我们最初的要求不符。不过,会不会是知识片段过段而导致的?果然,当我们把知识片段增大时,回复内容就不会“全文背诵”了。最后,我们再测试一下“有知识片段,但问题和知识不相符”的情况:我在Context中输入了一个知识片段,然后提问“东京在哪里?”,发现依然不能获得回复,这个结果表明,模型在处理用户输入时,确实会进行一定程度的推理和验证过程。即使在上下文中存在知识片段但确是错误知识的情况下,模型仍然没有直接回答问题,这可能是因为模型在生成回答时,会考虑到多种因素,包括但不限于上下文的准确性、问题的合理性以及模型内部的约束机制。