feat(visitor): Implement visitor chat functionality and enhance customer service interactions
- Added a new visitor chat API endpoint (`/api/chat/visitor`) to allow unauthenticated users to engage in conversations without requiring customer data. - Introduced a visitor context dependency to manage visitor interactions seamlessly. - Enhanced the chat API to support explicit session termination and improved response handling for customer service interactions. - Updated the database configuration to include Redis client support for caching visitor data. - Added a new customer note repository to persist user notes independently of the L1 profile slots. This update significantly improves the customer service experience by enabling visitor interactions and ensuring efficient data handling for both registered and unregistered users.
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
| 向量库 | Milvus Lite + pymilvus 3.0.1 | 本地 `./data/milvus.db`;1024 维 |
|
||||
| Embedding | Ollama bge-m3 | 本地,不出内网 |
|
||||
| LLM 生成 | DeepSeek API | 对话/推理 |
|
||||
| 前端 | React 19 + Vite 7 + AntD 5 + TS strict | **`web/` 脚手架已 init**;Chat/平台读页待接;设计见 `docs/superpowers/specs/2026-09-09-frontend-p0-design.md` |
|
||||
| 前端 | React 19 + Vite 8 + **AntD 6** + **Tailwind CSS v4** + TS strict | **`web/` 四角色 Dashboard 已真接平台读 API**(`hooks`+`api`+`components/ui|dashboard|layout`);Chat/SSE/market 待接;见 `docs/frontend/FRONTEND-HANDOFF.md` |
|
||||
| 对象存储 | 本地目录 `data/kb/` | 不用 MinIO |
|
||||
| 部署 | Windows 原生 | Docker 仅答辩备选 |
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
| 模块 | 职责 | 依赖 | 代码状态 |
|
||||
| --- | --- | --- | --- |
|
||||
| Agent Gateway / Auth SDK | JWT、RBAC、归属校验 | Redis、MySQL customer_advisor_rel | **已实现(T-01 + AL-09)**:模块 `service/auth_service.py` + `api/deps.py`;宿主 `gateway/` 四件套并存;`/api/auth/login` 统一走 `issue_dev_token`;S2 接缝 `auth_adapter.module_auth_from_host` |
|
||||
| 客户财富 Agent | L1 画像、事实查询、阈值提醒 | Core RO、Milvus 产品库 | 空壳 service(chat 骨架已通) |
|
||||
| 客户财富 Agent | L1 画像、事实查询、阈值提醒 | Core RO、Milvus 产品库 | **chat 骨架已通** · **S2 接缝已接线**(customer 并行分流 + visitor 试聊 · 见 `客服Agent-合并说明.md` §3) |
|
||||
| 代理人助手 Agent | L2 画像、RAG、草稿 | L1 只读、Milvus | 空壳 service(chat 骨架已通) |
|
||||
| 数据分析 Agent | NL→SQL→解读 | Core RO、画像只读 | 空壳 service(chat 骨架已通) |
|
||||
| 风控监测 Agent | 预警、L3、R-02 适当性 | 交易事件、AML 名单 | **已实现 B1~B9b + C1~C6(FR-1~10)**:事件线 + 对话线 + 集中度/时效升级/代理人行为链;**AL-09 已并入 `merger` 分支** |
|
||||
|
||||
@@ -20,3 +20,5 @@
|
||||
| 2026-09-09 | chat 同步/流式落库免责声明口径统一(`_assistant_content_for_persist`) | 评审:sync/stream 落盘一致性 | chat.py / test_chat |
|
||||
| 2026-09-08 | P1 环境收口(续):补建 `risk_aml_list` + AML 种子 · `fix_utf8_seed.py` 修复 Windows 中文乱码 · 集成测试 11 例恢复 · **530 passed 0 skipped** | 真库集成 skip/失败 | MEMORY / ENVIRONMENT / FLOW / bootstrap 脚本 |
|
||||
| 2026-09-09 | **四角色收益/洞察 Dashboard 需求 v2**(锚点修正·四角色 Demo 数·风控 Empty·Hook/联调) | 用户再完善需求 | wealth-dashboard spec v2 / frontend-p0 §2.5 / TODO |
|
||||
| 2026-09-09 | **客服 Agent 代码合并**(`customer-service-agent` 只增不盖) | 用户要求合并上传内容 | `客服Agent-合并说明.md` · Wave1~5 新增文件 · CS-C-11 迁移 SQL · wave 测试暂 ignore |
|
||||
| 2026-09-09 | **L3 Redis cache-aside 读路径补齐** + 风控/演示测试数据 TODO 拆项 | 画像 Redis 只做写侧 DEL · 测未接接口缺种子 | profile_l3 / redis_gateway / TODO |
|
||||
|
||||
+11
-8
@@ -9,7 +9,7 @@
|
||||
|
||||
**项目是什么:** 金融四 Agent(客户财富 / 代理人 / 数据分析 / 风控)共用数据层与合规底座;**不**互调 LLM,跨 Agent 走 L1/L2/L3 画像与预警表。
|
||||
|
||||
**当前进度:** 需求与表设计已定 · **风控模块 B1~B9b + C4~C6 + chat B/C + AL-09 合并** · **代销平台 API v0.1 已落地** · **530 passed 0 skipped** · **`web/` P0 脚手架已 init(登录+Layout+占位路由)**。**下一步:前端真接 API/SSE(含 risk Chat)· 接口契约发群。**
|
||||
**当前进度:** 需求与表设计已定 · **风控模块 B1~B9b + C4~C6 + chat B/C + AL-09 合并** · **代销平台 API v0.1 已落地** · **客服 Agent S2 接缝已接线**(visitor 试聊 + customer 并行分流) · **554 passed 0 skipped** · **`web/` 静奢智能 UI 已落地** · **`npm run build/test/lint` 绿(14 例 Vitest)**。**下一步:ChatPanel/SSE · 迁移 SQL CS-C-11 · Wave 1/2/4/5 解禁。**
|
||||
|
||||
**工作分支:** 团队开发在 **`merger`**(已 merge 风控模块);历史开发分支 `risk-control-agent` 交付冻结。旧文档中「待 AL-09 合并」口径已过时。
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
| `app/api/auth_adapter.py` | **已接线(S2)** | `module_auth_from_host()`:宿主 AuthContext → 模块 AuthContext |
|
||||
| `app/gateway/` | **宿主 Wave 0(并存)** | jwt_service / auth_deps / rbac / ownership;模块 API 走 `deps.py`,禁止模块 import gateway |
|
||||
| `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 + 前端接入 B/C)** | POST /api/chat(SessionGuard+归属+窗口+落盘)· **前端拉侧三端点**(`GET /sessions` / `GET /sessions/{id}/messages` / `POST /sessions/{id}/close`,方案 B `8328c24`)· **SSE 流式 `POST /api/chat/stream`**(OpenAI 兼容 chunk,方案 C `01ec5fc`);守卫抽 `_guard_request`/`_prepare_turn`/`_guard_session` 同步流式共用 · http_access 访问审计 |
|
||||
| `app/api/chat.py` `audit_middleware.py` | **已实现(T-06/T-02 + 前端接入 B/C + 客服 S2)** | POST /api/chat(**customer 分流 → customer_service** · 其余 → agent_service)· **POST /api/chat/visitor**(试聊)· 前端拉侧三端点 · SSE `POST /api/chat/stream` |
|
||||
| `app/api/customers.py` `products.py` `advisors.py` `staff.py` `compliance.py` | **已实现(v0.1)** | 代销平台 REST;`get_platform_auth_context`(无 X-Agent-Type);Service 层 `app/service/platform/` |
|
||||
| `app/api/knowledge.py` `admin.py` | 空壳 | 待审计查询台与知识库 API(T-21 拍板一期只做脚本入库,上传/重建端点不做) |
|
||||
| `app/service/platform/` | **已实现(v0.1)** | 封装 core_ro + `PLATFORM_RESPONSE_DESENSITIZE` 脱敏开关 |
|
||||
@@ -41,7 +41,7 @@
|
||||
| `scripts/core/*.sql` + `reset.ps1` | **已实现** | Core 模拟库 DDL + 种子 |
|
||||
| `scripts/agent/` `scripts/demo/` `scripts/dev/` | **已实现** | AML 名单种子 + 风控演示数据 + `fix_utf8_seed.py`/`run_sql_file.py`(Windows UTF-8 灌库)+ issue_dev_token |
|
||||
| `scripts/sync/*.py` | **已实现** | 归属同步 + Neo4j 全图 |
|
||||
| `tests/` | **已实现** | 37+ 测试模块 **530 用例 0 skipped**(sqlite + 真 MySQL 集成;`test_module_boundary` 宿主 D 类排除)。改路由必同步 `tests/test_main.py::test_all_routers_mounted` |
|
||||
| `tests/` | **已实现** | 37+ 测试模块 **554 用例 0 skipped**(含 `test_wave3_customer_service`;sqlite + 真 MySQL 集成;`test_module_boundary` 宿主 D 类排除)。改路由必同步 `tests/test_main.py::test_all_routers_mounted` |
|
||||
| `docs/需求拆解/` | 已定 | 场景 P0、矩阵、合规原文 |
|
||||
| `docs/PRD/PRD-风控监测Agent.md` | **已冻结(v1.1)** | 风控 PRD v1.0 + v1.1 追加 FR-8/9/10(§4A)+ 规则表附录 |
|
||||
| `docs/项目框架设计/实现方案-风控追加需求v1.1-C4C6.md` | **已定稿** | C4~C6 编码依据(经独立 AI 评审修订闭环);分支/进度速览另见项目根 `交接文档.md` |
|
||||
@@ -52,7 +52,7 @@
|
||||
| `docs/项目框架设计/接口契约-代销平台API-v0.2-行情扩展草案.md` | **草案(2026-09-09)** | `nav-snapshot` · `sync_market_nav` · 前端产品行情 Phase B |
|
||||
| `docs/项目框架设计/表设计/` | 已定 | Agent 共用 11 表 + agent 专用 SQL |
|
||||
| `docs/项目框架设计/Core模拟底座/` | 已定 | 无真实 Core 时的 L0 方案 |
|
||||
| `web/` | **P0 脚手架(2026-09-09)** | 登录+Layout+四角色路由+占位页;**未接** ChatPanel/SSE、平台读 API、risk alerts;设计 `docs/superpowers/specs/2026-09-09-frontend-p0-design.md` |
|
||||
| `web/` | **静奢智能 UI(2026-09-09)** | React 19 + Vite 8 + **AntD 6** + **Tailwind CSS v4**(`@tailwindcss/vite`)+ HashRouter;`components/ui`/`dashboard`/`layout` 分层 · 四角色首页真调 `customers/products/advisors/risk` · **未接** ChatPanel/SSE、共享 `/app/market`、risk 处置 UI;交接 **`docs/frontend/FRONTEND-HANDOFF.md`** |
|
||||
|
||||
**本地 bootstrap(首次):** 完整步骤与前置说明见 `FLOW.md` §0(权威),速览:
|
||||
|
||||
@@ -65,12 +65,14 @@
|
||||
5. mysql … < scripts/agent/seed-aml-list.sql # AML 名单(Windows 乱码:`python scripts/dev/fix_utf8_seed.py`)
|
||||
(风控演示:scripts/demo/prepare_risk_demo.sql,reset 后重跑)
|
||||
6. python scripts/sync/sync_advisor_rel.py && python scripts/sync/sync_neo4j.py
|
||||
7. uvicorn app.main:app --reload → GET /health;`docker compose up -d redis`(限流/会话窗口);python -m pytest(**530 绿**,系统 Python 3.13.14)
|
||||
7. uvicorn app.main:app --reload → GET /health;`docker compose up -d redis`(限流/会话窗口);python -m pytest(**554 绿**,系统 Python 3.13.14)
|
||||
```
|
||||
|
||||
**AL-09 合并后架构(一句话):** 宿主 `gateway/` + 模块 `deps.py` **双栈并存**;对外登录/token **统一**;chat/risk 均走模块鉴权;接缝 S2 用 `auth_adapter`。
|
||||
|
||||
**下一步(见 TODO):** 前端 P0 真接(ChatPanel+customer/risk SSE、平台读页、risk alerts、market)· 接口契约发群 · Agent 合并改调 platform Service。
|
||||
**下一步(见 TODO):** 前端 ChatPanel/SSE(customer/risk/advisor)· 共享 `/app/market` · risk 台账处置 UI · 接口契约发群 · Agent 合并改调 platform Service。
|
||||
|
||||
**前端启动(`web/`):** `npm install` → `npm run dev`(`5173`,`/api` 代理 `8000`)· 验收四 demo 账号见 **`docs/frontend/FRONTEND-HANDOFF.md` §8** · 改 UI 后跑 `npm run build && npm run test && npm run lint`。
|
||||
|
||||
**平台 API 硬规则(2026-09-08 拍板):** 路由 **A · 按业务域**(`/api/customers` 等);与 Agent 功能重复时 **以本平台 API 为准**;命名见契约 §2;合并时统一改 canonical 路径。
|
||||
|
||||
@@ -155,7 +157,7 @@ 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(**530 绿**;集成测试需本机 MySQL + `risk_aml_list` + `prepare_risk_demo.sql`)
|
||||
测试:python -m pytest(**554 绿**;集成测试需本机 MySQL + `risk_aml_list` + `prepare_risk_demo.sql`)
|
||||
运维/演示脚本: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)
|
||||
@@ -185,6 +187,7 @@ RBAC 联调账号:scripts/dev/rbac-seed-reference.md
|
||||
| `docs/项目框架设计/接口契约-代销平台API-v0.1.md` | 写/Review 代销平台 REST;Agent 合并对照 canonical 路径 |
|
||||
| `docs/项目框架设计/C-05-行情数据源选型对比.md` | C-05 行情/净值数据源拍板与禁止项 |
|
||||
| `docs/项目框架设计/接口契约-代销平台API-v0.2-行情扩展草案.md` | Phase B `nav-snapshot` 与 sync 脚本契约(未实现) |
|
||||
| `docs/frontend/FRONTEND-HANDOFF.md` | **改 `web/` 必读**:启动/分层/设计令牌/组件边界/浏览器验收清单 |
|
||||
|
||||
缺 `docs/memory/*` 文件:按 project-memory-kit 同名补回,**禁止空模板盖进度**。
|
||||
|
||||
@@ -202,6 +205,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` 全量(当前 **530 绿**)· `docker compose up -d redis` · uvicorn + /health · 平台 `/api/customers/*` · `tests/test_module_boundary.py` 全绿)
|
||||
5. 如何验证?(`python -m pytest` 全量(当前 **554 绿**)· `docker compose up -d redis` · uvicorn + /health · 平台 `/api/customers/*` · `tests/test_module_boundary.py` 全绿)
|
||||
|
||||
大任务:FRAMEWORK/FLOW 与实现状态不符时先更新 memory 再编码(用户确认跳过除外)。
|
||||
|
||||
+64
-5
@@ -19,20 +19,79 @@
|
||||
|
||||
> 现状:除登录外,业务页均为 `PlaceholderPage`;`api/` 仅 `auth.ts`;无 `ChatPanel`。
|
||||
|
||||
- [ ] **四角色「收益/洞察」登录首页**(`docs/superpowers/specs/2026-09-09-frontend-wealth-dashboard-design.md` · **需求 v2 已定稿**):Hero+图表+明细 · 锚点 149940/137.08/-254.40 · 理财师 12 客/1654850 · 风控 Empty+SOP 双态
|
||||
- [ ] **平台 API client**:`customers` / `products` / `risk` 等封装 + `ApiErrorResult` 贯通
|
||||
- [x] **四角色「收益/洞察」登录首页**(2026-09-09 · `web/src/pages/dashboard/*`):静奢 UI(Tailwind v4 + `tokens.css`)· Hero+图表+明细 · 真接平台 API · 交接见 `docs/frontend/FRONTEND-HANDOFF.md`
|
||||
- [x] **平台 API client(Dashboard 子集)**(2026-09-09):`customers` / `products` / `risk`(`listPendingAlerts`)/ `advisors` + `ApiErrorResult` · 完整 CRUD/处置等见下方未接项
|
||||
- [ ] **customer 只读页(一条链路跑通)**:档案 / 持仓 / 流水等 · 真调 v0.1
|
||||
- [ ] **共享 `/app/market`**:`GET /api/products` + 逐产品 `GET .../nav` · 静态净值 Alert
|
||||
- [ ] **`ChatPanel` + SSE 解析**:sessions 列表 / messages / close · 首帧 meta/disclaimer · `[DONE]` 收尾
|
||||
- [ ] **customer Chat**:`POST /api/chat/stream` · `X-Agent-Type: customer`
|
||||
- [ ] **risk Chat**:`POST /api/chat/stream` · `X-Agent-Type: risk`(四 Tool 已后端就绪)
|
||||
- [ ] **risk 预警台账**:`GET /api/risk/alerts` 真表格(替换 `#/app/risk/alerts` 占位)
|
||||
- [ ] **risk Chat**:`POST /api/chat/stream` · `X-Agent-Type: risk`(后端 **六** 只读 Tool 已就绪,见下方风控盘点)
|
||||
- [ ] **risk 预警台账全页**:`GET /api/risk/alerts` 筛选/分页表格 + `POST .../handle` 处置 UI(Dashboard 首页已只读预览)
|
||||
- [ ] **`/app/analytics` 模块**:PermissionGate + query 占位 + analyst Chat(矩阵 403 真展示)
|
||||
- [ ] **advisor Chat**:SSE + AgentBanner(能力弱处提示)
|
||||
- [ ] **Vitest**:`authStore` · SSE 解析 · `mergeProductNavRows` 等(spec §5)
|
||||
- [ ] **Vitest**:`authStore` · SSE 解析 · `mergeProductNavRows` 等(spec §5;Dashboard 纯函数 8 例已绿)
|
||||
|
||||
## 待办(模块侧开放项)
|
||||
|
||||
### 客服 Agent · S2 接缝(2026-09-09 已接线 · 并行分流)
|
||||
|
||||
> 清单:`docs/项目框架设计/客服Agent-合并说明.md` §3–§4 · 原则只增不盖、不覆盖 `main.py`/`chat.py`/`agent_service.py` 整体。
|
||||
|
||||
- [ ] **跑迁移 SQL**:`scripts/agent/migrate-customer-agent-cs-c11.sql`(`conversation_archive` · `customer_notes`)
|
||||
- [x] **挂游客路由**:`POST /api/chat/visitor` → `main.py`
|
||||
- [x] **编排接缝(并行)**:`X-Agent-Type: customer` → `customer_service.run_customer_chat`;其余 Agent 仍 `agent_service.chat`
|
||||
- [x] **Wave 3 测试解禁**:`test_wave3_customer_service.py` 19 例绿 · 基线 **554 passed**
|
||||
- [ ] **Wave 1/2/4/5 解禁**:`tests/conftest.py` 移出剩余 `collect_ignore` · 修接缝后全 wave 绿
|
||||
- [ ] **可选接线**:`profile_service` / `note_service` / 客服 KB 脚本与 Milvus 集合(`scripts/kb/*`)— 按需求择项
|
||||
|
||||
### 风控 Agent · 后端已就绪 · 前端/运维未接(盘点 2026-09-09)
|
||||
|
||||
**HTTP 接口(后端已实现 · 前端/演示未接)**
|
||||
|
||||
- [ ] **`POST /api/risk/alerts/{alert_id}/handle`**:人工处置(`confirmed_normal` / `confirmed_suspicious` / `reported`)· 前端台账页 + `api/risk.ts` 封装
|
||||
- [ ] **`GET /api/risk/alerts`(完整能力)**:`alert_type` / `customer_id` / 日期窗 / 分页 · Dashboard 仅用 `status=pending_review` 子集
|
||||
- [ ] **`POST /api/risk/suitability/check`**:风控线适当性直调(过渡路径 · 带 audit)· 前端未接
|
||||
- [ ] **`POST /api/compliance/suitability-check`**:平台 canonical 适当性 · 前端未接(发群口径以此为准)
|
||||
- [ ] **`POST /api/risk/aml/scan`**:全量 AML 手动扫描 · 仅 risk_officer · 无 UI
|
||||
- [ ] **`POST /api/simulate/trade`**:模拟交易 → 规则引擎动态出预警 · 无 UI(演示走 Swagger / curl)
|
||||
|
||||
**对话 Tool(需 risk Chat SSE 才触达)**
|
||||
|
||||
- [ ] **risk Chat SSE**:`POST /api/chat/stream` · `X-Agent-Type: risk`
|
||||
- [ ] **`alert_query`** / **`customer_context`** / **`suitability_check`** / **`aml_lookup`** / **`query_overdue_alerts`**
|
||||
- [ ] **`query_agent_behavior`**:函数+意图已有 · **未写入 `RISK_TOOL_REGISTRY`** → 会 `TOOL_UNKNOWN`(接线前必修)
|
||||
|
||||
**运维 / 动态演示(无 UI · 见 `演示SOP-风控模块.md`)**
|
||||
|
||||
- [ ] **`scripts/demo/subscribe_alerts.py`**:订阅 Redis `risk:pub:alert` 实时推送(Pub/Sub 无持久化,须先开订阅再发交易)
|
||||
- [ ] **`scripts/cron/escalation_scan.py`**:超期未处置升级(FR-9 · 需库内已有 `pending_review` 且 `created_at` 超阈值)
|
||||
- [ ] **`scripts/cron/agent_behavior_scan.py`**:代理人行为链扫描(FR-10 · 需 audit_log 先积累越权/诱导交易痕迹)
|
||||
- [ ] **`scripts/demo/rebuild_alerts.py`**:按 `trade_id` 幂等重放引擎(engine_error 补偿)
|
||||
|
||||
**演示种子 / 测试数据补充(测未接接口 · 非 everyday `reset.ps1`)**
|
||||
|
||||
> Core reset 后 **`risk_alert` 为空**、AML/测评可能未就位;测预警/处置/推送/FR-9/FR-10 须先补数据。
|
||||
|
||||
- [ ] **`scripts/agent/seed-aml-list.sql`**:8 条 AML 名单(A-5:`CUST-1002` 展示名故意命中)
|
||||
- [ ] **`scripts/demo/prepare_risk_demo.sql`**:6 客户测评刷新(可交易);`CUST-1004` 保持过期(FM-03 阻断演示)
|
||||
- [ ] **风控走查重灌(SOP §2)**:双库 DROP + agent 表 + 上两项 + `sync_advisor_rel`(`reset.ps1` **只重建 core**)
|
||||
- [ ] **动态造预警 · A-1~A-5**:`POST /api/simulate/trade`(Swagger/curl)— A-3 `CUST-3001`/`PROD-510300`/50 万 · A-4 `CUST-9527` 连发 4 笔 · A-5 `CUST-1002`/`PROD-005828`/100
|
||||
- [ ] **Redis 实时推送演示**:终端 1 `subscribe_alerts.py` → 终端 2 发 simulate/trade(Pub/Sub 无持久化)
|
||||
- [ ] **FR-9 超期升级**:库内 `pending_review` 且 `created_at` 超 `RISK_ESCALATION_L1_HOURS`(默认 4h)→ `escalation_scan.py`
|
||||
- [ ] **FR-10 代理人行为链**:A-12 ① 同一 `X-Debug-Actor=STAFF-10087` 发 3 组赎回+申购 + 越权 audit → `agent_behavior_scan.py`
|
||||
- [ ] **L3 监测档数据**:A-5 AML 命中后 `customer_profile_l3.monitor_tier=high`(测 `customer_context` Tool / Dashboard 高风险客户数)
|
||||
- [ ] **适当性阻断样例**:A-1 `CUST-1001`/`PROD-161725`/1 万 · A-2 `CUST-4001`/2 万(测 handle/台账 suitability 单)
|
||||
- [ ] **引擎补偿**:`rebuild_alerts.py <trade_id>`(engine_error 场景)
|
||||
- [ ] **可选 dev 静态预警 seed**:2~3 条 `pending_review` 样例(免每次 simulate;与集成测试当日窗冲突须文档说明)
|
||||
- [ ] **链式 reset 脚本**:AML + prepare 并入 `reset.ps1` 或新增 `scripts/demo/prepare_all.ps1`
|
||||
|
||||
### 画像 Redis · cache-aside(2026-09-09)
|
||||
|
||||
- [x] **L3 热读**:`get_profile_l3` cache-aside(读 Redis miss → MySQL → SET EX 5m;写 upsert DEL)· `customer_context` Tool 已走此路径
|
||||
- [ ] **L1 热读/写**:`ProfileHotCache` 仅在客服线 `customer_service.py` · 宿主 `POST /api/chat` 未接
|
||||
- [ ] **L2 热读/写**:表与 JWT scope 已有 · Repository/Redis **未实现**
|
||||
|
||||
|
||||
- [ ] chat 链路 `risk_suitability_log.actor_id` 暂落 SYSTEM(run_tool 统一透传需动 core_tools/kb_tools 冻结 func 契约,发起者留痕已由 agent_tool_call 覆盖)——AL-06 遗留,动 Tool 契约前先出方案
|
||||
- [x] **【前端接入·方案 B】chat 拉侧三端点**(commit `8328c24`,2026-09-08):`GET /api/chat/sessions`(本人+本 Agent 线分页列表)、`GET /api/chat/sessions/{id}/messages`(历史消息升序分页,closed 仍可读)、`POST /api/chat/sessions/{id}/close`(active→closed,重复/非 active 409);chat.py 抽 `_resolve_agent_type`/`_assert_chat_entry`/`_guard_session` 三守卫供四端点共用,POST "" 行为零回归;risk_manager 在对话线数据面保持 403(PRD 4A.1)。测试 482→**494 绿**;独立评审 P0=0,P1(close 并发 rowcount 静默 200)已修复
|
||||
- [x] **【前端接入·方案 C】SSE 流式对话**(commit `01ec5fc`,2026-09-08):新增 `POST /api/chat/stream`(OpenAI 兼容 chunk:首帧 meta → delta → finish_reason=stop → `[DONE]`);`agent_service.stream_chat` 生成器 + `needs_disclaimer`;`_guard_request`/`_prepare_turn` 与同步端点共用守卫;`session_repository.insert_turn` user+assistant 同事务落库(修评审 P0/P1)。测试 494→**503 绿**。遗留:无心跳帧、断连留空会话待清理
|
||||
|
||||
Reference in New Issue
Block a user