# AI 客服系统 - 完整功能汇总

**版本**: v1.0 | **更新日期**: 2026-02-28 | **服务器**: 1.12.50.92

---

## 目录

1. [天网协作系统](#天网协作系统)
2. [三种工作流](#三种工作流)
3. [文字检测与加价](#文字检测与加价)
4. [风险评估与接单判断](#风险评估与接单判断)
5. [作图失败转接人工](#作图失败转接人工)
6. [图片任务数据库](#图片任务数据库)
7. [图绘派单系统](#图绘派单系统)
8. [价格策略总览](#价格策略总览)
9. [技术架构](#技术架构)

---

## 天网协作系统

**说明**: 接收天网下发的任务，支持指定客户回复触发。

**API 地址**: `http://127.0.0.1:6060`

**接口列表**:

| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/task/receive` | POST | 接收任务 |
| `/api/task/status/:id` | GET | 查询任务状态 |
| `/api/task/cancel` | POST | 取消任务 |
| `/api/task/list` | GET | 任务列表 |
| `/api/health` | GET | 健康检查 |

**触发类型**:

| 类型 | 说明 |
|------|------|
| `specified_customer_reply` | 指定客户回复指定内容（推荐） |
| `customer_reply` | 任意客户回复指定内容 |
| `customer_keyword` | 任意客户说某关键词 |
| `customer_payment` | 客户付款 |
| `time_reach` | 到达指定时间 |

> 详细的 API 接口文档、请求示例、数据库结构等见 **部署文档.md**。

---

## 三种工作流

根据客户说的话，自动判断执行不同的工作流程。

### 工作流 1：查找图片

**触发词**: "找一下"、"找图"、"找原图"、"帮我找"、"能找到吗"、"有吗"、"有没有"

```
客户：找一下这个图 [图片]
  ↓
AI 检测到"找一下"关键词 → 执行查找图片工作流
  ↓
1. 创建任务（operation=find）
2. 上传图片到图绘平台
3. 更新任务状态为 completed
  ↓
AI: 找到了！图片在这里：http://tuhui.cloud/works/123
```

### 工作流 2：处理图片

**触发词**: "做一下"、"处理一下"、"安排"、"开始做"、"弄一下"、"修一下"、"P一下"、"P图"

```
客户：做一下 [图片]
  ↓
AI 检测到"做一下"关键词 → 执行处理图片工作流
  ↓
1. 创建任务（operation=enhance）
2. 回复"稍等，我看看...好的，可以做，马上处理"
3. 启动图片处理流程
  ↓
AI: 做好了，请查看 [结果图]
```

### 工作流 3：转人工派单

**触发词**: "做不了"、"处理不了"、"弄不了"、"无法处理"、"做不到"、"搞不定"

```
AI 判断无法处理 / 客户说"做不了"
  ↓
执行转人工派单工作流
  ↓
1. 创建任务（operation=manual）
2. 查询在线设计师
3. 有人在线 → 派单；无人 → 通知稍后联系
  ↓
AI: 好的，已帮您安排设计师处理，请稍候
```

### 技术实现

| 组件 | 文件 | 说明 |
|------|------|------|
| 工作流路由器 | `core/workflow_router.py` | 关键词检测与匹配 |
| 工作流执行器 | `core/workflow.py` | 三种工作流的具体实现 |
| 消息处理器 | `core/pydantic_ai_agent.py` | `_handle_image_workflow()` 方法 |

**注意事项**:
- 关键词匹配支持多种说法，自动识别
- 置信度 >0.9 才执行对应工作流
- 无人在线时通知客户稍后联系，企业微信预警
- 所有工作流都保存到数据库

---

## 文字检测与加价

AI 客服自动分析图片中的文字数量，根据文字数量和分层需求自动加价。

### 文字数量加价

| 文字数量 | 加价 |
|----------|------|
| none | +0 元 |
| 少量 (1-10 字) | +5 元 |
| 中量 (11-50 字) | +15 元 |
| 大量 (51-200 字) | +30 元 |
| 极多 (200 字以上) | +50 元 |

### 文字分层需求加价

| 分层需求 | 加价 |
|----------|------|
| no | +0 元 |
| yes（有文字）| +50 元起 |
| yes（无文字）| +30 元 |

### 特殊价格

**条件**: 文字数量=大量/极多 且 分层需求=yes → **60-80 元**

### 使用场景

**场景 1**: 少量文字，不分层
- 复杂度 simple + 少量文字 → 15 + 5 = **20 元**
- AI: "这张图比较简单，不过有少量文字需要处理，20 元。"

**场景 2**: 大量文字，需要分层
- 复杂度 complex + 大量文字 + 分层 → 调整到 **80 元**
- AI: "这张图文字比较多，有 100 多字，需要分层文件，80 元。"

### 价格计算流程

```
客户发送图片 → 判断基础复杂度 → 检测文字数量 → 询问分层需求
  → 计算总价（基础+文字+分层）→ 特殊价格处理（60-80 元）→ 报价
```

### 配置位置

修改价格规则: `image/image_analyzer.py`（查找文字加价相关代码）

**注意事项**:
- 文字数量通过视觉 AI 自动识别
- 分层需求需从对话中识别
- 最终价格必须是 5 的倍数

---

## 风险评估与接单判断

AI 客服自动分析图片风险，判断是否可以接单。

### 敏感内容检测（一票否决）

**敏感内容 = yes → 直接拒绝，不接单**

检测内容: 色情/黄色/擦边/裸露、性暗示、涉政/政治敏感、暴力/血腥、违禁品

**话术**: "这类不做哦" / "不好意思，这个接不了"

**禁止说**: "发图来看看"、过多解释

### 风险等级

| 风险 | 是否接单 | 说明 |
|------|----------|------|
| **none** | ✅ 接单 | 印花/图案/logo/风景/产品，效果稳定 |
| **low** | ✅ 接单 | 有人脸但清晰，需说明风险（相似度 70-90%）|
| **high** | ⚠️ 谨慎 | 严重模糊/老照片人像/需打印，需说明限制 |

### 可做判断

| 可做 | 是否接单 | 说明 |
|------|----------|------|
| **yes** | ✅ 接单 | 效果有把握 |
| **partial** | ⚠️ 可接 | 能处理但有限制，需说明风险 |
| **no** | ❌ 不接 | 无法处理（纯黑/纯白/完全损坏/敏感内容）|

### 分析流程

```
客户发送图片 → 敏感内容检测（yes→拒绝）→ 风险评估（none/low/high）
  → 可做判断（yes/partial/no）→ 决策（接单/谨慎/拒绝）→ 回复客户
```

### 话术模板

**高风险提示**:
- "这张比较模糊，修复后清晰了但人脸可能跟原来有差异"
- "老照片修复后人脸可能有轻微变化"
- "建议先看效果确认再打印"

**正常接单**:
- "这个没问题，XX 元"
- "可以处理，XX 元，满意再付"

### 配置位置

- 风险判断规则: `image/image_analyzer.py`（查找"风险评估""敏感内容检测"）
- 拒绝话术: `core/pydantic_ai_agent.py`（查找"拒绝"）

---

## 作图失败转接人工

当 AI 作图失败或效果不佳时，系统自动转接人工客服。

### 触发场景

| 场景 | 触发条件 | 话术 |
|------|----------|------|
| AI 作图失败 | API 报错/超时/质量不达标 | "处理遇到点问题，我帮您转接人工" |
| 客户不满意 | 说"效果不好"/"不满意"/要求重做 | "好的，我帮您转接人工客服处理" |
| 特殊要求 | AI 无法处理的复杂需求 | "这个需求比较特殊，帮您转接人工" |

### 转接流程

```
作图失败/客户不满意 → 通知客户 → 转接人工客服 → 企业微信预警
```

### 技术实现

- 失败检测: `core/pydantic_ai_agent.py` 中的 `process_image_gemini` 函数
- 转接工具: `transfer_to_human` tool（标记 `need_transfer=True`）

**注意事项**:
- 作图失败必须转人工，不自动重试超过 2 次
- 转接前告知客户原因
- 记录转接原因便于后续优化

---

## 图片任务数据库

图片任务保存到 SQLite 数据库，支持持久化和需求变更。

### 数据库表

**image_tasks（图片任务表）**:

| 字段 | 类型 | 说明 |
|------|------|------|
| task_id | TEXT | 任务 ID（主键）|
| customer_id | TEXT | 客户 ID |
| original_image | TEXT | 原图 URL |
| operation | TEXT | 操作类型（enhance/remove_bg/vectorize）|
| requirements | TEXT | 需求 JSON |
| customer_notes | TEXT | 客户备注/需求细节 |
| status | TEXT | 状态 |
| result_image | TEXT | 结果图 URL |
| error_message | TEXT | 错误信息 |
| retry_count | INTEGER | 重试次数 |
| acc_id / acc_type | TEXT | 店铺 ID / 平台类型 |
| created_at / paid_at / completed_at | TEXT | 时间戳 |

**task_requirement_changes（需求变更表）**:

| 字段 | 类型 | 说明 |
|------|------|------|
| task_id | TEXT | 任务 ID（外键）|
| change_type | TEXT | 变更类型（add_note/modify_operation/add_requirement）|
| old_value / new_value | TEXT | 变更前后值 |
| changed_at | TEXT | 变更时间 |
| changed_by | TEXT | 变更者（customer/staff）|

### 任务状态流转

```
pending（待付款）→ paid（已付款）→ processing（处理中）→ awaiting_confirm（待确认）→ completed（已完成）
                                                                                 ↘ failed（失败）
```

### API 接口

```python
# 创建任务
workflow.create_image_task(customer_id, original_image, operation)

# 添加需求
await workflow.add_customer_requirement(task_id, customer_id, requirement)

# 修改操作类型
await workflow.modify_operation(task_id, customer_id, new_operation)

# 查询任务
task = workflow.get_task(task_id)
tasks = workflow.get_customer_tasks(customer_id)

# 查询需求变更历史
history = workflow.get_task_requirement_history(task_id)
```

### 数据库操作

```bash
sqlite3 /root/ai_customer_service/ai_cs/db/image_tasks.db

# 查询所有任务
SELECT task_id, customer_id, status, created_at FROM image_tasks ORDER BY created_at DESC LIMIT 10;

# 查询待处理任务
SELECT * FROM image_tasks WHERE status='pending';

# 查询需求变更
SELECT task_id, change_type, old_value, new_value, changed_at FROM task_requirement_changes WHERE task_id='TASK_001';
```

**注意事项**:
- 所有任务自动保存，重启不丢失
- 付款前可修改操作类型，付款后不允许
- 所有变更都有历史记录

---

## 图绘派单系统

AI 客服系统接入图绘派单系统 API，实现自动派单给在线设计师。

### API 信息

| 项目 | 值 |
|------|------|
| API 地址 | `http://1.12.50.92:8005` |
| API Key | `tuhui_dispatch_key_2026` |
| 认证方式 | Header: `X-API-Key` |

### 核心接口

| 接口 | 方法 | 说明 |
|------|------|------|
| `/dispatch/queue` | GET | 获取派单队列 |
| `/online/designers` | GET | 获取在线设计师 |
| `/tasks` | POST | 创建任务 |
| `/tasks/{id}/assign` | POST | 分配任务 |
| `/tasks/{id}` | GET | 查询任务状态 |
| `/tasks/{id}/complete` | POST | 完成任务 |

### 转人工派单流程

```
AI 判断做不了
  ↓
1. 查询在线设计师 → GET /online/designers → ["橘子", "婷婷"]
  ↓
2. 创建派单任务 → POST /tasks → {"task_id": "ea853bd9"}
  ↓
3. 分配给设计师 → POST /tasks/ea853bd9/assign → {"designer_name": "橘子"}
  ↓
4. 企业微信通知设计师
  ↓
5. 回复客户："好的，已帮您安排设计师处理，请稍候"
```

### 代码调用示例

```python
from services.service_tuhui_dispatch import get_tuhui_dispatch_client

client = get_tuhui_dispatch_client()

# 查询在线设计师
designers = await client.get_online_designers()  # ["橘子", "婷婷"]

# 创建任务
task_id = await client.create_task(
    task_name="图片处理-1234",
    description="客户需要做高清修复",
    task_type="image_process",
    priority=2
)

# 分配任务
await client.assign_task(task_id, designer_name="橘子", notes="AI 客服自动派单")

# 完成任务
await client.complete_task(task_id, notes="客户已确认")
```

### 设计师在线状态 API

```
GET  http://huichang.online:8001/online         # 查询在线设计师
POST http://huichang.online:8001/update-status   # 更新设计师状态
```

### 相关代码位置

| 组件 | 文件 |
|------|------|
| 派单客户端 | `services/service_tuhui_dispatch.py`（`TuhuiDispatchClient` 类）|
| 工作流集成 | `core/workflow.py`（`transfer_to_designer_workflow()` 方法）|

---

## 价格策略总览

### 基础价格

| 复杂度 | 价格区间 | 说明 |
|--------|----------|------|
| simple | 10-15 元 | 画面简单干净 |
| normal | 15-20 元 | 一般复杂度 |
| complex | 20-25 元 | 细节偏多 |
| hard | 25-30 元 | 非常复杂 |

### 加价规则

| 项目 | 条件 | 加价 |
|------|------|------|
| 文字少量 | 1-10 字 | +5 元 |
| 文字中量 | 11-50 字 | +15 元 |
| 文字大量 | 51-200 字 | +30 元 |
| 文字极多 | 200+ 字 | +50 元 |
| 分层（有文字）| 需要 PSD 分层 | +50 元起 |
| 分层（无文字）| 仅需分层 | +30 元 |

### 高价值订单

**文字分层 + 大量文字** → 特殊价格 **60-80 元**（封顶）

---

## 技术架构

### 核心组件

| 组件 | 文件 | 说明 |
|------|------|------|
| 天网协作 | `api/http_server.py` | HTTP API 服务器 |
| 工作流程 | `core/workflow.py` | 工作流执行器 |
| AI Agent | `core/pydantic_ai_agent.py` | AI 对话引擎 |
| 图片分析 | `image/image_analyzer.py` | 图片复杂度识别 |
| 派单客户端 | `services/service_tuhui_dispatch.py` | 图绘派单 API |
| 任务数据库 | `db/image_tasks_db.py` | 任务持久化 |

### 数据库

| 数据库 | 位置 | 说明 |
|--------|------|------|
| 任务数据库 | `db/image_tasks.db` | 图片任务 |
| 客户档案 | `db/customer.db` | 客户画像 |
| 聊天记录 | `chat_log_db/chat_log.db` | 聊天历史 |
| 天网任务 | `db/task_db/tasks.db` | 天网任务调度 |

### API 端口

| 服务 | 端口 | 说明 |
|------|------|------|
| AI 客服 API | 6060 | 天网任务接收 |
| 派单系统 | 8005 | 设计师派单 |
| 图绘平台 | 8002 | 图片上传 |
