来源:互联网 更新时间:2026-08-26 20:42
之前分享了几篇关于GraphRAG的科普和实践文章,收到不少反馈。但最近注意到一个高频问题:不少人在实操中发现,GraphRAG在实体和关系提取上表现不佳,直接拖累了问答效果。面对这种情况,通常会先问一句:做过prompt tuning吗?遗憾的是,很多人根本没做,甚至有人把prompt tuning和模型的finetune搞混了。
所以,这篇专门聊聊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,网上很多关于Prompt-Tune的说明是基于旧版本,参数上有些出入。
这里用《海贼王》的内容做演示,执行命令:
python -m graphrag.prompt_tune --root ./ragtest --domain 'Anime and Manga' --language Chinese --limit 2 --chunk-size 500 --config ./ragtest/settings.yaml
输出以下内容表示成功:
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,其中一个Example如下:
-Examples-
######################
Example 1:
entity_types: [character, organization, dream, ability, bounty, location]
text:
的能力者。“草帽一伙”第六位加入的成员。梦想“找到空白的100年历史”,以此为目标在大海上航行。
船匠
弗兰奇
“草帽一伙”的船匠,外号“铁人·弗兰奇”。南海出身,悬赏金3亿9400万贝里。使用改造后的身体以及自制兵器进行战斗。“草帽一伙”第七位加入的成员。梦想“乘坐自己制作的梦想之船绕伟大航路一周”,以此为目标在大海上航行。
音乐家
布鲁克
“草帽一伙”的音乐家,外号“鼻歌·布鲁克”、“灵魂之王”。西海出身,悬赏金3亿8300万贝里。食用了黄泉果实的能力者。使用一把西洋剑战斗的剑士,战斗时会使用黄泉果实的能力作为辅助。“草帽一伙”第八位加入的成员。梦想“与拉布汇合,实现与拉布的约定”,以此为目标在大海上航行。
舵手
甚平
“草帽一伙”的舵手,外号“海侠甚平”。龙宫王国出身,悬赏金11亿贝里。鱼人族的鲸鲨鱼人,使用鱼人空手道和鱼人柔道进行战斗。“草帽一伙”第九位加入的成员,原王下七武海之一
------------------------
注意到prompt要求抽取的实体类型是character, organization, dream, ability, bounty, location。但连最常见的person都没有,覆盖明显不够。
于是尝试调整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,同样问“悬赏金最高的海贼是谁?”,这次回答就对了(我给的文档里不含罗杰):
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,进一步优化。
虽然Prompt-Tune借助LLM自动微调了prompt来适配输入文件的领域,但发现它给出的实体列表有点像抽卡,每次结果都不一样。
这些实体类型是不是真正想要的?能不能更贴近领域需求?如果给它更明确的指引,或者用更强的模型来划定实体范围,结果会不会更好?答案是肯定的。接下来就讲讲怎么手动调prompt,让它更好地贴合文档。
Prompt-Tune只生成三个文件:community_report.txt、entity_extraction.txt和summarize_descriptions.txt。后两个文件主要设定角色为领域专家,和实体提取关系不大,一般无需调整。真正需要动手的是实体抽取相关的entity_extraction.txt。
确定一篇文档应该包含哪些实体类型,除了请教领域专家,也可以借助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就搞定了。
腾讯ima怎么把微信内容一键导入知识库?
腾讯ima怎么创建共享知识库?
Celestia价格预测2026-2032:TIA币能否引领山寨币上涨行情?历史价格回顾
比特币(BTC)核心周期指标复刻历史走势 价格或跌破5.8万美元关键支撑位
比特币 2025 年价格预测:BTC 的未来走势
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
WorkBuddy微信版怎么获得积分?
5000元起的鼠标哪个最值得入手?
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
腾讯ima知识库怎么分类管理?
短剧《史上最强洪荒修为》剧情介绍
海尔消毒柜自动消毒如何中止
博世壁挂炉关闭暖气怎么操作
男生高性价比充电头?
车载冰箱重置到出厂设置几步?
管线机怎么接云米净水器
Windy卫星云图怎么看?云层变化识别技巧
WorkBuddy积分怎么获得?
5000-6000元鼠标有什么推荐?
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc