docs: M2 收尾复核闭环(M4)+Wave 0 状态同步——M4 复核记录(任务映射/T-30~T-32 边界收口/成功体不包裹演进口径维持/agent_message.trace_id 请求级口径/会话枚举取舍登记), TODO(T-01/T-02/T-06/T-07 勾选+T-30~T-32 收口), MEMORY(§0 进度/仓库地图/下一步/273 绿), FLOW(§0 JWT 已做/§1 链路/§2 对话主链路状态), FRAMEWORK(能力模块+分层), REQUIREMENTS(F-01/F-02 完成/F-03 部分), 开发计划头注, 演示 SOP 补 JWT 通道签发演示

This commit is contained in:
2026-09-07 03:08:27 +08:00
parent 61711cb70a
commit b97e77747a
7 changed files with 79 additions and 58 deletions
+18 -14
View File
@@ -9,26 +9,29 @@
**项目是什么:** 金融四 Agent(客户财富 / 代理人 / 数据分析 / 风控)共用数据层与合规底座;**不**互调 LLM,跨 Agent 走 L1/L2/L3 画像与预警表。
**当前进度:** 需求与表设计已定 · **风控模块 B1~B9b 全部完成(M2 已达成,tag risk-m2)**(规则/预警聚合/L3/AML/引擎/交易网关/鉴权+4 API/适当性校验/main 集成/B8 测试基建/B9a 订阅+重放脚本/B9b 演示走查+核查单①~⑥收口,B7/B8/B9a/B9b 均经独立 AI 评审闭环,**209 测试绿**)· 阶段 B 完结剩 M2 文字复核 → **JWT(T-01) / 审计中间件(T-02) / LangGraph 对话线(T-07) 未做**(chat/knowledge/admin 仍空壳)。**开发在分支 `feature/risk`(未合入 main)。**
**当前进度:** 需求与表设计已定 · **风控模块 B1~B9b 全部完成(M2 tag risk-m2),M4 复核已闭环(2026-09-07),风控阶段 B 正式完结** · **Wave 0 已完成(2026-09-07,经独立 AI 评审闭环)**:T-01 JWT 鉴权(auth_service Auth SDK + deps 工厂替换 + X-Agent-Type 准入矩阵)/ T-02 审计中间件(http_access + 独立 request_id + 4xx/500 统一错误体 + input_guard_log 双写)/ T-06 chat 最小闭环(POST /api/chat + 会话落库 + Redis 窗口)/ T-07 LangGraph StateGraph 骨架 + DeepSeek(无 key 降级),**273 测试绿**。**下一步:T-03 输入防护 / T-04 Core RO 封装 Tool / T-21 Milvus / 风控阶段 C(C0~C3,A-6 对话验收)**。**开发在分支 `feature/risk`(未合入 main)。**
**仓库地图:**
| 路径 | 状态 | 说明 |
| --- | --- | --- |
| `app/main.py` | **已集成** | 路由挂载 + trace 中间件(X-Trace-Id 贯通)+ lifespan(启动期 debug 校验 · Redis 网关注册 · 引擎 dispose,B7) |
| `app/api/risk.py` `simulate.py` `deps.py` | **已实现** | 风控 4 API + 模拟网关路由 + debug 头 AuthContext(T-01 过渡版,JWT 就绪只换工厂内部) |
| `app/api/chat.py` `knowledge.py` `admin.py` | 空壳 | 待 T-06 / T-07 |
| `app/main.py` | **已集成** | 路由挂载 + trace 中间件(X-Trace-Id/X-Request-Id 贯通 + 500 兜底错误体)+ audit 中间件(T-02 http_access)+ lifespan(jwt_ready 校验 · Redis 网关注册 · 引擎 dispose) |
| `app/api/risk.py` `simulate.py` `deps.py` | **已实现** | 风控 4 API + 模拟网关路由 + **JWT 鉴权工厂(T-01:Bearer 全环境优先;debug 头仅 dev+无 RS256 公钥时兜底;AGENT_ACCESS_MATRIX 准入)** |
| `app/api/chat.py` `audit_middleware.py` | **已实现(T-06/T-02)** | POST /api/chat(SessionGuard+归属+窗口+落盘)· http_access 访问审计 |
| `app/api/knowledge.py` `admin.py` | 空壳 | 待 T-21(Milvus/RAG)与审计查询台 |
| `app/service/auth_service.py` | **已实现(T-01)** | Auth SDK:JWT 验签(HS256 dev/RS256 生产)、必填 claims、jti 吊销(Redis fail-open);签发 CLI `scripts/dev/issue_dev_token.py` |
| `app/service/risk/*` + `service/suitability.py` | **已实现** | RISK-001~005 规则 / 预警聚合 / L3 写入 / AML / 引擎编排 / SUIT-001~008 / locks+redis_gateway 公共原语(B7) |
| `app/service/agent_service.py` 等 | 空壳 | LangGraph 对话线待 T-07 |
| `app/service/agent_service.py` `memory_service.py` | **已实现(T-07/T-06)** | LangGraph StateGraph(llm→guard)+ DeepSeek(无 key 降级);Redis 会话窗口 + MySQL 回源 |
| `app/repository/session_repository.py` | **已实现(T-06)** | agent_session / agent_message 读写 |
| `app/gateway/` | **已实现** | 模拟交易网关(仅 gateway_repository 可 INSERT core_trade,B5) |
| `app/repository/core_ro.py` | **已实现** | Core 只读 SELECT(含风控扩展 sum_trades_on_date / list_trades_range / list_active_customers) |
| `app/repository/risk_repository.py` | **已实现** | risk_alert / risk_suitability_log / L3 / risk_aml_list 读写 |
| `app/utils/` | **基本就绪** | trace / desensitize / db(引擎工厂)/ response(统一错误体)/ exceptions(含 ApiError)已实现;logger 占位 |
| `app/config/settings.py` | **已实现** | 双库 `jinrong_agent` + `jinrong_core` + risk_* 阈值 |
| `app/repository/risk_repository.py` | **已实现** | risk_alert / risk_suitability_log / L3 / risk_aml_list / audit_log / input_guard_log 读写 |
| `app/utils/` | **基本就绪** | trace(trace_id+request_id 双 contextvar)/ desensitize / db(引擎工厂)/ response(统一错误体+4xx/500 handler)/ exceptions(含 ApiError)已实现;logger 占位 |
| `app/config/settings.py` | **已实现** | 双库 + risk_* 阈值 + JWT 配置(jwt_public_key_path/jwt_dev_secret/jwt_issuer/jwt_audience) |
| `scripts/core/*.sql` + `reset.ps1` | **已实现** | Core 模拟库 DDL + 种子 |
| `scripts/agent/` `scripts/demo/` | **已实现** | AML 名单种子 + 风控演示数据 + subscribe_alerts/rebuild_alerts(B9a 订阅与幂等重放补偿) |
| `scripts/agent/` `scripts/demo/` `scripts/dev/` | **已实现** | AML 名单种子 + 风控演示数据 + subscribe_alerts/rebuild_alerts + issue_dev_token(JWT 签发) |
| `scripts/sync/*.py` | **已实现** | 归属同步 + Neo4j 全图 |
| `tests/` | **已实现** | 17 个测试文件 209 用例(sqlite 隔离;DDL 单一事实源 `_ddl.py`;`test_integration_risk.py` 走真 MySQL + TRD-TEST- 前缀隔离) |
| `tests/` | **已实现** | 21 个测试文件 273 用例(sqlite 隔离;DDL 单一事实源 `_ddl.py`;`test_integration_risk.py` 走真 MySQL + TRD-TEST- 前缀隔离) |
| `docs/需求拆解/` | 已定 | 场景 P0、矩阵、合规原文 |
| `docs/PRD/PRD-风控监测Agent.md` | **已冻结** | 风控 PRD v1.0 + 规则表附录 |
| `docs/项目框架设计/表设计/` | 已定 | Agent 共用 11 表 + agent 专用 SQL |
@@ -52,7 +55,7 @@
> **本机 ①~⑤已执行、`.env` 已配置,勿重做**;本机状态与已知坑(mysql.exe 路径 / reset.ps1 交互式 -p / redis 包漏装已补)见 `FLOW.md` §0 尾注。
> **⚠️ 演示库当前含 B9b 走查残留(2026-09-07)**:直接跑 `pytest` 集成模块会因核查单⑥前置断言显式 fail 约 6 例(防护行为,非环境损坏)——先按 `docs/项目框架设计/演示SOP-风控模块.md` §2 重灌再跑,即恢复全绿。
**下一步开发(见 TODO):** 风控 M2 文字收尾复核 → Wave 0 T-01 JWT / T-02 审计中间件 / T-06 / T-07 LangGraph。演示走查按 `docs/项目框架设计/演示SOP-风控模块.md`。
**下一步开发(见 TODO):** T-03 输入防护 / T-04 Core RO 封装 Tool(agent_tool_call 随 C1)/ T-21 Milvus / 风控阶段 C(C0~C3,A-6 对话验收)。演示走查按 `docs/项目框架设计/演示SOP-风控模块.md`(debug 头通道仍有效;JWT 通道签发用 `scripts/dev/issue_dev_token.py`)。
**禁止(改代码前必记):** Core 正式 C1~C5 不可被画像覆盖 · 审计表只 INSERT · 代理人草稿不外发 · 仅 R-02 可阻断交易 · 四 Agent 不互调 LLM。
@@ -61,7 +64,7 @@
## 1. 项目简介
- **名称:** JinRong 金融四 Agent 智能管家
- **当前阶段:** 风控模块(Wave 2 提前开发)**B1~B9b 全部完成,M2 已达成(tag risk-m2)**;剩 M2 文字复核 + 阶段 C 对话线(依赖 Wave 0)
- **当前阶段:** **Wave 0 共用底座完成(2026-09-07:JWT / 审计中间件 / chat 闭环 / LangGraph 骨架,273 绿)**;风控模块 B1~B9b 完成(M2 tag risk-m2)+ M4 复核闭环,阶段 B 完结;下一批 = T-03/T-04/T-21 + 风控阶段 C(A-6 对话线验收)
- **当前优先级:** Wave 0(T-01 JWT / T-02 审计中间件 / T-06 / T-07 LangGraph)→ 风控阶段 C(A-6)→ Wave 1
------
@@ -125,8 +128,9 @@ Core 模拟:scripts/core/reset.ps1 · 文档 docs/项目框架设计/Core模
种子:scripts/agent/seed-aml-list.sql(AML 名单)· scripts/demo/prepare_risk_demo.sql(reset 后重跑)
依赖:requirements.txt(LangGraph + langchain-core/openai + FastAPI + SQLAlchemy)
启动:uvicorn app.main:app --reload → GET /health
测试:python -m pytest(204 用例;集成测试需本机演示数据,未灌库时自动 skip)
测试:python -m pytest(273 用例;集成测试需本机演示数据,未灌库时自动 skip)
运维/演示脚本:scripts/demo/subscribe_alerts.py(订阅推送演示)· rebuild_alerts.py TRD-xxx(引擎异常补偿重放)
JWT 联调:python scripts/dev/issue_dev_token.py --sub STAFF-30001 --roles risk_officer(+ Authorization: Bearer + X-Agent-Type)
配置:.env(见 .env.example)
RBAC 联调账号:scripts/dev/rbac-seed-reference.md
```
@@ -168,6 +172,6 @@ RBAC 联调账号:scripts/dev/rbac-seed-reference.md
2. 改动属于 api / service / tool / repository 哪一层?
3. 是否需 customer_id 归属与 JWT RBAC?
4. Core 是模拟库只读还是 agent 库读写?
5. 如何验证?(`python -m pytest` 全量(当前 209 绿)· uvicorn 启动 + /health · SQL / sync 脚本 · 对照 REQUIREMENTS 验收列)
5. 如何验证?(`python -m pytest` 全量(当前 273 绿)· uvicorn 启动 + /health · SQL / sync 脚本 · 对照 REQUIREMENTS 验收列)
大任务:FRAMEWORK/FLOW 与实现状态不符时先更新 memory 再编码(用户确认跳过除外)。