项目简介
基于知识图谱的智能问答系统,利用语言模型和Neo4j数据库实现自动化查询与回答,提供用户问题到自然语言答案的转换及证据支持
开始入门
设置 PrimeKG Neo4j 实例,点击这里
安装依赖项:
一些 FactFinder 的功能基于外部 API。虽然运行 FactFinder 需要一个 openai API 密钥,但 Semantic Scholar 以及拜耳的 linnaeusannotate 实体检测是可选的。设置环境变量:
export LLM="gpt-4o"
export SEMANTIC_SCHOLAR_KEY=""
export OPENAI_API_KEY=""
export SYNONYM_API_KEY=""
export SYNONYM_API_URL=""
运行 UI:
streamlit run src/fact_finder/app.py --browser.serverAddress localhost
使用额外的参数运行(例如激活规范化图同义词):
streamlit run src/fact_finder/app.py --browser.serverAddress localhost -- [args]
streamlit run src/fact_finder/app.py --browser.serverAddress localhost -- --normalized_graph --use_entity_detection_preprocessing
以下参数可供使用:
过程描述
以下步骤用于将用户问题转换为自然语言答案和提供的证据:
-
第一步,使用语言模型调用来生成知识图谱的密码查询。为了实现这一点,提示模板包含图的结构,即所有节点及其属性的信息。此外,提示模板可以丰富(部分)图中关系的自然语言描述,以便语言模型更好地理解它们的意义。如果模型决定用户的问题无法通过给定结构的图来回答,模型被指示返回以“SCHEMA_ERROR”字符串开头的错误消息。然后检测到错误消息并直接转发
给用户。
-
在第二步中,生成的加密查询使用正则表达式进行预处理。
-
首先,应用格式化,以便于后续的正则表达式设计。这包括例如移除不必要的空白字符,并对所有字符串使用双引号。
-
接下来,所有属性值都转换为小写。这假定图中的属性值已经进行了类似的预处理,使得查询对大小写不匹配具有抵抗力。
-
最终,对于某些节点类型,查询中使用的任何名称都会被图中实际使用的同义词替换。例如,这是通过查找名称的同义词并检查哪个同义词实际上存在
于图中来完成的。
第三步,使用 Cypher 预处理的最终结果查询图。图答案与 Cypher 查询一起作
为界面中提供的证据的一部分,为用户提供透明度。
通过另一个语言模型调用,最终的自然语言答案从查询图的结果中生成。
此外,从图形查询和结果生成子图。这为用户提供了视觉证据。子图可以通过基于规则的方法生成,也可以借助语言模型生成。
用户界面