paper2skills Playbook

Knowledge Graph Question Answering (KGQA)

Skill-KGQA-Question-Answering · 08-知识图谱

experimentforecastingrecommendationragknowledge_graphpricing客服与VOC推荐与搜索知识图谱与RAG定价与利润WF-C 客服分诊WF-D 选品扫描WF-F 动态定价
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐⭐☆
业务视角
适用角色选品负责人 / 运营负责人 · 数据分析师 · 供应链负责人
适用平台Amazon 品类体系 · 竞品 ASIN 网络分析
什么情况下用品类很多,不清楚品类间的关联,没法做系统性类目扩张规划;竞品矩阵太复杂,品牌/SKU/渠道理不清
成功是什么样的建立品类知识图谱,清晰看到哪些是入口品/引流品/利润品,指导下一步选品扩张方向
业务痛点
品类太多不知道先做哪个竞品关系理不清楚不知道用户买了奶瓶还会买什么类目扩张没有逻辑

1. 解决的问题

构建了产品知识图谱后,如何让非技术人员(运营、客服、业务方)用自然语言查询它?

2. 核心算法逻辑

核心问题:构建了产品知识图谱后,如何让非技术人员(运营、客服、业务方)用自然语言查询它?KGQA把"图谱查询"从SPARQL/Cypher简化为人话。

3. 业务应用场景

业务问题:客服每天回答重复问题:"这款奶粉含DHA吗?"、"3段和2段有什么区别?"、"这款吸奶器适合背奶妈妈吗?"——答案都在知识图谱里,但客服需要手动查。

2. 用户提问:"爱他美3段含有哪些成分?"

3. KGQA处理: - 实体链接:`爱他美3段` - 关系预测:`contains` - 子图检索:`(爱他美3段, contains, ?)` - 答案生成:`"爱他美3段含有DHA、益生菌、GOS/FOS益生元组合"`

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI:客服效率提升3-5倍,知识查询等待从分钟级降到秒级
  • 难度:⭐⭐⭐☆☆(3/5)— 简单模式匹配易实现,复杂推理需要LLM
  • 优先级:⭐⭐⭐⭐☆(4/5)— 知识图谱的"最后一公里",让业务方真正用上图谱

7. 代码模板

代码块数量:3 · 路径:未检测到

"""
Knowledge Graph Question Answering (KGQA) — 知识图谱问答
支持:实体链接、关系预测、子图检索、答案生成
"""

import re
from typing import List, Dict, Tuple, Optional
from collections import defaultdict


class SimpleKGQA:
    """简化版KGQA系统"""

    def __init__(self):
        self.kg = {}  # {entity: {relation: [target_entities]}}
        self.entity_aliases = {}  # {alias: canonical_name}
        self.relation_patterns = {
            'contains': r'含有什么|成分|包含|有什么',
            'suitable_for': r'适合谁|适用|几岁|多大',
            'brand': r'什么品牌|牌子|哪个品牌',
            'price': r'多少钱|价格|售价',
            'compare': r'区别|差异|对比|和.*有什么',
        }

    def add_fact(self, head: str, relation: str, tail: str):
        """添加知识图谱三元组"""
        if head not in self.kg:
            self.kg[head] = defaultdict(list)
        self.kg[head][relation].append(tail)

    def add_alias(self, alias: str, canonical: str):
        """添加实体别名"""
        self.entity_aliases[alias.lower()] = canonical

    def _link_entity(self, question: str) -> Optional[str]:
        """实体链接:从问题中找提到的实体"""
        question_lower = question.lower()

        # 先匹配别名
        for alias, canonical in self.entity_aliases.items():
            if alias in question_lower:
                return canonical

        # 再匹配主实体名
        for entity in self.kg.keys():
            if entity.lower() in question_lower:
                return entity

        return None

    def _predict_relation(self, question: str) -> Optional[str]:
        """关系预测:判断用户问的是什么关系"""
        for relation, pattern in self.relation_patterns.items():
            if re.search(pattern, question.lower()):
                return relation

        # 默认:如果问题含"是""吗",可能是属性查询
        if '是' in question or '吗' in question:
            return 'contains'

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。