OntoCast 是一个开源框架,托管在 GitHub 上,专注于从文档中提取语义三元组,构建知识图谱。它结合了本体管理、自然语言处理和知识图谱序列化技术,将非结构化文本转化为结构化、可查询的数据。OntoCast 采用本体驱动的提取方式,确保语义一致性,支持多种文件格式,如文本、JSON、PDF 和 Markdown。用户可以通过本地运行或 REST API 使用,支持 OpenAI 或本地模型(如通过 Ollama)。它的核心特色是自动化本体创建、实体消歧和语义分块,适合需要从复杂文档中提取结构化信息的场景。项目提供详细的文档和 Docker 配置,便于快速部署和使用。
功能列表
- 语义三元组提取:从文档中提取主语-谓语-宾语三元组,构建知识图谱。
- 本体管理:自动创建、验证和优化本体,确保语义一致性。
- 实体消歧:解决文档中跨块的实体引用问题,提升数据准确性。
- 多格式支持:处理文本、JSON、PDF 和 Markdown 等多种文件格式。
- 语义分块:基于语义相似性分割文本,优化信息提取。
- GraphRAG 支持:支持基于知识图谱的检索增强生成,提升搜索能力。
- MCP 兼容:提供 Model Control Protocol 端点,方便集成和调用。
- 三元组存储支持:支持 Fuseki 和 Neo4j 三元组存储,优先推荐 Fuseki。
- 本地和云端部署:支持本地运行或通过 REST API 访问。
使用帮助
安装流程
OntoCast 是一个基于 Python 的框架,推荐使用 Docker 进行部署,以下是详细的安装和配置步骤:
- 克隆项目
在终端运行以下命令,将 OntoCast 项目克隆到本地:git clone https://github.com/growgraph/ontocast.git cd ontocast
- 安装依赖
项目使用 Python 环境,推荐使用uv
工具管理依赖。运行以下命令安装:uv pip install -r requirements.txt
如果没有
uv
,可以用pip
替代:pip install -r requirements.txt
- 配置三元组存储
OntoCast 支持 Fuseki(推荐)和 Neo4j 作为三元组存储后端。以下以 Fuseki 为例:- 进入
docker/fuseki
目录,复制并编辑环境配置文件:cp docker/fuseki/.env.example docker/fuseki/.env
- 编辑
.env
文件,设置 Fuseki 的 URI 和认证信息,例如:FUSEKI_URI=http://localhost:3032/test FUSEKI_AUTH=admin/abc123-qwe
- 启动 Fuseki 服务:
cd docker/fuseki docker compose --env-file .env up -d
- 进入
- 配置语言模型
OntoCast 支持 OpenAI 或本地模型(如通过 Ollama)。编辑项目根目录的.env
文件,配置模型参数:LLM_PROVIDER=openai LLM_MODEL_NAME=gpt-4o-mini LLM_TEMPERATURE=0.0 OPENAI_API_KEY=your_openai_api_key_here
如果使用本地模型(如 Ollama),设置:
LLM_PROVIDER=ollama LLM_BASE_URL=http://localhost:11434
- 运行服务
使用以下命令启动 OntoCast 服务:uv run serve --ontology-directory ONTOLOGY_DIR --working-directory WORKING_DIR
其中,
ONTOLOGY_DIR
是本体文件存储路径,WORKING_DIR
是工作目录,用于存储处理后的数据。 - 构建 Docker 镜像(可选)
如果希望使用 Docker 运行 OntoCast,可构建镜像:docker buildx build -t growgraph/ontocast:0.1.4 .
使用方法
OntoCast 的核心功能是提取语义三元组并构建知识图谱,以下是具体操作步骤:
- 准备文档
将需要处理的文档(支持文本、JSON、PDF 或 Markdown 格式)放入data/
目录。项目提供示例数据,可参考data/
目录中的文件。 - 运行提取流程
OntoCast 提供命令行工具和 REST API 两种方式运行:- 命令行方式
使用 CLI 工具处理文档:uv run ontocast process --input data/sample.md --output output.ttl
这会将
sample.md
文件处理为 RDF 三元组,输出到output.ttl
文件(Turtle 格式)。 - REST API 方式
启动服务后,访问/process
端点:curl -X POST http://localhost:8999/process -H "Content-Type: application/json" -d '{"input": "data/sample.md"}'
响应将返回提取的三元组和本体数据。
- 命令行方式
- 查看结果
处理完成后,结果存储在三元组存储中(如 Fuseki)。可通过 Fuseki 的 Web 界面(默认http://localhost:3032
)查询知识图谱,或使用 SPARQL 查询语言获取数据。 - 优化本体
OntoCast 支持自动优化本体。如果需要手动调整本体,可编辑data/ontologies/
目录中的本体文件,重新运行提取流程。 - 使用 GraphRAG
OntoCast 支持基于知识图谱的检索增强生成(GraphRAG)。在处理完成后,使用生成的知识图谱进行语义搜索:uv run ontocast search --query "特定关键词" --graph output.ttl
这将返回与关键词相关的三元组结果。
特色功能操作
- 语义分块:OntoCast 自动将长文档分割为语义相似的块,确保提取的三元组更精准。用户无需手动设置分块参数,系统会根据语义相似性自动处理。
- 实体消歧:在处理多文档或长文档时,OntoCast 会识别和统一实体引用。例如,“Apple”在不同上下文中可能指公司或水果,OntoCast 会根据上下文正确分类。
- 多格式支持:用户可直接上传 PDF 或 Markdown 文件,OntoCast 会自动转换为内部处理格式,无需额外预处理。
- MCP 兼容性:通过
/process
端点,OntoCast 支持 Model Control Protocol,方便与其他系统集成。
注意事项
- 确保三元组存储服务(如 Fuseki)正常运行,否则提取结果无法保存。
- 处理大文档时,建议设置
RECURSION_LIMIT
和ESTIMATED_CHUNKS
参数,避免性能问题。 - 项目文档位于
docs/
目录,提供详细的用户指南和 API 参考。
应用场景
- 学术研究
研究人员可使用 OntoCast 从学术论文中提取关键概念和关系,构建领域知识图谱。例如,处理生物学论文时,可提取基因、蛋白质及其相互作用,生成可查询的知识库。 - 企业文档管理
企业可将内部文档(如技术手册、合同)转换为知识图谱,方便快速检索和分析。例如,从合同中提取条款、金额和相关方信息,提升信息管理效率。 - 语义搜索优化
网站开发者可使用 OntoCast 构建语义搜索功能,从非结构化内容中提取结构化数据,提升搜索结果的精准度。 - 智能问答系统
OntoCast 可为问答系统提供知识图谱支持。例如,从公司 FAQ 文档中提取三元组,回答用户关于产品或服务的具体问题。
QA
- OntoCast 支持哪些文件格式?
支持文本、JSON、PDF 和 Markdown 格式。未来可能扩展更多格式。 - 如何选择三元组存储?
推荐使用 Fuseki,配置更简单且性能优于 Neo4j。参考docker/fuseki/.env.example
配置。 - 是否需要预定义本体?
不需要。OntoCast 可自动生成和优化本体,也支持用户提供自定义本体。 - 如何处理大文档?
建议增加ESTIMATED_CHUNKS
参数(如设置为 50),并确保硬件资源充足。语义分块会自动优化处理。 - 支持哪些语言模型?
支持 OpenAI 的模型(如gpt-4o-mini
)和本地模型(如通过 Ollama 运行的模型)。