Skip to content

本地搜索 🔎

基于实体的推理

本地搜索方法结合了知识图谱中的结构化数据和输入文档中的非结构化数据,在查询时用相关实体信息增强LLM上下文。这种方法非常适合回答需要理解输入文档中提到的特定实体的问题(例如"洋甘菊有哪些治疗特性?")。

方法论

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

    uq[用户查询] ---.1
    ch1[对话<br/>历史]---.1

    .1--实体<br/>描述<br/>嵌入--> ee[提取的实体]

    ee[提取的实体] ---.2--实体-文本<br/>单元映射--> ctu[候选<br/>文本单元]--排序+<br/>过滤 -->ptu[优先<br/>文本单元]---.3
    .2--实体-报告<br/>映射--> ccr[候选<br/>社区报告]--排序+<br/>过滤 -->pcr[优先<br/>社区报告]---.3
    .2--实体-实体<br/>关系--> ce[候选<br/>实体]--排序+<br/>过滤 -->pe[优先<br/>实体]---.3
    .2--实体-实体<br/>关系--> cr[候选<br/>关系]--排序+<br/>过滤 -->pr[优先<br/>关系]---.3
    .2--实体-协变量<br/>映射--> cc[候选<br/>协变量]--排序+<br/>过滤 -->pc[优先<br/>协变量]---.3
    ch1 -->ch2[对话历史]---.3
    .3-->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 ee green
     class ctu,ccr,ce,cr,cc rose
     class ptu,pcr,pe,pr,pc,ch2 orange
     class res purple
     class .1,.2,.3 invisible
给定用户查询和可选的对话历史记录,本地搜索方法从知识图谱中识别出一组与用户输入语义相关的实体。这些实体作为访问知识图谱的入口点,能够提取更多相关细节,如连接的实体、关系、实体协变量和社区报告。此外,该方法还会从原始输入文档中提取与识别实体相关的文本片段。这些候选数据源经过优先级排序和过滤,以适应预定义大小的单个上下文窗口,用于生成对用户查询的响应。

配置

以下是LocalSearch类的关键参数:

  • llm: 用于生成响应的OpenAI模型对象
  • context_builder: 用于从知识模型对象集合准备上下文数据的上下文构建器对象
  • system_prompt: 用于生成搜索响应的提示模板。默认模板可在system_prompt找到
  • response_type: 描述期望响应类型和格式的自由文本(例如"多段落"、"多页报告")
  • llm_params: 传递给LLM调用的附加参数字典(如temperature、max_tokens)
  • context_builder_params: 构建搜索提示上下文时传递给context_builder对象的附加参数字典
  • callbacks: 可选的回调函数,可用于为LLM的完成流事件提供自定义事件处理程序

使用方法

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