当前位置:   article > 正文

使用 Azure OpenAI、知识图 FalkorDB 和 LlamaIndex 构建医疗保健聊天机器人

使用 Azure OpenAI、知识图 FalkorDB 和 LlamaIndex 构建医疗保健聊天机器人

原文地址:building-a-mental-health-qa-chatbot-using-falkordb-knowledge-graph-and-llamaindex

介绍

知识图谱是一种将数据转换为机器可以理解的知识的模型,它比传统数据管理系统更能够捕获数据的语义性质和含义。知识图谱通过结构化地表示实体、属性和它们之间的关系,使得应用程序能够更好地理解和推理现实世界。

在现实世界中,知识是情境化的,可以根据时间和情况而变化;它是有层级的,概念之间的关联可能因性别、地区、方言等而异;而且它是变化的,含义不固定,随着新想法和关联的发现而改变。相比之下,传统的数据管理系统没有经过训练,无法以结构化方式捕获含义或关系。

知识图谱在自然语言处理(NLP)和其他人工智能应用程序中经常被使用,因为它为应用程序提供了知识的结构化表示,从而构建能够更好地理解文本含义的系统。

总的来说,知识图是一个灵活的数据层,用于回答跨数据孤岛的复杂查询,并允许与以图表形式表示和组织的情境化数据相连接。企业知识图谱就是企业数据的知识图谱。

知识图谱的可靠性

知识图谱在可靠性方面相对于矢量数据库具有一些优势,这使得它们在实现 RAG 时更为可靠。以下是几个关键点:

  1. 人类可读性:知识图谱使用结构化的图形表示,这种表示方式更容易被人类理解和解释。相比之下,矢量数据库使用矢量嵌入来存储和操作数据,这种形式对于非技术用户来说不太直观,难以直接理解。
  2. 可解释性:知识图谱通过显示实体之间的关系和联系,为用户提供了一个清晰的推理路径,使得结果背后的逻辑更容易被理解。而矢量数据库由于其内在的复杂性,往往缺乏这种可解释性。
  3. 在特定领域的重要性:特别是在医疗保健领域,结果的可解释性对于确保准确性至关重要。使用知识图谱可以调整数据层,以提供更准确的结果。

因此,知识图谱在RAG应用中越来越受欢迎,因为它们能够提供可靠且可解释的数据基础,这对于构建能够处理复杂查询和提供准确答案的应用程序至关重要。

FalkorDB

FalkorDB 是专门为需要快速响应时间和高吞吐量场景设计的超快图数据库。它以超低延迟而著称,并支持通过 Docker 进行部署。选择 FalkorDB 的原因主要包括:

  1. 超低延迟:FalkorDB 的超低延迟特性使其非常适合那些对响应时间有极高要求的应用场景。
  2. 功能强大:FalkorDB 采用了强大的知识图谱,能够高效地表示和查询结构化数据。它能够捕捉实体之间的关系和属性,包括人、地点、事件和产品等。
  3. 与LLM的集成:通过将知识图谱与大型语言模型(LLMs)相结合,FalkorDB 能够充分利用两者的优势,提供更加智能和高效的查询服务。

总的来说,FalkorDB 是一个专为快速响应和高吞吐量设计的知识图谱数据库,它能够高效地处理和查询结构化数据,并能够与LLMs集成,提供更加智能和准确的服务。

代码实现

  • 安装依赖项

pip install openai
pip install llama-index
pip install llama-index-llms-openai
pip install llama-index-graph-stores-falkordb

  • 启动falkordb

docker run -p 6379:6379 -p 3000:3000 -it --rm falkordb/falkordb:latest

  • 资源文件

https://www.slhd.nsw.gov.au/mentalhealth/pdf/what_is_mental_illness.pdf
https://www.hhs.gov/sites/default/files/sg-youth-mental-health-social-media-advisory.pdf
https://files.eric.ed.gov/fulltext/EJ1154566.pdf

  1. from llama_index.core import Settings
  2. from llama_index.core import StorageContext
  3. from IPython.display import Markdown, display
  4. from llama_index.core import SimpleDirectoryReader, KnowledgeGraphIndex
  5. from llama_index.graph_stores.falkordb import FalkorDBGraphStore
  6. import os
  7. from langchain.chat_models import AzureChatOpenAI
  8. os.environ["OPENAI_API_TYPE"] = "azure"
  9. os.environ["OPENAI_API_VERSION"] = "2023-03-15-preview"
  10. os.environ["OPENAI_API_BASE"] = "https://xxxxxx.openai.azure.com/"
  11. os.environ["OPENAI_API_KEY"] = "xxxxxx"
  12. graph_store = FalkorDBGraphStore(
  13. "redis://localhost:6379", decode_responses=True
  14. )
  15. documents = SimpleDirectoryReader("./data").load_data()
  16. llm = AzureChatOpenAI(deployment_name="dev", temperature=0)
  17. Settings.llm = llm
  18. Settings.chunk_size = 512
  19. storage_context = StorageContext.from_defaults(graph_store=graph_store)
  20. index = KnowledgeGraphIndex.from_documents(
  21. documents,
  22. max_triplets_per_chunk=20,
  23. storage_context=storage_context
  24. )
  25. query_engine = index.as_query_engine(
  26. include_text=True, response_mode="tree_summarize", verbose=True
  27. )
  28. response = query_engine.query(
  29. "What is mental health?"
  30. )
  31. display(Markdown(f"<b>{response}</b>"))
图表可视化

要可视化图表,只需在浏览器中加载网址:http://localhost:3000。 

pip install --upgrade gradio 

启动 Gradio 聊天机器人 
  1. import gradio as gr
  2. def response_function(message, history):
  3. resp = query_engine.query(message)
  4. resp = f"{resp}"
  5. print(resp)
  6. return resp
  7. gr.ChatInterface(
  8. response_function,
  9. chatbot=gr.Chatbot(height=500),
  10. textbox=gr.Textbox(placeholder="Ask any question related to mental health", container=False, scale=7),
  11. title="Mental Health Chatbot",
  12. description="You can ask this chatbot any question related to mental health",
  13. theme="soft",
  14. examples=["What is mental health?", "What is mental health a challenging topic?", "Where should you go to seek help?"],
  15. cache_examples=True,
  16. retry_btn=None,
  17. undo_btn="Delete Previous",
  18. clear_btn="Clear",
  19. ).launch(share=True)
操纵图表

不依赖 KnowledgeGraphIndex() 函数,添加三元组来操作图表。

  1. MERGE (depression:MentalIllnessType {name: "Depression"})"Depression"})
  2. MERGE (anxiety:MentalIllnessType {name: "Anxiety"})
  3. MERGE (schizophrenia:MentalIllnessType {name: "Schizophrenia"})
  4. MERGE (bipolar:MentalIllnessType {name: "Bipolar Mood Disorder"})
  5. MERGE (personalityDisorders:MentalIllnessType {name: "Personality Disorders"})
  6. MERGE (eatingDisorders:MentalIllnessType {name: "Eating Disorders"})
  7. MERGE (mi)-[:IS_A_TYPE_OF]->(mhp)
  8. MERGE (mhp)-[:CAN_DEVELOP_INTO]->(mi)
  9. MERGE (depression)-[:IS_A]->(mi)
  10. MERGE (anxiety)-[:IS_A]->(mi)
  11. MERGE (schizophrenia)-[:IS_A]->(mi)
  12. MERGE (bipolar)-[:IS_A]->(mi)
  13. MERGE (personalityDisorders)-[:IS_A]->(mi)
  14. MERGE (eatingDisorders)-[:IS_A]->(mi)
  15. """
  16. graph_store.query(cypher_query)

总结

通过将知识图谱整合到检索增强生成(RAG)流程中,我们能够实现大型语言模型(LLM)的实际应用。在医疗保健等行业,这一点尤为关键,因为LLM的潜在幻觉可能导致严重的问题。在本篇文章中,我们展示了如何利用FalkorDB知识图谱、OpenAI以及LlamaIndex来构建一个基础的医疗聊天机器人。我们还介绍了如何操作知识图谱,并展示了如何使用Gradio启动一个简单的聊天机器人用户界面。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/375083
推荐阅读
相关标签
  

闽ICP备14008679号