ai-rule-engine/docs/plans/2026-05-11-ai-rule-engine-design.md
root cd0ec8397f feat(ai-rule-engine): 添加 AI 规则引擎设计方案
- 确定技术选型:Python + SQLite + RestrictedPython
- 规划核心模块:RuleCompiler、RuleExecutor、RuleStore、ConflictDetector
- 设计 REST API 接口
- 定义 MVP 范围

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 21:19:55 +08:00

222 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AI 规则引擎设计方案
## 1. 背景与目标
### 1.1 问题
- 规则判断通常需要调用 LLM API成本高、延迟大
- 规则以自然语言描述,每次判断都需 AI 解析,效率低
### 1.2 目标
- 将自然语言规则描述通过 AI 转换为可执行 Python 函数
- 存储转换后的规则,支持快速校验
- 提供兜底机制:无法匹配时调用 LLM 补充规则
### 1.3 成功标准
- 规则创建后,后续判断无需再调用 LLM API
- 规则冲突/重复可被检测
- 无法匹配时自动触发 LLM callback 并学习新规则
---
## 2. 技术选型
| 模块 | 技术 |
|------|------|
| 语言 | Python 3.10+ |
| 存储 | SQLite |
| AI 编译器 | GPT-4o / Claude Sonnet自然语言→Python 函数) |
| 安全隔离 | `RestrictedPython` |
| API | REST API |
| 部署 | 本地运行 |
---
## 3. 模块边界与数据流
```
┌─────────────────────────────────────────────────────────────┐
│ AI 规则引擎 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Rule API │───▶│Rule Compiler │───▶│ Rule Store │ │
│ │ (REST) │ │ (LLM) │ │ (SQLite) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │Rule Matcher │◀──────────────────────│Rule Executor │ │
│ │ │ │(RestrictedPy)│ │
│ └──────────────┘ └──────────────┘ │
│ │ │ │
│ │ 无匹配时 │ │
│ ▼ │ │
│ ┌──────────────┐ │ │
│ │ LLM Callback │──────────────────────────────▶│ │
│ │ (补充规则) │ │ │
│ └──────────────┘ │ │
│ │ │
└─────────────────────────────────────────────────────┘ │
```
### 3.1 核心模块
| 模块 | 职责 |
|------|------|
| RuleAPI | 提供 REST 接口(创建规则、校验事实、查询规则) |
| RuleCompiler | 调用 LLM 将自然语言规则转换为 Python 函数 |
| RuleStore | SQLite 存储规则(含元数据:名称、描述、版本、优先级) |
| RuleExecutor | 在 RestrictedPython 沙箱中执行规则函数 |
| RuleMatcher | 判断事实匹配哪条规则 |
| ConflictDetector | 检测规则冲突 |
| Deduplicator | 检测规则重复/相似 |
| LLMEallback | 无法匹配时调用 LLM 补充规则 |
### 3.2 数据模型
```sql
CREATE TABLE rules (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
condition_template TEXT NOT NULL, -- 原始规则描述
code TEXT NOT NULL, -- 转换后的 Python 函数代码
priority INTEGER DEFAULT 0,
version INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT 1
);
CREATE TABLE rule_executions (
id TEXT PRIMARY KEY,
rule_id TEXT,
facts TEXT NOT NULL, -- JSON 格式的事实数据
result TEXT, -- 执行结果
matched BOOLEAN,
executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (rule_id) REFERENCES rules(id)
);
CREATE TABLE rule_embeddings (
rule_id TEXT PRIMARY KEY,
embedding TEXT NOT NULL, -- 用于相似度计算
FOREIGN KEY (rule_id) REFERENCES rules(id)
);
```
---
## 4. API 设计
### 4.1 创建规则
```
POST /api/rules
Body: {
"name": "premium_discount",
"description": "如果用户是高级会员给予8折优惠",
"condition_template": "用户{{user_id}}的订阅类型为{{subscription}},且年龄大于{{age}}",
"facts_schema": {...} // 可选:事实格式定义
}
Response: { "id": "rule_xxx", "code": "..." }
```
### 4.2 校验事实
```
POST /api/rules/evaluate
Body: {
"facts": {
"user_id": "u123",
"subscription": "premium",
"age": 25
}
}
Response: {
"matched": true,
"rule_id": "rule_xxx",
"result": { "action": "apply_discount", "params": {"discount": 0.8} }
}
```
### 4.3 查询规则
```
GET /api/rules
GET /api/rules/{id}
```
### 4.4 删除规则
```
DELETE /api/rules/{id}
```
---
## 5. 错误处理
| 场景 | 处理方式 |
|------|----------|
| LLM 编译失败 | 返回错误,保留原始描述供修改 |
| 规则执行超时 | 限制执行时间(如 100ms超时视为失败 |
| 无规则匹配 | 触发 LLM Callback尝试生成新规则 |
| 规则冲突 | 警告返回,冲突规则不执行,需人工确认 |
| 规则重复 | 自动合并或提示用户确认 |
---
## 6. 冗余处理
### 6.1 规则去重
- 使用 embedding 计算语义相似度
- 相似度 > 0.95 的规则视为重复
- 提示用户合并或覆盖
### 6.2 规则冲突检测
- 两两比对规则条件
- 使用真值表分析是否存在矛盾A→通过B→拒绝 且条件重叠)
- 冲突规则标记,需人工确认优先级
### 6.3 LLM Callback 兜底
- 无规则匹配时,自动调用 LLM
- LLM 分析 facts生成新规则描述
- 新规则经编译后存入数据库,下次直接使用
---
## 7. 安全考虑
| 风险 | 缓解措施 |
|------|----------|
| 动态代码执行 | RestrictedPython 沙箱,禁止危险操作 |
| 执行超时 | 规则执行限制 100ms |
| LLM 注入 | 输入 facts 做格式校验 |
| 数据泄露 | 不记录敏感 facts 内容 |
---
## 8. 测试策略
| 层级 | 内容 |
|------|------|
| 单元测试 | RuleCompiler、RuleExecutor、ConflictDetector |
| 集成测试 | API 端到端(创建规则→校验→结果) |
| 安全测试 | 沙箱隔离验证、恶意代码检测 |
---
## 9. MVP 范围
### 第一阶段(本次实现)
- [x] 方案设计
- [ ] SQLite 存储层
- [ ] 基础 REST API
- [ ] LLM 编译器GPT-4o
- [ ] RestrictedPython 执行器
- [ ] 基础规则校验接口
- [ ] 冲突检测(简化版)
### 第二阶段(后续)
- [ ] 规则去重
- [ ] LLM Callback 兜底机制
- [ ] 高级冲突检测
- [ ] Web 管理界面