跳到内容

全局搜索 🔎

全数据集推理

基线RAG难以处理需要聚合数据集中信息以构成答案的查询。例如,“数据中的前5个主题是什么?”之类的查询表现很差,因为基线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: 上下文构建器对象,用于从社区报告中准备上下文数据
  • map_system_prompt: 在map阶段使用的提示模板。默认模板可以在map_system_prompt找到
  • reduce_system_prompt: 在reduce阶段使用的提示模板,默认模板可以在reduce_system_prompt找到
  • response_type: 描述所需响应类型和格式的自由文本(例如,多个段落多页报告
  • 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: 上下文数据的token预算
  • 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的完成流事件提供自定义事件处理程序

如何使用

可以在以下笔记本中找到全局搜索场景的示例。