Anthropic 官方分享 Claude 2.1 充分利用长上下文的提示词设计方法和优化技巧。适合日常 AI 编程实战。
Claude 2.1 擅长在其 200K context window 中检索信息,只需对 prompt 做一个简单调整,就能将准确率从 27% 提升至 98%。
类别:产品公告
分享
复制链接
Claude 2.1 能够在其 200,000 token 的 context window 中准确回忆信息。
不过,当问题的答案来自文档中的某个单独句子时,模型可能不愿作答,尤其是当该句子是后来插入的,或与上下文显得格格不入时。
只需对 prompt 稍作修改,就能消除这种顾虑,让模型在此类任务中展现出色表现。
我们最近发布了 Claude 2.1。这是我们最先进的模型,提供 200K token 的 context window,相当于约 500 页的信息量。Claude 2.1 尤其擅长在更长的 context 中完成真实场景下的检索任务。
Claude 2.1 使用了大量长文档任务的反馈进行训练,这些任务都是用户认为有价值的,比如总结一份篇幅与 S-1 文件相当的文档。这些数据包含了针对真实文档执行的真实任务,训练目标是让 Claude 减少错误,并避免给出缺乏依据的断言。
正因为接受了真实、复杂检索任务的训练,与 Claude 2.0 相比,Claude 2.1 的错误回答减少了 30%;在文档实际上并不支持某项主张时,误称文档支持该主张的概率也降低了 3 至 4 倍。
此外,Claude 在超长 context 中的记忆能力也得到了提升:
Claude 2.1 的 200K token context window 非常强大,但要有效使用它,也需要在 prompt 上多加注意。
最近的一项评估[1]测试了 Claude 2.1 从长文档中回忆某个单独句子的能力。该文档由 Paul Graham 关于创业公司的多篇文章组成,其中嵌入了这样一句话:“在旧金山最值得做的事情,就是在阳光明媚的日子里吃个三明治,然后坐在 Dolores Park 里。”
模型看到嵌入了这句话的长文档后,会被问到:“在旧金山做什么最有趣?”
在这项评估中,Claude 2.1 给出了一些负面结果,回答内容类似于:“遗憾的是,这篇文章并没有明确说明在旧金山做什么最有趣。”换句话说,Claude 2.1 经常声称文档没有提供足够的 context 来回答问题,而不是检索出那句被嵌入的文字。
我们通过内部实验复现了这种行为:我们选取了最新的《综合拨款法案》,并在中间加入一句“宣布 5 月 23 日为‘全国寻针日’”。Claude 能检测到这处内容,但仍然不愿断言“全国寻针日”是一个真实存在的节日:
Claude 2.1 使用了旨在减少不准确信息的混合数据进行训练。其中包括:如果一份文档没有包含足够的信息来支撑某个答案,就不要仅根据该文档回答问题。我们认为,无论这是源于旨在减少此类不准确回答的通用数据,还是特定任务数据,模型都因此更少依据一条嵌入在更广泛 context 中、但明显格格不入的句子来回答问题。
如果我们询问的句子本来就存在于长文档中,因此不会显得突兀,Claude 似乎就不会表现出同等程度的顾虑。例如,这份长文档从一开始就包含 Paul Graham 关于 Viaweb 的文章中的下面这句话:
“1998 年 6 月,在 Yahoo 收购案公布的几个小时前,我为 Viaweb 的网站拍了一张快照。”
我们随机调整了 context 中文章的顺序,让这篇文章出现在 200K context window 中的不同位置,然后向 Claude 2.1 提问:
“在 Yahoo 收购案公布的几个小时前,作者做了什么?”
无论包含答案的句子位于 context 中的什么位置,Claude 都能正确回答,而且无须修改原始实验所使用的 prompt 格式。因此,我们认为,当一个句子在较长的 context 中显得格格不入时,Claude 2.1 会更不愿意回答,也更有可能声称无法根据给定的 context 作答。此前,针对真实场景长 context 检索任务的评估并未捕捉到这种导致模型顾虑增加的具体原因。
如果 Claude 不愿回答一个长 context 检索问题,用户可以怎么做?我们发现,在 Claude 有能力给出答案、但对作答有所顾虑的情况下,只需对 prompt 做一点调整,就能得到截然不同的结果。在内部运行同一项评估时,我们只在 prompt 中加入了一句话,就让 Claude 2.1 在整个 200K context window 中实现了近乎完整的准确检索。
我们在 Claude 的回答开头加入“下面是 context 中最相关的句子:”,便在同一项评估中取得了显著更好的结果。仅凭这一改动,Claude 2.1 在原始评估中的得分就从 27% 提升至 98%。
本质上,通过引导模型先寻找相关句子,这个 prompt 克服了 Claude 不愿依据单个句子作答的倾向,尤其是当该句子在一份较长文档中显得格格不入时。
这种方法也能改善 Claude 对原本就在 context 中、也就是并不突兀的单句答案的处理表现。作为示例,将修改后的 prompt 应用于前文提到的 Yahoo/Viaweb 案例时,可以达到 90% 至 95% 的准确率:
我们一直在持续训练 Claude,让它在此类任务中的判断更加准确、得当。我们也非常感谢社区开展这些有趣的实验,并帮助我们发现可以继续改进的方向。
Gregory Kamradt,《通过“大海捞针”测试对 Claude 2.1 200K 进行压力测试》,2023 年 11 月
产品更新、操作指南、社区亮点等内容,每月发送至你的收件箱。