微信扫码
添加专属顾问
在之前,我分享了几篇关于GraphRAG的科普和实践文章,得到了群友们的良好反馈。但是最近我注意到越来越多的群友提出GraphRAG在实体和关系提取上并不尽如人意,影响了问答效果。针对这个情况,我首先问的是:你们是否进行了prompt tuning操作?很遗憾,许多回答是没做,有些人甚至把prompt tuning和模型的finetune混淆了。
因此,我计划写一篇专门介绍GraphRAG prompt tuning的文章,帮助群友们理解其原理,并教会他们如何通过prompt tuning以最小的代价提升问答效果。我希望大家不仅仅会用GraphRAG,同时也能真正理解它的工作机制,站在一定的高度去"审判"它,这样大家才会有所成长。
在掌握原理之前,我们还是先来看一下如何使用GraphRAG的Prompt-Tuning. 根据我的实践经验,当你使用Prompt-Tuning时,所选用的大模型必须具有较高的参数量和良好的性能。否则,生成的Prompt可能质量不佳,甚至可能存在格式错误。在我个人的选择中,gpt-4系列模型是首要推荐。
GraphRAG具备创建适应特定领域的prompt的能力,可以用于生成知识图谱。虽然这一步骤是可选的,但我建议执行,因为它会在索引运行时带来更优秀的结果。
Prompt-Tuning大致过程如下(后面我会用源码详细解释):
在进行自动模板生成之前,请确保你已经使用了graphrag.index --init命令来初始化工作空间,这样就可以创建必要的配置文件和默认提示。
你可以使用以下命令行选项来运行主脚本:
python -m graphrag.prompt_tune [--config CONFIG] [--root ROOT] [--domain DOMAIN] [--selection-method SELECTION_METHOD] [--n_subset_max N_SUBSET_MAX] [--k K] [--limit LIMIT] [--max-tokens MAX_TOKENS] [--min-examples-required MIN_EXAMPLES_REQUIRED] [--chunk-size CHUNK_SIZE] [--language LANGUAGE] [--no-entity-types] [--output OUTPUT]
--config:用于生成提示的配置文件(YAML),这个参数是必须的。--root(可选):数据项目根目录,默认为当前目录。--domain(可选):与输入数据相关的领域,例如 'space science', 'microbiology', 'environmental news'。如果不定义,将从输入数据中推断领域。--selection-method(可选):选择文档的方法,默认为 random。--n_subset_max(可选):使用自动选择法时要嵌入的文本块数,默认为300。--k(可选):在使用自动选择法时,每个中心点最多选择的文档数,默认为15。--limit(可选):执行随机或顶部选择时加载的文档数,默认为15。--max-tokens(可选):生成提示时的最大令牌计数,默认为 2000。--min-examples-required(可选):实体提取提示中需要的最小示例数,默认为2。--chunk-size(可选):生成文本块时使用的令牌数量,默认为 200。--language(可选):用于输入处理的语言。如果与输入的语言不同,LLM将进行翻译。默认为"",表示将自动从输入中检测语言。--no-entity-types(可选):使用未标记的实体提取生成。当你的数据涵盖许多主题或高度随机化时,我们建议使用此选项--output(可选):用于保存生成提示的目录,默认为 'prompts'。上面使用的GraphRAG的版本是v0.3.0, 网上很多对于GraphRAG的Prompt-Tune的说明使用的是之前的版本,参数存在一定的差异
我这里演示使用的是海贼王的内容文本,执行下面命令:
python -m graphrag.prompt_tune --root ./ragtest --domain 'Anime and Manga' --language Chinese--limit 2 --chunk-size 500 --config ./ragtest/settings.yaml
输出下面的内容表示prompt tune成功:
INFO: Reading settings from ragtest/settings.yaml
Loading Input (text).
INFO: Generating persona...
INFO: Generating community report ranking description...
INFO: Generating entity types...
INFO: Generating entity relationship examples...
INFO: Generating entity extraction prompt...
INFO: Generating entity summarization prompt...
INFO: Generating community reporter role...
INFO: Generating community summarization prompt...
INFO: Writing prompts to prompts
你可以看到在当前的prompts目录下分别生成了三个文件: community_report.txt、entity_extraction.txt & summarize_descriptions.txt。我们先来看下entity_extraction.txt,其中的某个Examples如下,我们发现这个prompt要求LLM抽取的实体类型是 character, organization, dream, ability, bounty, location ,但是这几个实体并不能很好覆盖我们的内容,毕竟连最基本的person都没有。
-Examples-
######################
Example 1:
entity_types: [character, organization, dream, ability, bounty, location]
text:
的能力者。“草帽一伙”第六位加入的成员。梦想“找到空白的100年历史”,以此为目标在大海上航行。
船匠
弗兰奇
“草帽一伙”的船匠,外号“铁人·弗兰奇”。南海出身,悬赏金3亿9400万贝里。使用改造后的身体以及自制兵器进行战斗。“草帽一伙”第七位加入的成员。梦想“乘坐自己制作的梦想之船绕伟大航路一周”,以此为目标在大海上航行。
音乐家
布鲁克
“草帽一伙”的音乐家,外号“鼻歌·布鲁克”、“灵魂之王”。西海出身,悬赏金3亿8300万贝里。食用了黄泉果实的能力者。使用一把西洋剑战斗的剑士,战斗时会使用黄泉果实的能力作为辅助。“草帽一伙”第八位加入的成员。梦想“与拉布汇合,实现与拉布的约定”,以此为目标在大海上航行。
舵手
甚平
“草帽一伙”的舵手,外号“海侠甚平”。龙宫王国出身,悬赏金11亿贝里。鱼人族的鲸鲨鱼人,使用鱼人空手道和鱼人柔道进行战斗。“草帽一伙”第九位加入的成员,原王下七武海之一
------------------------
于是我试图调整chunk-size的值,将其从500提升到2000。结果发现,新生成的entity_extraction.txt文件中包含了更全面的实体类型——person, organization, location, concept, event, item。这显然比之前的版本要好一些。接下来,我们将使用这次生成的提示重新进行索引:
将索引文件导入到neo4j中后,我发现相比之前抽取出的实体数量更多且内容也更丰富:
在进行Prompt-Tune之前,我想查询"悬赏金最高的海贼是谁?". GraphRAG回答 "鹰眼" 是悬赏金最高的海贼,虽然我也很喜欢他,但是我给的文本中悬赏金最高的海贼不是他,而是白胡子。
SUCCESS: Local Search Response: # 赏金最高的海贼
在《海贼王》的世界中,赏金的高低通常反映了一个海贼的威胁程度和实力。根据现有的数据,赏金最高的海贼是乔拉可尔·米霍克,他的悬赏金高达35亿9000万贝里 [Data: Entities (84)]。
## 乔拉可尔·米霍克
乔拉可尔·米霍克是世界最强剑士,曾是王下七武海的一员。在七武海制度被废除后,他的悬赏金被重新评估并大幅提升,达到了35亿9000万贝里 [Data: Sources (4)]. 米霍克不仅以其剑术闻名,还与红发香克斯有着深厚的友谊,并且是草帽一伙成员罗罗诺亚·索隆的师傅。
## 其他高赏金海贼
除了米霍克,其他赏金较高的海贼还包括巴基和波雅·汉库克。巴基的悬赏金为31亿8900万贝里,他是巴基海贼团的船长,曾是罗杰海贼团的见习生 [Data: Entities (28); Sources (4)]. 波6); Sources (4)].
## 赏金的意义
在《海贼王》的世界中,悬赏金不仅是对海贼威胁程度的评估,也是世界政府对其抓捕优先级的体现。高额的悬赏金通常意味着该海贼在世界范围内具有极大的影响力和威胁性。
在进行Prompt-Tune之后,我在执行Local Search, 还是询问"悬赏金最高的海贼是谁?",这次回答的内容符合预期:(我给的文档中不包含海贼王罗杰)。这说明在经过Prompt Tune之后,我们的问答效果相比之前有了一定程度的提升,但是这就到此为止了吗?还能进一步优化吗?答案是我们可以手动微调prompt.
SUCCESS: Local Search Response: ## 赏金最高的海贼
在《海贼王》的世界中,赏金是衡量海贼威胁程度的重要指标。根据现有数据,赏金最高的海贼是**“白胡子”爱德华·纽盖特**,他的悬赏金高达**50亿4600万贝里**。他是白胡子海贼团的船长,以其强大的实力和影响力闻名,曾被视为世界上最强的海贼之一 [Data: Entities (30); Sources (4)]。
紧随其后的是**“百兽”凯多**,他的悬赏金为**46亿1110万贝里**,同样是四皇之一,掌管着百兽海贼团 [Data: Entities (127); Sources (4)]。此外,**“BIG MOM”夏洛特·玲玲**的悬赏金es (126); Sources (4)]。
最后,**“红发”香克斯**的悬赏金为**40亿4890万贝里**,他是红发海贼团的船长,也是四皇之一 [Data: Entities (30); Sources (4)]。这些海贼不仅力量强大,他们的高额赏金也体现了他们在海贼世界中的地位和影响力。
## 总结
综上所述,当前赏金最高的海贼是爱德华·纽盖特,其次是凯多、夏洛特·玲玲和香克斯。这些海贼的悬赏金不仅代表了他们的实力,也体现了他们在海贼世界中的重要性和威胁程度 [Data: Entities (30)]
虽然我们通过Prompt-Tune借助LLM的能力自动微调Prompt以适配输入文件的领域,但我发现Prompt-Tune的给出实体列表就跟抽卡似的,每次生成的结果都不同。
但是这些实体类型是否是你想要的呢,是否足够匹配领域所需要的实体呢?有没有可能给它提示,让它按照我的设想去生成呢?或者使用更好的模型,对该领域可能需要的实体给出范围呢?当然是可以的,接下来我就教你如何手调Prompt以更好地适配你的文档。
当使用命令Prompt Tune的时候,它只生成了三个文件:community_report.txt、entity_extraction.txt和summarize_descriptions.txt。其中summarize_descriptions.txt和community_report.txt都是根据领域,在设定角色的时候设定它是XX领域内的专家等信息,所以他们和实体提取关系不大,也无需调整,所以我们要调整的是实体抽取相关的entity_extraction.txt。
在确定一篇文档应该含有哪些实体类型时,我们不仅可以聘请相关领域的专家,也可以借助GPT-4来模拟专家进行分析。在我的日常工作中,我经常使用GPT-4,因为它强大的性能使得其输出结果成为我们的参考标准。
首先,我会从文档中选取一些内容丰富的段落,然后让GPT-4抽取出对应的实体类型。根据GPT-4生成的实体类型,我们将对 entity_extraction.txt 文件中的任务说明部分、Example 中的 entity_types ,以及 Real Data 部分的 entity_types 进行修改。
既然需要提取的实体类别已经更新,接下来的步骤就是更新few-shot的Example输出。同样我也会让GPT-4生成新的Example输出,并复制到 entity_extraction.txt 文件的相应位置。这样一个手动微调版的entity_extraction.txt就大功告成了!
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-07-03
RAG 检索优化策略:从命中率到答案质量的一套工程打法
2026-07-03
RAG 落地总翻车?全球赛事冠军架构,改造适配企业级生产
2026-07-01
提升 RAG 准确率全攻略 让你的 AI 知识库 真正靠谱起来!
2026-06-30
教程:如何用AutoRAG + Milvus避免RAG 与Agent 中出现串租问题
2026-06-30
知识库不是文件堆——我把RAG准确率从60%调到了92%
2026-06-30
本体论语义建设新思路,另类RAG来解决检索问题
2026-06-30
别把RAG当架构:Ontology(本体)才是Agent的业务世界
2026-06-29
PixelRAG:伯克利团队颠覆传统 RAG,用截图代替文本检索! 28 天狂揽 3000+ Star!
2026-04-06
2026-04-27
2026-04-23
2026-04-20
2026-04-09
2026-04-12
2026-04-22
2026-04-10
2026-05-14
2026-04-30
2026-06-23
2026-06-23
2026-06-15
2026-06-10
2026-06-10
2026-05-20
2026-05-18
2026-05-11
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。