[Bug]: 知识图谱实体和关系已成功创建并存储,但检索结果中完全不包含这些内容。
相关组件
后端服务及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_chunks和indirect_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: 加权多阶段检索
实现多阶段检索:
- 第一阶段: 对所有块类型进行向量相似度检索
- 第二阶段: 从匹配的实体进行图谱遍历
- 第三阶段: 加权组合结果
📁 相关文件
internal/application/service/retriever/- 检索引擎实现internal/application/service/knowledge.go- 图谱构建(工作正常)internal/application/service/graph.go- 图谱构建逻辑(工作正常)
🎯 影响
- 影响程度: 高 - Graph-RAG 功能完全失效
- 用户体验: 相关的知识图谱信息对用户不可见
- 业务价值: 丰富的语义关系未被利用
🧪 测试用例
# 最小重现测试
# 1. 上传包含清晰实体/关系内容的文档
# 2. 验证实体已在数据库中创建
# 3. 查询存在于实体中的信息
# 4. 观察只返回文本块
📋 验证清单
- [ ] 确认检索引擎包含实体块
- [ ] 确认检索引擎包含关系块
- [ ] 测试基于实体的查询返回相关图谱内容
- [ ] 验证Graph-RAG提供增强的上下文
- [ ] 测试包含图谱块的性能影响
🔄 临时解决方案
目前用户可以通过以下方式部分缓解问题:
- 调整检索参数降低阈值
- 增加候选结果数量
- 使用更精确的关键词查询
但这些方案都无法根本解决图谱内容缺失的问题。
报告人: 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,确认这是一个新问题
目前有相关的功能,是不是搜索的比配程度不高导致没有召回,搜索功能是实现了的 https://github.com/Tencent/WeKnora/blob/main/internal/application/service/knowledgebase.go#L448
目前有相关的功能,是不是搜索的比配程度不高导致没有召回,搜索功能是实现了的 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 功能后就没事了