# 自我进化 MVP（可控版）

目标：让客服 agent 持续变聪明，同时避免“自动改坏线上”。

## 1. 已落地能力

- 失败样本采集：从 `db/chat_log_db/chats.db` 抽取近 N 小时客服问答对。
- 离线评测：自动识别高风险未转人工、低置信度兜底、慢回复等问题。
- 改进建议生成：输出可执行的模块级 proposal（prompt/router/workflow）。
- 发布门禁：结合运行指标（`config/.runtime_metrics.jsonl`）判断是否允许发布候选版本。
- 候选产物：通过门禁后写入 `config/evolution_candidate.json`，用于 5% 灰度。

## 2. 运行方式

```bash
python scripts/evolution_cycle.py --hours 24 --publish
```

默认即读取线上 MySQL（`--source mysql`）。连接信息来自 `.env` 的 `MYSQL_*`。

常用参数：

- `--max-customers 200`
- `--max-messages-per-customer 80`
- `--runtime-hours 24`
- `--policy-path config/evolution_policy.json`

## 3. 产物说明

运行后会在 `evolution/artifacts/` 生成：

- `samples_*.jsonl`：评测样本
- `eval_report_*.json`：评测摘要与门禁结果
- `proposals_*.json`：改进建议列表

当 `--publish` 且门禁通过时：

- 写入 `config/evolution_candidate.json`
- 状态标记为 `ready_for_gray_5_percent`

## 4. 下一步建议

- 把 `scripts/evolution_cycle.py` 加入每日定时任务（例如凌晨 2 点）。
- 在灰度层接入 `evolution_candidate.json` 的版本号，按店铺或客户哈希做 5% 放量。
- 将 proposal 落地为具体 patch 后，先跑 `tests/` 回归，再扩大流量。
