@tom_doerr: 基于 Rust 的模块化 GraphRAG 实现,支持 WebGPU 加速。https://github.com/automataIA/graphrag-rs…

X AI KOLs Timeline 工具

摘要

一种模块化、高性能的 GraphRAG(基于图的检索增强生成)Rust 实现,支持 WebGPU 加速,并提供三种部署架构:仅服务器、仅 WASM(客户端)以及混合模式。

基于 Rust 的模块化 GraphRAG 实现,支持 WebGPU 加速。 https://t.co/spRsBfxNX7 https://t.co/E6ywynpCYa
查看原文
查看缓存全文

缓存时间: 2026/06/28 14:10

以WebGPU加速支持为基础的Rust模块化GraphRAG实现。https://t.co/spRsBfxNX7 https://t.co/E6ywynpCYa — # automataIA/graphrag-rs 源代码:https://github.com/automataIA/graphrag-rs # GraphRAG-rs GraphRAG 网络可视化 一个高性能、模块化的Rust GraphRAG(基于图的检索增强生成)实现,支持三种部署架构:纯服务端、纯WASM(100%客户端)以及混合模式。可通过自然语言从文档构建知识图谱并进行查询,借助WebGPU提供GPU加速支持。 Rust (https://www.rust-lang.org) 许可 WASM (https://webassembly.org/) WebGPU (https://gpuweb.github.io/gpuweb/) 文档 (https://automataia.github.io/graphrag-rs/) ## 30秒快速入门 命令行(无需配置文件): bash cargo install --path graphrag-cli # 一次性安装 graphrag index ./mydoc.txt # 构建 ./graphrag-data graphrag ask "主要主题是什么?" # 从图谱中获取答案 在任一命令后添加 --ollama 即可获得LLM实体提取(需要本地运行 ollama serve)。 库(Rust): rust use graphrag::GraphRAG; #[tokio::main] async fn main() -> anyhow::Result<()> { let mut g = GraphRAG::quick_start("这里是柏拉图的《会饮篇》全文...").await?; println!("{}", g.ask("迪奥蒂玛是谁?").await?); Ok(()) } 两种流程均使用合理的默认值——哈希回退嵌入、基于模式的实体提取、持久化工作空间。需要更高级功能时,可选择Ollama / GLiNER / 自定义分块。 ## 前置条件 ### 系统要求 - Rust 1.85+wasm32-unknown-unknown 目标 - Node.js 18+(用于WASM构建) - Git 用于克隆 ### 平台特定依赖项 #### Linux (Ubuntu/Debian) bash # 基本构建工具 sudo apt update sudo apt install -y build-essential pkg-config # 用于GPU加速功能(Metal/WebGPU依赖) sudo apt install -y gobjc gnustep-devel libgnustep-base-dev # 可选:用于Qdrant向量数据库的docker-compose # 用于容器化向量存储 #### macOS bash # Xcode命令行工具(包含Objective-C编译器) xcode-select --install # 可选:用于额外工具的Homebrew brew install rustup #### Windows bash # 安装带有C++支持的Visual Studio构建工具 # 或使用带有C++开发工具的Visual Studio Community # 安装支持Windows目标的Rust rustup target add wasm32-unknown-unknown ### 可选依赖项 - Ollama 用于本地LLM嵌入:ollama pull nomic-embed-text - Docker 用于Qdrant向量数据库:docker-compose up -d - Trunk 用于WASM构建:cargo install trunk wasm-bindgen-cli ## 部署选项 GraphRAG-rs支持三种部署架构——根据需求选择: ### 选项1:纯服务端(传统方式) ✅ 生产就绪 bash git clone https://github.com/your-username/graphrag-rs.git cd graphrag-rs # 启动Qdrant(可选) cd graphrag-server && docker-compose up -d # 启动Ollama用于嵌入(真实语义搜索所需) ollama serve & ollama pull nomic-embed-text # 使用真实嵌入启动GraphRAG服务 export EMBEDDING_BACKEND=ollama cargo run --release --bin graphrag-server --features "qdrant,ollama" 最适合:多租户SaaS、移动应用、GPU工作负载、>100万份文档 特性: - ✅ Qdrant向量数据库集成(生产就绪) - ✅ 基于Ollama的真实嵌入,支持GPU加速 - ✅ 基于哈希的回退嵌入(无依赖) - ✅ 支持语义搜索的REST API - ✅ Docker Compose设置 - ✅ 5.2MB发布二进制(已优化) ### 选项2:纯WASM(100%客户端) ✅ 生产就绪 bash # 安装trunk用于WASM构建 cargo install trunk wasm-bindgen-cli # 构建并运行带GPU加速的WASM应用 cd graphrag-wasm trunk serve --open 最适合:隐私优先应用、离线工具、零基础设施成本、边缘部署 状态:功能完整! - ✅ 完整GraphRAG流水线在浏览器中运行 - ✅ ONNX Runtime Web(GPU加速嵌入) - ✅ WebLLM集成(用于LLM合成的Phi-3-mini) - ✅ 纯Rust向量搜索(余弦相似度) - ✅ 完整的Leptos用户界面,支持文档上传和查询接口 - ✅ 实体提取及关系构建 - ✅ 自然语言答案合成 - ✅ 演示可用:柏拉图的《会饮篇》(2691个实体) ### 选项3:混合模式(推荐) 计划中:使用WASM客户端实现实时用户界面,同时可选服务端处理重型任务。 最适合:企业应用、多设备同步、最佳用户体验与可扩展性 状态:架构已设计,实现阶段为Phase 3 参见 graphrag-server/README.md 了解服务端文档。 ## 最先进的质量改进 GraphRAG-rs实现了5篇前沿研究论文(2019-2025),以获得卓越的检索质量: ### 基于研究的特性 | 特性 | 影响 | 论文 | 状态 | |——|——|——|——| | LightRAG双级检索 | 6000倍token减少 | EMNLP 2025 | ✅ 生产就绪 | | Leiden社区检测 | +15%模块度 | Sci Reports 2019 | ✅ 生产就绪 | | 交叉编码器重排序 | +20%准确率 | EMNLP 2019 | ✅ 生产就绪 | | HippoRAG个性化PageRank | 成本降低10-30倍 | NeurIPS 2024 | ✅ 生产就绪 | | 语义分块 | 更好的边界 | LangChain 2024 | ✅ 生产就绪 | 综合结果准确率+20%成本节省99%! ### 新增:高级推理与优化(2025-2026) 在最先进的基础上,GraphRAG-rs现在实现了7项前沿技术,源自近期研究: | 阶段 | 特性 | 影响 | 状态 | |——|——|——|——| | Phase 2 | 符号锚定(CatRAG风格) | 更好的概念查询 | ✅ 完成 | | Phase 2 | 动态边权重 | 上下文感知排序 | ✅ 完成 | | Phase 2 | 因果链分析 | 多步推理 | ✅ 完成 | | Phase 3 | 层级关系聚类 | 多级组织 | ✅ 完成 | | Phase 3 | 图权重优化(DW-GRPO) | 自适应学习 | ✅ 完成 | #### 关键能力 - 符号锚定:自动将抽象概念(如“爱“或“正义“)关联到具体实体,以更好地处理概念查询 - 动态权重:根据查询上下文,使用语义、时间和因果信号调整关系重要性 - 因果推理:发现多步因果链,并进行时间一致性验证 - 层级聚类:使用Leiden算法并结合LLM生成的摘要,将关系组织成多级层次结构 - 权重优化:通过启发式优化学习最优关系权重,以提升检索质量 完整文档:参见 HOW_IT_WORKS.md 了解流水线深度解析,以及 docs.rs/graphrag-core (https://docs.rs/graphrag-core) 了解API参考。 ### 启用高级特性 toml [dependencies] graphrag-core = { path = "../graphrag-core", features = ["lightrag", "leiden", "cross-encoder", "pagerank", "async"] } toml # my_config.toml [enhancements] enabled = true [enhancements.lightrag] enabled = true max_keywords = 20 # 相比传统GraphRAG,token减少6000倍 high_level_weight = 0.6 low_level_weight = 0.4 [enhancements.leiden] enabled = true max_cluster_size = 10 # 质量优于Louvain resolution = 1.0 [enhancements.cross_encoder] enabled = true model_name = "cross-encoder/ms-marco-MiniLM-L-6-v2" top_k = 10 # 准确率提升+20% # 高级特性(Phase 2-3) [advanced_features.symbolic_anchoring] min_relevance = 0.3 # 概念锚点的最小相关性 max_anchors = 5 # 每个查询的最大锚点数 [advanced_features.dynamic_weighting] enable_semantic_boost = true # 提升与查询相似的关系 enable_temporal_boost = true # 提升近期/相关的关系 enable_causal_boost = true # 提升强因果关系 [advanced_features.causal_analysis] min_confidence = 0.3 # 因果链的最小置信度 max_chain_depth = 5 # 搜索的最大链深度 require_temporal_consistency = true # 强制时间顺序 [advanced_features.hierarchical_clustering] num_levels = 3 # 层次级别数(2-5) generate_summaries = true # LLM生成的聚类摘要 [advanced_features.weight_optimization] learning_rate = 0.05 # 优化学习率 max_iterations = 20 # 最大优化迭代次数 use_llm_eval = true # 使用LLM进行质量评估 快速入门示例:参见 graphrag-core/config-examples/quick-start.toml 了解最小配置。 文档:参见 HOW_IT_WORKS.md 了解流水线的完整细节。 ## 安装 ### 前置条件 - Rust 1.85或更高版本 - (可选)Ollama用于本地LLM支持 - 安装Ollama (https://ollama.ai) ### 从源代码安装 bash git clone https://github.com/your-username/graphrag-rs.git cd graphrag-rs cargo build --release # 可选:全局安装 cargo install --path . ## 快速入门(5行代码!) 最快开始使用GraphRAG的方式: rust use graphrag_core::prelude::*; #[tokio::main] async fn main() -> Result<()> { let mut graphrag = GraphRAG::quick_start("你的文档文本").await?; let answer = graphrag.ask("这是什么?").await?; println!("{}", answer); Ok(()) } ### 编译时安全(TypedBuilder) rust use graphrag_core::prelude::*; let graphrag = TypedBuilder::new() .with_output_dir("./output") // 必需——缺少则无法编译 .with_ollama() // 必需——选择你的LLM后端 .with_chunk_size(512) // 可选 .build_and_init()?; ### 获取带解释的答案 rust let explained = graphrag.ask_explained("谁创立了公司?").await?; println!("答案: {}", explained.answer); println!("置信度: {:.0}%", explained.confidence * 100.0); for source in &explained.sources { println!("来源: {} (相关性: {:.0}%)", source.id, source.relevance_score * 100.0); } ### CLI设置向导 bash # 交互式配置向导 graphrag-cli setup # 使用领域模板 graphrag-cli setup --template legal ### 特性包 根据用例选择合适的特性: toml [dependencies] graphrag-core = { version = "0.1", features = ["starter"] } # 入门 graphrag-core = { version = "0.1", features = ["full"] } # 生产环境 graphrag-core = { version = "0.1", features = ["research"] } # 高级 完整指南:参见 HOW_IT_WORKS.mdgraphrag-core/README.md 了解详细的入门文档。 ## 基本用法 ### 1. 简单API(一行代码) rust use graphrag_rs::simple; fn main() -> Result<(), Box> { let answer = simple::answer("你的文档文本", "你的问题")?; println!("答案: {}", answer); Ok(()) } ### 2. 有状态API(多次查询) rust use graphrag_rs::easy::SimpleGraphRAG; fn main() -> Result<(), Box> { let mut graph = SimpleGraphRAG::from_text("你的文档文本")?; let answer1 = graph.ask("这是什么?")?; let answer2 = graph.ask("主要人物是谁?")?; println!("答案1: {}", answer1); println!("答案2: {}", answer2); Ok(()) } ### 3. 构建器API(可配置) rust use graphrag_rs::{GraphRAG, ConfigPreset}; fn main() -> Result<(), Box> { let mut graphrag = GraphRAG::builder() .with_preset(ConfigPreset::Balanced) .auto_detect_llm() .build()?; graphrag.add_document("你的文档")?; let answer = graphrag.ask("你的问题")?; println!("答案: {}", answer); Ok(()) } ## 理解GraphRAG 刚接触GraphRAG?从这里开始: - 工作原理 - 包含图表和示例的完整7阶段流水线说明 - 配置指南 - 完整的JSON5/TOML配置参考 - 示例 - 从基础到高级的动手代码示例 - 更新日志 - 功能历史及最近更新 - API参考 (https://docs.rs/graphrag-core) - graphrag-core 在docs.rs上 ### 完整7阶段流水线Schema text 索引(build_graph()) ├── 阶段1:分块 → chunk_size, chunk_overlap ├── 阶段2:实体提取 → approach, entity_types, use_gleaning ├── 阶段3:关系 → extract_relationships, use_gleaning └── 阶段4:图构建 → enable_pagerank, max_connections 查询(ask()) ├── 阶段5:嵌入 → backend, dimension, model ├── 阶段6:检索 → strategy, top_k └── 阶段7:答案生成 → chat_model, temperature ### 流水线配置摘要 | 阶段 | 目标 | 关键参数 | |——|——|–––––| | 1. 分块 | 分割文本 | chunk_size (300), chunk_overlap (30) | | 2. 提取 | 识别实体 | approach (hybrid), entity_types | | 3. 关系 | 连接实体 | extract_relationships (true) | | 4. 图 | 构建网络 | max_connections (50), enable_pagerank | | 5. 嵌入 | 向量化数据 | backend (openai), dimension (1536) | | 6. 检索 | 查找上下文 | strategy (hybrid), top_k (10) | | 7. 生成 | 回答查询 | chat_model (gpt-4o), temperature (0.0) | 参见 HOW_IT_WORKS.mdconfig/JSON5_CONFIG_GUIDE.md 了解详细配置和性能调优。 ### 4. CLI用法 GraphRAG-rs 提供两个CLI工具: #### 智能CLI(推荐) - simple_cli 自动检测知识图谱是否需要构建,并为你处理一切: bash # 构建智能CLI cargo build --release --bin simple_cli # 一步处理文档并回答问题 cargo run --bin simple_cli config.toml "主要主题有哪些?" # 交互模式——必要时构建图谱,然后等待问题 cargo run --bin simple_cli config.toml # 工作原理: # 1. 加载你的TOML配置 # 2. 检查知识图谱是否存在 # 3. 必要时构建图谱(显示进度) # 4. 使用Ollama回答你的问题 # 5. 将结果保存到输出目录 #### 手动CLI - graphrag-rs 适用于希望完全控制的高级用户: bash # 构建手动CLI cargo build --release # 步骤1:构建知识图谱 ./target/release/graphrag-rs config.toml build # 步骤2:查询图谱 ./target/release/graphrag-rs config.toml query "你的问题" ## 配置 ### 基本配置(config.toml) 项目包含多个即用型配置模板: 可用模板: - config.toml - 通用基本配置 - config_complete.toml - 包含所有选项的完整配置 - config_tom_sawyer.toml - 为书籍处理预配置 - config_example.toml - 带说明的注释模板 必要配置字段: toml [general] # 重要:为你的项目更改这两个路径! input_document_path = "path/to/your/document.txt" # 要处理的文档 output_dir = "./output/your_project" # 保存结果的位置 [pipeline] chunk_size = 800 # 文本块大小(根据文档类型调整) chunk_overlap = 200 # 重叠部分以保留块之间的上下文 [ollama] enabled = true host = "http://localhost" port = 11434 chat_model = "llama3.1:8b" # 用于文本生成的LLM embedding_model = "nomic-embed-text" # 用于嵌入的模型 快速设置: 1. 复制模板:cp config_complete.toml my_project.toml 2. 编辑 input_document_path 指向你的文档 3. 编辑 output_dir 设置结果保存位置 4. 运行:cargo run --bin simple_cli my_project.toml 参见 config_example.toml 了解所有选项的详细说明。 ### 嵌入提供商配置 GraphRAG Core 支持8种嵌入提供商,实现最大灵活性: ``toml [embeddings] backend = “huggingface” # 免费、离线(默认) # backend = “openai” # 最佳质量($0.13/百万token) # backend = “voyage” # Anthropic推荐 # backend = “cohere” # 多语言(100+种语言) # backend = “”

相似文章