全局搜索 🔎
整个数据集推理
Baseline RAG 在需要聚合整个数据集的信息以形成答案的查询中表现不佳。 诸如“数据中排名前 5 的主题是什么?”之类的查询效果很差,因为 baseline RAG 依赖于数据集中语义相似的文本内容的向量搜索。 查询中没有任何内容可以将其指向正确的信息。
但是,使用 GraphRAG 我们可以回答此类问题,因为 LLM 生成的知识图的结构告诉我们整个数据集的结构(以及因此的主题)。 这允许将私有数据集组织成有意义的语义集群,并预先进行总结。 使用我们的全局搜索方法,LLM 使用这些集群在响应用户查询时总结这些主题。
方法论
---
title: Global Search Dataflow
---
%%{ init: { 'flowchart': { 'curve': 'step' } } }%%
flowchart LR
uq[User Query] --- .1
ch1[Conversation History] --- .1
subgraph RIR
direction TB
ri1[Rated Intermediate<br/>Response 1]~~~ri2[Rated Intermediate<br/>Response 2] -."{1..N}".-rin[Rated Intermediate<br/>Response N]
end
.1--Shuffled Community<br/>Report Batch 1-->RIR
.1--Shuffled Community<br/>Report Batch 2-->RIR---.2
.1--Shuffled Community<br/>Report Batch N-->RIR
.2--Ranking +<br/>Filtering-->agr[Aggregated Intermediate<br/>Responses]-->res[Response]
classDef green fill:#26B653,stroke:#333,stroke-width:2px,color:#fff;
classDef turquoise fill:#19CCD3,stroke:#333,stroke-width:2px,color:#fff;
classDef rose fill:#DD8694,stroke:#333,stroke-width:2px,color:#fff;
classDef orange fill:#F19914,stroke:#333,stroke-width:2px,color:#fff;
classDef purple fill:#B356CD,stroke:#333,stroke-width:2px,color:#fff;
classDef invisible fill:#fff,stroke:#fff,stroke-width:0px,color:#fff, width:0px;
class uq,ch1 turquoise;
class ri1,ri2,rin rose;
class agr orange;
class res purple;
class .1,.2 invisible;
给定用户查询,以及可选的对话历史,全局搜索方法使用来自图形社区层次结构的指定级别的 LLM 生成的社区报告集合作为上下文数据,以 map-reduce 的方式生成响应。 在map
步骤中,社区报告被分割成预定义大小的文本块。 然后,每个文本块用于生成包含一系列要点的中间响应,每个要点都附有数值评分,指示该要点的重要性。 在reduce
步骤中,聚合从中间响应中筛选出的一组最重要的要点,并将其用作上下文以生成最终响应。
全局搜索响应的质量可能会受到为获取社区报告而选择的社区层次结构级别的严重影响。 较低的层次结构级别及其详细的报告往往会产生更彻底的响应,但也可能由于报告数量的增加而增加生成最终响应所需的时间和 LLM 资源。
配置
以下是GlobalSearch 类的关键参数
llm
:用于生成响应的 OpenAI 模型对象context_builder
:用于从社区报告准备上下文数据的context builder对象map_system_prompt
:map
阶段中使用的提示模板。 默认模板可以在map_system_prompt中找到reduce_system_prompt
:reduce
阶段中使用的提示模板,默认模板可以在reduce_system_prompt中找到response_type
:描述所需响应类型和格式的自由格式文本(例如,Multiple Paragraphs
、Multi-Page Report
)allow_general_knowledge
:将此设置为 True 将在reduce_system_prompt
中包含其他说明,以提示 LLM 结合数据集之外的相关真实世界知识。 请注意,这可能会增加幻觉,但对于某些场景可能有用。 默认为 False *general_knowledge_inclusion_prompt
:如果启用allow_general_knowledge
,则添加到reduce_system_prompt
的指令。 默认指令可以在general_knowledge_instruction中找到max_data_tokens
:上下文数据的令牌预算map_llm_params
:要在map
阶段传递给 LLM 调用的附加参数字典(例如,温度、max_tokens)reduce_llm_params
:要在reduce
阶段传递给 LLM 调用的附加参数字典(例如,温度、max_tokens)context_builder_params
:在为map
阶段构建上下文窗口时,传递给context_builder
对象的附加参数字典。concurrent_coroutines
:控制map
阶段的并行度。callbacks
:可选的回调函数,可用于为 LLM 的完成流事件提供自定义事件处理程序
如何使用
可以在以下notebook中找到全局搜索场景的示例。