GraphRAG: Auto Prompt Tuning 实践

server/2025/1/21 5:47:08/

GraphRAG 的 Auto Prompt Tuning 功能是一个强大的工具,用于优化知识图谱的生成过程。以下是对该功能的详细介绍和分析:

自动提示调优(Auto Prompt Tuning)

1. 概念

GraphRAG 的自动提示调优功能旨在为特定领域的知识图谱生成创建适应性提示。这一过程通过加载输入数据,将其分割成多个文本单元(块),然后运行一系列大型语言模型(LLM)调用和模板替换,生成最终的提示。这些提示能够更好地适应特定领域的数据,从而提高生成模型的表现。

2. 先决条件

在运行自动提示调优之前,需要确保已经使用 graphrag init 命令初始化工作空间。这将创建必要的配置文件和默认提示。具体步骤如下:

sh复制

graphrag init
3. 使用方法

可以通过命令行运行主脚本,并提供多种选项来执行自动提示调优。命令行的基本格式如下:

sh复制

graphrag prompt-tune [--root ROOT] [--config CONFIG] [--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]
4. 命令行选项
  • --config (必需): 配置文件的路径,用于加载数据和模型设置。

  • --root (可选): 数据项目根目录,包括配置文件(YML、JSON或.env)。默认为当前目录。

  • --domain (可选): 与输入数据相关的领域,如“太空科学”、“微生物学”或“环境新闻”。如果留空,将从输入数据中推断领域。

  • --method (可选): 选择文档的方法,选项有 allrandomautotop。默认为 random

  • --limit (可选): 使用 randomtop 选择时加载的文本单元数量。默认为15。

  • --language (可选): 用于输入处理的语言。如果与输入语言不同,LLM将进行翻译。默认为"",表示将自动从输入中检测语言。

  • --max-tokens (可选): 生成提示时的最大标记数。默认为2000。

  • --chunk-size (可选): 用于从输入文档生成文本单元的标记大小。默认为200。

  • --n-subset-max (可选): 使用 auto 选择方法时嵌入的文本块数量。默认为300。

  • --k (可选): 使用 auto 选择方法时选择的文档数量。默认为15。

  • --min-examples-required (可选): 实体提取提示所需的最小示例数量。默认为2。

  • --discover-entity-types (可选): 允许LLM自动发现和提取实体。当数据涵盖多个主题或高度随机化时,建议使用此选项。

  • --output (可选): 保存生成提示的文件夹。默认为"prompts"。

5. 示例用法

以下是一个完整的示例命令,展示了如何使用自动提示调优功能:

sh复制

python -m graphrag prompt-tune --root /path/to/project --config /path/to/settings.yaml --domain "environmental news" \
--method random --limit 10 --language English --max-tokens 2048 --chunk-size 256 --min-examples-required 3 \
--no-entity-types --output /path/to/output

或者,使用最小配置(建议):

sh复制

python -m graphrag prompt-tune --root /path/to/project --config /path/to/settings.yaml --no-entity-types
6. 文档选择方法

自动提示调优功能会读取输入数据,然后将其划分为指定大小的文本单元。接下来,它会使用以下选择方法之一来挑选样本用于提示生成:

  • random: 随机选择文本单元。这是默认且推荐的选项。

  • top: 选择前n个文本单元。

  • all: 使用所有文本单元进行生成。仅在数据集较小时使用,通常不推荐此选项。

  • auto: 在较低维空间中嵌入文本单元,并选择k个最近邻居。这在处理大型数据集时非常有用,可以选择一个具有代表性的样本。

7. 修改环境变量

运行自动提示调优后,需要修改以下环境变量(或配置变量),以便在索引运行时使用新的提示。请确保更新生成提示的正确路径,以下示例使用默认的"prompts"路径:

sh复制

GRAPHRAG_ENTITY_EXTRACTION_PROMPT_FILE = "prompts/entity_extraction.txt"
GRAPHRAG_COMMUNITY_REPORT_PROMPT_FILE = "prompts/community_report.txt"
GRAPHRAG_SUMMARIZE_DESCRIPTIONS_PROMPT_FILE = "prompts/summarize_descriptions.txt"

或者在yaml配置文件中:

yaml复制

entity_extraction:prompt: "prompts/entity_extraction.txt"summarize_descriptions:prompt: "prompts/summarize_descriptions.txt"community_reports:prompt: "prompts/community_report.txt"

应用场景

自动提示调优功能在多种应用场景中都非常有用,例如:

  • 学术论文分析:提取论文中的作者、出版日期、方法论、技术等实体。

  • 新闻报道处理:提取新闻中的事件、人物、地点等实体。

  • 医疗数据处理:提取病历中的症状、诊断、治疗等实体。

手动提示调优

虽然自动提示调优功能非常强大,但在某些情况下,可能需要手动调整提示以更好地适应特定需求。手动提示调优的步骤如下:

  1. 明确任务目标:确定需要从文本中识别的实体类型及其关系。

  2. 设计Prompt结构:编写包含任务目标、步骤、实体类型列表、示例等部分的Prompt。

  3. 借助AI助手生成示例:使用ChatGPT等AI助手生成示例,帮助定义实体类型和关系。

  4. 微调Prompt并测试:根据生成的示例和实际需求,对Prompt进行微调,并通过实际测试验证其效果。

  5. 应用于实际场景:将调整好的Prompt应用于实际场景,如学术论文分析、新闻报道处理等。

结论

GraphRAG 的自动提示调优功能是一个强大的工具,能够通过创建特定于领域的提示来提升知识图谱生成的效果。通过合理配置命令行选项和选择合适的文档选择方法,用户能够有效地生成高质量的提示,从而在后续的索引运行中获得更优的结果。同时,手动提示调优提供了更灵活的方式,可以进一步优化提示,以更好地适应特定需求。


http://www.ppmy.cn/server/160094.html

相关文章

upload-labs靶场练习

01(JS前端认证) 客户端JS脚本有限制,本来想用上次笔记的方法来做(即改扩展名为.jpg,上传,抓包,改扩展名为.php,放行或者发送至repeater,改扩展名然后重发,再…

springboot医院信管系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…

【cursor重构谷粒商城】03——谷粒商城技术架构选型存在哪些不足?

前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…

1.7 ChatGPT:引领AI对话革命的致胜之道

ChatGPT:引领AI对话革命的致胜之道 随着人工智能(AI)技术的迅猛发展,特别是在自然语言处理(NLP)领域,OpenAI 的 ChatGPT 已经成为了举世瞩目的技术突破。从普通的自动化客服到深入的创作与协作,ChatGPT 通过其卓越的语言理解和生成能力,改变了人们与计算机交互的方式…

【HeadFirst系列之HeadFirst设计模式】第3天之观察者模式

前言 从今日起,陆续分享《HeadFirst设计模式》的读书笔记,希望能够帮助大家更好的理解设计模式,提高自己的编程能力。 设计模式本质上就是前人比较成熟的经验和智慧。他们遇到过相同的问题,也顺利地解决了这些问题。 跟随前人的脚…

网络安全中攻击溯源有哪些方法?

目前网络攻击已经成为常见的安全威胁之一,其造成的危害和损失都是不可估量的,因此网络攻击受到了高度重视。而当我们遭遇网络攻击时,攻击溯源是一项非常重要的工作,可以帮助我们迅速发现并应对各类网络攻击行为,那么网…

【Linux】重定向缓冲区

一、文件内核级缓冲区 在一个struct file内部还要有一个数据结构-----文件的内核级缓冲区。 1.1 write写入操作 当我们去对一个文件写入的时候,那么是如何进行写入的呢? 如:write(3,"hello",..) 先找到文件的内核缓冲区&#…

DDD - 如何设计支持快速交付的DDD技术中台

文章目录 Pre概述打造快速交付团队烟囱式的开发团队(BAD)大前端技术中台(GOOD) 技术中台的特征简单易用的技术中台建设总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对象的两种设计思路…