# aicoder **Repository Path**: goldfinch_1/aicoder ## Basic Information - **Project Name**: aicoder - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-19 - **Last Updated**: 2026-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能知识库系统 一个基于Docling、Neo4j和Milvus的智能知识库系统,用于从文档中提取结构化知识并构建支持语义检索的知识图谱。 ## 功能特性 - **文档解析**:使用Docling高效解析DOCX文档,支持段落和表格的智能提取 - **知识提取**:支持规则引擎和Ollama本地模型两种方式提取结构化知识 - **知识存储**: - Neo4j图数据库存储实体和关系 - Milvus向量数据库存储文本块和向量嵌入 - **智能检索**: - 基于语义的向量检索 - 基于关系的图查询 - **批量处理**:支持目录级别的批量文档处理 - **增量更新**:只处理新增或修改过的文档 ## 系统架构 ``` 文档 → DoclingLoader → TableAwareSplitter → KnowledgeExtractor → KnowledgeRouter → Neo4j + Milvus ``` ### 主要组件 1. **DoclingLoader**:文档加载器,解析DOCX文档并提取内容 2. **TableAwareSplitter**:表格感知分割器,按章节和表格智能分割文档 3. **KnowledgeExtractor**:知识提取器,支持规则引擎和Ollama模型两种方式 4. **KnowledgeRouter**:知识路由器,将知识路由到合适的存储系统 5. **Neo4jBuilder**:构建知识图谱,存储实体和关系 6. **MilvusIndexer**:向量索引器,存储文本块和向量嵌入 ## 安装指南 ### 环境要求 - Python 3.10+ - Neo4j 5.20+ - Milvus 2.3+ - Ollama(可选,用于模型驱动的知识提取) ### 安装依赖 ```bash pip install -r requirements.txt ``` ### 配置服务 #### Neo4j 1. 下载并安装Neo4j:https://neo4j.com/download/ 2. 启动Neo4j服务 3. 修改`config/settings.py`中的Neo4j连接配置 #### Milvus 在Windows上安装Milvus: ```bash # 安装依赖 pip install pymilvus==2.4.9 pip install milvus # 启动Milvus服务 milvus-server --data ./data ``` #### Ollama(可选) 1. 下载并安装Ollama:https://ollama.com/download 2. 拉取模型:`ollama pull deepseek-chat` 3. 启动Ollama服务 ## 快速开始 ### 1. 批量处理文档 ```bash # 使用规则引擎处理doc目录中的所有文档 python -m pipelines.batch_processor # 使用Ollama模型处理指定目录 python -m pipelines.batch_processor --doc-dir ./my_docs --use-ollama ``` ### 2. 单独使用各组件 #### 文档加载和分割 ```python from pipelines.loader import DoclingLoader from pipelines.splitter import TableAwareSplitter # 加载文档 loader = DoclingLoader("doc/示例文档.docx") docs = loader.load() # 分割文档 splitter = TableAwareSplitter(chunk_size=1000, chunk_overlap=200) chunks = splitter.split_documents(docs) ``` #### 知识提取 ```python from pipelines.rule_classifier import RuleClassifier from pipelines.extractor import OllamaExtractor # 使用规则引擎 extractor = RuleClassifier() results = [extractor.process_document_chunk(chunk) for chunk in chunks[:5]] # 使用Ollama模型 extractor = OllamaExtractor(model="deepseek-chat") results = [extractor.process_document_chunk(chunk) for chunk in chunks[:5]] ``` #### 知识存储 ```python from pipelines.neo4j_builder import get_driver, process_document from pipelines.milvus_indexer import get_embedding_model, index_document # 存储到Neo4j driver = get_driver() process_document(driver, Path("doc/示例文档.docx")) # 存储到Milvus model = get_embedding_model() index_document(get_milvus_client(), model, Path("doc/示例文档.docx")) ``` ### 3. 运行综合验证示例 ```bash python example.py ``` ## 查询示例 ### 语义检索(Milvus) ```python from pipelines.milvus_indexer import get_client, get_embedding_model, search_demo client = get_client() model = get_embedding_model() search_demo(client, model, "调入患者流程", top_k=5) ``` ### 图查询(Neo4j) ```python from pipelines.neo4j_builder import get_driver, query driver = get_driver() # 查询所有接口 query(driver, "MATCH (i:Interface) RETURN i.name, i.owner LIMIT 10") # 查询UI元素与数据库字段的映射关系 query(driver, "MATCH (u:UIElement)-[:MAPS_TO]->(f) RETURN u.name, f.name LIMIT 20") # 查询系统参数 query(driver, "MATCH (p:SysParam) RETURN p.name, p.chinese_name LIMIT 15") ``` ## 配置说明 主要配置文件:`config/settings.py` ```python # Neo4j配置 NEO4J_URI = "bolt://localhost:7687" NEO4J_USER = "neo4j" NEO4J_PASSWORD = "your_password" # Milvus配置 MILVUS_URI = "http://localhost:19530" COLLECTION_NAME = "docling_chunks" EMBEDDING_DIM = 512 # 文档配置 DOC_DIR = "doc" DOC_EXTENSIONS = ['.docx', '.doc'] # 模型配置 EMBEDDING_MODEL = "BAAI/bge-small-zh-v1.5" LOCAL_FILES_ONLY = True ``` ## 目录结构 ``` aicoder/ ├── config/ # 配置文件 │ └── settings.py # 系统配置 ├── doc/ # 文档目录 ├── models/ # 数据模型 │ └── kg_schema.py # 知识图谱模型 ├── pipelines/ # 核心流水线 │ ├── loader.py # 文档加载器 │ ├── splitter.py # 文档分割器 │ ├── rule_classifier.py # 规则分类器 │ ├── extractor.py # Ollama提取器 │ ├── router.py # 知识路由器 │ ├── neo4j_builder.py # Neo4j构建器 │ ├── milvus_indexer.py # Milvus索引器 │ └── batch_processor.py # 批量处理器 ├── utils/ # 工具函数 │ ├── docx_utils.py # Docx处理工具 │ ├── table_parser.py # 表格解析工具 │ └── table_enhancer.py # 表格增强工具 ├── tests/ # 测试代码 │ └── test_phase1.py # Phase1测试 ├── example.py # 综合示例 ├── requirements.txt # 依赖列表 └── README.md # 项目说明 ``` ## 开发说明 ### 代码规范 - 使用Pydantic进行数据验证 - 使用类型提示增强代码可读性 - 遵循PEP 8编码规范 - 为公共接口添加文档字符串 ### 测试 运行Phase1测试: ```bash python -m tests.test_phase1 ``` ## 故障排除 ### Neo4j连接失败 - 检查Neo4j服务是否正在运行 - 验证连接配置(URI、用户名、密码) - 确保Neo4j允许远程连接(在neo4j.conf中配置) ### Milvus连接失败 - 检查Milvus服务是否正在运行 - 验证MILVUS_URI配置 - 确保端口7687和19530没有被防火墙阻止 ### Ollama模型加载失败 - 检查Ollama服务是否正在运行 - 验证模型是否已正确拉取 - 检查模型名称是否正确 ## 性能优化 1. **批量处理**:使用batch_processor.py处理多个文档,提高效率 2. **增量更新**:系统会自动记录已处理的文档,只处理新增或修改的文档 3. **模型优化**: - 使用small版本的模型(如bge-small-zh-v1.5) - 启用ONNX加速(可选) 4. **Milvus配置**:根据数据量调整索引参数(nlist等) ## 未来改进 1. **多格式支持**:添加PDF、Markdown等文档格式的支持 2. **知识更新**:实现知识的更新和删除功能 3. **可视化界面**:添加Web界面,方便管理和查询知识 4. **多模型支持**:支持更多的本地LLM模型 5. **分布式处理**:支持分布式环境下的大规模文档处理 ## 许可证 MIT License