面向语义层与知识工程的开源框架
Semantica 是一个 Python 框架,用于将杂乱、多源的原始数据,转化为可驱动 GraphRAG、AI 智能体、多智能体系统与分析应用的语义层与知识图谱。
本 notebook 是一份可执行的入门介绍,它结合了:
- 对 Semantica 是什么、为什么存在的宏观解释
- 对架构与关键模块的结构化导览
- 展示端到端流程的小型、可运行代码片段
你应该用本 notebook 来理解整体图景,而不是深入学习每一个 API。
# 安装最新版 semantica 包
!pip install -U semantica
1什么是 Semantica?
Semantica 是一个语义智能与知识工程框架。它帮助你:
- 从非结构化与半结构化数据中构建知识图谱
- 在多种数据源之上建立统一的语义层
- 用结构化知识驱动 GraphRAG、AI 智能体与多智能体系统
- 在应用中引入时序与质量感知推理
核心能力
- 通用摄取:文件、网页、订阅源、数据库、代码仓库、流数据
- 丰富解析:PDF、Office 文档、HTML、JSON、CSV、图片、代码
- 规范化:清洗、语言检测、实体归一化、日期/数字标准化
- 语义抽取:命名实体、关系、事件、语义网络
- 知识图谱构建:从实体与关系构建属性图
- 嵌入与向量检索:文本与图嵌入、混合检索
- 推理与本体:基于规则的推断、本体生成与校验
- 可视化与分析:图谱可视化与质量指标
2谁适合使用 Semantica?
- AI/ML 工程师:构建需要长期记忆的 GraphRAG 系统、智能体与工具
- 数据工程师:在大型异构数据集上编排语义增强流水线
- 知识工程师与本体专家:设计并维护形式化的知识结构
- 研究人员与分析人员:从文档与数据源创建领域知识图谱
- 产品与平台团队:将语义智能嵌入应用与服务
3架构总览
Semantica 由三个概念层与多个具体模块组成。
分层
- 输入层(Input Layer)
- 连接文件、网页、API、数据库、邮件、订阅源、代码仓库与流数据
-
将这些不同来源归一化为统一的内部表示
-
语义层(Semantic Layer)
- 执行解析、清洗、语义抽取、图谱构建、嵌入与推理
-
这里是非结构化数据转变为结构化知识的核心环节
-
输出层(Output Layer)
- 对外暴露知识图谱、嵌入、本体与分析结果
- 与向量存储、图数据库及下游应用集成
4🧩 Semantica 模块参考
Semantica 采用模块化设计。以下按功能分组,全面介绍所有可用模块。
📥 摄取与解析
处理原始数据输入与结构化的模块。
| 模块 | 说明 | 关键能力 |
|---|---|---|
ingest |
数据摄取 连接数据源。 |
• 文件、网页、订阅源、流摄取 • 数据库、邮件、代码仓库、MCP 支持 |
parse |
文档解析 将原始内容解析为结构化数据。 |
• PDF、HTML、JSON、CSV、Excel • 图片与代码解析 |
⚙️ 数据处理
清洗、规范化与切分数据的模块。
| 模块 | 说明 | 关键能力 |
|---|---|---|
normalize |
数据规范化 清洗与标准化文本。 |
• 文本清洗与语言检测 • 实体、日期、数字归一化 |
split |
分块 为 RAG 切分文档。 |
• 递归字符切分 • 语义与基于 Token 的切分 |
🧠 抽取与增强
从原始数据中抽取语义、结构与向量的模块。
| 模块 | 说明 | 关键能力 |
|---|---|---|
semantic_extract |
信息抽取 抽取实体与关系。 |
• 命名实体识别与关系抽取 • 事件与语义网络检测 |
context |
智能体记忆 管理 AI 智能体状态。 |
• 长期记忆与历史记录 • 上下文图谱与 RAG 集成 |
🕸️ 知识图谱核心
用于构建、优化与消解知识图谱的模块。
| 模块 | 说明 | 关键能力 |
|---|---|---|
kg |
图谱构建 构建与分析图谱。 |
• 图谱构建与分析 • 校验与实体解析 |
conflicts |
冲突消解 解决数据矛盾。 |
• 来源可靠性评分 • 真值发现算法 |
deduplication |
实体消歧 合并重复实体。 |
• 基于相似度的分块 • 聚类与规范化 |
💾 存储与检索
用于持久化与查询数据的模块。
| 模块 | 说明 | 关键能力 |
|---|---|---|
embeddings |
向量嵌入 生成语义向量。 |
• 文本与图嵌入 • 多提供商支持(OpenAI 等) |
vector_store |
向量数据库 存储与检索向量。 |
• 相似度检索与过滤 • 混合检索(向量 + 关键词) |
graph_store |
属性图存储 持久化图数据。 |
• Neo4j、FalkorDB 适配器 • Cypher 查询支持 |
triplet_store |
RDF 存储 持久化语义三元组。 |
• SPARQL 端点 • BlazeGraph、Jena、Virtuoso 适配器 |
🔎 推理与分析
用于推导新知识与评估质量的模块。
| 模块 | 说明 | 关键能力 |
|---|---|---|
reasoning |
推理门面 统一的推断接口。 |
• Datalog / 基于规则的推断 • 正向 / 反向链式推理 • 自动生成解释 |
ontology |
本体管理 管理模式与定义。 |
• 从数据生成本体 • 校验与演化 |
visualization |
可视化分析 可视化图谱与指标。 |
• 2D/3D 图谱可视化 • 交互式图表与仪表盘 |
evals |
评测 评估流水线质量。 |
• RAG 与图谱质量指标 • 与标注真值比较 |
🛠️ 编排与工具
用于管理框架与工作流的模块。
| 模块 | 说明 | 关键能力 |
|---|---|---|
core |
框架核心 主入口与配置。 |
• 生命周期管理 • 插件系统与配置 |
pipeline |
工作流编排 管理复杂流程。 |
• DAG 执行与重试 • 错误处理与可观测性 |
seed |
数据播种 初始化知识库。 |
• 分类体系与本体播种 • 参考数据加载 |
export |
数据导出 导出数据到文件。 |
• JSON、CSV、RDF、GEXF 导出 • 报告生成 |
utils |
工具库 常用辅助函数。 |
• 日志、异步、哈希 • 文本处理辅助函数 |
5核心概念(高层)
- 知识图谱
- 节点代表实体,如人物、组织、地点、事件或概念
- 边代表关系,如
works_for、located_in、founded_by -
属性承载元数据,如时间戳、来源与置信度
-
实体与关系
- 实体通过命名实体识别(NER)从文本与数据中抽取
-
关系连接实体,通过基于模式、基于模型或基于 LLM 的方法抽取
-
嵌入
- 编码文本或图结构语义含义的数值向量
-
用于语义检索、聚类与基于相似度的召回
-
GraphRAG
- 结合向量检索与图遍历
-
同时利用嵌入与图结构,检索出更丰富、更具上下文的信息
-
本体
- 对某一领域中类、关系与约束的形式化建模
-
用于统一语义、支持推理并整合异构数据
-
质量与治理
- 质量指标(完整性、一致性、准确性、覆盖率)
- 知识图谱层面的冲突检测与消解
6安装
你可以从 PyPI 安装 Semantica。在本 notebook 中,我们使用 pip cell,以便在本地 Jupyter 或 Colab 中运行。
等效的 shell 命令:
# 基础安装;[all] 会安装全部可选依赖
pip install semantica
pip install semantica[all]
7基础配置
Semantica 使用配置来管理 API 密钥、嵌入提供商与知识图谱选项。下面的示例展示了一个典型配置,同时保持足够简单以适配 notebook。
# 通过环境变量与 YAML 配置文件完成 Semantica 基础配置
import os
from pathlib import Path
# 设置 API 密钥与默认嵌入提供商
os.environ["SEMANTICA_API_KEY"] = "your_openai_key"
os.environ["SEMANTICA_EMBEDDING_PROVIDER"] = "openai"
os.environ["SEMANTICA_MODEL_NAME"] = "gpt-4"
# 定义 YAML 配置:嵌入模型、维度与知识图谱后端
config_text = """api_keys:
openai: your_key_here
anthropic: your_key_here
embedding:
provider: openai
model: text-embedding-3-large
dimensions: 3072
knowledge_graph:
backend: networkx
temporal: true
"""
# 将配置写入磁盘并读回验证
Path("config.yaml").write_text(config_text, encoding="utf-8")
Path("config.yaml").read_text(encoding="utf-8")
8准备样例数据
首先,让我们创建一个小型示例文档用于后续演示。
# 创建一个小型示例文档,供后续流水线演示使用
from pathlib import Path
docs_dir = Path("welcome_docs")
docs_dir.mkdir(exist_ok=True)
text_path = docs_dir / "apple.txt"
# 写入一段关于 Apple 公司的示例文本
text_content = (
"Apple Inc. was founded by Steve Jobs, Steve Wozniak and Ronald Wayne in"
" Cupertino, California."
)
text_path.write_text(text_content, encoding="utf-8")
print(f"Created sample document at {text_path}")
9最小端到端流水线
下面的示例展示如何按顺序显式使用多个模块。这与前面讨论的架构相对应:
- 摄取一个文档目录
- 将它们解析为结构化文档
- 规范化文本
- 抽取实体与关系
- 构建并分析知识图谱
- 创建嵌入并存储到向量库
- 运行一次混合语义检索查询
# 最小端到端流水线:摄取 → 解析 → 规范化 → 抽取 → 建图 → 嵌入 → 混合检索
from semantica.ingest import FileIngestor
from semantica.parse import DocumentParser
from semantica.normalize import TextNormalizer
from semantica.semantic_extract import NERExtractor, RelationExtractor
from semantica.kg import GraphBuilder, GraphAnalyzer
from semantica.embeddings import EmbeddingGenerator
from semantica.vector_store import VectorStore, HybridSearch
# 1. 摄取文档目录
ingestor = FileIngestor()
documents = ingestor.ingest(str(docs_dir))
# 2. 解析为结构化文档
parser = DocumentParser()
parsed_docs = parser.parse(documents)
# 3. 规范化文本
normalizer = TextNormalizer()
normalized_docs = normalizer.normalize(parsed_docs)
# 4. 抽取实体与关系
ner = NERExtractor()
entities = ner.extract(normalized_docs)
rel_extractor = RelationExtractor()
relationships = rel_extractor.extract(normalized_docs, entities)
# 5. 构建并分析知识图谱
builder = GraphBuilder()
kg = builder.build(entities, relationships)
analyzer = GraphAnalyzer()
metrics = analyzer.analyze(kg)
# 6. 生成文本嵌入并存入向量库
emb_generator = EmbeddingGenerator()
embeddings = emb_generator.generate_embeddings(documents, data_type="text")
vec_store = VectorStore()
vec_store.store(embeddings, documents, metadata={})
# 7. 执行混合语义检索
hybrid = HybridSearch(vec_store)
search_results = hybrid.search("Apple founders", top_k=3)
len(search_results)
10可视化
Semantica 包含一个强大的可视化模块。这里我们从上面构建的知识图谱创建一张交互式网络图。
from semantica.visualization import KGVisualizer
# 创建一个可视化器实例
viz = KGVisualizer(layout="force", color_scheme="vibrant")
# 生成交互式网络可视化
# 这会返回一个在 notebook 中渲染的 Plotly figure 对象
fig = viz.visualize_network(kg, output="interactive")
fig.show()
11本体生成
你还可以从已抽取的实体与关系自动生成本体(对领域的形式化建模)。
from semantica.ontology import OntologyGenerator
generator = OntologyGenerator(base_uri="https://example.org/ontology/")
# 从已抽取的数据生成本体
ontology = generator.generate_ontology({
"entities": entities,
"relationships": relationships
})
# 查看推断出的类
[cls["name"] for cls in ontology.get("classes", [])[:5]]
12进阶:数据切分与分块
对于 RAG 应用,将文档切分为更小的块至关重要。Semantica 提供了 split 模块用于此目的。
# 使用 TextSplitter 将文档切分为适合 RAG 的小块
from semantica.split import TextSplitter
# 设置块大小与相邻块之间的重叠
splitter = TextSplitter(chunk_size=100, chunk_overlap=20)
chunks = splitter.split_documents(documents)
print(f"Original documents: {len(documents)}")
print(f"Generated chunks: {len(chunks)}")
13进阶:推理与推断
reasoning 模块允许你使用逻辑规则从已有知识中推导出新事实。
from semantica.reasoning import Reasoner
# 简单规则:如果 X 创立了 Y,那么 X 为 Y 工作
rule = """
IF (?x founded ?y) THEN (?x works_for ?y)
"""
reasoner = Reasoner()
reasoner.add_rule(rule)
inferred_facts = reasoner.infer_facts(kg)
print(f"Inferred {len(inferred_facts)} new facts")
14进阶:导出与持久化
你可以将知识图谱保存到磁盘,或导出为 CSV、JSON、RDF 等标准格式。
# 将知识图谱导出为 JSON 文件以便持久化
from semantica.export import GraphExporter
exporter = GraphExporter()
exporter.export(kg, format="json", output_path="knowledge_graph.json")
print("Graph exported to knowledge_graph.json")
15使用核心 `Semantica` 类
对于更复杂的系统,你可以直接使用 Semantica 核心类与配置对象。这让你能够访问生命周期管理、插件注册与编排辅助能力。
# 使用核心 Semantica 类进行生命周期管理与知识库构建
from semantica.core import Semantica, ConfigManager
# 从配置文件加载配置
config_manager = ConfigManager()
config = config_manager.load_from_file("config.yaml")
# 初始化框架
framework = Semantica(config=config)
framework.initialize()
# 一键构建知识库(同时生成嵌入与图谱)
kb_result = framework.build_knowledge_base(
sources=[str(docs_dir)],
embeddings=True,
graph=True,
)
# 关闭框架并查看构建结果
framework.shutdown()
sorted(kb_result.keys())
16下一步
- 运行
cookbook/introduction目录下的其他 notebook,了解各模块的详细用法 - 探索
cookbook/use_cases,查看面向特定领域的端到端工作流 - 阅读核心概念文档,深入理解理论基础与最佳实践