← 返回 Semantica 专题首页 🌱 SEMANTICA · COOKBOOK · 入门系列

欢迎使用 Semantica

Semantica 官方 Cookbook 中文翻译 · 第 1 / 37 篇

📦 semantica 🕸️ 知识图谱 🔎 GraphRAG

面向语义层与知识工程的开源框架

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_forlocated_infounded_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最小端到端流水线

下面的示例展示如何按顺序显式使用多个模块。这与前面讨论的架构相对应:

  1. 摄取一个文档目录
  2. 将它们解析为结构化文档
  3. 规范化文本
  4. 抽取实体与关系
  5. 构建并分析知识图谱
  6. 创建嵌入并存储到向量库
  7. 运行一次混合语义检索查询
# 最小端到端流水线:摄取 → 解析 → 规范化 → 抽取 → 建图 → 嵌入 → 混合检索
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,查看面向特定领域的端到端工作流
  • 阅读核心概念文档,深入理解理论基础与最佳实践