85.图RAG-llamaindex图谱关系提取器-Schema架构LLM路径提取器
内容参考于图灵AI大模型全栈图谱关系提取器提取器类型用途实现逻辑是否调用LLM推荐指数SimpleLLMPathExtractor三元组抽取快速构建知识图谱Prompt → LLM → 抽取 Entity-Relation-Entity✅⭐⭐DynamicLLMPathExtractor动态图谱抽取自动发现实体类型和关系类型Prompt → LLM → 实体分类 → 关系推断✅⭐⭐⭐SchemaLLMPathExtractorSchema约束抽取企业级GraphRAGPrompt Schema → LLM → 验证 → 输出✅⭐⭐⭐⭐⭐ImplicitPathExtractor隐式关系抽取保留文档结构关系根据Node Relationship自动生成边❌⭐⭐⭐⭐SchemaLLMPathExtractor它可以让LLM大模型严格按照我们预定义的实体类型Entities、关系类型Relations、它们之间的连接规则来提取数据之前的提取器都是按着大模型的逻辑来提取DynamicLLMPathExtractor提取器也只是让我们控制一部分这个可以让我们之间控制大模型的逻辑必须按着我们的逻辑来提取但是SchemaLLMPathExtractor提取器就需要我们自己考虑很多东西如果不需要非常严谨使用DynamicLLMPathExtractor提取器比较好它的逻辑首先它还是先对文档进行分割然后我们定义结构Schema也就是定义实体类型、关系类型、路径约束实体类型比如必须有人物、公司、产品等关系类型必须有创立、就职于、拥有等路径约束比如什么人物创建了什么公司、什么人物就职于什么公司、什么人物拥有什么公司这样的内容然后它把我们提供的 实体类型、关系类型、路径约束 内容拼接成提示词比如 允许的实体类型人物、公司、产品允许的关系类型创立、就职于、拥有有效的三元组模式 什么人物创建了什么公司、什么人物就职于什么公司、什么人物拥有什么公司提取完后它会通过Pydantic进行校验校验当前的数据是否跟我们的逻辑一致我们自己设定的是否严格模式来决定一致就存储不一致就丢掉然后构建知识图谱然后存储图数据它的缺点就是必须对业务和文档很熟悉才可以写好实体类型、关系类型、路径约束如果写不好就利用大模型写把核心的文档内容给大模型让大模型进行提取 实体类型、关系类型、路径约束 的限制SchemaLLMPathExtractor使用的提示词按着CTRL鼠标左键单击下图红框按着CTRL鼠标左键单击下图红框下图红框就是它使用的提示词中文翻译可以看出 它的提示词很简单提示词简单了生成的内容就不好所以真正用的时候需要我们自己重写提示词如果我们不传递 实体类型、关系类型、路径约束 如下图红框它也有默认的对应的内容如下图红框如下图红框它这样生成的还是有点不好这就说明我们写的 实体类型、关系类型、路径约束 不够好默认的提示词也不够好下图是自定义提示词抽取的内容自定义提示词也是让大模型生成的如下图代码运行效果图代码import asyncio from pathlib import Path from typing import Literal from llama_index.core import ( SimpleDirectoryReader, Settings, ) from llama_index.core.node_parser import SentenceSplitter from llama_index.core.indices.property_graph import ( PropertyGraphIndex, SchemaLLMPathExtractor, ) from llama_index.core.ingestion import ( IngestionPipeline, IngestionCache, ) from llama_index.core.storage.kvstore import SimpleKVStore from llama_index.core.storage.chat_store import SimpleChatStore from llama_index.core.memory import ChatMemoryBuffer from llama_index.graph_stores.neo4j import Neo4jPropertyGraphStore from base_llm import llm, embed_model # 全局配置 Settings.llm llm Settings.embed_model embed_model # 创建Neo4j数据库连接 graph_store Neo4jPropertyGraphStore( usernameneo4j, password11111111, urlbolt://localhost:7687, ) # 读取文档 documents SimpleDirectoryReader(input_files[./data_file/小说.txt]).load_data() # 摄取缓存 CACHE_PATH ./cache/cache.json cache_file Path(CACHE_PATH) # 创建SimpleKVStore缓存 if cache_file.is_file(): print(缓存文件存在) kvstore SimpleKVStore.from_persist_path(CACHE_PATH) else: print(缓存文件不存在) kvstore SimpleKVStore() cache IngestionCache(cachekvstore) # # 实体约束必须对业务很熟悉才可以写好 # entities Literal[ # # 人物 # PERSON, # # 家族 / 家庭 # FAMILY, # # 地点 # PLACE, # # 技能 # SKILL, # ] # # # 关系约束必须对业务很熟悉才可以写好 # relations Literal[ # # 父子关系 # FATHER_OF, # # 兄弟关系 # BROTHER_OF, # # 居住于 # LIVES_IN, # # 拥有技能 # HAS_SKILL, # ] # # # 路径约束必须对业务很熟悉才可以写好 # validation_schema [ # # 人物之间的父子关系 # (PERSON, FATHER_OF, PERSON), # # 人物之间的兄弟关系 # (PERSON, BROTHER_OF, PERSON), # # 人物居住的地点 # (PERSON, LIVES_IN, PLACE), # # 人物拥有的技能 # (PERSON, HAS_SKILL, SKILL), # ] # # # 创建图谱路径抽取器默认提示词 # kg_extractor SchemaLLMPathExtractor( # llmllm, # # 设置实体 # possible_entitiesentities, # # 设置关系 # possible_relationsrelations, # # 设置路径 # kg_validation_schemavalidation_schema, # # 设定的关系丢弃True会丢弃False不丢弃 # strictTrue, # # 每个切分的文本抽多少个关系10个是很少的如果是1024个字符的内容一般要抽取出 300到400左右关系三分之一 # max_triplets_per_chunk10, # # 并发数 # num_workers4, # ) # 2. 自定义 Schema保持简洁避免多余属性 MY_ENTITIES Literal[人物, 门派, 武功, 地点, 物品] MY_RELATIONS Literal[修炼, 隶属于, 创立, 位于, 拥有] MY_VALIDATION_SCHEMA [ (人物, 修炼, 武功), (人物, 隶属于, 门派), (门派, 位于, 地点), ] # 2. 自定义提示词中文 业务规则补充 CUSTOM_EXTRACT_PROMPT 你是专业的知识图谱抽取专家请从以下文本中抽取符合要求的三元组。 【抽取规则】 1. 实体类型仅限人物、门派、武功、地点、物品、事件 2. 关系类型仅限修炼、隶属于、创立、位于、拥有、参与 3. 仅抽取明确存在的事实禁止推断和脑补 4. 实体名称要完整、规范不要用代词他、她、它 5. 严格遵守合法的实体-关系组合 - 人物 可以 修炼/隶属于/参与/拥有 武功/门派/事件/物品 - 门派 可以 位于/创立 地点/武功 - 事件 可以 发生于 地点 - 物品 可以 位于 地点 请严格控制输出数量最多提取 {max_triplets_per_chunk} 条三元组。 ------- 待提取文本 {text} ------- # 3. 初始化 SchemaLLMPathExtractor kg_extractor SchemaLLMPathExtractor( llmllm, # 你的 LLM 实例 # 自定义提示词 extract_promptCUSTOM_EXTRACT_PROMPT, # 自定义实体枚举 possible_entitiesMY_ENTITIES, # 自定义关系枚举 possible_relationsMY_RELATIONS, # 自定义路径校验规则 kg_validation_schemaMY_VALIDATION_SCHEMA, # 开启严格校验必开否则 schema 不生效 strictTrue, # 其他参数按需设置 max_triplets_per_chunk10, num_workers4, ) # 创建摄取管道这里只进行分割这里会缓存分割后的文档 split_pipeline IngestionPipeline( transformations[ SentenceSplitter( chunk_size512, chunk_overlap50, ), ], cachecache, ) # 图谱抽取 Pipeline这里不缓存 EntityNode 和 Relation也就是不缓存实体和关系 kg_pipeline IngestionPipeline( transformations[ kg_extractor, ], ) # 执行摄取管道分割文档 split_nodes split_pipeline.run( documentsdocuments, show_progressTrue ) print(切分的文档数:, len(split_nodes)) # 保存切分缓存 kvstore.persist(CACHE_PATH) # 执行摄取管道生成知识图谱数据 nodes kg_pipeline.run( nodessplit_nodes, show_progressTrue ) print(节点数量:, len(nodes)) # 创建图索引 index PropertyGraphIndex( nodesnodes, property_graph_storegraph_store, llmllm, embed_modelembed_model, ) print(图谱构建完成) # 聊天记录存储 CHAT_STORE_PATH ./cache/chat_store.json if Path(CHAT_STORE_PATH).exists(): chat_store SimpleChatStore.from_persist_path(CHAT_STORE_PATH) print(聊天记录恢复成功) else: chat_store SimpleChatStore() print(创建新的聊天记录) # 聊天记忆 memory ChatMemoryBuffer.from_defaults( token_limit8000, chat_storechat_store, chat_store_keyuser_001 ) # 聊天引擎 chat_engine index.as_chat_engine( memorymemory, similarity_top_k5, verboseTrue, ) # 多轮聊天 while True: query input(\n用户) if query exit: break response chat_engine.chat(query) print(\nAI) print(response) # 持久化聊天记录 chat_store.persist(persist_pathCHAT_STORE_PATH) # 查看历史记录 history memory.get() print(\n聊天历史) for msg in history: print(msg.role) print(msg.content) print() # 关闭 Neo4j graph_store.close() asyncio.run(graph_store._async_driver.close())

相关新闻

计算机毕业设计源码高效利用指南:以Spring Boot音乐网站为例

计算机毕业设计源码高效利用指南:以Spring Boot音乐网站为例

每年毕业季,计算机专业的同学最头疼的是什么?不是写不完的代码,而是找不到合适的毕业设计题目和源码。你可能会在各大论坛、GitHub上漫无目的地搜索,结果要么是项目过于简单、缺乏新意,要么是源码残缺、环境跑不起来&a…

2026/10/16 21:41:12 阅读更多 →
84.图RAG-llamaindex图谱关系提取器-动态提取器

84.图RAG-llamaindex图谱关系提取器-动态提取器

内容参考于:图灵AI大模型全栈 图谱关系提取器的选择 提取器类型用途实现逻辑是否调用LLM推荐指数SimpleLLMPathExtractor三元组抽取快速构建知识图谱Prompt → LLM → 抽取 Entity-Relation-Entity✅⭐⭐DynamicLLMPathExtractor动态图谱抽取自动发现实体类型和关…

2026/10/17 9:52:30 阅读更多 →
3分钟学会:用这个开源工具轻松下载无水印抖音视频 [特殊字符]

3分钟学会:用这个开源工具轻松下载无水印抖音视频 [特殊字符]

3分钟学会:用这个开源工具轻松下载无水印抖音视频 🚀 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader …

2026/10/17 9:52:57 阅读更多 →

最新新闻

Artcraft:数字时代的手艺逻辑与工艺知识体系

Artcraft:数字时代的手艺逻辑与工艺知识体系

1. “Artcraft”不是新词,而是被低估的创作方法论原点“Artcraft”这个词最近在设计、手作、数字内容社区里频繁冒头,但几乎没人说清楚它到底指什么。它既不是某个新出的AI绘画工具,也不是某家公司的产品代号,更不是某种加密艺术协…

2026/10/19 20:10:47 阅读更多 →
DCMTK 3.6.5 Win64预编译包:开箱即用的DICOM命令行工具集

DCMTK 3.6.5 Win64预编译包:开箱即用的DICOM命令行工具集

简介:本资源为DCMTK 3.6.5版本的Windows 64位预编译工具包,专为医学影像开发人员、PACS系统集成工程师及生物医学工程研究人员设计,解决DICOM数据解析、网络传输、格式转换与元数据调试等核心需求。压缩包共238个文件,含61个可执行…

2026/10/19 20:10:47 阅读更多 →
artcraft:数字创作的可证实践协议

artcraft:数字创作的可证实践协议

1. “Artcraft”不是新词,而是被长期低估的创作范式重启信号最近在多个设计社区、开源项目讨论区和创意工作坊里,“artcraft”这个词频繁跳出来——不是作为某个具体工具或平台的名字,而是像一个突然被擦亮的老铜牌,上面刻着“手艺…

2026/10/19 20:10:47 阅读更多 →
Windows原生C/C++ BLE开发:绕过WinRT直连手环传感器

Windows原生C/C++ BLE开发:绕过WinRT直连手环传感器

简介:本资源是一份面向Windows平台C/C开发者的BLE(低功耗蓝牙)通信实践工程,适用于具备基础WinRT编程经验的中高级开发者,解决在桌面端调用系统原生API实现蓝牙设备扫描、连接、GATT服务发现与数据读写等核心场景问题。…

2026/10/19 20:10:47 阅读更多 →
BASE64加解密实战:可调试、可定制、可诊断的工程化实现

BASE64加解密实战:可调试、可定制、可诊断的工程化实现

简介:本资源是一个面向Java初学者与中级开发者的BASE64加解密工具库实践包,聚焦网络传输、HTTP头处理、证书解析等典型场景中二进制数据的ASCII安全编码需求。压缩包共8个文件,含6个核心Java源码文件(涵盖Encoder/Decoder封装、异…

2026/10/19 20:10:47 阅读更多 →
L应用内存取证复盘:蓝队如何从内存镜像还原攻击链路

L应用内存取证复盘:蓝队如何从内存镜像还原攻击链路

我去年处理过一起很有意思的应急事件:某企业内部办公应用L在深夜出现异常外联,登录日志被攻击者清得干干净净,磁盘上能翻到的痕迹少得可怜。但内存镜像拉下来之后,攻击者的后门配置、窃取的会话凭证、甚至绕过二次认证的完整链路全…

2026/10/19 20:09:45 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →