OpenKG — 自主可控的语义知识图谱与决策智能平台
仿照 Semantica 架构实现的完全自主可控知识图谱引擎,支持 Ollama / vLLM 本地大模型,提供 CLI 和 FastAPI 双接口。
核心特性
-
多源数据接入:文件(PDF/DOCX/HTML/CSV/JSON/XML/TXT)、Web、数据库、纯文本
-
LLM 驱动抽取:支持 Ollama / vLLM 本地大模型进行实体识别、关系抽取、三元组抽取
-
知识图谱构建:实体合并、冲突检测、时序图谱、图分析(中心性、社区检测、路径查找)
-
向量检索:内存 / FAISS 后端,混合搜索(向量 + 元数据过滤)
-
决策智能:决策记录、因果链分析、先例搜索、策略引擎、影响分析
-
端到端溯源:W3C PROV-O 兼容,doc → chunk → entity → KG → query → response 全链路追踪
-
确定性推理:前向链 IF-THEN 规则推理、Rete 网络、Datalog
-
本体管理:从知识图谱自动生成本体(OWL/Turtle)
-
多格式导出:JSON、CSV、GraphML、RDF Turtle
-
双接口:CLI(click + rich)+ FastAPI REST API
快速开始
安装
cd openkg
pip install -e . --break-system-packages
CLI 使用
# 查看系统状态
openkg status
# 使用 pattern 抽取构建知识图谱(无需 LLM 服务)
openkg build --extract-method pattern document.txt -o kg.json
# 使用 Ollama LLM 抽取
openkg --llm-provider ollama --llm-model qwen2.5:7b build document.pdf -o kg.json
# 使用 vLLM 抽取
openkg --llm-provider vllm --llm-model Qwen/Qwen2.5-7B-Instruct build document.pdf -o kg.json
# 向量搜索
openkg search "查询内容" --top-k 5
# RAG 问答
openkg ask "什么是知识图谱?"
# 记录决策
openkg decide --category loan --scenario "贷款申请" --reasoning "达标" --outcome approved --confidence 0.9
# 启动 FastAPI 服务
openkg serve --port 8900
Python API 使用
from openkg.core import OpenKG, Config, LLMConfig
# 初始化(使用 Ollama)
kg = OpenKG(Config(
llm=LLMConfig(provider="ollama", model="qwen2.5:7b", base_url="http://localhost:11434"),
extract_method="llm",
))
# 或使用 pattern 抽取(无需 LLM)
kg = OpenKG(Config(extract_method="pattern"))
kg.initialize()
# 构建知识图谱
result = kg.build_knowledge_base(sources=["document.pdf", "另一个文档.txt"])
print(f"实体: {result['entities']}, 关系: {result['relationships']}")
# 向量搜索
results = kg.search("查询内容", top_k=5)
# RAG 问答
answer = kg.ask("什么是知识图谱?")
# 决策智能
dec_id = kg.record_decision(
category="loan_approval",
scenario="个人贷款申请",
reasoning="收入达标,信用良好",
outcome="approved",
confidence=0.88,
)
# 因果分析
kg.add_causal_relationship(dec_id1, dec_id2, "CAUSED")
chain = kg.trace_decision_chain(dec_id2, direction="upstream")
# 溯源导出
provenance = kg.export_provenance(format="prov-o")
kg.shutdown()
FastAPI Server
# 启动服务
openkg serve --port 8900
# 或直接运行
python -m openkg.server
API 端点:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
API 信息 |
| GET | /health |
健康检查 |
| POST | /kg/build |
构建知识图谱 |
| POST | /kg/upload |
上传文件构建 |
| GET | /kg/stats |
KG 统计 |
| GET | /kg/entities |
实体列表 |
| POST | /search |
向量搜索 |
| POST | /ask |
RAG 问答 |
| POST | /decisions |
记录决策 |
| GET | /decisions |
决策列表 |
| POST | /decisions/causal-link |
添加因果关系 |
| GET | /decisions/{id}/chain |
决策链追踪 |
| GET | /provenance |
溯源列表 |
| GET | /provenance/export |
溯源导出 |
| POST | /reason |
规则推理 |
| GET | /export |
KG 导出 |
架构设计
六层分层架构
┌─────────────────────────────────────────────────┐ │ 接口层: CLI (click+rich) / FastAPI REST API │ ├─────────────────────────────────────────────────┤ │ 核心编排层: OpenKG Orchestrator / Lifecycle │ │ / PluginRegistry / ConfigManager │ ├─────────────────────────────────────────────────┤ │ 管线层: PipelineBuilder / ExecutionEngine │ ├─────────────────────────────────────────────────┤ │ 语义处理层: ingest / parse / split │ │ / semantic_extract / normalize / dedup │ │ / embeddings │ ├─────────────────────────────────────────────────┤ │ 知识表示层: kg / context / reasoning │ │ / ontology / provenance │ ├─────────────────────────────────────────────────┤ │ 存储层: graph_store (NetworkX/Neo4j) │ │ / vector_store (Memory/FAISS) │ └─────────────────────────────────────────────────┘
LLM 支持
| Provider | 端点 | 模型示例 |
|---|---|---|
| Ollama | http://localhost:11434 |
qwen2.5:7b, llama3:8b |
| vLLM | http://localhost:8000 |
Qwen/Qwen2.5-7B-Instruct |
项目结构
openkg/ ├── openkg/ │ ├── core/ # 核心编排(orchestrator, config, lifecycle, plugin) │ ├── llms/ # LLM 客户端(ollama, vllm) │ ├── ingest/ # 数据接入(file, web, text) │ ├── parse/ # 文档解析(pdf, docx, html, csv, json, xml) │ ├── split/ # 文档分块(recursive, sentence, paragraph, token) │ ├── semantic_extract/ # 语义抽取(NER, relation, triplet, LLM) │ ├── normalize/ # 数据规范化(text, entity) │ ├── deduplication/ # 实体去重(levenshtein, jaro-winkler) │ ├── embeddings/ # 向量嵌入(LLM, hash 降级) │ ├── kg/ # 知识图谱(builder, analyzer) │ ├── graph_store/ # 图存储(NetworkX, Neo4j) │ ├── vector_store/ # 向量存储(Memory, FAISS) │ ├── context/ # 上下文工程(ContextGraph, AgentContext, Decision) │ ├── provenance/ # 溯源追踪(W3C PROV-O) │ ├── reasoning/ # 推理引擎(前向链, Rete) │ ├── ontology/ # 本体管理(OWL/Turtle 生成) │ ├── export/ # 导出(JSON, CSV, GraphML, RDF) │ ├── pipeline/ # 管线引擎(builder, execution) │ ├── utils/ # 工具(日志, 异常) │ ├── cli.py # CLI 入口 │ └── server.py # FastAPI Server ├── tests/ # 测试 ├── examples/ # 示例 ├── pyproject.toml └── README.md
测试
# 运行端到端测试
python tests/test_e2e.py
# 运行示例
python examples/full_workflow.py
配置
支持 YAML 配置文件和环境变量:
# 环境变量
export OPENKG_LLM_PROVIDER=ollama
export OPENKG_LLM_MODEL=qwen2.5:7b
export OPENKG_LLM_BASE_URL=http://localhost:11434
export OPENKG_GRAPH_BACKEND=networkx
export OPENKG_VECTOR_BACKEND=memory
export OPENKG_CHUNK_SIZE=500
export OPENKG_EXTRACT_METHOD=llm
License
MIT
架构设计与实现文档