feat(knowledge-graph): 实现知识图谱基础设施搭建

实现功能:
- Neo4j Docker Compose 配置(社区版,端口 7474/7687,数据持久化)
- Makefile 新增 Neo4j 命令(neo4j-up/down/logs/shell)
- knowledge-graph-service Spring Boot 服务(完整的 DDD 分层架构)
- kg_extraction Python 模块(基于 LangChain LLMGraphTransformer)

技术实现:
- Neo4j 配置:环境变量化密码,统一默认值 datamate123
- Java 服务:
  - Domain: GraphEntity, GraphRelation 实体模型
  - Repository: Spring Data Neo4j,支持 graphId 范围查询
  - Service: 业务逻辑,graphId 双重校验,查询限流
  - Controller: REST API,UUID 格式校验
  - Exception: 实现 ErrorCode 接口,统一异常体系
- Python 模块:
  - KnowledgeGraphExtractor 类
  - 支持异步/同步/批量抽取
  - 支持 schema-guided 模式
  - 兼容 OpenAI 及自部署模型

关键设计:
- graphId 权限边界:所有实体操作都在正确的 graphId 范围内
- 查询限流:depth 和 limit 参数受配置约束
- 异常处理:统一使用 BusinessException + ErrorCode
- 凭据管理:环境变量化,避免硬编码
- 双重防御:Controller 格式校验 + Service 业务校验

代码审查:
- 经过 3 轮 Codex 审查和 2 轮 Claude 修复
- 所有 P0 和 P1 问题已解决
- 编译通过,无阻塞性问题

文件变更:
- 新增:Neo4j 配置、knowledge-graph-service(11 个 Java 文件)、kg_extraction(3 个 Python 文件)
- 修改:Makefile、pom.xml、application.yml、pyproject.toml
This commit is contained in:
2026-02-17 20:42:55 +08:00
parent 8f21798d57
commit 5a553ddde3
22 changed files with 1007 additions and 0 deletions

View File

@@ -76,6 +76,12 @@ help:
@echo " make download SAVE=true PLATFORM=linux/arm64 Save ARM64 images"
@echo " make load-images Load all downloaded images from dist/"
@echo ""
@echo "Neo4j Commands:"
@echo " make neo4j-up Start Neo4j graph database"
@echo " make neo4j-down Stop Neo4j graph database"
@echo " make neo4j-logs View Neo4j logs"
@echo " make neo4j-shell Open Neo4j Cypher shell"
@echo ""
@echo "Utility Commands:"
@echo " make create-namespace Create Kubernetes namespace"
@echo " make help Show this help message"
@@ -498,3 +504,25 @@ load-images:
else \
echo "Successfully loaded $$count image(s)"; \
fi
# ========== Neo4j Targets ==========
.PHONY: neo4j-up
neo4j-up:
@echo "Starting Neo4j graph database..."
docker compose -f deployment/docker/neo4j/docker-compose.yml up -d
@echo "Neo4j Browser: http://localhost:7474"
@echo "Bolt URI: bolt://localhost:7687"
.PHONY: neo4j-down
neo4j-down:
@echo "Stopping Neo4j graph database..."
docker compose -f deployment/docker/neo4j/docker-compose.yml down
.PHONY: neo4j-logs
neo4j-logs:
docker compose -f deployment/docker/neo4j/docker-compose.yml logs -f
.PHONY: neo4j-shell
neo4j-shell:
docker exec -it datamate-neo4j cypher-shell -u neo4j -p "$${NEO4J_PASSWORD:-datamate123}"