知识图谱构建应用程序
从非结构化数据创建知识图谱
LLM 图谱构建器
概述
该应用程序旨在将非结构化数据(pdf、文档、txt、YouTube 视频、网页等)转换为存储在 Neo4j 中的知识图谱。它利用大型语言模型(如 OpenAI、Gemini 等)的强大功能,从文本中提取节点、关系及其属性,并使用 Langchain 框架创建结构化的知识图谱。
从本地计算机、GCS 或 S3 存储桶或网络资源上传文件,选择您的 LLM 模型并生成知识图谱。
主要特性
- 知识图谱创建:使用 LLM 将非结构化数据转化为结构化的知识图谱。
- 提供模式:在设置中提供自定义模式或使用现有模式生成图谱。
- 查看图谱:在 Bloom 中一次查看特定来源或多个来源的图谱。
- 与数据聊天:通过会话查询与 Neo4j 数据库中的数据进行交互,还可以检索与响应来源相关的元数据。
入门
:warning: 您需要有 Neo4j 数据库 V5.15 或更高版本,并安装 APOC 才能使用此知识图谱构建器。 您可以使用任何 Neo4j Aura 数据库(包括免费的数据库)。 如果您使用的是 Neo4j Desktop,您将无法使用 docker-compose,但需要遵循分别部署后端和前端的部分来操作。 :warning:
部署
本地部署
通过 docker-compose 运行
默认情况下,仅启用 OpenAI 和 Diffbot,因为 Gemini 需要额外的 GCP 配置。
在根文件夹中创建一个 .env 文件,并填写您的 OPENAI 和 DIFFBOT 密钥(如果您想使用两者):
OPENAI_API_KEY="your-openai-key"
DIFFBOT_API_KEY="your-diffbot-key"
如果您只想使用 OpenAI:
LLM_MODELS="diffbot,openai-gpt-3.5,openai-gpt-4o"
OPENAI_API_KEY="your-openai-key"
如果您只想使用 Diffbot:
LLM_MODELS="diffbot"
DIFFBOT_API_KEY="your-diffbot-key"
然后您可以运行 Docker Compose 来构建和启动所有组件:
docker-compose up --build
其他配置
默认情况下,输入源将是:本地文件、YouTube、Wikipedia、AWS S3 和网页。由于应用了此默认配置:
REACT_APP_SOURCES="local,youtube,wiki,s3,web"
如果您想要集成 Google GCS,请添加 gcs
和您的 Google 客户端 ID:
REACT_APP_SOURCES="local,youtube,wiki,s3,gcs,web"
GOOGLE_CLIENT_ID="xxxx"
当然,您可以将所有(本地、YouTube、Wikipedia、S3 和 GCS)组合在一起,或删除任何您不想/不需要的内容。
聊天模式
默认情况下,所有的聊天模式都将可用:向量、图+向量和图。如果聊天模式变量中未指定任何模式,则所有模式都将可用:
CHAT_MODES=""
如果您只想指定仅向量模式或仅图模式,可以在 env 中指定模式:
CHAT_MODES="vector,graph+vector"
分别运行后端和前端(开发环境)
或者,您可以分别运行后端和前端:
- 对于前端:
- 通过复制粘贴 frontend/example.env 创建 frontend/.env 文件。
- 根据需要更改值。
-
cd frontend yarn yarn run dev
- 对于后端:
- 通过复制粘贴 backend/example.env 创建 backend/.env 文件。
- 根据需要更改值。
-
cd backend python -m venv envName source envName/bin/activate pip install -r requirements.txt uvicorn score:app --reload
云端部署
要在 Google Cloud Platform 上部署应用程序和包,请在 Google Cloud Run 上运行以下命令:
# 部署前端
gcloud run deploy
source location current directory > Frontend
region : 32 [us-central 1]
Allow unauthenticated request : Yes
# 部署后端
gcloud run deploy --set-env-vars "OPENAI_API_KEY = " --set-env-vars "DIFFBOT_API_KEY = " --set-env-vars "NEO4J_URI = " --set-env-vars "NEO4J_PASSWORD = " --set-env-vars "NEO4J_USERNAME = "
source location current directory > Backend
region : 32 [us-central 1]
Allow unauthenticated request : Yes
环境变量
环境变量名称 | 强制/可选 | 默认值 | 描述 |
---|---|---|---|
OPENAI_API_KEY | 强制 | OpenAI 的 API 密钥 | |
DIFFBOT_API_KEY | 强制 | Diffbot 的 API 密钥 | |
EMBEDDING_MODEL | 可选 | all-MiniLM-L6-v2 | 生成文本嵌入的模型(all-MiniLM-L6-v2,openai,vertexai) |
IS_EMBEDDING | 可选 | true | 启用文本嵌入的标志 |
KNN_MIN_SCORE | 可选 | 0.94 | KNN 算法的最低得分 |
GEMINI_ENABLED | 可选 | False | 启用 Gemini 的标志 |
GCP_LOG_METRICS_ENABLED | 可选 | False | 启用 Google Cloud 日志的标志 |
NUMBER_OF_CHUNKS_TO_COMBINE | 可选 | 5 | 处理嵌入时要组合的块数 |
UPDATE_GRAPH_CHUNKS_PROCESSED | 可选 | 20 | 在更新进度之前处理的块数 |
NEO4J_URI | 可选 | neo4j://database:7687 | Neo4j 数据库的 URI |
NEO4J_USERNAME | 可选 | neo4j | Neo4j 数据库的用户名 |
NEO4J_PASSWORD | 可选 | password | Neo4j 数据库的密码 |
LANGCHAIN_API_KEY | 可选 | Langchain 的 API 密钥 | |
LANGCHAIN_PROJECT | 可选 | Langchain 的项目 | |
LANGCHAIN_TRACING_V2 | 可选 | true | 启用 Langchain 跟踪的标志 |
LANGCHAIN_ENDPOINT | 可选 | https://api.smith.langchain.com | Langchain API 的终端 |
BACKEND_API_URL | 可选 | http://localhost:8000 | 后端 API 的 URL |
BLOOM_URL | 可选 | https://workspace-preview.neo4j.io/workspace/explore?connectURL={CONNECT_URL}&search=Show+me+a+graph&featureGenAISuggestions=true&featureGenAISuggestionsInternal=true | Bloom 可视化的 URL |
REACT_APP_SOURCES | 可选 | local,youtube,wiki,s3 | 可用的输入源列表 |
LLM_MODELS | 可选 | diffbot,openai-gpt-3.5,openai-gpt-4o | 前端可选的模型,用于实体提取和问答 |
CHAT_MODES | 可选 | vector,graph+vector,graph | 可用的问答模式 |
ENV | 可选 | DEV | 应用程序的环境变量 |
TIME_PER_CHUNK | 可选 | 4 | 处理每个块的时间 |
CHUNK_SIZE | 可选 | 5242880 | 文件上传时每个块的大小 |
GOOGLE_CLIENT_ID | 可选 | 用于 Google 认证的客户端 ID | |
GCS_FILE_CACHE | 可选 | False | 如果设置为 True,将文件保存到 GCS 进行处理。如果设置为 False,将文件保存在本地 |
ENTITY_EMBEDDING | 可选 | False | 如果设置为 True,将为数据库中的每个实体添加嵌入 |
LLM_MODEL_CONFIG_ollama_<model_name> | 可选 | 本地部署时设置 Ollama 配置,如:model_name, |