TODO.md 6.6 KB

LambdaRAG TODO List

基于 Maritime 180题 (90.8%) + Finance 95题 (55%) 实验结果 综合自身问题分析 + 业界最佳实践 (CRAG/RAGAS/GraphRAG/FAIR-RAG等) 2026-04-08


P0 — 立即可做 (< 30 min each, 高回报)

P0-1: 修复 graph keywords 错误

  • 问题: [graph] Error: 'keywords' 每次查询都报错
  • 原因: 规则分类路径返回的 dict 没有 keywords 字段
  • 改动: search_unified.py_rule_based_entities 确保返回 keywords
  • 文件: search_unified.py
  • 预期: 消除报错,graph 路径正常工作

P0-2: 分类规则增加领域词 + 优先级排序

  • 问题: Finance 意图准确率 46%, Maritime 60%
  • 原因: process/compare 边界模糊,"能不能报销"同时命中两个
  • 改动:
    • process 关键词优先于 compare(先匹配 process)
    • Finance 增加: 报销/预约/退回/建账/扣税/签字/审批/发放
    • Maritime 增加: 检验/登记/适任/发证/申请/备案
    • 改为评分制而非先命中返回
  • 文件: search_unified.py intent_entity_extract
  • 预期: 意图准确率 +15-20%

P0-3: 查询日志 (JSONL)

  • 问题: 无法追踪哪些问题失败、哪些策略有效
  • 改动: 每次查询后 append 到 feedback/query_log.jsonl json {"ts":"2026-04-08T12:00:00", "query":"...", "intent":"fact", "strategy":"v3(fact|...)", "has_result":true, "elapsed":3.2, "path_counts":{"bm25":10,"vector":8,"graph":3,"wiki":2}} - 文件: search_unified.py search() 末尾 - 预期: 数据基础,后续所有优化的度量依据 ### P0-4: "未找到"记录到 feedback - 问题: Finance 45题未找到,不知道缺什么文档 - 改动: 当回答含"未找到"时,记录到 feedback/missing_queries.jsonl - 文件: app.py rag_answer() + search_unified.py - 预期: 指导知识库补充,定期分析哪些问题需要新文档 --- ## P1 — 本周内 (< 2hr each, 显著提升) ### P1-1: Corrective RAG — 检索质量门控 - 问题: 检索到不相关文档但仍生成回答(如行政清单 vs 法律原文) - 改动: RRF 融合后、生成前,用 LLM 快速评估 top-3 文档相关性 - 相关性 < 0.4 → 自动改写 query 重新检索(retry 1次) - Lambda: Guard(fusion_search, quality_check, retry=1, on_fail=reformulate) - 文件: search_unified.py 新增 _check_retrieval_quality - 预期: 减少"未找到"5-10题,减少错误回答 ### P1-2: compare 类跳过实体增强 - 问题: compare 类 v3 比 v2 下降 4%(93→89%) - 原因: 实体增强把两个法律名扩展为更多词,反而稀释了精确匹配 - 改动: entity_enhanced_search 中 compare 类用原始 query 不做增强 - 文件: search_unified.py - 预期: compare +4% 回到 93% ### P1-3: FAIR-RAG 内联证据评估(改 prompt) - 问题: LLM 有时生成无依据的内容 - 改动: answer prompt 增加要求:每个论点标注 [证据:doc_id, 置信度:0-1] - 置信度 < 0.7 的论点不输出 - 文件: instance.yml 的 prompts.fact_answer / process_answer - 预期: 减少编造,提高引用准确性 ### P1-4: 语义查询缓存 - 问题: 重复问题每次都要全量检索 + LLM - 改动: - 查询前 embed query → 对比缓存 → 相似度 > 0.92 返回缓存 - 缓存存: feedback/query_cache.json (LRU 1000条, TTL 4hr) - 文件: search_unified.py search() 开头加缓存检查 - 预期: 30-50% 缓存命中,延迟 12.5s → 0.5s ### P1-5: temporal 时间展开 - 问题: temporal 类 82%,"近五年"等模糊时间无法匹配 - 改动: 检测到时间模糊词时,自动展开为绝对年份 - "近五年" → "2021年 2022年 2023年 2024年 2025年" - "最新" → 当前年份 - 文件: search_unified.py_path_bm25 中增加时间展开 - 预期: temporal +5-10% --- ## P2 — 下周 (< 1天 each, 架构提升) ### P2-1: RAGAS 自动评估框架 - 问题: 只有关键词命中率,无法评估回答质量 - 改动: 新增 eval_ragas.py - 3 个指标: faithfulness, relevancy, context_precision - 用本地 vLLM 做 LLM-as-judge - 批量评估 + 结果存 feedback/eval_results.jsonl - 文件: 新文件 scripts/eval_ragas.py - 预期: 每次改动有量化评估,回归测试 ### P2-2: 上下文分块 (Contextual Chunking) - 问题: "本条例"、"上述规定"等指代不明 - 改动: build_vector_index.py 中,每个 chunk 前加 LLM 生成的上下文 - "[文件:《海上交通安全法》第三章 船舶检验] 原文内容..." - 文件: build_vector_index.py - 预期: 向量检索准确率 +10%,一次性重建索引 ### P2-3: 领域同义词表 - 问题: "适任证书"vs"资格证书","报销"vs"列支",检索不互通 - 改动: - 新增 feedback/synonym_map.json - BM25 tokenize 时自动展开同义词 - 从 query_expand 历史中积累 - 文件: search_engine.py tokenize + feedback/synonym_map.json - 预期: 检索召回 +5% ### P2-4: MinerU 深度文档解析 - 问题: 84个扫描版 PDF 无法提取,表格结构丢失 - 改动: 用服务器已有的 MinerU Docker 镜像替代 PyMuPDF - 文件: 新文件 scripts/extract_mineru.py - 预期: +84 个文件可检索,表格质量提升 ### P2-5: 路由成功率统计 + 自适应权重 - 问题: 权重是手动调的,不同领域需要不同权重 - 改动: - 从 query_log.jsonl 统计各 (intent, strategy) 的成功率 - 每 100 次查询自动更新 feedback/routing_stats.json - 用成功率加权替代固定权重 - 文件: search_unified.py + 新文件 scripts/update_routing.py - 预期: 自动调优,适配不同领域 --- ## P3 — 长期 (架构演进) ### P3-1: MA-RAG 多智能体分解 - 复杂问题先分解为子问题,各自检索后合并 - 对应现有的 map_reduce pattern + DeepAnalysis tool ### P3-2: LazyGraphRAG 增量图谱 - 每次查询结果中提取新关系,增量更新图谱 - 对应现有 knowledge_feedback 设计 ### P3-3: 更强模型重编译 Wiki - 用 72B+ 模型重新编译 Wiki,提升摘要和关系质量 ### P3-4: 用户反馈收集 - Web Demo 加 👍/👎 按钮,收集用户反馈 - 用反馈训练分类器和调整权重 --- ## 完成进度追踪 | ID | 状态 | 完成日期 | |----|------|---------| | P0-1 | ✅ | 2026-04-08 | | P0-2 | ✅ | 2026-04-08 | | P0-3 | ✅ | 2026-04-08 | | P0-4 | ✅ | 2026-04-08 | | P1-1 | ✅ | 2026-04-08 | | P1-2 | ✅ | 2026-04-08 | | P1-3 | ⬜ | | | P1-4 | ⬜ | | | P1-5 | ✅ | 2026-04-08 | | P2-1 | ⬜ | | | P2-2 | ⬜ | | | P2-3 | ⬜ | | | P2-4 | ⬜ | | | P2-5 | ⬜ | |