# 意图规则使用指南

## 1. 概述

意图规则（Intent Rule）是 AI 中台的智能路由系统，用于识别用户意图并自动路由到最合适的处理方式。它在 12 步生成流程的第 3 步执行，优先级高于默认的 RAG 检索。

### 1.1 核心特性

- ✅ **关键词匹配**：支持多个关键词的模糊匹配（不区分大小写）
- ✅ **正则表达式匹配**：支持复杂的模式匹配
- ✅ **优先级排序**：按优先级从高到低匹配，命中第一个即停止
- ✅ **四种响应类型**：固定回复、RAG 检索、话术流程、转人工
- ✅ **租户隔离**：不同租户的规则完全独立
- ✅ **缓存优化**：60 秒 TTL 内存缓存，减少数据库查询
- ✅ **命中统计**：自动记录规则命中次数

### 1.2 在生成流程中的位置

```
用户消息 → Step 1: 输入扫描 → Step 2: 流程检查 → Step 3: 意图匹配 → Step 4-12: 后续处理
```

**意图匹配的作用**：
- 如果匹配成功 → 根据 response_type 路由到对应处理方式
- 如果匹配失败 → 继续执行默认的 RAG 检索流程

---

## 2. 数据模型

### 2.1 IntentRule 实体

| 字段 | 类型 | 必填 | 说明 |
|-----|------|------|------|
| `id` | UUID | 自动生成 | 规则唯一标识 |
| `tenant_id` | string | ✅ | 租户 ID（格式：name@ash@year） |
| `name` | string | ✅ | 规则名称（如"退货意图"） |
| `keywords` | string[] | ❌ | 关键词列表（如 ["退货", "退款"]） |
| `patterns` | string[] | ❌ | 正则表达式列表（如 ["退.*货", "如何退货"]） |
| `priority` | int | ❌ | 优先级（默认 0，数值越大优先级越高） |
| `response_type` | string | ✅ | 响应类型：fixed/rag/flow/transfer |
| `target_kb_ids` | string[] | ❌ | 目标知识库 ID 列表（rag 类型必填） |
| `flow_id` | UUID | ❌ | 话术流程 ID（flow 类型必填） |
| `fixed_reply` | string | ❌ | 固定回复内容（fixed 类型必填） |
| `transfer_message` | string | ❌ | 转人工提示语（transfer 类型必填） |
| `is_enabled` | bool | ✅ | 是否启用（默认 true） |
| `hit_count` | int | 自动 | 命中次数统计 |
| `created_at` | datetime | 自动 | 创建时间 |
| `updated_at` | datetime | 自动 | 更新时间 |

### 2.2 响应类型详解

#### 2.2.1 fixed - 固定回复

**用途**：对于明确的问题，直接返回预设的固定回复，跳过 LLM 生成。

**适用场景**：
- 常见问候语（"你好"、"在吗"）
- 简单查询（"营业时间"、"联系方式"）
- 标准流程说明（"如何下单"、"支付方式"）

**必填字段**：`fixed_reply`

**示例**：
```json
{
  "name": "营业时间查询",
  "keywords": ["营业时间", "几点开门", "几点关门"],
  "response_type": "fixed",
  "fixed_reply": "我们的营业时间是周一至周日 9:00-21:00，节假日正常营业。"
}
```

#### 2.2.2 rag - 定向知识库检索

**用途**：将用户问题路由到特定的知识库进行检索，而不是搜索所有知识库。

**适用场景**：
- 产品咨询 → 路由到产品知识库
- 售后问题 → 路由到售后知识库
- 政策查询 → 路由到政策知识库

**必填字段**：`target_kb_ids`（知识库 ID 列表）

**示例**：
```json
{
  "name": "产品咨询意图",
  "keywords": ["产品", "功能", "参数", "配置"],
  "patterns": [".*产品.*", "有什么功能"],
  "response_type": "rag",
  "target_kb_ids": ["kb_product_001", "kb_product_002"]
}
```

#### 2.2.3 flow - 启动话术流程

**用途**：触发预定义的多轮对话流程（话术脚本）。

**适用场景**：
- 订单处理流程（收集地址、确认信息）
- 问题诊断流程（逐步排查问题）
- 信息采集流程（收集用户需求）

**必填字段**：`flow_id`（话术流程 ID）

**示例**：
```json
{
  "name": "退货流程意图",
  "keywords": ["退货", "退款", "不想要了"],
  "response_type": "flow",
  "flow_id": "flow_return_process_001"
}
```

#### 2.2.4 transfer - 转人工

**用途**：直接转接到人工客服。

**适用场景**：
- 投诉建议
- 复杂问题
- 明确要求人工服务

**必填字段**：`transfer_message`（转人工提示语）

**示例**：
```json
{
  "name": "转人工意图",
  "keywords": ["人工", "客服", "投诉"],
  "patterns": ["转.*人工", "找.*客服"],
  "response_type": "transfer",
  "transfer_message": "正在为您转接人工客服，请稍候..."
}
```

---

## 3. 匹配算法

### 3.1 匹配流程

```
1. 加载启用的规则（is_enabled=true），按 priority DESC 排序
2. 遍历规则列表（从高优先级到低优先级）
3. 对每个规则：
   a. 先尝试关键词匹配（keywords）
   b. 如果关键词未匹配，尝试正则表达式匹配（patterns）
4. 命中第一个规则后立即返回，不再继续匹配
5. 如果所有规则都未匹配，返回 None（继续默认 RAG 流程）
```

### 3.2 关键词匹配规则

- **不区分大小写**：用户输入和关键词都转为小写后匹配
- **子串匹配**：只要用户消息包含关键词即可（如 "我想退货" 包含 "退货"）
- **任意匹配**：keywords 列表中任意一个关键词匹配即成功

**示例**：
```python
keywords = ["退货", "退款", "不想要"]
user_message = "我想退货"  # ✅ 匹配成功（包含"退货"）
user_message = "能退款吗"  # ✅ 匹配成功（包含"退款"）
user_message = "发货了吗"  # ❌ 匹配失败
```

### 3.3 正则表达式匹配规则

- **不区分大小写**：使用 `re.IGNORECASE` 标志
- **全文匹配**：使用 `re.search()`，匹配消息中的任意位置
- **任意匹配**：patterns 列表中任意一个模式匹配即成功
- **错误处理**：如果正则表达式语法错误，记录警告并跳过该模式

**示例**：
```python
patterns = ["退.*货", "如何.*退货", "^退货.*"]
user_message = "我想退货"      # ✅ 匹配 "退.*货"
user_message = "如何申请退货"  # ✅ 匹配 "如何.*退货"
user_message = "退货流程"      # ✅ 匹配 "^退货.*"
```

### 3.4 优先级机制

**规则排序**：
```sql
ORDER BY priority DESC, created_at DESC
```

**优先级策略**：
- 高优先级规则优先匹配
- 相同优先级按创建时间倒序（新规则优先）
- 建议为重要规则设置更高的优先级（如 100、200）

**示例场景**：
```
规则 A: priority=100, keywords=["退货"]        → 精确退货流程
规则 B: priority=50,  keywords=["退", "货"]   → 通用退货咨询
规则 C: priority=0,   keywords=["产品"]       → 产品咨询

用户输入 "我想退货"：
1. 先匹配规则 A（priority=100）→ 命中，返回
2. 不再匹配规则 B 和 C
```

---

## 4. API 使用

### 4.1 认证与租户隔离

所有接口必须携带以下 HTTP Headers：

```http
X-API-Key: <your_api_key>
X-Tenant-Id: <tenant_id>
```

### 4.2 创建意图规则

**接口**：`POST /admin/intent-rules`

**请求示例 1：固定回复**
```bash
curl -X POST http://ai-service:8080/admin/intent-rules \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your_api_key" \
  -H "X-Tenant-Id: szmp@ash@2026" \
  -d '{
    "name": "营业时间查询",
    "keywords": ["营业时间", "几点开门", "几点关门", "什么时候营业"],
    "priority": 50,
    "response_type": "fixed",
    "fixed_reply": "我们的营业时间是周一至周日 9:00-21:00，节假日正常营业。如有特殊情况会提前通知。"
  }'
```

**请求示例 2：定向知识库检索**
```bash
curl -X POST http://ai-service:8080/admin/intent-rules \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your_api_key" \
  -H "X-Tenant-Id: szmp@ash@2026" \
  -d '{
    "name": "产品咨询意图",
    "keywords": ["产品", "功能", "参数", "配置", "型号"],
    "patterns": [".*产品.*", "有什么功能", "支持.*吗"],
    "priority": 80,
    "response_type": "rag",
    "target_kb_ids": ["kb_product_001", "kb_product_faq_002"]
  }'
```

**请求示例 3：启动话术流程**
```bash
curl -X POST http://ai-service:8080/admin/intent-rules \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your_api_key" \
  -H "X-Tenant-Id: szmp@ash@2026" \
  -d '{
    "name": "退货流程意图",
    "keywords": ["退货", "退款", "不想要了", "申请退货"],
    "patterns": ["退.*货", "如何.*退", "想.*退"],
    "priority": 100,
    "response_type": "flow",
    "flow_id": "550e8400-e29b-41d4-a716-446655440000"
  }'
```

**请求示例 4：转人工**
```bash
curl -X POST http://ai-service:8080/admin/intent-rules \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your_api_key" \
  -H "X-Tenant-Id: szmp@ash@2026" \
  -d '{
    "name": "转人工意图",
    "keywords": ["人工", "客服", "投诉", "找人"],
    "patterns": ["转.*人工", "找.*客服", "我要.*投诉"],
    "priority": 200,
    "response_type": "transfer",
    "transfer_message": "正在为您转接人工客服，请稍候..."
  }'
```

---

## 5. 总结

意图规则（Intent Rule）是 AI 中台的智能路由系统，在 12 步生成流程的第 3 步执行。

### 5.1 核心流程

创建规则 → 设置关键词/正则 → 配置响应类型 → 启用规则 → 用户对话 → 意图匹配 → 路由处理

### 5.2 关键特性

- **智能路由**: 根据用户意图自动选择最佳处理方式
- **优先级控制**: 灵活的优先级机制避免冲突
- **四种响应**: 固定回复、RAG 检索、话术流程、转人工
- **高性能**: 60 秒缓存 + 优化的匹配算法
- **租户隔离**: 多租户数据完全独立
- **命中统计**: 自动记录规则使用情况

### 5.3 最佳实践

1. **关键词设计**: 2-6 个字，使用完整词组
2. **正则表达式**: 简单明了，避免过于复杂
3. **优先级分配**: 200+ 紧急、100-199 重要、50-99 常规、0-49 兜底
4. **响应类型**: 根据场景选择最合适的类型
5. **测试验证**: 先低优先级测试，再调整为正式优先级
6. **监控优化**: 定期检查命中率，优化关键词

---

**文档版本**: v1.0
**生成时间**: 2026-02-27
**维护状态**: ✅ 活跃维护
**相关文档**:
- [AI 中台对接文档](../AI中台对接文档.md)
- [Prompt 模板管理分析](./prompt-template-analysis.md)
