Semantica 知识图谱:让 AI 决策"可回答为什么"的五大能力域与最短路径
【免费下载链接】semanticaGraph-Native Infrastructure for Context and Accountable AI Systems项目地址: https://gitcode.com/GitHub_Trending/sema/semantica
"为什么"不在模型里,在图里
一家公司的知识通常散落在三种地方:产品文档 PDF、历史决策纪要、数仓里的业务表。当 Agent 要做一个决定——选云厂商、判一单风险——它能调用的往往只是向量检索碰巧命中的几段文本。之后审计员问"系统为什么选了它",没有人答得上来。
Semantica 补的就是这个缺口:它把"数据"与"决策"的关系,从"向量库里散落着相似片段",改成"每个事实、每个实体、每条决策都挂在一张图上,互相连着、可以追溯"。它不替代你的 LLM 或向量库,而是垫在下面的一层:构图、推理、溯源全部是确定性的,不用任何模型也能跑,用到 LLM 时也是可选且供应商中立的。
一份文件怎样变成可查询的知识图谱
数据流是一条单向的路:文件、网页、湖仓表、消息流先经统一摄取(Ingest),再解析(Parse)与归一化,随后做实体与关系抽取,最后由 GraphBuilder 组装成图——组装时同步做实体合并、冲突检测、可选的时间标注。图落进两类存储:图数据库(Neo4j、FalkorDB、Oxigraph 等)或内存 NetworkX,向量库则承载语义检索。全程有一个贯穿层在记录"这条信息从哪个源来、置信度多少"。
五个能力关键词,记住名词即可:
- 多源数据摄取
- 语义抽取(实体 / 关系 / 事件)
- 时序知识图谱
- 图存储与向量存储双写
- W3C PROV-O 决策溯源
一句话边界:如果你的场景是"把一批文档变成可查询、可审计的图",它够用;如果你要的是训练模型本身或纯向量检索引擎,把它当作辅助层,别当主力。
最短路径:从一份 PDF 到看得见的图
安装并确认版本(你会看到 0.7.0 这样的输出):
pip install semantica python -c "import semantica; print(semantica.__version__)"加载本地 PDF,走完摄取 → 解析 → 抽取 → 构图 → 可视化的最小闭环(你会得到一个graph.html,浏览器打开后可缩放、点节点看详情、按实体类型过滤):
from semantica.ingest import FileIngestor from semantica.parse import DocumentParser from semantica.semantic_extract import NERExtractor, RelationExtractor from semantica.kg import GraphBuilder from semantica.visualization import KGVisualizer text = DocumentParser().parse("data/report.pdf")["full_text"] entities = NERExtractor(method="pattern").extract(text) rels = RelationExtractor(method="pattern").extract(text, entities=entities) graph = GraphBuilder(merge_entities=True).build( {"entities": entities, "relationships": rels}) KGVisualizer(layout="force").visualize_network( graph, output="html", file_path="graph.html", node_color_by="type")注意:当前仓库版本是 v0.7.0,相比 0.6.x 把约 22 个重量级包移入了可选 extras。如果照旧资料跑报"缺依赖",见下文"意外三"。
三个非直觉的默认选择,值得知道为什么:
- 抽取用
pattern而非 LLM:它是规则模板匹配,不需要任何 API Key,"founded by"、"located in" 这类通用关系开箱即有,跑通闭环零成本;复杂文本后面随时切llm模式提精度,两路接口一致。 merge_entities=True:多文档汇聚时,"Apple"、"Apple Inc."、"AAPL" 会按语义相似度合并成一个节点,否则同一公司在图里会裂成好几座孤岛。- 默认内存图:进程结束即失,适合实验;生产上给
GraphBuilder传一个graph_store参数即可落持久化后端,构图代码不用改。
五大能力域:用到哪个就看哪个
数据接入:数据散在十种格式里时
当源数据横跨本地文件、网页、湖仓表和消息流时,每个源对应一个独立的 ingestor,返回类型各自不同但都带.text/ 结构化记录与.metadata。
| 场景 | Ingestor | 说明 |
|---|---|---|
| 本地文件 / 目录 | FileIngestor | 递归扫描,覆盖 PDF、DOCX、Excel、PPTX 等 |
| 网页正文 | WebIngestor | 返回文本可直接进抽取,免解析 |
| 湖仓 / 数仓表 | DatabricksIngestor/SnowflakeIngestor | 带目录级血缘信息 |
| 结构化记录 | ParquetIngestor/XMLIngestor | 跳过解析,直接构图 |
进阶指引:完整二十余种源(邮件、Kafka、Git 仓库、MCP 等)见 ingest。
语义抽取:文本变成"节点与边"时
当你要控制"抽什么、用多准"时,抽取器用method参数切换策略,实体类型用entity_types限定,低置信度结果用min_confidence过滤。
| 场景 | 推荐配置 | 说明 |
|---|---|---|
| 零 Key 跑通 | method="pattern" | 内置关系模板库,无需配置 |
| 自定义领域模板 | method="regex" / "rules" | 按自己的句式写规则 |
| 生产级精度 | method="llm"+provider | 也支持 OpenAI 兼容网关 |
| 多方法互证 | 传方法列表 | 回退链 + 投票,min_votes控阈值 |
进阶指引:事件检测、三元组生成、本体约束校验(SchemaValidator)见 semantic_extract。
图构建与存储:图要"活得久"时
当进程会重启、或多服务要读同一张图时,给 GraphBuilder 传持久化后端即可,上层代码不变。
| 场景 | 后端 | 说明 |
|---|---|---|
| 本地实验 | 内存(默认) | 无外部依赖 |
| 生产 LPG | neo4j/falkordb | Cypher 生态 |
| RDF / SPARQL 生态 | Oxigraph、RDF4J 等 triplet store | 标准语义网协议 |
| 时序查询 | enable_temporal=True | 边上标注 valid_from / valid_until,可定点回放 |
进阶指引:后端清单与切换方式见 graph_store。
溯源与决策智能:要回答"为什么"时
当每一次 Agent 决策都可能需要向审计方交代时,AgentContext把向量库、图、决策记录绑在一起:事实入库带来源,决策成为一等对象,可查前例、可追因果链。
| 场景 | 调用 | 说明 |
|---|---|---|
| 记录一条决策 | record_decision(...) | 类别 / 场景 / 理由 / 结果 / 置信度五要素 |
| 查相似历史决策 | find_precedents(...) | 向量 + 图混合检索,防前后矛盾 |
| 追溯因果链 | trace_decision_chain(...) | 完整上游因果 |
| 查单个事实的来源 | get_all_sources(...) | W3C PROV-O 标准 |
进阶指引:多 Agent 共享上下文的装配见 context。
下游对接:图要被别的系统"用"时
当图要喂给 Spark、语义网生态或现成的 Agent 框架时,导出器与集成包是即插即用的。
| 目标 | 方式 | 说明 |
|---|---|---|
| Spark / BigQuery 分析 | ParquetExporter | 实体、关系各落一个文件 |
| 语义网生态 | RDFExporter | turtle / json-ld / nt,置信度统一为 xsd:decimal |
| 现成 Agent 框架 | Agno / CrewAI / LangChain 集成包 | 作为工具或记忆层挂载 |
| 浏览器交互探索 | explorer 可视化工作台 | 无需写前端 |
进阶指引:CSV、OWL、Arrow、AQL 等十余种格式见 export。
三域串联的一个真实场景:受监管环境下的"决策审计"——向量库存事实、图存关系、决策追踪留痕,一次 import 全打通(你会拿到可追溯的决策 ID,下次同类决策前可先查前例):
from semantica.context import AgentContext, ContextGraph from semantica.vector_store import VectorStore ctx = AgentContext(vector_store=VectorStore(backend="faiss", dimension=768), knowledge_graph=ContextGraph(advanced_analytics=True), decision_tracking=True) ctx.store("GPT-4 outperforms GPT-3.5 on reasoning by 40%") did = ctx.record_decision(category="model_selection", scenario="Select LLM", reasoning="Benchmark advantage justifies cost", outcome="selected_gpt4", confidence=0.91) ctx.find_precedents("model selection", limit=5) # 相似历史决策你会碰到的三个意外,以及已知边界
- 抽取结果空无一物→ PDF 是扫描件,没有文本层 → 换
DoclingParser(enable_ocr=True)(需pip install semantica[parse-docling])。 - 进程一重启图就没了→ 默认内存 NetworkX 不持久 →
GraphBuilder(graph_store=GraphStore(backend="neo4j", ...))。 - 报"缺少某某依赖"→ v0.7.0 起 spaCy、plotly、docx 解析等移入可选 extras → 按需装对应 extra,或
pip install "semantica[all]"一把装齐。 - pattern 抽取在领域文本上"懂的非它、漏的没漏"→ 内置模板库是通用英文向 → 领域任务改用
regex/rules自写模板,或切llm模式后抽样评测。
不回避的局限:pattern抽取器的模板库以英文通用语料为主,中文与强领域文本建议直接上 LLM 模式并留人工抽检;内存图没有规模上限,超大语料要流式摄取(scan_directory逐篇处理)+ 持久化后端;它提供的是系统级可解释性——讲清"喂了什么上下文、触发了什么规则",模型内部依然不透明。
延伸阅读,按时机取用:
- docs/quickstart.md —— 想按官方节奏再走一遍全流水线、对照自己文档格式时;
- docs/modules.md —— 需要确认"某个功能在哪个模块"、又不想翻源码时;
- docs/choose-your-module.md —— 带着明确目标(比如"建一张时序图谱")想直接对号入座时。
最后一件事留给读者自己:如果这张图谱要跨机构共享,而每家机构只能看见自己贡献节点的溯源,权限模型该设计在哪一层——导出时裁剪、查询时过滤,还是在图结构上就分区?
【免费下载链接】semanticaGraph-Native Infrastructure for Context and Accountable AI Systems项目地址: https://gitcode.com/GitHub_Trending/sema/semantica
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考