本地搜索 🔎
基于实体的推理
本地搜索方法结合了知识图谱中的结构化数据和输入文档中的非结构化数据,在查询时通过相关实体信息增强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调用的附加参数(例如,温度,最大令牌数)的字典context_builder_params
:传递给context_builder
对象以构建搜索提示上下文的附加参数的字典callbacks
:可选的回调函数,可用于为LLM的完成流事件提供自定义事件处理程序
如何使用
本地搜索场景的示例可以在以下笔记本中找到。