WeKnora icon indicating copy to clipboard operation
WeKnora copied to clipboard

[Bug]: 知识图谱实体和关系已成功创建并存储,但检索结果中完全不包含这些内容。

Open setieroth opened this issue 3 months ago • 2 comments

相关组件

后端服务及API

Bug 描述

WeKnora Graph-RAG Bug 报告

🐛 Bug 摘要

知识图谱实体和关系已成功创建并存储,但检索结果中完全不包含这些内容。

📋 环境信息

  • WeKnora 版本: 最新版本 (从 Tencent/WeKnora fork)
  • 配置: ENABLE_GRAPH_RAG=true
  • LLM 提供商: DeepSeek via PPIO API
  • 数据库: PostgreSQL with pgvector

🔍 问题描述

期望行为

当查询具有对应知识图谱实体的主题时,检索系统应该返回相关的实体/关系块以及文本块,提供全面的Graph-RAG增强响应。

实际行为

检索系统只返回 chunk_type="text" 的结果,完全忽略 chunk_type="entity"chunk_type="relationship" 的块,即使它们包含高度相关的信息。

📊 证据与重现

1. 知识图谱已成功创建

-- 数据库包含完整的知识图谱
SELECT chunk_type, COUNT(*) FROM chunks WHERE tenant_id = 1 GROUP BY chunk_type;
  chunk_type  | count 
--------------+-------
 summary      |     5
 relationship |   752
 text         |   173
 entity       |   809

2. 相关实体确实存在

-- 查询存在高度相关的实体
SELECT content FROM chunks 
WHERE tenant_id = 1 AND chunk_type = 'entity' 
AND content ILIKE '%活动%参与%';

结果:
- "衡量活动参与程度的指标,当前参考价值较低"
- "衡量活动参与程度的指标"

3. 检索忽略图谱内容

# 查询: "活动参与率是一个好的指标么"
# 预期: 应该返回实体 "衡量活动参与程度的指标,当前参考价值较低"
# 实际: 返回不相关的M1主播激励内容

curl -X POST "http://localhost:8080/api/v1/knowledge-search" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: [API_KEY]" \
  -d '{
    "query": "活动参与率是一个好的指标么",
    "knowledge_base_id": "kb-00000001",
    "top_k": 10
  }'

# 结果: 只返回 chunk_type="text" 的不相关内容
# 缺失: chunk_type="entity" 和 chunk_type="relationship"

4. 直接实体查询也失败

# 即使是精确的实体描述也无法检索到
curl -X POST "http://localhost:8080/api/v1/knowledge-search" \
  -d '{"query": "衡量活动参与程度的指标", "knowledge_base_id": "kb-00000001"}'

# 仍然返回不相关的文本块,而不是完全匹配的实体

🔧 根因分析

图谱构建工作正常

  • GraphBuilder 成功提取实体和关系
  • ✅ 实体和关系块正确存储在数据库中
  • relation_chunksindirect_relation_chunks 被正确填充
  • ✅ 图谱数据丰富且语义准确

检索引擎限制

  • ❌ 检索系统似乎只过滤 chunk_type="text" 的内容
  • ❌ 实体和关系块被排除在搜索结果之外
  • ❌ 由于检索中缺少图谱内容,Graph-RAG 的优势丢失

💡 建议修复方案

方案1: 在检索中包含所有块类型

修改检索查询以包含实体和关系块:

-- 当前(推测): WHERE chunk_type = 'text'
-- 建议: WHERE chunk_type IN ('text', 'entity', 'relationship')

方案2: 添加配置选项

添加环境变量来控制图谱内容包含:

ENABLE_ENTITY_RETRIEVAL=true
ENABLE_RELATIONSHIP_RETRIEVAL=true

方案3: 加权多阶段检索

实现多阶段检索:

  1. 第一阶段: 对所有块类型进行向量相似度检索
  2. 第二阶段: 从匹配的实体进行图谱遍历
  3. 第三阶段: 加权组合结果

📁 相关文件

  • internal/application/service/retriever/ - 检索引擎实现
  • internal/application/service/knowledge.go - 图谱构建(工作正常)
  • internal/application/service/graph.go - 图谱构建逻辑(工作正常)

🎯 影响

  • 影响程度: 高 - Graph-RAG 功能完全失效
  • 用户体验: 相关的知识图谱信息对用户不可见
  • 业务价值: 丰富的语义关系未被利用

🧪 测试用例

# 最小重现测试
# 1. 上传包含清晰实体/关系内容的文档
# 2. 验证实体已在数据库中创建
# 3. 查询存在于实体中的信息
# 4. 观察只返回文本块

📋 验证清单

  • [ ] 确认检索引擎包含实体块
  • [ ] 确认检索引擎包含关系块
  • [ ] 测试基于实体的查询返回相关图谱内容
  • [ ] 验证Graph-RAG提供增强的上下文
  • [ ] 测试包含图谱块的性能影响

🔄 临时解决方案

目前用户可以通过以下方式部分缓解问题:

  1. 调整检索参数降低阈值
  2. 增加候选结果数量
  3. 使用更精确的关键词查询

但这些方案都无法根本解决图谱内容缺失的问题。


报告人: WeKnora 用户 日期: 2025-09-12 严重程度: 高 - 核心Graph-RAG功能损坏

docker_logs_last_1000_lines.log GITHUB_ISSUE_LOGS.md

reproduce_issue.sh BUG_REPORT_CN.md

期望行为

期望行为 当查询具有对应知识图谱实体的主题时,检索系统应该返回相关的实体/关系块以及文本块,提供全面的Graph-RAG增强响应。

相关日志

还是超过长度了-- log 在上面以附件形式给出

操作系统

macOS 15.6

确认事项

  • [x] 我已经搜索了现有的 issues,确认这是一个新问题

setieroth avatar Sep 11 '25 18:09 setieroth

目前有相关的功能,是不是搜索的比配程度不高导致没有召回,搜索功能是实现了的 https://github.com/Tencent/WeKnora/blob/main/internal/application/service/knowledgebase.go#L448

begoniezhao avatar Sep 12 '25 04:09 begoniezhao

目前有相关的功能,是不是搜索的比配程度不高导致没有召回,搜索功能是实现了的 https://github.com/Tencent/WeKnora/blob/main/internal/application/service/knowledgebase.go#L448

我后面看了一下,是因为用了 rerank model (用的 ppio 提供的qwen/qwen3-reranker-8b) 但是因为某种 bug/原因这个 rerank 把所有候选内容相关度打分都是打得很低(接近 0 or 很小),被抛弃了。关于 rerank 功能后就没事了

setieroth avatar Sep 16 '25 05:09 setieroth