image
VincentWei

天地间,浩然正气长存,为天地立心,为生民立命,为往圣继绝学,为万世开太平!

免责声明:网站内容仅供个人学习记录,禁做商业用途,转载请注明出处。

版权所有 © 2017-2020 NEUSNCP个人学习笔记 辽ICP备17017855号-2

OpenKG — 自主可控的语义知识图谱与决策智能平台

VincentWei    2026年8月13日 16:13:40

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

架构设计与实现文档
最近更新: 2026年8月13日 16:13:40
浏览: 10

[[total]] 条评论

添加评论
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]楼
  2. 点击加载更多……
  3. 添加评论