Skip to content

全局搜索 🔎

数据集整体推理

基线RAG在处理需要聚合整个数据集信息来构建答案的查询时表现不佳。诸如"数据中的前5大主题是什么?"这类查询表现极差,因为基线RAG依赖于对数据集中语义相似文本内容的向量搜索。查询中没有任何内容可以引导它找到正确的信息。

然而,使用GraphRAG我们可以回答这类问题,因为LLM生成的知识图谱结构告诉我们整个数据集的结构(从而揭示主题)。这使得私有数据集能够被组织成预先总结好的有意义的语义聚类。使用我们的全局搜索方法,LLM在响应用户查询时利用这些聚类来总结这些主题。

方法论

---
title: 全局搜索数据流
---
%%{ init: { 'flowchart': { 'curve': 'step' } } }%%
flowchart LR

    uq[用户查询] --- .1
    ch1[对话历史] --- .1

    subgraph RIR
        direction TB
        ri1[评分中间<br/>响应1]~~~ri2[评分中间<br/>响应2] -."{1..N}".-rin[评分中间<br/>响应N]
    end

    .1--随机社区<br/>报告批次1-->RIR
    .1--随机社区<br/>报告批次2-->RIR---.2
    .1--随机社区<br/>报告批次N-->RIR

    .2--排序+<br/>过滤-->agr[聚合中间<br/>响应]-->res[最终响应]



     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: 描述期望响应类型和格式的自由文本(如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: 上下文数据的token预算
  • map_llm_params: 传递给map阶段LLM调用的额外参数字典(如temperature, max_tokens)
  • reduce_llm_params: 传递给reduce阶段LLM调用的额外参数字典(如temperature, max_tokens)
  • context_builder_params: 构建map阶段上下文窗口时传递给context_builder对象的额外参数字典
  • concurrent_coroutines: 控制map阶段的并行度
  • callbacks: 可选回调函数,可用于为LLM的完成流事件提供自定义事件处理程序

使用方法

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