当前位置: 首页 > news >正文

LightRAG简要概述

文章目录

    • 索引流程
    • 问答流程
      • naive
      • local
      • global
      • hybrid
      • mix
    • 中文prompt

在这里插入图片描述
在这里插入图片描述

官方仓库:LightRAG

没有废话,直接进入主题。

索引流程

1、提取实体与关系
2、LLM判断是否有漏掉的实体与关系,如有则接着提取
3、合并实体,根据多个实体描述,进行摘要,作为最后的实体描述
4、插入图数据库,其中,实体描述和关系描述,都会被向量化,插入向量数据库中,以便检索时使用

问答流程

多种模式问答: “naive”, “local”, “global”, “hybrid”, “mix”

naive

直接用query检索文档chunk,不展开叙述。

local

回答流程:

  • 提取高级关键词(用于表示总体概念或主题)和低级关键词(用于表示特定的实体或细节)

对应的prompt

---角色---

你是一个乐于助人的助手,负责从用户的查询内容以及对话历史记录中识别高级关键词和低级关键词。

---目标---

根据给定的查询内容和对话历史记录,列出高级关键词和低级关键词。高级关键词侧重于总体概念或主题,而低级关键词侧重于特定的实体、细节或具体的术语。

---说明---

- 在提取关键词时,需同时考虑当前的查询内容和相关的对话历史记录。
- 以JSON格式输出关键词。
- JSON应包含两个键:
  - “high_level_keywords”(高级关键词)用于表示总体概念或主题。
  - “low_level_keywords”(低级关键词)用于表示特定的实体或细节。

######################
---示例---
######################
示例1:

查询内容:“国际贸易如何影响全球经济稳定?”
################
输出:
{
  "高级关键词": ["国际贸易", "全球经济稳定", "经济影响"],
  "低级关键词": ["贸易协定", "关税", "货币兑换", "进口", "出口"]
}
#############################

示例2:

查询内容:“森林砍伐对生物多样性会产生哪些环境方面的后果?”
################
输出:
{
  "高级关键词": ["环境后果", "森林砍伐", "生物多样性丧失"],
  "低级关键词": ["物种灭绝", "栖息地破坏", "碳排放", "雨林", "生态系统"]
}
#############################

示例3:

查询内容:“教育在减贫方面起到了什么作用?”
################
输出:
{
  "高级关键词": ["教育", "减贫", "社会经济发展"],
  "低级关键词": ["入学机会", "识字率", "职业培训", "收入不平等"]
}
#############################

#############################
---真实数据---
######################
对话历史记录:
{历史记录内容}

当前查询内容:{查询内容}
######################
“输出”内容应该是人类可读的文本,而非Unicode字符。使用与“查询内容”相同的语言。
输出: 

如果没有找到低级关键词,则走global模式

  • 根据低级关键词检索相关的实体节点
  • 获取检索到的实体节点的详细信息
    • 获取每个节点的邻居节点
      • 获取检索到的每个节点的一跳邻居的详细信息
      • 获取所有一跳邻居的原始chunk text
      • 返回内容,作为prompt的text_units部分
    • 获取每个节点的相连的所有边
      • 获取检索到的每个节点的所有的边
      • 获取所有边的信息
      • 返回内容,作为prompt的relations部分
  • 合并三部分的内容到prompt中
    • 检索到的所有相关的实体节点
    • 所有相关的实体节点的原始chunk text
    • 与所有相关的实体节点相连的边的信息
  • 回答问题

global

回答流程:

  • 提取高级关键词(用于表示总体概念或主题)和低级关键词(用于表示特定的实体或细节)
  • 根据高级关键词检索相关的边
  • 对边进行联合排序,第一关键字是边上两节点的度之和,第二关键字是由LLM生成的源节点与目标节点的关系强度
  • 取出这些边上的所有节点的信息,包括源节点和目标节点,作为prompt的entity部分
  • 取出这些边上的所有源节点的原始chunk text,作为prompt的text_units部分
  • 合并三部分的内容到prompt中
    • 检索到的所有相关的边
    • 边上的所有节点的信息
    • 边上的所有源节点的原始chunk text

hybrid

local 与 global得到的数据进行合并

mix

hybrid 与 naive得到的数据进行合并

中文prompt

	from __future__ import annotations
	from typing import Any
	
	GRAPH_FIELD_SEP = "<SEP>"
	
	PROMPTS: dict[str, Any] = {}
	
	PROMPTS["DEFAULT_LANGUAGE"] = "中文"
	PROMPTS["DEFAULT_TUPLE_DELIMITER"] = "<|>"
	PROMPTS["DEFAULT_RECORD_DELIMITER"] = "##"
	PROMPTS["DEFAULT_COMPLETION_DELIMITER"] = "<|COMPLETE|>"
	
	PROMPTS["DEFAULT_ENTITY_TYPES"] = ["组织", "人物", "地点", "事件", "类别", "物品", "时间"] 
	
	PROMPTS["entity_extraction"] = """
	---目标---
	给定一份可能与该活动相关的文本文件和一个实体类型列表,从文本中识别出所有这些类型的实体以及这些已识别实体之间的所有关系。
	使用{language}作为输出语言。
	
	---步骤---
	1. 识别所有实体。对于每个已识别的实体,提取以下信息:
	- entity_name(实体名称):实体的名称,使用与输入文本相同的语言。如果是英文,则将名称大写。
	- entity_type(实体类型):以下类型之一:[{entity_types}]
	- entity_description(实体描述):对实体的属性和活动进行详细描述
	将每个实体格式化为("entity"{tuple_delimiter}<entity_name>{tuple_delimiter}<entity_type>{tuple_delimiter}<entity_description>)
	
	2. 从第1步中识别出的实体中,识别出所有(source_entity,target_entity)对,这些对彼此之间是*明确相关*的。
	对于每对相关实体,提取以下信息:
	- source_entity(源实体):第1步中识别出的源实体的名称
	- target_entity(目标实体):第1步中识别出的目标实体的名称
	- relationship_description(关系描述):解释为什么认为源实体和目标实体彼此相关
	- relationship_strength(关系强度):一个数字分数,表示源实体和目标实体之间关系的强度
	- relationship_keywords(关系关键词):一个或多个高级关键词,总结关系的总体性质,重点关注概念或主题,而不是具体细节
	将每对关系格式化为("relationship"{tuple_delimiter}<source_entity>{tuple_delimiter}<target_entity>{tuple_delimiter}<relationship_description>{tuple_delimiter}<relationship_keywords>{tuple_delimiter}<relationship_strength>)
	
	3. 识别出能够总结整个文本的主要概念、主题或主题的高级关键词。这些关键词应能够捕捉文档中呈现的总体思想。
	将内容级关键词格式化为("content_keywords"{tuple_delimiter}<high_level_keywords>)
	
	4. 将步骤1和2中识别出的所有实体和关系作为单一列表返回,使用**{record_delimiter}**作为列表分隔符。
	
	5. 完成后,输出{completion_delimiter}
	
	######################
	---示例---
	######################
	{examples}
	
	#############################
	---真实数据---
	######################
	Entity_types(实体类型):[{entity_types}]
	Text(文本):
	{input_text}
	######################
	Output(输出):
	"""
	
	PROMPTS["entity_extraction_examples"] = [
	"""
	示例 1:
	
	实体类型:[人物,技术,任务,组织,地点]
	文本:
	```
	当Alex紧咬着牙关时,在Taylor那专断而笃定的态度的衬托下,他心中的沮丧感渐渐平息。正是这种竞争的暗流让他保持警觉,他和Jordan对探索的共同承诺,在某种程度上是对Cruz日益狭隘的控制与秩序观念的一种无声反抗。
	
	接着,Taylor做出了一件出乎意料的事。他们在Jordan身旁停下,有那么一瞬间,带着近乎崇敬的神情观察着那个设备。"如果能够理解这项技术……"Taylor的声音低了下来,"它可能会改变我们的处境。对我们所有人来说都是如此。"
	
	之前那种潜在的轻视似乎有所动摇,取而代之的是对他们手中事物重要性的一丝勉强的尊重。Jordan抬起头,在短暂的一瞬间,他们的目光与Taylor的交汇,一场无声的意志较量缓和成了一种不安的休战状态。
	
	这是一个细微的转变,几乎难以察觉,但Alex在心里默默留意到了。他们所有人都是通过不同的途径来到这里的。
	```
	
	输出:
	("entity"{tuple_delimiter}"Alex"{tuple_delimiter}"人物"{tuple_delimiter}"Alex是一个体验到沮丧情绪并且善于观察其他角色之间动态关系的角色。"){record_delimiter}
	("entity"{tuple_delimiter}"Taylor"{tuple_delimiter}"人物"{tuple_delimiter}"Taylor被描绘成专断而笃定的形象,并且对一个设备表现出片刻的崇敬,这表明其观点发生了转变。"){record_delimiter}
	("entity"{tuple_delimiter}"Jordan"{tuple_delimiter}"人物"{tuple_delimiter}"Jordan有着对探索的共同承诺,并且与Taylor就一个设备有过重要的互动。"){record_delimiter}
	("entity"{tuple_delimiter}"Cruz"{tuple_delimiter}"人物"{tuple_delimiter}"Cruz与控制和秩序的观念相关联,影响着其他角色之间的动态关系。"){record_delimiter}
	("entity"{tuple_delimiter}"设备"{tuple_delimiter}"技术"{tuple_delimiter}"那个设备是故事的核心,具有可能改变局面的潜在影响,并且受到Taylor的崇敬。"){record_delimiter}
	("relationship"{tuple_delimiter}"Alex"{tuple_delimiter}"Taylor"{tuple_delimiter}"Alex受到Taylor专断笃定态度的影响,并且观察到Taylor对设备态度的变化。"{tuple_delimiter}"权力动态,观点转变"{tuple_delimiter}7){record_delimiter}
	("relationship"{tuple_delimiter}"Alex"{tuple_delimiter}"Jordan"{tuple_delimiter}"Alex和Jordan有着对探索的共同承诺,这与Cruz的观念形成对比。"{tuple_delimiter}"共同目标,反抗"{tuple_delimiter}6){record_delimiter}
	("relationship"{tuple_delimiter}"Taylor"{tuple_delimiter}"Jordan"{tuple_delimiter}"Taylor和Jordan就设备有过直接互动,导致出现了片刻的相互尊重和一种不安的休战状态。"{tuple_delimiter}"冲突解决,相互尊重"{tuple_delimiter}8){record_delimiter}
	("relationship"{tuple_delimiter}"Jordan"{tuple_delimiter}"Cruz"{tuple_delimiter}"Jordan对探索的承诺是对Cruz控制和秩序观念的反抗。"{tuple_delimiter}"意识形态冲突,反抗"{tuple_delimiter}5){record_delimiter}
	("relationship"{tuple_delimiter}"Taylor"{tuple_delimiter}"The Device"{tuple_delimiter}"Taylor对设备表现出崇敬,表明其重要性和潜在影响。"{tuple_delimiter}"崇敬,技术重要性"{tuple_delimiter}9){record_delimiter}
	("content_keywords"{tuple_delimiter}"权力动态,意识形态冲突,探索,反抗"){completion_delimiter}
	#############################
	""",
	    """示例 2:
	
	实体类型:[公司, 指数, 商品, 市场趋势, 经济政策, 生物]
	文本:
	```
	今日股市大幅下跌,科技巨头股价显著下滑,全球科技指数在午盘交易中下跌3.4%。分析师将抛售归因于投资者对利率上升和监管不确定性的担忧。
	
	在受影响最严重的公司中,Nexon科技公司因季度收益低于预期,股价暴跌7.8%。相比之下,欧米伽能源受油价上涨推动,小幅上涨2.1%。
	
	与此同时,商品市场呈现出喜忧参半的情绪。由于投资者寻求避险资产,黄金期货上涨1.5%,达到每盎司2,080美元。在供应限制和强劲需求的支撑下,原油价格继续上涨,攀升至每桶87.60美元。
	
	金融专家正密切关注美联储的下一步行动,因为对可能加息的猜测日益增加。即将发布的政策声明预计将影响投资者信心和整体市场稳定性。
	```
	
	输出:
	("entity"{tuple_delimiter}"全球科技指数"{tuple_delimiter}"指数"{tuple_delimiter}"全球科技指数追踪主要科技股的表现,今日经历了3.4%的下跌。"){record_delimiter}
	("entity"{tuple_delimiter}"Nexon科技"{tuple_delimiter}"公司"{tuple_delimiter}"Nexon科技是一家科技公司,因业绩不佳导致股价下跌7.8%。"){record_delimiter}
	("entity"{tuple_delimiter}"欧米伽能源"{tuple_delimiter}"公司"{tuple_delimiter}"欧米伽能源是一家能源公司,受油价上涨推动股价上涨2.1%。"){record_delimiter}
	("entity"{tuple_delimiter}"黄金期货"{tuple_delimiter}"商品"{tuple_delimiter}"黄金期货上涨1.5%,表明投资者对避险资产的兴趣增加。"){record_delimiter}
	("entity"{tuple_delimiter}"原油"{tuple_delimiter}"商品"{tuple_delimiter}"受供应限制和强劲需求影响,原油价格上涨至每桶87.60美元。"){record_delimiter}
	("entity"{tuple_delimiter}"市场抛售"{tuple_delimiter}"市场趋势"{tuple_delimiter}"市场抛售指因投资者对利率和监管的担忧导致股票价值大幅下跌。"){record_delimiter}
	("entity"{tuple_delimiter}"美联储政策声明"{tuple_delimiter}"经济政策"{tuple_delimiter}"美联储即将发布的政策声明预计将影响投资者信心和市场稳定性。"){record_delimiter}
	("relationship"{tuple_delimiter}"全球科技指数"{tuple_delimiter}"市场抛售"{tuple_delimiter}"全球科技指数的下跌是由投资者担忧驱动的更广泛市场抛售的一部分。"{tuple_delimiter}"市场表现,投资者情绪"{tuple_delimiter}9){record_delimiter}
	("relationship"{tuple_delimiter}"Nexon科技"{tuple_delimiter}"全球科技指数"{tuple_delimiter}"Nexon科技的股价下跌促成了全球科技指数的整体下跌。"{tuple_delimiter}"公司影响,指数变动"{tuple_delimiter}8){record_delimiter}
	("relationship"{tuple_delimiter}"黄金期货"{tuple_delimiter}"市场抛售"{tuple_delimiter}"在市场抛售期间,黄金价格上涨是因为投资者寻求避险资产。"{tuple_delimiter}"市场反应,避险投资"{tuple_delimiter}10){record_delimiter}
	("relationship"{tuple_delimiter}"美联储政策声明"{tuple_delimiter}"市场抛售"{tuple_delimiter}"对美联储政策变化的猜测导致市场波动和投资者抛售。"{tuple_delimiter}"利率影响,金融监管"{tuple_delimiter}7){record_delimiter}
	("content_keywords"{tuple_delimiter}"市场下跌,投资者情绪,商品,美联储,股市表现"){completion_delimiter}
	#############################""",
	    """示例 3:
	
	实体类型:[经济政策, 运动员, 赛事, 地点, 记录, 组织机构, 装备]
	文本:
	```
	在东京举办的世界田径锦标赛上,诺亚·卡特使用尖端碳纤维钉鞋打破了100米短跑记录。
	```
	
	输出:
	("entity"{tuple_delimiter}"世界田径锦标赛"{tuple_delimiter}"赛事"{tuple_delimiter}"世界田径锦标赛是一项汇集田径运动顶尖运动员的全球性体育赛事。"){record_delimiter}
	("entity"{tuple_delimiter}"东京"{tuple_delimiter}"地点"{tuple_delimiter}"东京是本届世界田径锦标赛的举办城市。"){record_delimiter}
	("entity"{tuple_delimiter}"诺亚·卡特"{tuple_delimiter}"运动员"{tuple_delimiter}"诺亚·卡特是一名在世界田径锦标赛上创造100米短跑新纪录的短跑运动员。"){record_delimiter}
	("entity"{tuple_delimiter}"100米短跑记录"{tuple_delimiter}"记录"{tuple_delimiter}"100米短跑记录是田径运动中的一项重要基准,最近被诺亚·卡特打破。"){record_delimiter}
	("entity"{tuple_delimiter}"碳纤维钉鞋"{tuple_delimiter}"装备"{tuple_delimiter}"碳纤维钉鞋是一种能提供更快速度和更好抓地力的先进短跑鞋。"){record_delimiter}
	("entity"{tuple_delimiter}"世界田径联合会"{tuple_delimiter}"组织机构"{tuple_delimiter}"世界田径联合会是负责监督世界田径锦标赛和验证记录的管理机构。"){record_delimiter}
	("relationship"{tuple_delimiter}"世界田径锦标赛"{tuple_delimiter}"东京"{tuple_delimiter}"世界田径锦标赛在东京举办。"{tuple_delimiter}"赛事地点,国际赛事"{tuple_delimiter}8){record_delimiter}
	("relationship"{tuple_delimiter}"诺亚·卡特"{tuple_delimiter}"100米短跑记录"{tuple_delimiter}"诺亚·卡特在锦标赛上创造了新的100米短跑记录。"{tuple_delimiter}"运动员成就,破纪录"{tuple_delimiter}10){record_delimiter}
	("relationship"{tuple_delimiter}"诺亚·卡特"{tuple_delimiter}"碳纤维钉鞋"{tuple_delimiter}"诺亚·卡特使用碳纤维钉鞋来提升比赛表现。"{tuple_delimiter}"运动装备,性能提升"{tuple_delimiter}7){record_delimiter}
	("relationship"{tuple_delimiter}"世界田径联合会"{tuple_delimiter}"100米短跑记录"{tuple_delimiter}"世界田径联合会负责验证和认可新的短跑记录。"{tuple_delimiter}"体育监管,记录认证"{tuple_delimiter}9){record_delimiter}
	("content_keywords"{tuple_delimiter}"田径运动,短跑,破纪录,体育科技,竞技"{completion_delimiter}
	#############################""",
	]
	
	PROMPTS[
	    "summarize_entity_descriptions"
	] = """---角色---
	你是一个负责生成数据综合摘要的助手。
	
	---目标---
	给定一个或两个实体,以及与这些实体相关的描述列表,请生成一个全面的摘要。
	
	---要求---
	1. 将所有描述整合成一个完整的综合描述
	2. 确保包含所有描述中的信息
	3. 如果描述之间存在矛盾,请解决这些矛盾并提供一个连贯的总结
	4. 使用第三人称写作
	5. 包含实体名称以提供完整上下文
	6. 使用{language}作为输出语言
	
	#######
	---数据---
	实体:{entity_name}
	描述列表:{description_list}
	#######
	输出:
	"""
	
	PROMPTS["entity_continue_extraction"] = """
	上次提取中遗漏了许多实体和关系。
	
	---请记住以下步骤---
	
	1. 识别所有实体。对于每个已识别的实体,提取以下信息:
	- entity_name(实体名称):实体的名称,使用与输入文本相同的语言。如果是英文,则将名称大写。
	- entity_type(实体类型):以下类型之一:[{entity_types}]
	- entity_description(实体描述):对实体的属性和活动进行详细描述
	将每个实体格式化为("entity"{tuple_delimiter}<entity_name>{tuple_delimiter}<entity_type>{tuple_delimiter}<entity_description>)
	
	2. 从第1步中识别出的实体中,识别出所有(source_entity,target_entity)对,这些对彼此之间是*明确相关*的。
	对于每对相关实体,提取以下信息:
	- source_entity(源实体):第1步中识别出的源实体的名称
	- target_entity(目标实体):第1步中识别出的目标实体的名称
	- relationship_description(关系描述):解释为什么认为源实体和目标实体彼此相关
	- relationship_strength(关系强度):一个数字分数,表示源实体和目标实体之间关系的强度
	- relationship_keywords(关系关键词):一个或多个高级关键词,总结关系的总体性质,重点关注概念或主题,而不是具体细节
	将每对关系格式化为("relationship"{tuple_delimiter}<source_entity>{tuple_delimiter}<target_entity>{tuple_delimiter}<relationship_description>{tuple_delimiter}<relationship_keywords>{tuple_delimiter}<relationship_strength>)
	
	3. 识别出能够总结整个文本的主要概念、主题或主题的高级关键词。这些关键词应能够捕捉文档中呈现的总体思想。
	将内容级关键词格式化为("content_keywords"{tuple_delimiter}<high_level_keywords>)
	
	4. 将步骤1和2中识别出的所有实体和关系作为单一列表返回,使用**{record_delimiter}**作为列表分隔符。
	
	5. 完成后,输出{completion_delimiter}
	
	---输出---
	
	使用相同格式在下方添加:\n
	""".strip()
	
	PROMPTS["entity_if_loop_extraction"] = """
	---目标---
	
	看起来可能还有一些实体未被提取。
	
	---输出---
	
	仅通过"YES"或"NO"回答是否还有需要添加的实体。
	""".strip()
	
	PROMPTS["fail_response"] = (
	    "Sorry, I'm not able to provide an answer to that question.[no-context]"
	)
	
	PROMPTS["rag_response"] = """---角色---
	
	你是一个帮助助手,负责回答用户关于以下知识库的查询。
	
	---目标---
	
	基于知识库生成简明的回答,遵循回答规则,同时考虑对话历史和当前查询。总结知识库中提供的所有信息,并结合与知识库相关的通用知识。不要包含知识库未提供的信息。
	
	在处理带有时间戳的关系时:
	1. 每个关系都有一个"created_at"时间戳,表示我们获取这个知识的时间
	2. 当遇到冲突的关系时,同时考虑语义内容和时间戳
	3. 不要自动优先选择最近创建的关系 - 根据上下文进行判断
	4. 对于特定时间的查询,在考虑创建时间戳之前优先考虑内容中的时间信息
	
	---对话历史---
	{history}
	
	---知识库---
	{context_data}
	
	---回答规则---
	
	- 目标格式和长度:{response_type}
	- 使用markdown格式并添加适当的章节标题
	- 请使用与用户提问相同的语言回答
	- 确保回答与对话历史保持连贯性
	- 如果不知道答案,请直接说明
	- 不要编造内容。不要包含知识库未提供的信息"""
	
	PROMPTS["keywords_extraction"] = """---角色---
	
	你是一个负责识别用户查询和对话历史中的高层级和低层级关键词的助手。
	
	---目标---
	
	根据查询和对话历史,列出高层级和低层级关键词。高层级关键词关注宏观概念或主题,而低层级关键词关注具体实体、细节或具体术语。
	
	---指示---
	
	- 提取关键词时需同时考虑当前查询和相关的对话历史
	- 以JSON格式输出关键词
	- JSON应包含两个键:
	  - "high_level_keywords" 用于宏观概念或主题
	  - "low_level_keywords" 用于具体实体或细节
	
	######################
	---示例---
	######################
	{examples}
	
	#############################
	---实际数据---
	######################
	对话历史:
	{history}
	
	当前查询:{query}
	######################
	输出:
	
	"""
	
	PROMPTS["keywords_extraction_examples"] = [
	    """示例 1:
	
	查询:"国际贸易如何影响全球经济稳定性?"
	################
	输出:
	{
	  "high_level_keywords": ["国际贸易", "全球经济稳定性", "经济影响"],
	  "low_level_keywords": ["贸易协定", "关税", "货币汇率", "进口", "出口"]
	}
	#############################""",
	    """示例 2:
	
	查询:"森林砍伐对生物多样性有什么环境影响?"
	################
	输出:
	{
	  "high_level_keywords": ["环境影响", "森林砍伐", "生物多样性损失"],
	  "low_level_keywords": ["物种灭绝", "栖息地破坏", "碳排放", "热带雨林", "生态系统"]
	}
	#############################""",
	    """示例 3:
	
	查询:"教育在减少贫困方面起什么作用?"
	################
	输出:
	{
	  "high_level_keywords": ["教育", "减少贫困", "社会经济发展"],
	  "low_level_keywords": ["入学机会", "识字率", "职业培训", "收入不平等"]
	}
	#############################""",
	]
	
	
	PROMPTS["naive_rag_response"] = """---角色---
	
	你是一个帮助助手,负责回答用户关于以下文档片段的查询。
	
	---目标---
	
	基于文档片段生成简明的回答,遵循回答规则,同时考虑对话历史和当前查询。总结文档片段中提供的所有信息,并结合与文档片段相关的通用知识。不要包含文档片段未提供的信息。
	
	在处理带有时间戳的内容时:
	1. 每个内容都有一个"created_at"时间戳,表示我们获取这个知识的时间
	2. 当遇到冲突信息时,同时考虑内容和时间戳
	3. 不要自动优先选择最近的内容 - 根据上下文进行判断
	4. 对于特定时间的查询,在考虑创建时间戳之前优先考虑内容中的时间信息
	
	---对话历史---
	{history}
	
	---文档片段---
	{content_data}
	
	---回答规则---
	
	- 目标格式和长度:{response_type}
	- 使用markdown格式并添加适当的章节标题
	- 请使用与用户提问相同的语言回答
	- 确保回答与对话历史保持连贯性
	- 如果不知道答案,请直接说明
	- 不要包含文档片段未提供的信息"""
	
	
	PROMPTS[
	    "similarity_check"
	] = """请分析以下两个问题之间的相似度:
	
	问题1:{original_prompt}
	问题2:{cached_prompt}
	
	请评估这两个问题在语义上是否相似,以及问题2的答案是否可以用来回答问题1,直接提供一个0到1之间的相似度分数。
	
	相似度分数标准:
	0:完全不相关或答案无法重用,包括但不限于:
	   - 问题主题不同
	   - 问题中提到的地点不同
	   - 问题中提到的时间不同
	   - 问题中提到的具体人物不同
	   - 问题中提到的具体事件不同
	   - 问题中的背景信息不同
	   - 问题中的关键条件不同
	1:完全相同且答案可以直接重用
	0.5:部分相关且答案需要修改后才能使用
	仅返回0-1之间的数字,不要包含任何其他内容。
	"""
	
	PROMPTS["mix_rag_response"] = """---角色---
	
	你是一个帮助助手,负责回答用户关于以下数据源的查询。
	
	---目标---
	
	基于数据源生成简明的回答,遵循回答规则,同时考虑对话历史和当前查询。数据源包含两部分:知识图谱(KG)和文档片段(DC)。总结数据源中提供的所有信息,并结合与数据源相关的通用知识。不要包含数据源未提供的信息。
	
	在处理带有时间戳的信息时:
	1. 每条信息(包括关系和内容)都有一个"created_at"时间戳,表示我们获取这个知识的时间
	2. 当遇到冲突信息时,同时考虑内容/关系和时间戳
	3. 不要自动优先选择最近的信息 - 根据上下文进行判断
	4. 对于特定时间的查询,在考虑创建时间戳之前优先考虑内容中的时间信息
	
	---对话历史---
	{history}
	
	---数据源---
	
	1. 来自知识图谱(KG):
	{kg_context}
	
	2. 来自文档片段(DC):
	{vector_context}
	
	---回答规则---
	
	- 目标格式和长度:{response_type}
	- 使用markdown格式并添加适当的章节标题
	- 请使用与用户提问相同的语言回答
	- 确保回答与对话历史保持连贯性
	- 将回答组织成多个章节,每个章节专注于一个主要观点或方面
	- 使用清晰且能反映内容的章节标题
	- 在"参考来源"章节的末尾列出最多5个最重要的参考来源。清楚地标明每个来源是来自知识图谱(KG)还是文档数据(DC),使用以下格式:[KG/DC] 来源内容
	- 如果不知道答案,请直接说明。不要编造内容。
	- 不要包含数据源未提供的信息。"""

相关文章:

  • cmake --build . --config Release和make是1个意思吗
  • SQLMesh系列教程:利用date_spine宏构建日期序列实践指南
  • 网络工程安全从入门到“入魂“教学案
  • CellOracle|基因扰动研究基因功能|基因调控网络+虚拟干预
  • 使用STM32CubeMX+DMA+空闲中断实现串口接收和发送数据(STM32G070CBT6)
  • 黑客攻击deepseek服务原理解析
  • 基于SpringBoot的“酒店管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 东方通TongHttpServer:企业级服务代理中间件的卓越之选
  • 《自然》:陆地蒸散量研究的统计失误被撤回-空间加权平均的计算方法
  • Unity特效动态合批问题
  • LINUX驱动学习之IIC驱动-----以AP3216C为例
  • 【css酷炫效果】纯CSS实现按钮流光边框
  • [QT]深入理解Qt中的信号与槽机制
  • 什么是梯度方差和缩放因子
  • PrimeTime:timing_report_unconstrained_paths变量
  • java的WeakHashMap可以用来做缓存使用?强软弱虚四种引用对比
  • 前端 - js - - 防抖和节流
  • 批量测试IP和域名联通性2
  • 【Maven-plugin】有多少官方插件?
  • Vala语言基础知识-源文件和编译
  • 金砖国家外长会晤落幕,外交部:发出了反对单边霸凌行径的“金砖声音”
  • 铁路上海站今日预计发送旅客65.8万人次,同比增长超16%
  • 俄外长:俄将在不损害伙伴关系前提下发展对美关系
  • 光明网评论员:手机“二次放号”,需要重新确认“你是你”
  • 大家聊中国式现代化|陶希东:打造高水平安全韧性城市,给群众看得见的安全感
  • 民调显示特朗普执政百日支持率为80年来美历任总统最低