- 新增「你是哪种后续人员」分流表:接手开发/合并执行人/需求评审/环境演示各取所读 - 模块交付状态+里程碑表(m1~m4 全量)+模块自治架构定位说明 - 铁律速览(六条红线) / 后端结构注释细化(scripts/tests/data 职责) - 快速启动更新:测试基线 406→482;演示库重灌两步缺一不可警告;JWT 调用示例(签发+双头);dev debug 头兜底说明 - 核心接口一览表(6 端点×权限矩阵) - 文档地图补全:合并注意事项/边界标注/需求拆解/业务记忆管理
119 lines
7.4 KiB
Markdown
119 lines
7.4 KiB
Markdown
# JinRong · 金融四 Agent 智能管家
|
||
|
||
四个 Agent(客户财富 / 代理人助手 / 数据分析 / **风控监测**)共用统一数据层与合规底座;Agent 之间**不互调 LLM**,跨 Agent 协作走 L1/L2/L3 画像与预警表。
|
||
|
||
> **本分支(`risk-control-agent`)= 风控 Agent 模块的交付分支**。模块功能已全部交付(2026-09-07),合并 main 的事宜见《合并注意事项》一文,后续人员请按下表对号入座。
|
||
|
||
## 你是哪种后续人员?
|
||
|
||
| 角色 | 先读 |
|
||
| --- | --- |
|
||
| 接手模块开发 / 维护 | [交接文档.md](交接文档.md)(本地)→ [docs/memory/MEMORY.md](docs/memory/MEMORY.md) §0 → [docs/memory/TODO.md](docs/memory/TODO.md) |
|
||
| 负责把模块并入 main | [docs/项目框架设计/合并注意事项-风控模块并入main.md](docs/项目框架设计/合并注意事项-风控模块并入main.md)(自包含操作手册) |
|
||
| 了解需求 / 做方案评审 | [docs/PRD/PRD-风控监测Agent.md](docs/PRD/PRD-风控监测Agent.md)(v1.1)+ [附-风控规则表.md](docs/PRD/附-风控规则表.md) |
|
||
| 起环境跑演示 | [docs/项目框架设计/演示SOP-风控模块.md](docs/项目框架设计/演示SOP-风控模块.md) + 本页「快速启动」 |
|
||
|
||
## 模块交付状态(截至 2026-09-07)
|
||
|
||
**后端功能全部完成,全量 pytest 482 passed 0 failed(sqlite + 真 MySQL 集成),核心接口实调验收通过。**
|
||
|
||
| 里程碑 tag | 内容 |
|
||
| --- | --- |
|
||
| Wave 0 / T-04 / T-03 / T-21 | JWT 鉴权 · 审计中间件 · chat 闭环 · LangGraph+DeepSeek · Core 只读 Tool · 输入防护 · Milvus 知识库 |
|
||
| `risk-m1` | 适当性校验(已换核为 C×R 矩阵契约:match_result 五值 + JR-AST/FM 规则编号) |
|
||
| `risk-m2` | 事件线全链路(RISK-001~005 规则引擎 / 预警聚合 / L3 / AML / 交易网关 / 4 个 API) |
|
||
| `risk-m3` | 对话线闭环(风控四只读 Tool + StateGraph risk 分支) |
|
||
| 阶段一 | 对齐 main 基准 AL-01~08(SUIT-001~008 退役 → core_ro.check_suitability 矩阵判定) |
|
||
| `risk-m4` | 追加需求:FR-8 集中度预警 RISK-006 / FR-9 处置时效升级 RISK-007 / FR-10 代理人行为链 RISK-008 |
|
||
|
||
**架构定位**:风控 Agent 为**独立封装模块**——模块内自带鉴权(`app/api/deps.py` + `app/service/auth_service.py`)、防护、trace、引擎工厂;与宿主的耦合只走 4 个接缝(挂载点 / AuthContext / settings / 引擎工厂),由 `tests/test_module_boundary.py` 防呆锁定。详见《[风控Agent模块边界与合并接缝标注.md](docs/项目框架设计/风控Agent模块边界与合并接缝标注.md)》。
|
||
|
||
## 铁律(改码前必记)
|
||
|
||
- Core 正式 C1~C5 不可被画像覆盖;Core 库只读(仅模拟交易网关可 INSERT core_trade)
|
||
- 审计表(audit_log 等)只 INSERT
|
||
- 代理人草稿不自动外发客户;风控不自动冻户
|
||
- 仅适当性 R-02 可阻断交易
|
||
- 四 Agent 不互调 LLM
|
||
- 不改表结构(改表需用户确认);新增依赖须用户确认
|
||
|
||
## 后端结构
|
||
|
||
```text
|
||
app/
|
||
├── api/ # 路由:chat、risk(4 API)、simulate、deps(JWT 鉴权工厂)、audit_middleware
|
||
├── service/ # agent_service(LangGraph StateGraph)、risk/*(rules/engine/alert/aml/L3/C4~C6)、
|
||
│ # suitability、tool_service、auth_service、input_guard、RAG 三层
|
||
├── tool/ # core_tools(Core 只读 Tool)、kb_tools(知识库检索 Tool)
|
||
├── gateway/ # trade_gateway 模拟交易网关(唯一可写 core_trade)
|
||
├── model/ # schemas、suitability(21 列契约)、entities(29 表 ORM 参考)
|
||
├── repository/ # core_ro(Core 只读,含 check_suitability 矩阵)、risk_repository、session_repository
|
||
├── config/ # settings(双库 + risk_* 阈值 + JWT)
|
||
└── utils/ # trace、authz、response(统一错误体)、db、exceptions
|
||
|
||
scripts/ # core 灌库、demo 演示数据、kb 知识库入库、cron 定时扫描、dev 签发 token
|
||
tests/ # 30+ 模块;_ddl.py 为 sqlite DDL 单一事实源;test_module_boundary.py 锁模块边界
|
||
data/kb/ # 6 只种子产品手册(知识库语料)
|
||
```
|
||
|
||
## 环境要求
|
||
|
||
- **Python 3.13**(项目依赖与 pytest 装在系统 Python 3.13.14)
|
||
- MySQL 8.0(双库:`jinrong_core` 模拟 Core 只读 / `jinrong_agent` 业务库)、Redis 8
|
||
- Neo4j Desktop(全图同步)、Ollama(bge-m3,1024 维,仅做 embedding)
|
||
- Windows 原生部署,不使用本地 Docker(见技术选型文档)
|
||
|
||
## 快速启动
|
||
|
||
```bash
|
||
cp .env.example .env # 填 MYSQL_PASSWORD / NEO4J_PASSWORD / DEEPSEEK_API_KEY
|
||
pip install -r requirements.txt
|
||
# 首次灌库与同步:见 docs/memory/FLOW.md §0(权威步骤)
|
||
uvicorn app.main:app --reload # → GET http://127.0.0.1:8000/health
|
||
python -m pytest # 基线 482 用例(系统 Python)
|
||
```
|
||
|
||
**演示库重灌(走查/集成测试前必做,两步缺一不可)**:
|
||
`scripts/core/reset.ps1`(交互式输密码)→ `scripts/demo/prepare_risk_demo.sql`。
|
||
⚠️ 只跑第一步不跑第二步 → 33 客户中 27 人风评过期、约 82% 适当性检查返回 risk_expired,这是种子设计不是 bug。
|
||
|
||
**调接口(JWT 通道)**:
|
||
|
||
```bash
|
||
# 签发 token(dev)
|
||
python scripts/dev/issue_dev_token.py --sub STAFF-90001 --roles risk_officer
|
||
# 调用须同时带两个头
|
||
curl -X POST http://127.0.0.1:8000/api/risk/suitability/check \
|
||
-H "Authorization: Bearer <token>" -H "X-Agent-Type: risk" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"customer_id":"CUST-1001","product_id":"PROD-005827"}'
|
||
```
|
||
|
||
dev 环境无 Bearer 时可用 `X-Debug-Role` / `X-Debug-Actor` 头兜底(仅 development + 未配 RS256 公钥时生效)。
|
||
|
||
## 核心接口一览
|
||
|
||
| 接口 | 说明 | 权限 |
|
||
| --- | --- | --- |
|
||
| `GET /api/risk/alerts` | 预警台账分页(FR-4) | risk_officer / risk_manager(只读)/ compliance(仅 aml) |
|
||
| `POST /api/risk/alerts/{id}/handle` | 人工处置(状态机 + 审计) | risk_officer |
|
||
| `POST /api/risk/suitability/check` | 适当性校验(C×R 矩阵,G-01 归属) | customer 本人 / advisor 名下 / risk_officer |
|
||
| `POST /api/risk/aml/scan` | 手动全量 AML 扫描(FR-5) | risk_officer |
|
||
| `POST /api/simulate/trade` | 模拟交易(适当性阻断 + 规则引擎) | risk_demo 或客户本人 |
|
||
| `POST /api/chat` | 对话(X-Agent-Type 分流四 Agent;风控线四只读 Tool) | 按准入矩阵 |
|
||
|
||
## 文档地图
|
||
|
||
| 目录 / 文件 | 内容 |
|
||
| --- | --- |
|
||
| [docs/memory/](docs/memory/) | 项目记忆六件套(MEMORY/TODO/REQUIREMENTS/FRAMEWORK/FLOW/ENVIRONMENT),入口为 MEMORY.md §0 |
|
||
| [docs/PRD/](docs/PRD/) | 风控 PRD v1.1(§4A = 追加需求)+ 风控规则表 |
|
||
| [docs/项目框架设计/](docs/项目框架设计/) | 架构设计 · 开发计划 · 实现方案 C4~C6 · 表设计(SQL 单一事实源)· 技术选型与 JWT 手册 · Core 模拟底座 · 演示 SOP · 边界标注 · **合并注意事项** |
|
||
| [docs/需求拆解/](docs/需求拆解/) | 业务场景优先级、数据交互矩阵、合规约束、四角色用户故事(docx) |
|
||
| [docs/业务记忆管理/](docs/业务记忆管理/) | 业务记忆分层手册 |
|
||
| [交接文档.md](交接文档.md) | 模块开发交接(本地保留,不入库) |
|
||
|
||
## 前端
|
||
|
||
React 19 + Vite 7 + TypeScript strict + Ant Design 5 + HashRouter——`web/` 目录尚未 init,为下一主线。
|