在当今数字化时代,知识图谱已经成为企业智能化转型的关键技术之一。它不仅能够帮助企业更好地管理和利用知识资产,还能通过智能推理和数据分析提供决策支持。然而,传统的知识图谱构建和管理工具往往存在诸多限制,如语义表达能力不足、扩展性差、与现代大数据和AI技术集成困难等。OpenSPG(Open Semantic Programmable Graph)的出现,为这些问题提供了一种全新的解决方案。
一、OpenSPG 简介
OpenSPG 是由蚂蚁集团与 OpenKG 社区联合推出的一款基于 SPG(Semantic-enhanced Programmable Graph,语义增强可编程图) 框架的知识图谱引擎。它融合了 LPG(Labeled Property Graph,带标签属性图) 的结构化优势和 RDF(Resource Description Framework,资源描述框架) 的语义表达能力,旨在解决传统知识图谱技术在工业级应用中的不足。
核心特点
语义增强与可编程性
- OpenSPG 提供了强大的语义建模能力,通过 SPG-Schema 框架设计,支持属性图的语义增强。用户可以定义复杂的实体、属性和关系,构建出结构化的语义模型。
- 同时,OpenSPG 支持高度可编程的图构建和推理逻辑,允许用户通过自定义代码实现复杂的业务逻辑。
强大的推理能力
- OpenSPG 的 Reasoner 模块支持复杂的逻辑推理和图查询,用户可以通过 ISO GQL 等查询语言进行高效的图数据查询。
灵活的扩展性
- OpenSPG 支持与多种图存储引擎和机器学习框架的适配,用户可以根据自己的需求选择合适的存储和计算方案。
与 AI 技术深度集成
- OpenSPG 深度集成了大语言模型(LLM)和表示学习模型,支持从非结构化数据中自动抽取知识并构建知识图谱。
二、OpenSPG 的技术架构
OpenSPG 的技术架构可以分为以下几个层次:
1. 数据层
数据层负责存储和管理知识图谱中的数据。OpenSPG 支持多种图数据库,如 Neo4j、OrientDB 等,用户可以根据自己的需求选择合适的存储方案。
2. 模型层
模型层是 OpenSPG 的核心,它包括以下几个部分:
- SPG-Schema:语义增强的图模式定义,支持属性图的结构化优势和 RDF 的语义表达能力。
- KAG(Knowledge Acquisition and Graphing):知识获取与图化模块,负责从各种数据源中抽取知识并构建知识图谱。
- Reasoner:推理引擎,支持基于图的逻辑推理和查询。
3. 适配层
适配层提供了与不同技术栈的集成能力,包括:
- Cloudext:云适配层,支持与不同图存储/图计算引擎和机器学习框架的适配。
- KNext:可编程框架,提供可扩展、流程化、用户友好的组件化能力,实现引擎与业务逻辑、领域模型的隔离。
4. 应用层
应用层提供了用户交互界面和 API 接口,支持用户通过可视化界面或编程接口进行知识图谱的构建和查询。
5. 工作原理
知识抽取:KAG模块通过连接到各种数据源(如CSV文件、API等),使用预定义的提示(prompts)和大语言模型(LLM)进行知识抽取。
图构建:抽取的知识通过SPG-Schema定义的模式进行结构化,构建为图数据库中的节点和关系。
推理与查询:Reasoner模块支持基于图的逻辑推理和查询,用户可以通过ISO GQL等查询语言进行复杂的图查询。
三、OpenSPG 的使用方法
1. 环境准备
使用 OpenSPG 需要满足以下条件:
- 硬件要求:根据实际需求配置。
- 软件要求:操作系统和应用软件需满足 OpenSPG 的运行需求。
- 模型服务:需要注册并激活支持 OpenAI 兼容接口的生成模型和表示模型服务(如 DeepSeek、Qwen、OpenAI 等),获取 API 密钥。
2. 服务部署
- 启动服务:通过 Docker Compose 启动 OpenSPG 服务。如果需要持久化数据,可以通过 Docker 的卷配置将数据存储在本地目录。
- 查看状态:通过日志确认 OpenSPG 服务器是否成功启动。
- 产品访问:通过浏览器访问
http://127.0.0.1:8887
进入 OpenSPG-KAG 产品界面。
3. KAG 使用(产品模式)
- 创建知识库:
- 全局配置:用户可以在全局配置中自定义数据库、向量模型和提示。
- 新建知识库:用户可以使用全局配置,也可以为特定知识库定制新配置。
- 导入文档:
- 创建构建任务:进入知识库的构建页面,创建知识构建任务。用户可以下载示例文件进行测试。
- 检查知识抽取结果:通过产品侧的“知识探索”菜单查看图数据。
- 推理问答:输入问题(如“Which Stanford University professor works on Alzheimer’s?”),等待结果返回。
4. KAG 使用(开发者模式)
开发者模式允许用户在本地环境中执行 KAG Python 包代码,进行更深入的定制化开发。
- 环境配置:
- OpenSPG-Server:依赖 OpenSPG-Server 进行元数据管理和图像存储服务。
- 虚拟环境安装:创建并激活 Python 虚拟环境。
- 代码克隆:克隆 OpenSPG 项目代码。
- 创建知识库:
- 新建项目:进入项目示例目录,编辑项目配置文件,填写 API 密钥。
- 目录初始化:创建项目目录并初始化 KAG 项目代码框架。
- 更新项目(可选):如果需要更新配置,可以参考文档进行操作。
- 导入文档:
- 获取语料文件:使用示例数据集(如 2wiki)进行测试。
- 编辑 Schema(可选):根据需要自定义 Schema。
- 提交更新的 Schema:将更新的 Schema 提交到 SPG 服务器。
- 执行构建任务:定义构建脚本并运行,完成非结构化数据的图构建。
- 推理问答:
- 编辑 QA 脚本:在项目目录中编辑问答脚本。
- 执行 QA 脚本:运行问答脚本,进行推理问答。
四、OpenSPG 的应用场景
1. 金融领域
在金融领域,OpenSPG 可以用于风险评估、信用评级、市场分析和反欺诈。通过构建企业供应链图谱和黑产挖掘图谱,金融机构可以更好地识别潜在风险并制定相应的策略。
2. 企业决策与运营管理
OpenSPG 支持市场趋势分析、供应链优化和客户细分,帮助企业更好地理解市场动态并优化运营流程。
3. 客户服务与个性化推荐
通过构建客户知识图谱,企业可以提供自动问答和精准的客户支持,提升客户满意度。
4. 搜索引擎与自然语言处理
OpenSPG 增强了搜索引擎的语义理解能力,支持更智能的搜索结果推荐。
5. 医疗健康与教育研究
在医疗健康领域,OpenSPG 可以辅助临床决策和药物研发,通过构建医疗知识图谱,支持医生进行更精准的诊断。
五、OpenSPG 的优势
1. 解决传统问题
OpenSPG 克服了 RDF/OWL 语义复杂难以落地的问题,同时继承了 LPG 结构简单与大数据体系兼容的优势。
2. 高效知识化转换
OpenSPG 有效衔接大数据与 AI 技术体系,支持对海量数据进行高效的知识化转换。
3. 强大的扩展性
OpenSPG 支持各厂商可插拔的适配基础引擎和算法服务,能够快速构建自定义的解决方案。
六、示例代码
以下是一个简单的示例代码,展示如何在开发者模式下使用 OpenSPG 进行知识图谱构建和查询。
创建知识库
from knext.api.component import CSVReader, LLMBasedExtractor, SPGTypeMapping, KGWriter
from knext.client.model.builder_job import BuilderJob
from schema.medicine_schema_helper import Medicine
class Disease(BuilderJob):
def build(self):
source = CSVReader(
local_path="builder/job/data/Disease.csv",
columns=["input"],
start_row=1,
)
extract = LLMBasedExtractor(
llm=NNInvoker.from_config("builder/model/openai_infer.json"),
prompt_ops=[
REPrompt(
spg_type_name=Medicine.Disease,
property_names=[
Medicine.Disease.complication,
Medicine.Disease.commonSymptom,
Medicine.Disease.applicableDrug,
Medicine.Disease.department,
Medicine.Disease.diseaseSite,
],
relation_names=[(Medicine.Disease.abnormal, Medicine.Indicator)],
)
],
)
mappings = [
SPGTypeMapping(spg_type_name=Medicine.Disease),
SPGTypeMapping(spg_type_name=Medicine.BodyPart),
SPGTypeMapping(spg_type_name=Medicine.Drug),
SPGTypeMapping(spg_type_name=Medicine.HospitalDepartment),
SPGTypeMapping(spg_type_name=Medicine.Symptom),
SPGTypeMapping(spg_type_name=Medicine.Indicator),
]
sink = KGWriter()
return source >> extract >> mappings >> sink
查询知识图谱
knext reasoner execute --dsl "MATCH (d:Disease)-[:complication]->(c:Disease) RETURN d.name, c.name"
七、总结
OpenSPG 通过其强大的语义表示能力和灵活的构建框架,为知识图谱的构建和查询提供了强大的支持。无论是通过产品模式的可视化界面,还是开发者模式的代码定制,用户都可以根据自己的需求构建和管理知识图谱。OpenSPG 的出现,标志着知识图谱技术进入了一个新的发展阶段,它将为企业和开发者带来更多的可能性和创新机会。
如果你对 OpenSPG 感兴趣,可以访问其官方 GitHub 仓库 https://github.com/OpenSPG/openspg 或项目官网 https://spg.openkg.cn,了解更多详细信息和使用指南。
希望这篇技术博客能帮助你更好地理解和使用 OpenSPG!