最近开始研究Agent记忆这块,现在的大模型都是有指定的窗口限制,比如gpt3.5 8k token 的窗口。理论上在这个窗口内的聊天信息,gpt都应该了如指掌,现在gpt4-128k,那么在这128k内它真的是什么都记住了?基于此才有这篇文章的存在。
在 github上看到这个项目 https://github.com/gkamradt/LLMTest_NeedleInAHaystack 做了这样的一个测试。
将 haystack放在不同的位置就是用来测试模型的记忆能力,比如放在最开始和最后LLM输出的结果就是不一样,那么就验证了首尾存在着差异。
目前代码只支持OpenAI和Anthropic分析的代码。
如果运行并且 save_results = True
,那么这个脚本将会生成一个 result/
目录,并填充评估信息。由于可能存在并发请求,每个新的测试将会保存为多个文件。
我已经将原始测试结果放在 /original_results
中。由于我升级了脚本,所以数据格式可能与您的脚本结果不匹配。
关键参数:
haystack_dir
– 包含要作为背景上下文加载的文本文件的目录。仅支持文本文件。model_provider
– ‘OpenAI’ 或 ‘Anthropic’model_name
– 您想要测试的模型名称。应与需要传递给API的确切值匹配。例如: gpt-4-1106-preview
其他参数:
context_lengths
– 一组自定义的上下文长度。如果设置了,将覆盖 context_lengths_min
、最大值和间隔的设定值。
document_depth_percent_min
、最大值和间隔的设定值。openai_api_key
– 必须提供。用于评估的GPT-4。可以在创建对象时传递,也可以作为环境变量传递。LLMNeedleInHaystackVisualization.ipynb
包含了生成数据透视表可视化的代码。然后将数据透视表转移到 Google 幻灯片中进行自定义注释和格式设置。请查看 Google 幻灯片版本。在此处查看创建此可视化的概述。
在64k以内可以确定全部记得所有的内容,在这之后其实都会存在部分位置无法记住的情况。