内容提要
建立一个强大的问答助手需要动态地检索每个查询的最相关信息。对于有些问题,一个简短的片段就能提供完整的答案,而其他问题则需要整个文档的完整上下文(例如“给我这本书的摘要”)。对于属于后一类的问题,仅仅检索匹配的前k个块是不够的;你需要有意地检索整个文档文本,并将其输入到LLM的上下文窗口中。为了解决这个问题,我们很高兴发布LlamaCloud的文件级检索,这是一个独立的检索API,与我们现有的块级检索能力分开。这个检索接口为我们构建一个能够根据问题的属性动态路由问题到正确的检索接口的代理铺平了道路,从而使其能够更强大地处理不同的用户问题。文件级检索是一种检索整个文档内容的方法,例如整个SEC 10K文件或整个幻灯片。有两种主要的文件级检索方法:通过元数据选择文件,通过内容使用文档的内容确定最相关的文件。该接口允许您在检索模式之间无缝切换,并调整参数,如前k个结果,甚至在使用文件级检索时按元数据进行过滤。为了展示动态检索的能力,我们创建了一个Jupyter笔记本,指导您构建一个能够根据手头问题选择块级和文件级检索之间的代理。
延伸解读
块级检索的局限与文件级检索的适用场景
文章指出,对于需要完整文档上下文的问题(如“给我这本书的摘要”),仅靠top-k向量搜索检索匹配的块是不够的,必须有意检索整个文档文本并输入LLM。文件级检索正是为此设计,适用于需要整体理解的任务,例如总结SEC 10K文件或幻灯片。而简短片段能回答的问题则适合块级检索。
文件级检索的两种实现方式
LlamaCloud的文件级检索提供两种方法:通过元数据选择文件,即根据文件的元数据(如类型、日期)筛选;通过内容选择文件,即利用文档内容确定最相关的文件。接口允许在检索模式间无缝切换,并调整top-k结果等参数,甚至在使用文件级检索时按元数据过滤。
动态检索代理的构建与决策逻辑
文章通过Jupyter笔记本演示了如何构建一个代理,根据问题属性在块级和文件级检索间动态选择。代理分析输入问题,依据工具描述决定使用哪种检索。示例中,代理被简单告知:若问题偏向“高层次总结”则用文件级检索,否则用块级检索。即使提示基础,代理也能智能地为总结类问题选择文件级检索。
高级文件级检索与元数据过滤
笔记本还展示了更复杂的文件级检索设置:通过推断元数据过滤器并注入现有文件的少样本示例,让代理基于实际上传的文件而非固定提示,更好地决定使用文件级还是块级检索。这提升了代理的适应性和准确性,使其能更智能地处理不同查询。
Q&A
LlamaCloud的文件级检索API有什么特点?
LlamaCloud的文件级检索API允许检索整个文档内容,并支持通过元数据或内容选择文件。
如何在LlamaCloud中切换检索模式?
用户可以在检索模式之间无缝切换,并调整参数,如前k个结果和元数据过滤。
LlamaCloud的动态检索能力如何提升问答助手的性能?
动态检索能力使得问答助手能够根据问题的属性选择合适的检索接口,从而更有效地处理不同类型的问题。
Jupyter笔记本在LlamaCloud中有什么用途?
Jupyter笔记本指导用户构建一个能够根据问题选择块级和文件级检索的代理。
文件级检索和块级检索有什么区别?
文件级检索检索整个文档,而块级检索则只检索匹配的文档片段。
如何构建一个动态检索代理?
构建动态检索代理需要设置块级和文件级检索器,并根据问题选择合适的检索方法。