项目简介
利用LLM和 Neo4j 数据库实现自动化查询与回答,实现了从用户问题到自然语言答案的自动化转换过程
特点
1、基于知识图谱:使用Neo4j 数据库存储和管理知识图谱,并利用它来回答问题
2、利用语言模型:使用语言模型将问题转化为Cypher查询语句,并根据查询结果生成自然语言答案
3、自动化查询与回答:将问题到自然语言答案的整个过程自动化,无需手动编写查询语句
入门
设置 PrimeKG Neo4j 实例,请参见此处
安装依赖项:
pip install -e .
FactFinder 的某些功能基于外部 API。虽然运行 FactFinder 需要 openai api 密钥,但语义学者以及拜耳的 linnaeusannotate 实体检测是可选的。设置环境变量:
export LLM="gpt-4o" # "gpt-4-turbo" as an alternative
export SEMANTIC_SCHOLAR_KEY="" # fill API key for semantic scholar
export OPENAI_API_KEY="" # fill opanAI api key
export SYNONYM_API_KEY="" # Bayer internal linnaeusannotate synonym API key
export SYNONYM_API_URL="" # Bayer internal linnaeusannotate synonym API url
运行用户界面:
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
以下标志可用:
--normalized_graph = Apply synonym replacement based on the normalized graph to the cypher queries before applying them to the graph.
--use_entity_detection_preprocessing = Apply entity detection to the user question before generating the cypher query. The found entities will be replaced by their preferred terms and a string describing their category (e.g. "Psoriasis is a disease.") will be added to the query. This requires the corresponding api key ($SYNONYM_API_KEY) to be set. Also, the normalized graph should be used.
--use_subgraph_expansion = The evidence graph gets expanded through the surrounding neighborhoods.
流程说明
采取以下步骤从用户问题得到自然语言答案和提供的证据:
第一步,使用语言模型调用生成对知识图谱的cypher 查询。为了实现这一点,提示模板包含图形的模式,即有关所有节点及其属性的信息。此外,提示模板可以通过对图中(某些)关系的自然语言描述来丰富,从而可以更好地理解它们对语言模型的含义。如果模型确定用户问题无法通过具有给定架构的图形来回答,则指示模型返回以标记字符串“SCHEMA_ERROR”开头的错误消息。然后检测到这一点并将错误消息直接转发给用户。
在第二步中,使用正则表达式对生成的cypher 查询进行预处理。
首先,应用格式化以使后续正则表达式更易于设计。例如,这包括删除不必要的空格以及对所有字符串使用双引号。
接下来,所有属性值都转换为小写。这假设已对图中的属性值进行了类似的预处理,并使查询能够防止大小写不匹配。
最后,对于某些节点类型,查询中使用的任何名称都将替换为图中实际使用的同义词。例如,这是通过查找名称的同义词并检查图中实际存在的同义词来完成的。
第三步,使用密码预处理的最终结果查询图。图形答案和密码查询是界面中呈现的证据的一部分,为用户提供了透明度。
通过另一个语言模型调用,最终的自然语言答案是根据查询图的结果生成的。
此外,还会根据图查询和结果生成子图。这作为用户的视觉证据。子图可以通过基于规则的方法生成,也可以在语言模型的帮助下生成。
用户界面
下图显示了“哪些药物用于治疗高眼压?”问题的应用程序的用户界面。。独立LLM和我们基于图形的混合系统的答案作为输出进行比较。此外,相关子图与生成的 Cypher 查询、图中的答案和使用的提示一起显示为证据。
项目链接
https://github.com/chrschy/fact-finder
扫码加入技术交流群,备注「开发语言-城市-昵称」
合作请注明
关注「GitHubStore」公众号