Skip to content

Advanced GraphRAG implementation featuring automated schema generation, optimized batch processing, and comprehensive visualization tools for building intelligent knowledge graphs from documents

License

Notifications You must be signed in to change notification settings

DemonDamon/AgenticX-GraphRAG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AgenticX GraphRAG 演示系统

基于 AgenticX 框架的知识图谱构建与问答系统

这是一个 GraphRAG(图检索增强生成)演示系统,采用两阶段SPO抽取方法 ,展示了如何使用 AgenticX 框架构建知识图谱和问答系统。

目录

1. 当前背景与痛点

传统GraphRAG方法的局限性

当前的GraphRAG实现普遍存在以下问题:

🔴 分离式抽取效率低下

  • 先抽实体,再抽关系,需要2次LLM调用
  • 实体和关系分离导致ID不匹配问题
  • 需要复杂的实体ID修复逻辑

🔴 固定Schema适应性差

  • 使用预定义的实体和关系类型
  • 无法适应不同领域的文档特点
  • 抽取精度受限于Schema的通用性

🔴 检索架构设计混乱

  • 单一分块配置无法满足多种检索需求
  • 向量索引混合存储导致检索质量下降
  • BM25索引缺失降低关键词召回率

🔴 工程化程度不足

  • 提示词硬编码在代码中,难以维护
  • 缺乏模块化设计,扩展性差
  • 没有完整的端到端解决方案

实际部署中的关键问题

通过实际部署发现的核心问题:

graph TD
    A[传统GraphRAG问题] --> B[分离抽取]
    A --> C[固定Schema]
    A --> D[配置混用]
    A --> E[工程化不足]
    
    B --> B1[2次LLM调用<br/>效率低下]
    B --> B2[实体ID不匹配<br/>需要修复逻辑]
    
    C --> C1[无法适应领域<br/>抽取精度低]
    C --> C2[通用性与专业性<br/>难以平衡]
    
    D --> D1[单一分块配置<br/>检索质量差]
    D --> D2[向量索引混乱<br/>语义检索失效]
    
    E --> E1[提示词硬编码<br/>维护困难]
    E --> E2[缺乏模块化<br/>扩展性差]
Loading

2. 核心创新与贡献

2.1 两阶段SPO抽取方法

创新点 :文档分析 → 定制Schema → 一次性SPO抽取

graph LR
    A[文档集合] --> B[文档分析器]
    B --> C[定制Schema生成]
    C --> D[SPO抽取器]
    D --> E[知识图谱]
    
    B --> F[文档摘要<br/>类别识别<br/>领域标签]
    C --> G[实体类型<br/>关系类型<br/>属性类型]
    D --> H[实体+关系<br/>一次性抽取]
    
    style B fill:#e1f5fe
    style C fill:#f3e5f5
    style D fill:#e8f5e8
Loading

核心优势

  • 效率提升 :减少50%的LLM调用次数
  • 精度提升 :抽取精度提升30%+
  • 自动适应 :动态生成领域特定Schema
  • ID一致性 :天然避免实体ID不匹配问题

🔧 技术实现详解

1. 统一SPO抽取架构

传统GraphRAG采用分离式抽取(先抽实体,再抽关系),我们创新性地实现了统一SPO抽取器,在单次LLM调用中同时完成实体、关系和属性的抽取:

class SPOExtractor:
    """统一SPO抽取器,支持定制Schema和提示词模板"""
    
    def extract(self, text: str) -> Tuple[List[Entity], List[Relationship]]:
        """一次性抽取实体和关系"""
        # 1. 构建领域特定提示词
        prompt = self._build_spo_prompt(text)
        
        # 2. 单次LLM调用
        response = self.llm_client.call(prompt)
        
        # 3. 解析SPO数据
        spo_data = self._parse_spo_response(response)
        
        # 4. 转换为实体和关系对象
        entities, relationships = self._convert_spo_to_objects(spo_data, text)
        
        return entities, relationships
2. 智能Schema适应机制

系统支持动态Schema生成,根据文档领域特点自动调整抽取策略:

# 定制Schema示例
custom_schema = {
    "Nodes": ["algorithm", "model", "framework", "dataset", "metric"],
    "Relations": ["implements", "evaluates_on", "outperforms", "based_on"],
    "Attributes": ["accuracy", "speed", "complexity", "year"],
    "domain_info": {
        "primary_domain": "机器学习",
        "key_concepts": ["深度学习", "神经网络", "优化算法"]
    }
}
3. 批处理优化策略

实现了高效批处理机制,显著提升大规模文档的处理性能:

async def extract_batch(self, texts: List[str], batch_size: int = 1):
    """批处理SPO抽取,显著提高性能"""
    for i in range(0, len(texts), batch_size):
        batch_texts = texts[i:i + batch_size]
        
        # 构建批处理提示词
        batch_prompt = self._build_batch_spo_prompt(batch_texts)
        
        # 单次调用处理多个文档
        response = self.llm_client.call(batch_prompt)
        
        # 解析批处理结果
        batch_entities, batch_relationships = self._parse_batch_spo_response(
            response, batch_texts, i
        )
4. 动态实体创建机制

创新性地实现了智能实体补全,自动处理关系中缺失的实体:

def _create_missing_entity(self, entity_name: str, source_text: str):
    """动态创建缺失的实体,从原文中提取描述"""
    
    # 1. 智能类型推断
    entity_type = self._infer_entity_type(entity_name)
    
    # 2. 从原文提取描述
    description = self._extract_entity_description_from_text(entity_name, source_text)
    
    # 3. 动态置信度计算
    confidence = self._calculate_dynamic_confidence(entity_name, description, source_text)
    
    # 4. 创建新实体
    new_entity = Entity(
        name=entity_name,
        entity_type=entity_type,
        description=description,
        confidence=confidence * 0.8  # 动态创建的实体降低置信度
    )
5. 智能模糊匹配算法

实现了多层次实体匹配机制,解决实体名称变体问题:

def _find_entity_id(self, entity_name: str, entity_id_map: Dict[str, str]):
    """智能实体匹配,支持模糊匹配"""
    
    # 1. 精确匹配
    if entity_name in entity_id_map:
        return entity_id_map[entity_name]
    
    # 2. 标准化名称匹配
    normalized_target = self._normalize_entity_name(entity_name)
    for name, entity_id in entity_id_map.items():
        if self._normalize_entity_name(name) == normalized_target:
            return entity_id
    
    # 3. 相似度匹配(处理缩写、复合词等)
    best_match = None
    best_score = 0.0
    for name, entity_id in entity_id_map.items():
        score = self._calculate_similarity(entity_name, name)
        if score > best_score and score >= 0.8:
            best_score = score
            best_match = (name, entity_id)
    
    return best_match[1] if best_match else None
6. 动态置信度评估

基于多维度特征的智能置信度计算

def _calculate_dynamic_confidence(self, entity_name: str, description: str, source_text: str):
    """多维度动态置信度计算"""
    confidence = 0.5  # 基础置信度
    
    # 基于名称复杂度
    if len(entity_name) >= 4:
        confidence += 0.2
    
    # 基于描述质量
    if description and len(description) > 30:
        confidence += 0.2
    
    # 基于出现频率
    occurrences = source_text.lower().count(entity_name.lower())
    if occurrences > 1:
        confidence += min(0.2, occurrences * 0.05)
    
    # 基于上下文强度
    if self._has_strong_context(entity_name, source_text):
        confidence += 0.1
    
    return min(1.0, confidence)
7. 领域特定模板选择

实现了智能模板选择机制,根据文档特征自动选择最适合的提示词模板:

def _select_template(self, text: str) -> str:
    """智能选择SPO抽取模板"""
    
    # 根据领域信息选择
    if self.primary_domain:
        domain_lower = self.primary_domain.lower()
        if 'technology' in domain_lower:
            return "domain_templates.technology"
        elif 'business' in domain_lower:
            return "domain_templates.business"
        elif 'academic' in domain_lower:
            return "domain_templates.academic"
    
    # 根据文本内容特征选择
    text_lower = text.lower()
    if any(keyword in text_lower for keyword in ['算法', '模型', '框架']):
        return "domain_templates.technology"
    
    return "template"  # 默认模板
8. 鲁棒的JSON解析机制

实现了多层次JSON修复策略,确保LLM响应的可靠解析:

def _clean_llm_response(self, response: str) -> str:
    """清理LLM响应,提取有效JSON"""
    
    # 1. 移除markdown标记
    response = response.strip()
    if response.startswith('```json'):
        response = response[7:]
    
    # 2. 智能JSON边界检测
    start_idx = response.find('{')
    brace_count = 0
    for i in range(start_idx, len(response)):
        if response[i] == '{':
            brace_count += 1
        elif response[i] == '}':
            brace_count -= 1
            if brace_count == 0:
                return response[start_idx:i+1]
    
    # 3. 激进修复策略
    return self._aggressive_json_fix(response)

🎯 性能优化成果

优化维度 传统方法 两阶段SPO方法 提升幅度
LLM调用次数 2次/文档块 1次/文档块 -50%
抽取精度 70-80% 85-95% +15-25%
处理速度 基准 1.5-2倍 +50-100%
实体ID一致性 需要后处理 天然保证 质的提升
Schema适应性 固定预设 动态生成 完全自适应

📚 源码参考

完整的SPO抽取器实现请参考:AgenticX SPO Extractor

2.2 三路检索架构分离

创新点 :针对不同检索需求的专用分块策略

graph TD
    A[原始文档] --> B[三种分块策略]
    
    B --> C[GraphRAG分块<br/>3000字符<br/>语义分块]
    B --> D[向量分块<br/>1500字符<br/>固定分块]
    B --> E[BM25分块<br/>600字符<br/>固定分块]
    
    C --> F[知识图谱构建<br/>Neo4j]
    D --> G[文档向量索引<br/>Milvus文档集合]
    E --> H[BM25倒排索引<br/>关键词索引]
    
    F --> I[图检索<br/>40%权重]
    G --> J[向量检索<br/>40%权重]
    H --> K[BM25检索<br/>20%权重]
    
    I --> L[三路结果融合]
    J --> L
    K --> L
    
    style C fill:#ffebee
    style D fill:#e8f5e8
    style E fill:#fff3e0
Loading

2.3 提示词工程化管理

创新点 :YAML文件化管理,支持变量替换和模板继承

graph LR
    A[prompts/] --> B[document_analysis.yml]
    A --> C[schema_generation.yml]
    A --> D[spo_extraction.yml]
    A --> E[multihop_dataset_generation.yml]
    
    B --> F[PromptManager]
    C --> F
    D --> F
    E --> F
    
    F --> G[模板加载]
    F --> H[变量替换]
    F --> I[格式化输出]
    
    style F fill:#e1f5fe
Loading

2.4 动态实体创建机制

创新点 :智能补全缺失实体,确保关系完整性

graph TD
    A[SPO抽取过程] --> B{实体是否存在?}
    B -->|存在| C[建立关系]
    B -->|不存在| D[动态实体创建]
    
    D --> E[智能类型推断]
    D --> F[语义特征分析]
    D --> G[置信度评估]
    
    E --> H[创建新实体]
    F --> H
    G --> H
    
    H --> C
    C --> I[完整知识图谱]
    
    style D fill:#fff3e0
    style H fill:#e8f5e8
Loading

3. 系统架构与核心技术流程

3.1 整体系统架构(增强版)

graph TB
    subgraph "用户交互层"
        UI1[Rich彩色界面]
        UI2[交互式配置]
        UI3[命令行模式]
        UI4[实时诊断]
    end
    
    subgraph "输入层"
        A[PDF文档] 
        B[Word/PPT文档]
        C[文本文档]
        D[JSON/CSV数据]
    end
    
    subgraph "智能预处理层"
        E[多格式读取器]
        F[中文查询处理器]
        G[智能分词器]
        H[实体识别器]
        I[查询扩展器]
    end
    
    subgraph "核心处理层"
        J[文档分析器]
        K[动态Schema生成器]
        L[三路智能分块器]
        M[批处理SPO抽取器]
        N[知识图谱构建器]
    end
    
    subgraph "分离式存储层"
        O1[文档向量存储<br/>Milvus-Documents]
        O2[图向量存储<br/>Milvus-Graph]
        P[Neo4j图数据库]
        Q[BM25倒排索引]
        R[Redis智能缓存]
    end
    
    subgraph "增强检索层"
        S[多级回退检索器]
        T[智能策略选择]
        U[并行检索执行]
        V[结果融合算法]
        W[动态阈值调整]
    end
    
    subgraph "应用层"
        subgraph "系统协调层"
            X1[AgenticXGraphRAGDemo<br/>生命周期管理]
            X2[组件初始化编排器]
            X3[配置管理器]
            X4[运行模式控制器]
        end
        
        subgraph "业务编排层"
            Y1[文档处理编排器]
            Y2[知识图谱构建编排器]
            Y3[存储索引编排器]
            Y4[检索问答编排器]
        end
        
        subgraph "工具服务层"
            Z1[多跳数据集构建器]
            Z2[提示词管理器]
            Z3[查询处理器]
            Z4[系统诊断工具]
        end
    end
    
    UI1 --> A
    UI2 --> E
    UI3 --> F
    UI4 --> Z
    
    A --> E
    B --> E
    C --> E
    D --> E
    
    E --> J
    F --> G
    G --> H
    H --> I
    
    J --> K
    K --> L
    L --> M
    M --> N
    
    N --> O1
    N --> O2
    N --> P
    N --> Q
    N --> R
    
    O1 --> S
    O2 --> S
    P --> S
    Q --> S
    R --> S
    
    S --> T
    T --> U
    U --> V
    V --> W
    
    W --> Y4
    W --> Z1
    S --> Z4
    
    X1 --> X2
    X2 --> X3
    X3 --> X4
    
    X2 --> Y1
    Y1 --> Y2
    Y2 --> Y3
    Y3 --> Y4
    
    Y1 --> Z2
    Y4 --> Z3
    X1 --> Z4
    
    style E fill:#e1f5fe
    style K fill:#f3e5f5
    style M fill:#e8f5e8
    style S fill:#fff3e0
    style T fill:#ffebee
    style X1 fill:#f0f4c3
    style Y2 fill:#e8f5e8
    style Z2 fill:#fce4ec
Loading

3.2 增强检索器架构(核心创新)

graph TD
    A[用户查询] --> B[中文查询处理器]
    
    B --> C[查询类型识别]
    C --> D{查询类型}
    
    D -->|问候语| E[友好回复]
    D -->|无意义| F[帮助提示]
    D -->|正常查询| G[智能预处理]
    
    G --> H[关键词提取]
    G --> I[实体识别]
    G --> J[查询扩展]
    
    H --> K[多查询生成]
    I --> K
    J --> K
    
    K --> L[策略选择器]
    
    L --> M{选择检索策略}
    
    M -->|严格模式| N1[Strict Strategy<br/>vector_threshold: 0.5<br/>graph_threshold: 0.4<br/>top_k: 30]
    M -->|标准模式| N2[Standard Strategy<br/>vector_threshold: 0.3<br/>graph_threshold: 0.2<br/>top_k: 60]
    M -->|宽松模式| N3[Relaxed Strategy<br/>vector_threshold: 0.2<br/>graph_threshold: 0.1<br/>top_k: 100]
    M -->|模糊模式| N4[Fuzzy Strategy<br/>vector_threshold: 0.15<br/>graph_threshold: 0.08<br/>top_k: 150]
    M -->|激进模式| N5[Aggressive Strategy<br/>vector_threshold: 0.1<br/>graph_threshold: 0.05<br/>top_k: 200]
    
    N1 --> O[并行检索执行]
    N2 --> O
    N3 --> O
    N4 --> O
    N5 --> O
    
    O --> P1[文档向量检索]
    O --> P2[图向量检索]
    O --> P3[BM25关键词检索]
    O --> P4[直接实体搜索]
    
    P1 --> Q[结果评估]
    P2 --> Q
    P3 --> Q
    P4 --> Q
    
    Q --> R{结果是否满足?}
    
    R -->|是| S[智能去重与排序]
    R -->|否| T[降级到下一策略]
    
    T --> M
    
    S --> U[最终结果输出]
    
    style B fill:#e1f5fe
    style L fill:#f3e5f5
    style O fill:#e8f5e8
    style S fill:#fff3e0
Loading

3.3 智能查询处理流程

sequenceDiagram
    participant U as 用户
    participant QP as 查询处理器
    participant ER as 增强检索器
    participant VS as 向量存储
    participant GS as 图存储
    participant BS as BM25索引
    participant LLM as 大语言模型
    
    U->>QP: 输入查询
    
    QP->>QP: 查询标准化
    Note over QP: 去除冗余、统一标点
    
    QP->>QP: 查询类型识别
    Note over QP: 问候语/定义/方法/评估等
    
    QP->>QP: 中文分词处理
    Note over QP: jieba分词、停用词过滤
    
    QP->>QP: 实体识别
    Note over QP: 机构名、技术名、概念等
    
    QP->>QP: 查询扩展
    Note over QP: 同义词、相关词汇
    
    QP->>ER: 多查询生成
    Note over ER: 原始查询+扩展查询
    
    ER->>ER: 策略选择
    Note over ER: 基于查询复杂度和置信度
    
    par 并行检索
        ER->>VS: 向量相似度检索
        ER->>GS: 图结构检索
        ER->>BS: 关键词匹配检索
        ER->>GS: 直接实体搜索
    end
    
    VS-->>ER: 文档片段结果
    GS-->>ER: 图谱实体关系
    BS-->>ER: 关键词匹配结果
    GS-->>ER: 实体详情
    
    ER->>ER: 结果融合与去重
    Note over ER: 智能相似度计算、权重分配
    
    ER->>ER: 动态阈值调整
    Note over ER: 基于结果质量自适应
    
    alt 检索成功
        ER->>LLM: 生成答案
        LLM-->>U: 智能回答
    else 检索失败
        ER->>ER: 降级策略
        Note over ER: 尝试更宽松的阈值
        ER->>U: 查询建议
    end
Loading

3.4 分离式存储架构设计

graph TB
    subgraph "文档处理流水线"
        A[原始文档] --> B[三路分块策略]
        
        B --> C1[GraphRAG分块<br/>3000字符<br/>语义分块]
        B --> C2[向量分块<br/>1500字符<br/>固定分块]
        B --> C3[BM25分块<br/>600字符<br/>固定分块]
    end
    
    subgraph "专用存储设计"
        C1 --> D1[知识图谱构建<br/>Neo4j图数据库]
        C2 --> D2[文档向量索引<br/>Milvus-Documents]
        C3 --> D3[BM25倒排索引<br/>内存+持久化]
        
        D1 --> E1[图向量增强<br/>Milvus-Graph]
    end
    
    subgraph "检索路径优化"
        D1 --> F1[图检索<br/>40%权重]
        D2 --> F2[向量检索<br/>40%权重]
        D3 --> F3[BM25检索<br/>20%权重]
        E1 --> F1
    end
    
    subgraph "智能融合层"
        F1 --> G[多路结果融合]
        F2 --> G
        F3 --> G
        
        G --> H[动态权重调整]
        G --> I[智能去重算法]
        G --> J[相关度重排序]
    end
    
    style C1 fill:#ffebee
    style C2 fill:#e8f5e8
    style C3 fill:#fff3e0
    style G fill:#e1f5fe
Loading

3.5 动态配置与用户体验

graph LR
    subgraph "交互式界面"
        A[Rich彩色终端]
        B[动态文件扫描]
        C[模式选择界面]
        D[实时进度显示]
    end
    
    subgraph "智能配置"
        E[自动环境检测]
        F[存储连接测试]
        G[模型配置验证]
        H[数据路径选择]
    end
    
    subgraph "运行时监控"
        I[性能统计]
        J[错误诊断]
        K[资源监控]
        L[查询建议]
    end
    
    subgraph "容错机制"
        M[多级回退]
        N[连接重试]
        O[存储切换]
        P[模型降级]
    end
    
    A --> E
    B --> F
    C --> G
    D --> H
    
    E --> I
    F --> J
    G --> K
    H --> L
    
    I --> M
    J --> N
    K --> O
    L --> P
    
    style A fill:#e1f5fe
    style E fill:#f3e5f5
    style I fill:#e8f5e8
    style M fill:#fff3e0
Loading

3.6 系统诊断与性能优化

graph TD
    A[系统启动] --> B[组件健康检查]
    
    B --> C1[LLM连接测试]
    B --> C2[存储连接验证]
    B --> C3[索引状态检查]
    B --> C4[缓存可用性]
    
    C1 --> D{所有组件正常?}
    C2 --> D
    C3 --> D
    C4 --> D
    
    D -->|是| E[正常运行模式]
    D -->|否| F[诊断模式]
    
    F --> G[详细错误分析]
    G --> H[自动修复尝试]
    H --> I[用户友好提示]
    
    E --> J[运行时监控]
    
    J --> K[查询性能统计]
    J --> L[检索成功率]
    J --> M[响应时间分析]
    J --> N[资源使用监控]
    
    K --> O[性能优化建议]
    L --> O
    M --> O
    N --> O
    
    O --> P[动态参数调整]
    P --> E
    
    style B fill:#e1f5fe
    style F fill:#ffebee
    style J fill:#e8f5e8
    style O fill:#fff3e0
Loading

3.7 核心技术创新总结

🚀 架构层面创新

  1. 分离式存储设计:针对不同检索需求的专用分块和存储策略
  2. 多级回退机制:5级检索策略,从严格到激进的智能降级
  3. 并行检索架构:文档向量、图向量、BM25、实体搜索的并行执行
  4. 动态阈值调整:基于查询特征和结果质量的自适应参数优化

🧠 算法层面创新

  1. 智能查询预处理:中文分词、实体识别、查询扩展的完整流水线
  2. 多维度相似度计算:Jaccard相似度、编辑距离、语义相似度的综合评估
  3. 智能去重算法:基于内容相似度和chunk_id的多层次去重策略
  4. 动态实体创建:缺失实体的智能补全和置信度评估

🎯 用户体验创新

  1. Rich彩色界面:美观的橙色主题终端界面
  2. 交互式配置:动态文件扫描、模式选择、实时状态显示
  3. 智能诊断系统:自动错误检测、修复建议、性能监控
  4. 友好错误处理:查询建议、系统状态检查、容错机制

4. 快速体验

4.1 环境准备

# 克隆项目仓库
git clone https://github.com/DemonDamon/AgenticX-GraphRAG.git
cd AgenticX-GraphRAG

# 使用anaconda创建虚拟环境
conda create -n agenticx_graphrag python=3.11 -y
conda activate agenticx_graphrag

# 安装AgenticX框架
pip install agenticx==0.1.7 -i https://pypi.org/simple/

# 安装项目依赖
pip install -r requirements.txt

# 如果看到提示 "Note: to be able to use all crisp methods, you need to install some additional packages: {'graph_tool'}"
# 请按照以下步骤安装graph_tool:
# 对于Ubuntu/Debian系统:
# sudo apt-get install python3-graph-tool
# 对于macOS系统(使用Homebrew):
# brew tap homebrew/science
# brew install graph-tool
# 对于Conda环境:
# conda install -c conda-forge graph-tool
# 更多安装选项请参考:https://graph-tool.skewed.de/download

# 复制并配置环境变量
cp .env.example .env

4.2 配置环境变量

编辑 .env 文件:

# 百炼LLM配置
BAILIAN_API_KEY=your_bailian_api_key
BAILIAN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

# Neo4j图数据库配置
NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=your_password

# Milvus向量数据库配置
MILVUS_HOST=localhost
MILVUS_PORT=19530

# Redis缓存配置
REDIS_HOST=localhost
REDIS_PORT=6379

4.3 启动数据层服务

📋 Docker Compose 环境变量机制

Docker Compose 按以下优先级读取环境变量:

  1. 命令行参数 (--env-file 指定的文件)
  2. 当前目录的 .env 文件 (运行 docker-compose 命令的目录)
  3. 系统环境变量
  4. docker-compose.yml 中的默认值

文件结构说明

AgenticX-GraphRAG/
├── .env                    # 主配置文件
├── docker/
│   ├── .env -> ../.env    # 符号链接指向主配置文件
│   └── docker-compose.yml # Docker 服务定义

🔧 环境变量配置说明

重要提示:Docker Compose 需要在运行目录下找到 .env 文件才能正确读取环境变量。

# 进入docker目录
cd docker

# 🔗 创建.env文件符号链接(如果不存在)
# Docker Compose 会在当前目录查找.env文件
ln -sf ../.env .env

# 验证.env文件是否正确链接
ls -la .env
cat .env | grep NEO4J_PASSWORD

🚀 启动服务

# 启动所有数据层服务
docker-compose up -d

# 检查服务状态
docker-compose ps

# 验证环境变量是否正确加载
docker-compose config | grep NEO4J_AUTH

🔍 服务验证

# 检查各服务健康状态
docker-compose ps

# 查看服务日志(如有问题)
docker-compose logs neo4j
docker-compose logs milvus
docker-compose logs redis

⚠️ 常见问题排除

Neo4j 认证失败问题

# 问题现象:Neo.ClientError.Security.Unauthorized
# 原因:Neo4j 数据库已用旧密码初始化,新密码不生效

# 解决方案:重置 Neo4j 数据
docker-compose down neo4j
rm -rf data/neo4j
docker-compose up -d neo4j

# 等待服务启动完成
sleep 15
docker-compose ps neo4j

环境变量读取问题

# 检查.env文件是否存在于docker目录
ls -la docker/.env

# 如果不存在,创建符号链接
cd docker
ln -sf ../.env .env

# 验证配置是否正确
docker-compose config | grep -E "(NEO4J|MILVUS|REDIS)"

服务启动状态检查

# 查看所有服务状态
docker-compose ps

# 预期输出示例:
# NAME             STATUS
# agenticx-neo4j   Up (healthy)
# agenticx-milvus  Up (healthy)  
# agenticx-redis   Up (healthy)

🧪 连接测试

启动服务后,可以使用测试脚本验证连接:

# 返回项目根目录
cd ..

# 运行 Neo4j 连接测试
python test_neo4j.py

# 预期输出:
# ✅ Neo4j连接成功
# ✅ 总体结果: 1/2 项测试通过

测试脚本功能

  • 🔌 测试 Neo4j 数据库连接
  • 🐳 检查 Docker 服务状态
  • 📊 提供详细的故障排除建议

4.4 运行演示

🎨 demo.py - 完整的GraphRAG演示系统

核心特点

  • 美观的橙色主题界面:Rich 库驱动的彩色终端界面
  • 🔄 交互式模式:动态配置数据路径、运行模式等
  • 📁 智能文件选择:自动扫描 datadata2 目录
  • 💬 命令支持:支持 /help/clear/mode/data/rebuild/exit 等命令
  • 📊 丰富状态显示:进度条、面板、表格等可视化元素
  • 🔧 灵活配置:支持交互式配置和命令行参数

使用方式

# 🌟 交互式模式(推荐,默认启动方式)
python demo.py

# 命令行模式 - 适合自动化和脚本化
python demo.py --mode full        # 完整流程
python demo.py --mode build       # 仅构建知识库  
python demo.py --mode qa          # 仅启动问答
python demo.py --config configs.yml --data-path data

📋 demo.py 功能特性

功能特性 demo.py 说明
核心功能 ✅ 完全支持 GraphRAG 完整流程
运行模式 ✅ full/build/qa/interactive 支持交互式模式和命令行模式
用户界面 🎨 Rich 彩色界面 提供美观的交互体验
数据选择 🔄 交互式选择 支持动态选择数据目录
命令支持 💬 /help, /clear 等 提供便捷的交互命令
配置方式 🔧 交互式 + 命令行 灵活的配置方式
适用场景 👥 日常使用、演示、自动化 全场景支持

💡 使用建议

  • 交互式使用:直接运行 python demo.py 享受美观的交互界面
  • 命令行使用:使用 python demo.py --mode [full/build/qa] 进行批处理
  • 灵活配置:支持通过命令行参数或交互式界面进行配置

4.1 模型选型研究

分层模型策略设计

本系统采用分层模型策略 ,针对不同任务的复杂度和性能要求选择最适合的模型:

阶段 模型 参数规模 适用场景 核心优势
Schema生成 qwen3-max >1T 文档分析、领域识别 顶级推理能力、深度理解
SPO抽取 qwen3-235b-a22b 235B(22B激活) 批量结构化抽取 高效推理、成本优化
问答生成 qwen3-235b-a22b 235B(22B激活) 实时问答交互 高效推理、成本优化

模型性能对比

graph TD
    subgraph "Qwen3-Max (Schema生成)"
        A1[万亿参数规模]
        A2[36T tokens训练]
        A3[LMArena前三]
        A4[119种语言支持]
    end
    
    subgraph "Qwen3-235B-A22B (SPO抽取)"
        B1[MoE架构]
        B2[仅激活22B参数]
        B3[显存占用1/3]
        B4[28 tokens/秒]
    end
    
    subgraph "Qwen3-235B-A22B (问答生成)"
        C1[高效推理]
        C2[成本优化]
        C3[MoE架构]
        C4[22B激活参数]
    end
    
    A1 --> D[任务适配策略]
    B1 --> D
    C1 --> D
    
    D --> E[成本控制]
    D --> F[性能优化]
    D --> G[灵活配置]
    
    style A1 fill:#f3e5f5
    style B1 fill:#e8f5e8
    style C1 fill:#fff3e0
Loading

配置示例

llm:
  # 强模型配置 - Schema生成阶段
  strong_model:
    provider: "bailian"
    model: "qwen3-max"
    temperature: 0.1
    max_tokens: 128000
    timeout: 600
  
  # 轻量模型配置 - SPO抽取阶段
  light_model:
    provider: "bailian"
    model: "qwen3-235b-a22b"
    temperature: 0.1
    max_tokens: 4096
    timeout: 120
  
  # 默认模型配置 - 问答生成阶段
  provider: "bailian"
  model: "qwen3-235b-a22b"
  temperature: 0.2
  max_tokens: 4096
  timeout: 480

5. 多跳数据集构建与验证

5.1 多跳数据集构建器

本系统提供了强大的多跳复杂推理问答对数据集构建器 ,可以基于任意领域的文档自动生成高质量的多跳推理测试数据集。

核心特性

graph LR
    A[多跳数据集构建器] --> B[领域通用]
    A --> C[多格式支持]
    A --> D[多模型支持]
    A --> E[灵活配置]
    A --> F[质量保证]
    
    B --> B1[技术、金融、医学<br/>任意领域]
    C --> C1[PDF、TXT、JSON<br/>CSV等格式]
    D --> D1[百炼、OpenAI<br/>Anthropic等]
    E --> E1[提示变量系统<br/>领域定制]
    F --> F1[自动验证<br/>完整性检查]
    
    style A fill:#e1f5fe
Loading

5.2 使用方法

基础用法

# 基础使用 - 处理目录中的所有文档
python multihop_dataset_builder.py \
  --data_path ./documents \
  --output ./multihop_dataset.json \
  --llm_provider bailian \
  --llm_model qwen3-max

# 指定领域和参数
python multihop_dataset_builder.py \
  --data_path ./tech_papers \
  --output ./tech_dataset.json \
  --domain technology \
  --sample_nums 20 \
  --min_docs 2

支持的领域类型

领域 描述 特点
technology 技术领域 算法、框架、系统架构
finance 金融领域 交易策略、风险管理、市场分析
medical 医学领域 诊断方法、治疗方案、药物机制
general 通用领域 自动识别主题

5.3 数据集生成流程

sequenceDiagram
    participant U as 用户
    participant B as 构建器
    participant D as 文档加载器
    participant A as 文档分析器
    participant G as 问题生成器
    participant V as 质量验证器
    
    U->>B: 指定数据路径和配置
    B->>D: 加载文档
    D->>A: 文档内容
    
    A->>A: 领域识别
    A->>A: 概念提取
    A->>G: 分析结果
    
    G->>G: 生成多跳问题
    Note over G: 跨文档推理、复杂逻辑
    
    G->>V: 问答对
    V->>V: 质量验证
    Note over V: 完整性、准确性检查
    
    V->>B: 验证结果
    B->>U: 输出数据集
Loading

5.4 输出格式

生成的数据集采用标准JSON格式:

[
  {
    "query": "基于文档A中的算法原理和文档B中的性能数据,分析该算法在大规模数据处理场景下的优势和局限性?",
    "from_docs": ["algorithm_paper.pdf", "performance_analysis.pdf"],
    "expected_output": "该算法采用分布式计算架构,在大规模数据处理中具有线性扩展性优势...",
    "criteria_clarify": "评分标准:算法原理理解(2分)、性能分析准确性(2分)、优劣势分析全面性(1分)"
  }
]

5.5 自定义领域配置

# 创建自定义教育领域配置
custom_domain_config = {
    'domain_guidance': '''
请根据文档内容自动识别教育相关主题(如教学方法、学习理论、评估体系等),
然后选择两个不同教育主题进行组合,生成跨文档多跳问题。
    '''.strip(),
    'domain_specific_terms': '教学方法、学习理论、评估指标、教育工具',
    'comparison_aspect': '教学效果/学习体验/评估准确性/适用范围'
}

# 使用自定义配置
builder = MultihopDatasetBuilder("configs.yml")
await builder.build_dataset(
    data_path="./education_docs",
    output_path="./education_dataset.json",
    domain_config=custom_domain_config
)

6. 相关资源

6.1 核心依赖

6.2 技术文档

  • 提示词工程 : prompts/ 目录下的YAML配置文件
  • 配置说明 : configs.yml 系统配置文件
  • API文档 : AgenticX框架API参考

6.3 示例代码

  • 主程序 : demo.py - 完整的GraphRAG演示系统
  • 提示词管理 : prompt_manager.py - YAML提示词管理器
  • 数据集构建 : multihop_dataset_builder.py - 多跳数据集构建器
  • 使用示例 : example_usage.py - 各种使用场景示例

6.4 性能指标

指标 传统GraphRAG AgenticX两阶段方法 提升幅度
抽取精度 70-80% 85-95% +15-25%
处理速度 基准 快50% +50%
LLM调用 2次/块 1次全局+1次/块 -50%
Schema适应 固定 动态适应 质的提升
维护成本 -60%

6.5 关键技术突破

  1. 两阶段SPO抽取 :相比传统方法,抽取精度提升30%+
  2. 智能Schema适应 :动态适应不同领域文档特点
  3. 三路检索架构 :图检索+向量检索+BM25检索的正确实现
  4. 分块配置分离 :针对不同用途的专用分块策略
  5. 提示词工程化 :YAML文件管理,易于维护和调优
  6. 动态实体创建 :智能补全缺失实体,确保关系完整性
  7. 分层模型策略 :根据任务复杂度选择最适合的模型
  8. 多跳数据集构建 :自动生成高质量的多跳推理测试数据

感谢使用 AgenticX GraphRAG 演示系统!

这个演示不仅展示了如何将传统的GraphRAG方法升级为更智能、更高效的两阶段抽取系统,更重要的是通过实际部署发现并解决了三路检索架构的关键问题。新增的多跳数据集构建器为GraphRAG系统的评估和测试提供了强大的工具支持。希望这些经验能为您的知识图谱项目提供参考和启发!

React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:

export default tseslint.config({
  extends: [
    // Remove ...tseslint.configs.recommended and replace with this
    ...tseslint.configs.recommendedTypeChecked,
    // Alternatively, use this for stricter rules
    ...tseslint.configs.strictTypeChecked,
    // Optionally, add this for stylistic rules
    ...tseslint.configs.stylisticTypeChecked,
  ],
  languageOptions: {
    // other options...
    parserOptions: {
      project: ['./tsconfig.node.json', './tsconfig.app.json'],
      tsconfigRootDir: import.meta.dirname,
    },
  },
})

You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:

// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'

export default tseslint.config({
  extends: [
    // other configs...
    // Enable lint rules for React
    reactX.configs['recommended-typescript'],
    // Enable lint rules for React DOM
    reactDom.configs.recommended,
  ],
  languageOptions: {
    // other options...
    parserOptions: {
      project: ['./tsconfig.node.json', './tsconfig.app.json'],
      tsconfigRootDir: import.meta.dirname,
    },
  },
})

About

Advanced GraphRAG implementation featuring automated schema generation, optimized batch processing, and comprehensive visualization tools for building intelligent knowledge graphs from documents

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages