如何用 GraphRAG 的 prompt-tune 命令生成领域适配的索引提示词?
【免费下载链接】graphragA modular graph-based Retrieval-Augmented Generation (RAG) system项目地址: https://gitcode.com/GitHub_Trending/gr/graphrag
GraphRAG 的索引流水线默认使用一组通用提示词来构建知识图谱。如果你的输入数据集中在某个领域(比如环境新闻、太空科学、微生物学),prompt-tune命令可以读取你的实际输入数据,通过一系列 LLM 调用生成适配该领域的提示词,文档建议在执行 Index Run 之前运行这一步,以获得更好的索引结果。本文以命令行方式完整走一遍:初始化工作区、准备输入、运行prompt-tune、核对生成的提示词文件,并把settings.yaml指到新的提示词上。
前置条件(来自文档):
- Python 3.10–3.12;
- 已安装
graphrag(可从 PyPI 安装); - 已用
graphrag init初始化过工作区,且.env中的 API Key 已配置; input/目录中有待索引的数据文件。
初始化工作区并准备输入
prompt-tune依赖graphrag init生成的配置文件,先在你的项目目录下执行:
python -m pip install graphrag graphrag init执行过程中按提示选择默认的 chat 与 embedding 模型。init命令会创建以下文件:
settings.yaml— 流水线配置;.env— 环境变量文件,包含GRAPHRAG_API_KEY=<API_KEY>,把<API_KEY>替换为你自己的 OpenAI 或 Azure API key(prompt-tune 会发起 LLM 调用,Key 必须有效);prompts/— 存放 GraphRAG 默认提示词的目录。
然后把你的数据文件放进input/目录。prompt-tune会读取这个目录下的输入,支持的格式包括.csv、.txt、.json、.jsonl、.parquet以及 MarkItDown 支持的文件。文档也提醒:GraphRAG 可能消耗大量 LLM 资源,建议先用小的教程数据集熟悉流程,并用较快、较便宜的模型做实验。
运行 prompt-tune
命令的完整形式(来自 Auto Prompt Tuning 文档):
graphrag prompt-tune [--root ROOT] [--domain DOMAIN] [--selection-method METHOD] [--limit LIMIT] [--language LANGUAGE] \ [--max-tokens MAX_TOKENS] [--chunk-size CHUNK_SIZE] [--n-subset-max N_SUBSET_MAX] [--k K] \ [--min-examples-required MIN_EXAMPLES_REQUIRED] [--discover-entity-types] [--output OUTPUT]各选项的含义与默认值:
| 选项 | 说明 | 默认值 |
|---|---|---|
--root | 包含配置文件(settings.yaml)的项目目录 | 当前目录 |
--domain | 输入数据的领域,如 'space science';留空时从输入数据自动推断 | 空 |
--selection-method | 文档选择方法:all、random、auto、top | random |
--limit | 使用 random 或 top 选择时加载的 text units 数量 | 15 |
--language | 处理使用的语言;与输入语言不同时 LLM 会翻译 | 空(自动检测) |
--max-tokens | 提示词生成的最大 token 数 | 2000 |
--chunk-size | 从输入文档生成 text units 使用的 token 块大小 | 200 |
--n-subset-max | auto 选择方法中要嵌入的文本块数量 | 300 |
--k | auto 选择方法中选取的文档数量 | 15 |
--min-examples-required | 实体抽取提示词所需的最少示例数 | 2 |
--discover-entity-types | 允许 LLM 自动发现并抽取实体类型;数据覆盖主题很多或高度随机时建议使用 | 不启用 |
--output | 保存生成提示词的目录 | prompts |
文档给出的两个示例:
python -m graphrag prompt-tune --root /path/to/project --domain "environmental news" \ --selection-method random --limit 10 --language English --max-tokens 2048 --chunk-size 256 --min-examples-required 3 \ --no-discover-entity-types --output /path/to/output文档标注的最小配置运行方式(suggested):
python -m graphrag prompt-tune --root /path/to/project --no-discover-entity-types示例中的/path/to/project、/path/to/output是占位符,替换为你实际的项目目录和输出目录;如果已经在项目目录下运行,--root可省略(默认当前目录),--output省略时默认写入prompts目录。
内部流程:命令先加载输入数据,按chunk-size切成 text units,再用所选方法抽取样本,最后通过 LLM 调用与模板替换生成最终提示词。文档建议直接使用脚本默认值,按需再调整。
选择文档采样方法
--selection-method决定从 text units 中取什么样本来做提示词生成:
random:随机选取,默认且文档推荐;top:取前 n 个 text units(配合--limit);all:使用全部 text units,文档明确说只适合小数据集,通常不推荐;auto:把 text units 嵌入低维空间后选取距质心最近的 k 个,适合大数据集,用于选取有代表性的样本(配合--n-subset-max和--k)。
验证生成的提示词
运行结束后,检查输出目录(默认prompts/)中是否写入了三个提示词文件:
extract_graph.txt— 实体/关系抽取提示词;summarize_descriptions.txt— 实体/关系描述汇总提示词;community_report_graph.txt— 社区报告提示词。
文件名依据 CLI 实现,该实现会把三个生成结果写入输出目录,并在日志中输出Writing prompts to ...与Prompts written to ...两行记录,可据此确认文件写入位置。
更新配置以使用新提示词
文档的 Modify Config 一节要求运行后修改settings.yaml中以下变量,让 index run 使用新提示词:
extract_graph: prompt: "prompts/extract_graph.txt" summarize_descriptions: prompt: "prompts/summarize_descriptions.txt" community_reports: prompt: "prompts/community_report.txt"文档同时提醒:务必把路径更新为生成提示词的实际位置,上面示例使用默认prompts路径。这里有一处需要留意的差异:文档示例中写的是prompts/community_report.txt,而命令实际写入的文件名为community_report_graph.txt,且init生成的默认配置中community_reports使用的是graph_prompt: "prompts/community_report_graph.txt"。修改前请先查看输出目录里的真实文件名,再按实际名称填写,不要照抄可能与代码不一致的路径。
另外,如果--output保持默认的prompts,生成的三个文件名与init生成的默认配置所引用的路径一致,配置可能无需改动即可指向新提示词。
下一步
提示词就位后,就可以启动索引流水线:
graphrag index关于settings.yaml各字段的更多配置项,见 配置文档;手动编辑提示词的进阶用法(各提示词支持的 token 替换位)见 Manual Prompt Tuning。
【免费下载链接】graphragA modular graph-based Retrieval-Augmented Generation (RAG) system项目地址: https://gitcode.com/GitHub_Trending/gr/graphrag
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考