# 2026-05-01 App3 完整消费明细 Prompt 策略

## 背景

- 历史问题：2026-04-20 真实 E2E 中 `app3_clue` 曾因 prompt 过大在 121s 超时。
- 原缓解策略：App3 prompt 超过 4000 字后，仅保留最近 3 条 `consumption_records`，必要时清空 `reference`。
- 本轮用户明确倾向：保留完整消费明细，先验证完整明细是否能正常返回。

## 变更内容

| 文件 | 变更 |
| --- | --- |
| `apps/backend/app/ai/prompts/app3_clue_prompt.py` | 取消 App3 4000 字/3 条消费记录硬截断，保留完整 `consumption_records` 与 `reference` |
| `apps/backend/tests/tests/unit/test_app3_clue_prompt_full_detail.py` | 新增单元测试，锁定 100 条消费记录完整保留 |
| `docs/ai/ai_apps_feature_acceptance_spec.md` | 更新 App3 验收点与消费记录风险说明 |
| `docs/claude-history/issue_resolution_tracker_2026-04-30.md` | 将 A1-03 状态更新为已验证，并记录真实调用结果 |

## 验证记录

### RED

```powershell
C:\Project\NeoZQYY\.venv\Scripts\python.exe -m pytest tests/tests/unit/test_app3_clue_prompt_full_detail.py -q
```

结果：失败。当前实现把 100 条消费记录裁剪到 3 条，符合预期 RED。

### GREEN

```powershell
C:\Project\NeoZQYY\.venv\Scripts\python.exe -m pytest tests/tests/unit/test_app3_clue_prompt_full_detail.py -q
```

结果：`1 passed`。

```powershell
C:\Project\NeoZQYY\.venv\Scripts\python.exe -m pytest tests/tests/unit/test_app3_clue_prompt_full_detail.py tests/tests/test_ai_prompts_smoke.py -q
```

结果：`7 passed`。

```powershell
C:\Project\NeoZQYY\.venv\Scripts\python.exe -m compileall app/ai/prompts/app3_clue_prompt.py
```

结果：通过。

### 真实 App3 调用

使用合成会员数据，不读取真实门店或生产会员数据：

- 完整消费明细：100 条
- prompt 长度：25,791 字
- 本地截断标记：无
- DashScope App3 返回：成功
- 耗时：64.30s
- tokens_used：15,708
- 返回结构：`{"clues": [...]}`，共 4 条
- 结论：低于当前 `_STEP_TIMEOUT=180s` 单步超时阈值

## 影响范围

- 影响消费事件链 `App3 -> App8 -> App7` 的 App3 prompt 输入规模。
- App3 成功时，App8 可获得更完整的消费线索输入，降低高频客户模式被裁剪的风险。
- 不涉及数据库 schema、RLS、权限、API 入参或前端字段变更。

## 风险与回滚

剩余风险：

- 真实门店极端会员、较大的历史 `reference`、百炼侧临时性能波动，仍可能导致 App3 耗时升高。
- prompt 长度增加会提高单次 token 消耗，本次合成样例为 15,708 tokens。

观察建议：

- 后续上线后重点观察 `ai_run_logs.elapsed_ms`、`tokens_used` 和 `app3_clue` timeout 告警。

回滚方式：

- 如真实数据出现持续超时，可恢复 App3 的消费记录截断逻辑，或改为“完整明细优先 + 超大样本动态降级”的折中策略。
