# qaagent67lite — 轻量级知识问答智能体

> BM25 + Wiki，无需向量数据库，适合小规模文档集

## 1. 定位

| | qaagent67lambda | qaagent67lite | qaagent67wiki |
|---|---|---|---|
| **检索** | 4路 (BM25+Vector+Graph+Wiki) | **2路 (BM25+Wiki)** | Wiki only |
| **文档量** | 500+ | **< 500** | 任意 |
| **依赖** | Embedding 服务 + 向量库 | **纯 CPU** | LLM only |
| **部署** | 需要 GPU/NPU | **任意机器** | 任意机器 |
| **场景** | 大规模专业问答 | **小规模轻量问答** | 知识编译 |
| **典型领域** | 海事法规、金融合规 | 财务制度、行政流程 | 任意 |

## 2. 架构

```
用户提问
    ↓
意图分类 (快速规则, 不用 LLM)
    ↓
┌─────────────────┐
│  BM25 关键词检索  │──→ 原始文档片段
│  (topK=10)       │
└─────────────────┘
         ↓
    SimpleMerge (RRF 融合)
         ↓
┌─────────────────┐
│  Wiki 编译知识    │──→ 结构化 wiki 页面
│  (实体优先搜索)   │
└─────────────────┘
         ↓
    LLM 回答 (标注来源)
```

### Lambda 表达式

```
λ = Classify(q)
    >> Par(BM25(q), WikiRead(q))
    >> SimpleMerge(results)
    >> LLM(context, question)
```

## 3. 与 lambda 的区别

### 去掉的

| 组件 | 原因 |
|------|------|
| **Vector** (embedding) | 小文档集 BM25 已够用，省掉 embedding 服务依赖 |
| **Graph** (知识图谱) | 文档少时关系稀疏，图谱价值不大 |
| **Rerank** (重排序) | 2 路检索结果少，不需要重排 |
| **LLM 分类** | 用规则分类代替，省 token |
| **并行检索** | 只有 2 路，串行即可 |

### 保留的

| 组件 | 说明 |
|------|------|
| **BM25** | 关键词检索，对事实/数据/人名类问题效果好 |
| **Wiki v2** | 编译知识，对综合/对比/流程类问题效果好 |
| **Wiki Lint + Grow** | 知识库维护和持续生长 |
| **Instance 机制** | agent-config.yml + instance.yml 深度合并 |

### 权重策略

```yaml
weights:
  fact:      {bm25: 1.0, wiki: 0.3}   # 事实问题以 BM25 为主
  compare:   {bm25: 0.5, wiki: 0.9}   # 对比问题以 Wiki 为主
  process:   {bm25: 0.7, wiki: 0.8}   # 流程问题两者均衡
  person:    {bm25: 0.9, wiki: 0.5}   # 找人以 BM25 为主
  temporal:  {bm25: 1.0, wiki: 0.2}   # 时效问题以 BM25 为主
```

## 4. 部署

### 一键部署

```bash
# 1. 创建实例配置
cd agentexample/qaagent67lite
cp scripts/instance.yml.template scripts/instance.yml
# 编辑 instance.yml，修改 baseDir 指向数据目录

# 2. 放入原始文件
cp /path/to/your/docs/* /your/knowledge/raw/

# 3. 一键索引 + Wiki 编译
python scripts/setup.py

# 4. 启动
python3 -m agentpaas agent create --name lite-qa \
  --config agentexample/qaagent67lite/agent-config.yml
python3 -m agentpaas chat lite-qa
```

### setup.py 自动执行

```
Step 1: 提取文本 (PDF/Word → txt)
Step 2: 建 BM25 索引 (关键词 + 分块)
Step 3: Wiki 编译 (LLM 读 → 写 wiki 页面)
Step 4: 验证 (输出统计)
```

## 5. 适用领域示例

| 领域 | 文档量 | 典型问题 |
|------|--------|---------|
| 财务制度 | 50-200 | "报销流程是什么？" "差旅标准多少？" |
| 行政流程 | 30-100 | "请假怎么审批？" "固定资产采购流程？" |
| 产品手册 | 20-80 | "XX 功能怎么用？" "故障如何排查？" |
| 内部规范 | 50-150 | "代码审查标准？" "安全合规要求？" |

## 6. 文件清单

```
qaagent67lite/
├── agent-config.yml              # 主配置 (BM25+Wiki, 无 Vector/Graph)
├── DESIGN.md                     # 本文件
└── scripts/
    ├── setup.py                  # 一键部署: 提取→索引→Wiki编译
    └── instance.yml.template     # 实例配置模板
```
