ARCHITECTURE.md 13 KB

LambdaRAG Architecture — 统一知识检索智能体

Version 3.1 | 2026-04-08 Maritime: 91.7% (180题) | Finance: 52% (95题)


一、整体架构

┌──────────────────────────────────────────────────────────────────┐
│                        LambdaRAG v3.1                            │
│                                                                  │
│  Query                                                           │
│    │                                                             │
│    ▼                                                             │
│  ┌─────────────────────────────────────┐                        │
│  │ Step 1: Intent + Entity Extract     │  评分制分类(8类)       │
│  │   规则优先 → LLM fallback           │  + 规则实体提取       │
│  └─────────────┬───────────────────────┘                        │
│                │ {intent, entities, keywords}                    │
│                ▼                                                  │
│  ┌─────────────────────────────────────┐                        │
│  │ Step 2: Entity-Enhanced Fusion      │                        │
│  │   ┌─────┬────────┬───────┬──────┐  │                        │
│  │   │BM25 │Vector  │Graph  │Wiki  │  │  4路并行              │
│  │   │     │bge-m3  │Entity │Pages │  │  实体增强查询         │
│  │   └──┬──┴───┬────┴──┬────┴──┬───┘  │  compare跳过增强     │
│  │      └──────┴───────┴──────┘       │  temporal时间展开     │
│  │              │ Weighted RRF         │                        │
│  └──────────────┼──────────────────────┘                        │
│                 │                                                │
│                 ▼                                                │
│  ┌─────────────────────────────────────┐                        │
│  │ Step 2b: Corrective RAG (P1-1)     │  检索质量门控          │
│  │   质量不足 → 改写query → 重试1次   │                        │
│  └──────────────┬──────────────────────┘                        │
│                 │                                                │
│                 ▼                                                │
│  ┌─────────────────────────────────────┐                        │
│  │ Step 3: Slot Fill                   │  person/process/data  │
│  │   person → 人员槽位 JSON           │  fact等跳过(省LLM)    │
│  │   process → 流程槽位 JSON          │  领域模板从instance   │
│  │   data → 表格行列定位 JSON         │                        │
│  └──────────────┬──────────────────────┘                        │
│                 │                                                │
│                 ▼                                                │
│  ┌─────────────────────────────────────┐                        │
│  │ Step 4: Build Enriched Context      │  槽位+关系+Wiki+文档 │
│  │   → 3500字符上下文 → LLM生成回答   │                        │
│  └──────────────┬──────────────────────┘                        │
│                 │                                                │
│                 ▼                                                │
│  ┌─────────────────────────────────────┐                        │
│  │ Step 5: Feedback Logging            │  P0-3 query_log      │
│  │   查询日志 + 未找到日志             │  P0-4 missing_queries │
│  └─────────────────────────────────────┘                        │
└──────────────────────────────────────────────────────────────────┘

二、三层抽象

Layer 3 Orchestration    intent_entity_extract → Route → Feedback
Layer 2 Pattern          fusion_search | slot_fill | corrective_retry
Layer 1 Skill            bm25 | vector | graph | wiki | rrf | time_filter | table_boost

Layer 1: Skill (原子能力)

Skill 类型 依赖 说明
bm25_search 本地 pickle索引 关键词倒排索引 (bigram/trigram)
vector_search 本地+NPU numpy + bge-m3 1024维余弦相似度
graph_walk 本地 relations.json BFS N跳实体图遍历
wiki_read 本地 wiki/*.md 编译知识页面匹配
rrf_merge 纯计算 Weighted Reciprocal Rank Fusion
time_filter 纯计算 时效性排序增强
table_boost 纯计算 表格chunk优先
slot_fill LLM vLLM 结构化信息提取
quality_check 纯计算 检索质量门控

Layer 2: Pattern (组合模式)

Pattern 组成 何时触发
fusion_search Par(bm25, vector, graph, wiki) >> rrf 所有查询
entity_enhance extract_entities >> expand_query >> fusion 非compare查询
slot_pipeline fusion >> slot_fill >> build_context person/process/data
corrective_retry fusion >> quality_check >> reformulate >> retry 质量不足时
temporal_expand expand_time_words >> fusion >> time_filter temporal查询

Layer 3: Orchestration (编排)

Pipeline = Compose(
    IntentEntityExtract,         # 评分分类 + 实体提取
    EntityEnhancedFusionSearch,  # 4路并行 + 加权RRF
    CorrectiveRAGCheck,          # 检索质量门控
    SlotFill,                    # 结构化提取 (按intent)
    BuildEnrichedContext,        # 组装上下文
    FeedbackLog,                 # 日志记录
)

三、意图分类 (8 类)

评分制分类 (P0-2)

不是 first-match,而是所有规则同时评分,最高分胜出。

意图 关键词 (部分) 权重配置
person 谁负责/找谁/电话/联系人 bm25:0.8 vec:0.5 graph:0.3 wiki:0.5
process 怎么办/能不能报销/流程/审批 bm25:0.7 vec:0.5 graph:0.3 wiki:0.6
data 及格率/排名/统计/收费表 bm25:1.0 vec:0.3 graph:0.05 wiki:0.1
fact 多少/标准/税率/有效期 bm25:1.0 vec:0.5 graph:0.1 wiki:0.1
compare 异同/区别/对比 bm25:0.5 vec:0.8 graph:0.4 wiki:0.7
relation 隶属/依据/由谁制定 bm25:0.5 vec:0.3 graph:0.7 wiki:0.8
synthesis 总结/梳理/体系/框架 bm25:0.6 vec:0.5 graph:0.5 wiki:0.6
temporal 最新/修订/什么时候/截止 bm25:1.0 vec:0.2 graph:0.05 wiki:0.2

速度优化

  • 规则能分类的 → 0 次 LLM 调用 (~0s)
  • person/process 或无法分类 → 1 次 LLM 调用 (~3s)
  • fact/compare/temporal → 跳过槽位填充 (省 1 次 LLM)

四、核心技术点

4.1 True Fusion (非 Router)

所有 4 路检索对每个查询都运行,通过权重控制各路贡献:

score(doc) = Σ weight_i / (k + rank_i)

分类器调的是权重,不是选路。

4.2 Entity-Enhanced Search

Step 1 提取的实体扩展 BM25 查询词:

原始: "横向经费报销接待餐费的标准"
增强: "横向经费报销接待餐费的标准 横向经费 接待餐费 报销标准"

例外: compare 类跳过增强(两个实体名本身就是最好的关键词)

4.3 Corrective RAG (P1-1)

检索后检查 top-3 文档与 query 的关键词重叠率:

  • ≥ 30% → 质量通过
  • < 30% → 自动改写 query(提取核心名词)→ 重试一次

4.4 Temporal Time Expansion (P1-5)

"近五年" → "2022年至2026年"
"近三年" → "2024年至2026年"
"最新"   → "2026年最新"

4.5 Slot Fill (按意图)

意图 提取内容 LLM调用
person 姓名/职位/部门/电话/职责 ✅ 1次
process 流程类型/步骤/条件/政策依据 ✅ 1次
data 数值/表格行列/来源 ✅ 1次
fact/compare/temporal ❌ 跳过

4.6 Feedback Loop

feedback/
├── query_log.jsonl         # 每次查询记录
└── missing_queries.jsonl   # "未找到"的查询

用途:指导知识库补充、路由权重调优、评估改动效果。


五、部署架构

代码与数据分离

agentexample/qaagent67lambda/   ← 代码 (版本控制)
├── agent-config.yml             # 通用模板
├── scripts/                     # 通用脚本 (12个)
│   ├── config.py                # 统一配置加载
│   ├── search_unified.py        # v3.1 统一检索
│   ├── search_engine.py         # BM25
│   ├── search_engine_v2.py      # Hybrid
│   ├── graph_engine.py          # 实体图谱
│   ├── extract_docs.py          # 多格式文档提取
│   ├── rebuild_index.py         # BM25索引
│   ├── build_vector_index.py    # 向量索引
│   ├── wiki_compile.py          # Wiki编译
│   └── ...
└── workspace/                   # 运行时产物

/home/67/knowledge/{domain}/    ← 数据 (不版本控制)
├── instance.yml                 # 领域配置 (覆盖通用模板)
├── raw/                         # 原始文件
├── processed/                   # 提取文本
├── wiki/                        # Wiki编译知识
├── rag_index.pkl                # BM25索引
├── rag_vectors_v2.npy           # 向量索引
├── metadata.json                # 元数据
└── feedback/                    # 反馈日志

instance.yml 领域覆盖

# agent-config.yml (通用)     →  instance.yml (领域覆盖)
systemPrompt: 通用助手          →  南京大学财务处知识库问答助手
prompts.classify: 通用分类      →  +报销/预约/退回 关键词
prompts.person_answer: 通用     →  +财务处官方风格/网址
knowledge.baseDir: ./knowledge  →  /home/67/knowledge/finance

服务器服务

服务 端口 用途
Maritime QA 8080 海事法规问答
Finance QA 8082 财务服务问答
Travel API 8081 旅行规划 (Function Calling + 高德API)
vLLM 8000 LLM推理 (NPU 3,4,5,7)
bge-m3 11435 Embedding (NPU 0)

六、Pipeline 构建流程

新领域部署 4 步:

# 1. 文档提取 (PDF/DOCX/PPTX/XLSX/MD → TXT)
python scripts/extract_docs.py

# 2. 构建索引
python scripts/rebuild_index.py           # BM25 (~30s)
python scripts/build_vector_index.py      # 向量 (~2min NPU)

# 3. Wiki编译 (时间规范化 + 关系提取)
python scripts/wiki_compile.py            # ~45min for 261 files

# 4. 启动服务
docker run ... python scripts/app.py

七、测试结果

Maritime (手写 180 题)

版本 Unified U:B 关键改进
v2 89.8% 8:6 True Fusion
v3 90.8% 10:7 Intent+Slot
v3.1 91.7% 14:9 评分分类+CRAG+compare修复

Finance (95 题真实用户)

版本 有效回答 关键改进
v2 48% BM25基线
v3 55% 实体增强+槽位填充
v3.1 52% 评分分类 (需排查回退)

八、待优化项 (TODO)

优先级 项目 预期效果
P1-3 FAIR-RAG 内联证据评估 减少编造
P1-4 语义查询缓存 30-50%命中→0.5s延迟
P2-1 RAGAS自动评估框架 量化每次改动效果
P2-2 上下文分块 (Contextual Chunking) 向量检索+10%
P2-3 领域同义词表 检索召回+5%
P2-4 MinerU深度文档解析 +84个扫描PDF
P2-5 路由成功率自适应 自动调优权重