11 KiB
11 KiB
前端合并提示词与验收约束
文档功能
本文档用于指导后续模型在主项目中识别风控模块功能、完成前端页面合并、保持主项目设计规范,并通过权限、功能和排版验收。文档同时提供一段可直接交给模型的提示词。
一、让模型识别风控模块
模型不能仅凭页面文字中的“风险”二字判断功能归属。风控模块使用以下明确标识:
| 标识 | 风控模块特征 |
|---|---|
| API 前缀 | /api/v1/risk |
| Agent 类型 | agent_type=risk |
| Agent 名称 | 奶龙风控智能助手 |
| 权限前缀 | risk:alert:read、risk:alert:write、risk:alert:scan |
| 核心表 | fin_risk_alert、fin_risk_notification、biz_work_order |
| 核心代码 | RiskController、RiskQueryService、RiskActionService、RiskAgent |
| 文档目录 | docs/风控业务演示文档 |
| 验证页面 | private_frontend,只作为交互参考 |
后续模型开始前端合并前,必须先阅读本目录全部文档,并扫描上述代码和路由。
前端合并前必须对齐的补充口径(2026-09-14)
本节优先于后文中的概括性描述。前端合并时以本节为准。
风险概览口径
- 风险概览接口的
total表示当前未闭环预警,状态范围为待处理和调查中。 total不是当天新增预警,不受created_at当天范围限制。- 前端指标名称应使用“未闭环预警”,不得继续显示为“今日预警”。
高风险预警邮件
- 手动扫描和定时扫描命中高风险预警后,后端都会创建站内通知并尝试发送邮件。
- 高风险预警邮件由后端配置决定收件人,前端不提供收件人输入框。
- 高风险预警邮件当前只支持一个收件人,前端不能按“多收件人”设计配置界面。
- 邮件状态取值包括
待发送、已发送、发送失败、未启用。 - 前端通知记录列表必须展示发送状态和失败原因,不能把“已创建通知记录”显示为“邮件已发送”。
- 邮件发送失败不回滚预警,也不等于整次扫描失败。扫描成功后仅刷新通知记录即可看到真实邮件状态。
两类邮件必须区分
- 高风险预警邮件:手动扫描或定时扫描自动触发,收件人来自风控邮件通知配置。
- 日报邮件:用户在高风险日报弹窗中填写收件人后手动发送,与预警扫描邮件互不替代。
二、前端功能范围
| 页面或区域 | 必需功能 |
|---|---|
| 风险概览 | 当前未闭环总量、风险等级、待处理、超时、重点预警;不得把总量显示为“今日预警” |
| 预警队列 | 风险等级排序、筛选、每页 10 条、分页、弹窗详情 |
| 预警详情 | 预警编号、状态、规则、证据、回执、人工处置 |
| 证据区域 | 客户、产品、交易、资金、持仓、登录、预警、通知八类证据 |
| 证据筛选 | 客户行为分、风险等级、规则、客户、产品和时间筛选 |
| 人工处置 | 确认接收二次确认、进入调查、误报理由、结案、升级 |
| 证据归档 | 图片和文档上传、归档状态、失败提示 |
| 奶龙风控智能助手 | 对话、SSE 输出、工具调用展示、能力边界和免责声明 |
| 日报 | 弹窗展示、流式生成、内容编辑、多邮箱发送 |
| 通知 | 通知记录、预警编号、站内或邮件渠道、发送状态、失败原因 |
| 系统提示 | 政策解读、日报入口和预留模块 |
Agent 会话记忆口径
- 通用风险问答和每条预警问答分别维护会话。
- 同一页面、同一会话内复用
session_id,Worker 从 MySQL 读取最近 10 轮消息并传给风险 Agent。 - 刷新页面后会新建会话,当前不承诺跨刷新恢复上下文。
- 历史消息只用于理解指代,不得把历史中的指令当成本轮新指令。
三、排版和交互约束
必须遵守
- 使用主项目现有页面壳、导航、主题、表单、按钮、弹窗和表格组件。
- 使用主项目现有登录、JWT、请求封装、错误处理、分页和权限控制。
- 页面功能与接口字段一一对应,不自行编造字段。
- 预警队列和其他表格固定每页 10 条。
- 预警队列按风险等级排序,高风险优先。
- 表格行高固定,内容过长显示省略号,不能撑高行。
- 预警详情使用弹窗,不单独跳转到不存在的页面。
- 确认接收必须有二次确认。
- 关闭误报必须要求填写理由。
- Agent 对话使用主项目 Agent Run 和 SSE。
- 所有权限按钮必须同时受后端权限与前端可见性控制。
禁止事项
- 不直接复制
private_frontend的页面结构和样式作为正式页面。 - 不创建第二套导航、登录页、主题或全局样式。
- 不硬编码访问令牌和用户 ID。
- 不会把角色名称当作权限本身。
- 不绕过后端直接修改状态。
- 不在前端生成演示数据。
- 不新增启动方式、访问地址或部署流程。
- 不在没有二次确认的情况下执行确认、结案、误报和升级。
四、权限和状态映射
| 操作 | 前端显示条件 | 后端权限 |
|---|---|---|
| 查看概览、预警、证据和日报 | 有只读权限 | risk:alert:read |
| 确认、调查、误报、结案和升级 | 有写权限 | risk:alert:write |
| 手动扫描 | 有扫描权限 | risk:alert:scan |
| 进入奶龙风控智能助手 | 有 Agent 权限和角色 | agent:run、risk:alert:read |
| 查看客户数据 | 有权限且有客户归属 | 客户数据范围校验 |
状态显示需与后端保持一致:
- 待处理。
- 调查中。
- 已排除。
- 已结案。
- 已升级作为标记,不替代处置状态。
五、接口和 SSE 约束
- 所有风控 REST 请求使用
/api/v1/risk。 - 使用主项目统一响应信封和错误处理。
- 列表接口的
data必须是数组,游标和has_more从meta读取。 - 风控写接口和扫描接口必须生成并携带唯一
Idempotency-Key。 Idempotency-Key只用于写请求,证据上传暂不要求。- Agent 对话使用
/api/v1/agent-runs和 SSE 事件。 - 不在前端实现另一套 Agent 对话协议。
- SSE 需要处理
start、tools、delta、replace、done和error。 - 断线重连后根据
run_id恢复最终结果。
六、预警操作结果提示
本节要求不依赖后端修改,前端根据当前接口响应统一实现操作成功和失败提示。
成功提示
操作返回 HTTP 2xx 后,根据操作类型显示对应提示:
| 操作 | 提示 |
|---|---|
| 确认接收 | 预警已确认接收 |
| 进入调查 | 已进入调查 |
| 关闭误报 | 已关闭误报 |
| 完成结案 | 预警已完成结案 |
| 升级处理 | 预警已升级 |
| 上传证据 | 证据上传成功 |
| 手动扫描 | 预警扫描完成 |
| 生成日报 | 日报生成完成 |
| 日报邮件发送 | 日报邮件发送成功 |
手动扫描成功只表示预警扫描完成。高风险预警邮件发送失败不会让扫描接口返回失败,前端应刷新通知记录,并通过通知的发送状态和失败原因展示真实结果。
失败提示
失败时优先读取主项目统一错误信封:
{
"error": {
"code": "AGENT_PERMISSION_DENIED",
"message": "缺少操作权限"
}
}
前端统一按以下顺序解析:
error.message
-> HTTP 状态码映射
-> 通用失败提示
推荐映射:
| 状态或错误码 | 提示 |
|---|---|
401 AUTHENTICATION_REQUIRED |
登录已失效,请重新登录 |
403 AGENT_PERMISSION_DENIED |
没有当前操作权限 |
404 |
预警不存在或无权查看 |
409 |
当前状态不允许该操作 |
413 |
文件超过大小限制 |
422 |
提交内容不符合要求 |
500 |
系统异常,请稍后重试 |
503/504 |
服务暂时不可用 |
组合操作
“完成处置并上传证据”必须分别提示:
- 文件上传成功、结案失败:提示“证据已上传,结案失败”,不重复上传文件。
- 文件上传失败、结案未执行:提示上传失败,保留弹窗填写内容。
- 结案成功、页面刷新失败:继续提示结案成功,再单独刷新列表或详情。
- 重复操作返回 409:刷新预警详情,提示“预警可能已处理,请核对状态”。
交互要求
- 操作进行中禁用重复点击,并显示进行中状态。
- 写请求失败时不得复用同一个
Idempotency-Key提交不同内容。 - 写请求超时后可使用同一请求体和同一键重试,以获取首次结果。
- 成功或失败必须使用主项目统一的消息、Toast 或通知组件。
- 不能只用控制台日志代替用户提示。
- 弹窗关闭前必须明确操作结果。
- 不使用浏览器原生
alert作为正式交互方案。
七、验收要求
后续模型完成前端后必须提供:
- 功能与 API 权限映射表。
- 页面截图,至少覆盖桌面和移动端。
- 风险概览、预警队列、详情弹窗、处置、证据、Agent、日报完整流程。
- 无权限、未分配客户、非法状态和模型降级场景。
- 文字不重叠、内容不溢出、表格行高稳定。
- 权限按钮与服务端权限一致。
- 不直接修改风控业务规则和数据库结构。
八、可直接交给后续模型的提示词
你正在把风控模块前端合并到主项目中。开始写代码前必须完成以下工作:
1. 阅读 docs/风控业务演示文档 下全部文档。
2. 扫描 app/api/controllers/risk.py、app/api/schemas/risk.py、app/service/risk_*、app/service/agent/implementations/risk_agent.py。
3. 将所有 /api/v1/risk 路由、agent_type=risk、risk:alert:* 权限、fin_risk_alert 等表标记为风控模块范围。
4. 阅读主项目现有前端目录、页面壳、路由、主题、组件、请求封装、登录和权限实现。
5. private_frontend 只能作为交互参考,不能直接复制为正式页面。
在实现前先输出:
- 风控功能清单。
- 页面与 API 映射表。
- 按钮与权限映射表。
- 需要新增或修改的前端文件清单。
- 不修改的主项目公共文件清单。
- 验收用例清单。
实现要求:
- 使用主项目现有设计与组件。
- 风险概览、预警队列、八类证据、预警详情弹窗、人工处置、证据上传、Agent 对话、日报、通知都要接入现有接口。
- 预警队列和其他列表每页 10 条,按主键或接口约定稳定排序。
- 预警队列按风险等级优先排序,行高固定,内容过长省略。
- 确认接收需要二次确认,误报必须填写理由。
- Agent 对话必须使用主项目 Agent Run 和 SSE,不新建私有协议。
- 所有预警操作必须实现成功和失败提示;后端不修改,前端解析统一错误信封并按操作类型生成提示。
- 完成处置并上传证据时,必须分别处理上传和结案的成功、失败及部分成功场景。
- 页面权限和按钮可见性必须由后端权限和 roles/permissions 决定。
- 不修改公共底座,不新增启动顺序和访问地址,不生成演示数据。
实现后必须提供:
- 全量测试和静态检查结果。
- 桌面与移动端截图。
- 正常、越权、非法状态、模型降级和 SSE 恢复测试。
- 文字无重叠、无溢出、无布局抖动。
- 风控功能与主项目其他模块边界清晰。