DGX Spark 上的文本到知识图谱
使用 LLM 推理和图形可视化将非结构化文本转换为交互式知识图谱
目录
概述
基本概念
本 playbook 演示了如何构建和部署一个全面的知识图谱生成和可视化解决方案,作为知识图谱提取的参考。 统一内存架构使你可以运行更大、更准确的模型,生成更高质量的知识图谱,并提供卓越的下游 GraphRAG 性能。
此 txt2kg playbook 使用以下技术将非结构化文本文档转换为结构化知识图谱: - 知识三元组提取:使用带有 GPU 加速的 Ollama 进行本地 LLM 推理,提取主语-谓语-宾语关系 - 图数据库存储:ArangoDB 用于存储和查询知识三元组及关系遍历 - GPU 加速可视化:Three.js WebGPU 渲染用于交互式 2D/3D 图探索
未来增强功能:计划增强功能包括向量嵌入和 GraphRAG 功能。
你将实现的目标
你将拥有一个功能齐全的系统,能够处理文档、生成和编辑知识图谱,并提供查询功能,可通过交互式 Web 界面访问。 设置包括: - 本地 LLM 推理:Ollama 用于 GPU 加速的 LLM 推理,无需 API 密钥 - 图数据库:ArangoDB 用于存储和查询三元组及关系遍历 - 交互式可视化:GPU 加速的图渲染,使用 Three.js WebGPU - 现代 Web 界面:Next.js 前端,具有文档管理和查询界面 - 完全容器化:使用 Docker Compose 和 GPU 支持的可重现部署
先决条件
- 带有最新 NVIDIA 驱动程序的 DGX Spark
- 已安装并配置 NVIDIA Container Toolkit 的 Docker
- Docker Compose
时间与风险
- 持续时间:
- 2-3 分钟用于初始设置和容器部署
- 5-10 分钟用于 Ollama 模型下载(取决于模型大小)
-
立即进行文档处理和知识图谱生成
-
风险:
- GPU 内存要求取决于所选 Ollama 模型大小
-
文档处理时间随文档大小和复杂性而扩展
-
回滚:停止并删除 Docker 容器,必要时删除下载的模型
- 最后更新:2025年1月8日
- 从 Pinecone 迁移到 Qdrant 以实现 ARM64 兼容性
- 添加带有 Neo4j 的 vLLM 支持
- 添加带有可访问性改进的 Palette UI 组件
- 添加用于开发的 CPU 仅模式 (
./start.sh --cpu) - 使用确定性键和 BM25 搜索优化 ArangoDB
- 添加用于知识图谱训练的 GNN 预处理脚本
操作说明
步骤 1. 克隆仓库
在终端中,克隆 txt2kg 仓库并导航到项目目录。
步骤 2. 启动 txt2kg 服务
使用提供的启动脚本启动所有必需的服务。这将设置 Ollama、ArangoDB 和 Next.js 前端:
脚本将自动: - 检查 GPU 可用性 - 启动 Docker Compose 服务 - 设置 ArangoDB 数据库 - 启动 Web 界面
步骤 3. 拉取 Ollama 模型(可选)
下载用于知识提取的语言模型。默认加载的模型是 Llama 3.1 8B:
浏览可用模型:https://ollama.com/search
[!NOTE] 统一内存架构使你可以运行像 70B 参数这样更大的模型,从而生成更准确的知识三元组。
步骤 4. 访问 Web 界面
在浏览器中打开并导航到:
你还可以访问各个服务: - ArangoDB Web 界面:http://localhost:8529 - Ollama API:http://localhost:11434
步骤 5. 上传文档并构建知识图谱
5.1. 文档上传
- 使用 Web 界面上传文本文档(支持 markdown、text、CSV)
- 文档会自动分块并处理三元组提取
5.2. 知识图谱生成
- 系统使用 Ollama 提取主语-谓语-宾语三元组
- 三元组存储在 ArangoDB 中进行关系查询
5.3. 交互式可视化
- 使用 GPU 加速渲染在 2D 或 3D 中查看知识图谱
- 交互式探索节点和关系
5.4. 基于图的查询
- 使用查询界面询问有关文档的问题
- 图遍历通过 ArangoDB 中的实体关系增强上下文
- LLM 使用增强的图上下文生成响应
未来增强:计划使用基于向量的 KNN 搜索进行实体检索的 GraphRAG 功能。
步骤 6. 清理和回滚
停止所有服务并可选地删除容器:
## 停止服务
docker compose down
## 删除容器和卷(可选)
docker compose down -v
## 删除下载的模型(可选)
docker exec ollama-compose ollama rm llama3.1:8b
步骤 7. 下一步
- 尝试使用不同的 Ollama 模型进行不同的提取质量
- 自定义三元组提取提示以获取特定领域的知识
- 探索高级图查询和可视化功能
故障排除
| 症状 | 原因 | 解决方案 |
|---|---|---|
| Ollama 性能问题 | DGX Spark 的设置不佳 | 设置环境变量:OLLAMA_FLASH_ATTENTION=1(启用闪存注意力以提高性能)OLLAMA_KEEP_ALIVE=30m(将模型保持加载 30 分钟)OLLAMA_MAX_LOADED_MODELS=1(避免 VRAM 竞争)OLLAMA_KV_CACHE_TYPE=q8_0(减少 KV 缓存 VRAM,性能影响最小) |
| VRAM 耗尽或内存压力(例如在 Ollama 模型之间切换时) | Linux 缓冲区缓存消耗 GPU 内存 | 刷新缓冲区缓存:sudo sync; sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' |
| 三元组提取缓慢 | 大模型或大上下文窗口 | 减小文档块大小或使用更快的模型 |
| ArangoDB 连接被拒绝 | 服务未完全启动 | 在 start.sh 后等待 30 秒,使用 docker ps 验证 |
[!NOTE] DGX Spark 使用统一内存架构(UMA),允许 GPU 和 CPU 内存之间的动态共享。 随着许多应用程序仍在更新以利用 UMA,即使在 DGX Spark 的内存容量内,你也可能遇到内存问题。如果发生这种情况,请手动刷新缓冲区缓存: