# qaagent67lambda — LambdaRAG 通用领域问答智能体

## 架构

```
Query → Classify → 4路并行检索 → 加权RRF融合 → LLM生成
         │
         ├── BM25 (关键词精确匹配)
         ├── Vector (bge-m3 语义检索)
         ├── Graph (实体关系图谱扩展)
         └── Wiki (LLM编译知识)
```

## 目录结构

代码和数据完全分离：

```
agentexample/qaagent67lambda/     ← 智能体代码 (版本控制)
├── agent-config.yml               # 配置 (路径指向 knowledge/{domain})
├── README.md
├── scripts/                       # LambdaRAG 核心脚本
│   ├── config.py                  # 统一配置加载 (所有脚本从这里读路径)
│   ├── search_unified.py          # 统一检索引擎 (True Fusion)
│   ├── search_engine.py           # BM25 检索
│   ├── search_engine_v2.py        # 混合检索 (BM25+Vector)
│   ├── graph_engine.py            # 实体关系图谱
│   ├── extract_pdfs_v2.py         # PDF提取 (表格感知)
│   ├── rebuild_index.py           # BM25索引构建
│   ├── build_vector_index.py      # 向量索引构建
│   ├── wiki_compile.py            # Wiki编译 (时间规范化+关系提取)
│   ├── test_unified.py            # 测试脚本
│   └── app.py                     # Web demo
└── workspace/                     # 运行时数据 (每次 run 的中间过程)
    └── run_YYYYMMDD_HHMMSS/
        ├── input.json
        ├── output.json
        └── trace.json

/home/67/knowledge/{domain}/      ← 领域数据 (持久化, 不版本控制)
├── raw/                           # 原始文件 (PDF/PPTX/DOCX/MD)
├── processed/                     # 提取后的文本
├── wiki/                          # Wiki 编译知识
│   ├── sources/, entities/, topics/, analyses/
│   ├── relations.json
│   └── index.md
├── rag_index.pkl                  # BM25 索引
├── rag_vectors_v2.npy             # 向量索引
├── metadata.json                  # 文件元数据
└── feedback/                      # 自增强数据
```

## 快速开始

### 1. 添加知识库文件

将 PDF/txt/md 文件放入 `knowledge/raw/` 目录。

### 2. 构建索引 (在服务器上)

```bash
# Step 1: PDF提取
python scripts/extract_pdfs_v2.py

# Step 2: BM25索引
python scripts/rebuild_index.py

# Step 3: 向量索引 (需要 bge-m3 embedding 服务)
python scripts/build_vector_index.py

# Step 4: Wiki编译 (需要 LLM 服务)
python scripts/wiki_compile.py
```

### 3. 启动 Web Demo

```bash
python scripts/app.py
# 访问 http://localhost:8080
```

## 权重配置 (agent-config.yml)

分类器根据问题类型自动调整 4 路检索的权重:

| 类型 | BM25 | Vector | Graph | Wiki |
|------|------|--------|-------|------|
| fact | 1.0 | 0.5 | 0.1 | 0.1 |
| compare | 0.5 | 0.8 | 0.4 | 0.7 |
| relation | 0.5 | 0.3 | 0.7 | 0.8 |
| synthesis | 0.6 | 0.5 | 0.5 | 0.6 |
| temporal | 1.0 | 0.2 | 0.05 | 0.2 |

## 性能 (海事领域 180 题测试)

```
Overall: Unified 89.8% > BM25 89.1%
Wins: Unified 8 : BM25 6 (166 tie)
```
