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/8/13 1:38:58 阅读更多 →
84.图RAG-llamaindex图谱关系提取器-动态提取器

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

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

2026/8/13 1:38:58 阅读更多 →
3分钟学会:用这个开源工具轻松下载无水印抖音视频 [特殊字符]

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

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

2026/8/13 1:37:58 阅读更多 →

最新新闻

前端加密实战:crypto-js与jsencrypt的对称与非对称加密应用

前端加密实战:crypto-js与jsencrypt的对称与非对称加密应用

1. 项目概述:为什么前端开发者需要掌握加密在今天的Web开发里,数据安全早就不是后端工程师的专属话题了。一个合格的前端开发者,必须有能力在数据离开浏览器、踏上网络征途之前,为它披上一层可靠的“盔甲”。这不仅仅是保护用户密…

2026/8/13 2:28:17 阅读更多 →
深度拆解scail2整合包:从ComfyUI工作流到AI视频生成实战

深度拆解scail2整合包:从ComfyUI工作流到AI视频生成实战

你有没有遇到过这种情况:想试试网上那些酷炫的AI视频换脸、动作迁移,结果光是安装环境、配置依赖、下载模型就折腾了一整天,最后还因为某个库版本不对而报错,热情瞬间被浇灭?最近,一个名为scail2的项目整合…

2026/8/13 2:28:17 阅读更多 →
AI算法工程师成长指南:从数学基础到工程实践的全栈能力地图

AI算法工程师成长指南:从数学基础到工程实践的全栈能力地图

1. 从“想学”到“能上”:AI算法工程师的职业全景与入门误区最近后台和社群里,问我“如何成为AI算法工程师”的朋友越来越多了。这背后,一方面是“AI”浪潮席卷各行各业,从智能驾驶到AIGC,算法岗的需求和薪资确实诱人&…

2026/8/13 2:28:17 阅读更多 →
大模型Scaling Law实战指南:从原理到工程化应用

大模型Scaling Law实战指南:从原理到工程化应用

1. 先搞清楚“Scaling Law”到底在解决什么问题如果你在关注大模型,尤其是那些动辄千亿、万亿参数的项目,肯定听过“Scaling Law”(规模定律)这个词。它听起来很学术,但背后是一个极其现实的工程问题:我们投…

2026/8/13 2:28:17 阅读更多 →
深入解析Go database/sql源码:连接池、并发模型与实战调优

深入解析Go database/sql源码:连接池、并发模型与实战调优

1. 项目概述:为什么我们要深入 database/sql 的源码?作为一名长期使用 Go 语言进行后端开发的工程师,database/sql这个包几乎是我每天都要打交道的“老朋友”。无论是简单的用户信息查询,还是复杂的分布式事务协调,它都…

2026/8/13 2:28:17 阅读更多 →
Uni-app开发微信小程序:从零实现功德木鱼与全局设置面板

Uni-app开发微信小程序:从零实现功德木鱼与全局设置面板

1. 项目缘起:从“电子木鱼”到“功德木鱼”的思考 最近在刷短视频和社交平台时,经常看到“电子木鱼”这个概念。简单来说,它就是一个模拟敲击木鱼音效的App或小程序,用户点击屏幕,就会发出“咚”的一声,配…

2026/8/13 2:27:15 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →