[GraphRAG] [Index][graph][extractors] community_reports_extractor

158 阅读5分钟

[GraphRAG] [Index][graph][extractors] community_reports_extractor

CommunityReportsResult

**CommunityReportsResult**用于存储社区报告提取的结果。

  • output:报告的文本表示。
  • structured_output:存储报告提取结果的结构化数据(字典格式)。
@dataclass
class CommunityReportsResult:
    """Community reports result class definition."""

    output: str
    structured_output: dict

CommunityReportsExtractor

关键属性

  • _llm:类型为 CompletionLLM,用于调用大型语言模型生成社区报告。
  • _input_text_key:字符串类型,指定输入数据中用于生成报告的文本字段的键名,默认为 "input_text"
  • _extraction_prompt:字符串类型,提取报告时使用的提示文本,默认为 COMMUNITY_REPORT_PROMPT
  • _on_error:错误处理函数,默认是一个空的 lambda 函数,用于处理生成报告时发生的异常。
  • _max_report_length:整数类型,设置报告的最大长度,默认为 1500 字符。

主要方法

  • __init__:构造函数,用于初始化 CommunityReportsExtractor 实例。接受一些可选参数,如 LLM 实例、输入文本键、错误处理函数等。
  • __call__:核心方法,调用 self._llm() 生成社区报告。接受一个字典类型的 inputs 参数,使用其中的文本数据生成报告。处理异常并返回结构化和文本格式的报告。
  • _get_text_output:用于将生成的结构化数据(字典)转换为文本格式,拼接标题、总结和发现部分的内容,并返回最终的报告文本。

步骤

初始化和配置

__init__

  • **llm_invoker **:初始化 LLM 实例,参数传入的 CompletionLLM 实例会赋值给 self._llm。该实例是用于生成社区报告的核心工具。
  • **input_text_key **:设置输入文本键,(默认为 "input_text")指定了在输入字典中用于生成报告的文本字段的键名。如果没有传入该参数,则默认使用 "input_text" 作为键名。
  • **extraction_prompt **:设置提取报告的提示词,参数用于设置提取报告时使用的提示文本,默认值为 COMMUNITY_REPORT_PROMPT。该提示会指导 LLM 如何生成报告。
  • on_error: 设置错误处理函数,参数用于定义错误发生时的处理逻辑。如果没有提供错误处理函数,则默认使用一个空的 lambda 函数。
  • **max_report_length **:设置最大报告长度,参数设置生成的报告最大字符数,默认为 1500 字符。
任务模板
你是一个人工智能助手,可以帮助人类分析师完成一般的资料探索工作。资料探索是指找出并评价与网络中特定实体(如组织和个人)相关的相关信息过程。
  • Goal

    # Goal
    根据给定的社区成员名单以及他们之间的关系和可选的相关声明,撰写一份全面的社区报告。这份报告将被用来告知决策者有关这个社群的信息及可能产生的影响。此份报告包含以下内容:社区关键实体概览、它们的合法遵约情况、技术能力、声望以及值得关注的声明。
    
  • Report Structure

    # Report Structure
    
    报告应包括以下部分:
    
    - 标题:代表其主要实体的社区名称——标题应当简洁明了且具有针对性。如有可能,请在标题中加入代表性命名实体。
    
    - 摘要:概述该社区整体架构、各实体间关联及与其相关的重大信息。
    
    - 影响力评分:介于0到10之间的一个浮点数,表示社区内部实体带来的影响程度。影响力即为一个社区的重要性水平。
    
    - 评分明细说明:给出一条对该影响力评分的一句话解释。
    
    - 细节详析:列出有关此社区的5至10条重要观察结论。每项观察都需附上一段简短总结,并随后跟进若干段以基础规则为基础的文字阐述。务必确保内容完整无缺.
    
    返回格式:
    {{
            "title": <report_title>,
            "summary": <executive_summary>,
            "rating": <impact_severity_rating>,
            "rating_explanation": <rating_explanation>,
            "findings": [
                {{
                    "summary":<insight_1_summary>,
                    "explanation": <insight_1_explanation>
                }},
                {{
                    "summary":<insight_2_summary>,
                    "explanation": <insight_2_explanation>
                }}
            ]
        }}
    
  • Grounding Rules

    数据支持的点应列出其数据参考,如下所示:
    “这是多个数据引用支持的示例语句 [Data: <dataset name> (record ids); <dataset name> (record ids)].”。
    
    不要在单个引用中列出超过5个记录ID。相反,列出最相关的前5个记录id,并添加“+more”以指示还有更多。
    
    例如:
    “X先生拥有公司Y,并且受到了很多不端行为的指责[Data: Reports (1), Entities (5, 7); Relationships (23); Claims (7, 2, 34, 64, 46, +more)]."
    
    其中1、5、7、23、2、34、46和64分别代表了相关数据记录的编号(而不是索引)。 
    
    在没有提供支持证据的情况下,不要包含信息。
    
  • Example Input

    # Example Input
    -----------
    Text:
    
    Entities
    
    id,entity,description
    5,VERDANT OASIS PLAZA,Verdant Oasis Plaza is the location of the Unity March
    
    
    Relationships
    
    id,source,target,description
    37,VERDANT OASIS PLAZA,UNITY MARCH,Verdant Oasis Plaza is the location of the Unity March
    
    Output:
    {{
        "title": "",
        "summary": "",
        "rating": 5.0,
        "rating_explanation": "",
        "findings": [
            {{
                "summary": "Verdant Oasis Plaza as the central location",
                "explanation": "... [Data: Entities (5), Relationships (37, 38, 39, 40, 41,+more)]"
            }},
        ]
    }}
    
    
  • Real Data

# Real Data

使用以下文本作为您的回答。不要在您的答案中虚构任何内容。

Text:
{input_text}

Output:
Community reports extract
  • 调用 LLM:通过 await self._llm() 异步调用 LLM,传入生成报告所需的提示和输入数据。LLM 会根据提示生成一个响应,通常是包含报告各个部分的结构化数据(如标题、总结、发现、评分等)。

    • 验证响应:使用 is_response_valid 函数来验证 LLM 返回的响应是否有效,确保响应中包含报告的所有关键字段,如 "title""summary""findings""rating" 等。
  • 输出 output

    {
      "title": "",
      "summary": "",
      "rating": 3.5,
      "rating_explanation": "",
      "findings": [
        {
          "summary": "",
          "explanation": "..., [Data: Relationships (169)]"
        },
      ]
    }
    
  • _get_text_output 提取output内容生成报告文本:

    • title:报告的标题。

    • summary:报告的总结。

    • findings:报告中的发现,通常是一个列表。

    • 生成报告文本:最终,拼接标题、总结和发现的内容,生成一个完整的社区报告文本。

      # {title}
      
      {summary}
      
      ## {finding.summary}
      
      {finding.explanation}
      
      ...
      
  • 输出CommunityReportsResult 对象,包含结构化的报告数据和格式化的文本报告