geo/docs/02-模块说明/entity-types.md

5.3 KiB
Raw Blame History

知识图谱实体类型定义

概述

本文档描述知识图谱中使用的实体类型和关系类型。

实体类型 (EntityType)

位置:backend/app/models/knowledge_graph.py

类型定义

类型 枚举值 说明 示例
ORGANIZATION organization 公司/组织 腾讯、阿里巴巴
PRODUCT product 产品 微信、王者荣耀
PERSON person 人物 马化腾、张小龙
LOCATION location 地点 深圳、广州
TECHNOLOGY technology 技术 AI、区块链
BRAND brand 品牌 微信支付、腾讯云
EVENT event 事件 2020腾讯年会
CONCEPT concept 概念 数字化转型

属性说明

class Entity:
    id: str              # UUID
    name: str            # 实体名称
    entity_type: str     # 实体类型
    description: str     # 描述
    properties: dict     # 自定义属性
    confidence: str      # 置信度 (high/medium/low)
    source_chunk_id: str # 来源Chunk ID

关系类型 (RelationType)

位置:backend/app/models/knowledge_graph.py

类型定义

类型 枚举值 说明 示例
COMPETES_WITH competes_with 竞争对手 微信 ↔ 支付宝
PARTNERS_WITH partners_with 合作伙伴 腾讯 ↔ 京东
PRODUCES produces 生产 苹果 ↔ iPhone
USES_TECHNOLOGY uses_technology 使用技术 微信 ↔ AI
LOCATED_IN located_in 位于 腾讯 ↔ 深圳
FOUNDED_IN founded_in 成立于 腾讯 ↔ 1998
CEO_OF ceo_of CEO 马化腾 ↔ 腾讯
FOUNDER_OF founder_of 创始人 马化腾 ↔ 腾讯
RELATED_TO related_to 相关 AI ↔ 机器学习
PART_OF part_of 属于 iPhone ↔ 苹果

属性说明

class Relation:
    id: str              # UUID
    source_entity_id: str    # 源实体ID
    target_entity_id: str   # 目标实体ID
    relation_type: str   # 关系类型
    properties: dict     # 自定义属性
    confidence: str      # 置信度 (high/medium/low)
    source_chunk_id: str # 来源Chunk ID

抽取流程

位置:backend/app/services/knowledge/entity_extractor.py

EntityExtractor

class EntityExtractor:
    ENTITY_TYPES = [
        "ORGANIZATION",
        "PRODUCT",
        "PERSON",
        "LOCATION",
        "TECHNOLOGY",
        "BRAND",
        "EVENT",
        "CONCEPT",
    ]

    RELATION_TYPES = [
        "COMPETES_WITH",
        "PARTNERS_WITH",
        "PRODUCES",
        "USES_TECHNOLOGY",
        "LOCATED_IN",
        "FOUNDED_IN",
        "CEO_OF",
        "FOUNDER_OF",
        "RELATED_TO",
        "PART_OF",
    ]

    async def extract(text: str, context: str) -> ExtractionResult:
        """
        从文本中抽取实体和关系
        1. 构建抽取Prompt
        2. 调用LLM
        3. 解析返回结果
        """

抽取Prompt示例

从以下文本中抽取知识图谱的实体和关系。

实体类型:
- ORGANIZATION (公司/组织)
- PRODUCT (产品)
- PERSON (人物)
...

关系类型:
- COMPETES_WITH (竞争对手)
- PARTNERS_WITH (合作伙伴)
...

文本内容:
{text}

请以JSON格式返回结果
{
    "entities": [
        {"name": "实体名称", "entity_type": "类型", "confidence": "high/medium/low"}
    ],
    "relations": [
        {"source_entity": "源", "target_entity": "目标", "relation_type": "类型", "confidence": "high/medium/low"}
    ]
}

图谱构建

位置:backend/app/services/knowledge/graph_builder.py

GraphBuilder

class GraphBuilder:
    async def build_from_chunk(
        session: AsyncSession,
        chunk_id: str,
        context: str = None,
    ) -> dict:
        """
        从Chunk构建知识图谱
        1. 获取Chunk内容
        2. 调用EntityExtractor抽取
        3. 存储到图谱
        """

构建统计

返回统计信息:

{
    "entities_created": 5,      # 新建实体数
    "entities_existing": 2,      # 已存在实体数
    "relations_created": 3,     # 新建关系数
    "relations_existing": 1,    # 已存在关系数
}

图谱查询

实体查询

# 查询实体
GET /api/v1/knowledge-graph/entities?type=brand&limit=20

# 响应
{
    "entities": [
        {
            "id": "uuid",
            "name": "微信",
            "type": "brand",
            "description": "...",
            "properties": {...}
        }
    ]
}

关系查询

# 查询关系
GET /api/v1/knowledge-graph/relations?source_id=xxx&type=competes_with

# 响应
{
    "relations": [
        {
            "id": "uuid",
            "source_id": "xxx",
            "target_id": "yyy",
            "type": "competes_with",
            "properties": {...}
        }
    ]
}

语义搜索

# 语义搜索
GET /api/v1/knowledge-graph/search?query=微信的竞争对手

# 响应
{
    "results": [
        {"entity": {...}, "score": 0.95},
        {"entity": {...}, "score": 0.87}
    ]
}

置信度评估

级别 说明 使用场景
high 高置信度 直接使用
medium 中置信度 建议人工审核
low 低置信度 仅供参考

评估因素:

  • 文本中提及的明确性
  • 上下文的支持程度
  • LLM模型的确定性