From 48355cee8e5e8b2b665062deb2a8a44cce5fc852 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 10 Sep 2026 15:31:20 +0800 Subject: [PATCH] feat(analytics): Enhance AnalystQueryPage with template and cache hit indicators - Updated `AnalystQueryPage` to display tags for template hits and cache hits, improving user feedback on query performance. - Adjusted SQL result label to streamline information presentation. - Enhanced documentation to reflect the latest testing baseline with 804 passed tests, indicating improved stability and functionality across the application. This update significantly enhances the user experience by providing clearer insights into query processing and results. --- AGENTS.md | 2 +- docs/memory/FLOW.md | 17 +++++++---- docs/memory/FRAMEWORK.md | 6 ++-- docs/memory/ITERATION.md | 4 ++- docs/memory/MEMORY.md | 32 +++++++++++--------- docs/memory/TODO.md | 23 ++++++++------ web/src/pages/analytics/AnalystQueryPage.tsx | 18 ++++++++--- 7 files changed, 63 insertions(+), 39 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 2886e17..a93b1d3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -38,6 +38,6 @@ app/repository/core_ro.py # Core 只读 + check_suitability(R-02) scripts/core/reset.ps1 # 本地灌 Core 模拟库 ``` -**当前分支:** `merger` · **测试基线:** `python -m pytest` → 795 passed · **Redis:** Docker `6380` · **前端:** `cd web && npm run build/test` +**当前分支:** `merger` · **测试基线:** `python -m pytest` → 804 passed · **Redis:** Docker `6380` · **前端:** `cd web && npm run build/test` 技术选型硬阀门见 MEMORY 第 3、7 节。Cursor 以 `.cursor/rules/project-memory.mdc` 为准。 diff --git a/docs/memory/FLOW.md b/docs/memory/FLOW.md index 1dec963..9749a18 100644 --- a/docs/memory/FLOW.md +++ b/docs/memory/FLOW.md @@ -20,7 +20,12 @@ ③ Core 模拟库(L0) .\scripts\core\reset.ps1 → 创建 jinrong_core + 28 客户 / 12 产品 / 持仓交易种子 - (风控演示:再执行 scripts/demo/prepare_risk_demo.sql 刷新测评日期 · PRD §10.2) + (风控演示:`.\scripts\demo\prepare_all.ps1` 或 `prepare_risk_demo.sql` · PRD §10.2) + +④b 数据分析问数(可选) + mysql … < scripts/agent/migrate-analyst-d07-d11.sql # 若未建 analyst 资产表 + mysql … < scripts/agent/seed-analyst-metric-dict.sql + mysql … < scripts/agent/seed-analyst-query-templates.sql # 模板缓存演示 ④ Agent 共用底座(若库未建) mysql -u root -p < docs/项目框架设计/表设计/01-mysql-共用底座.sql @@ -39,7 +44,7 @@ uvicorn app.main:app --reload GET http://127.0.0.1:8000/health → {"status":"ok"} cd web && npm run dev → 5173 代理 8000 - python -m pytest → 786 passed 1 skipped + python -m pytest → 804 passed 1 skipped RBAC 联调账号:scripts/dev/rbac-seed-reference.md ``` @@ -54,13 +59,13 @@ RBAC 联调账号:scripts/dev/rbac-seed-reference.md Client → Gateway(JWT/RBAC) → api/chat → agent_service(LangGraph) → Tools → 存储 → 响应 + audit_log ``` -当前:**风控全链路 + Wave 0 共用底座 + 代销平台 v0.1 + AL-09 + 客服 S2 Wave3 部分 + 前端 P0(2026-09-10,`merger`)**。**测试基线:`python -m pytest` → 786 passed 1 skipped** · **`web/` 19 Vitest 绿**。 +当前:**风控全链路 + Wave 0 共用底座 + 代销平台 v0.1 + AL-09 + 客服 S2 Wave3 + 数据分析 D-06 + 前端 P0 Demo(2026-09-10,`merger`)**。**测试基线:`python -m pytest` → 804 passed 1 skipped** · **`web/` 19 Vitest 绿 · `npm run build` 绿**。 -**下一步(统筹 P1):** 接口契约发群 · 风控前端 polish(台账筛选)· **客服** L1/L2 Redis 热读(风控不做 L1/L2)· customer 阈值 push(未做)。 +**下一步(统筹 P1):** merger commit · 20 题 battery · 客服验收 · analyst D-09/N-03/N-07 · **客服** L1/L2 Redis(风控不做 L1/L2)。 -**本机已就位状态(2026-09-10):** `.env` 含 `REDIS_URL=redis://127.0.0.1:6380/0`;pytest **786 绿**;客户 Chat SSE 已接 `prepare_customer_stream`。 +**本机已就位状态(2026-09-10):** `.env` 含 `REDIS_URL=redis://127.0.0.1:6380/0`;pytest **804 绿**;问数 D-06 结果+模板缓存已接;前端四角色 Demo 可 walkthrough。 -**本机已知坑:** `mysql.exe` 不在 PATH;`reset.ps1` 自动化用 `MYSQL_PWD`;**6379 常被 Windows Redis 3.x 占用** → 项目 Docker 映射 **6380**;Milvus 中文路径需英文 `MILVUS_URI`;重装环境后 `python -c "import jose, redis"` 自检。 +**本机已知坑:** `mysql.exe` 不在 PATH;`reset.ps1` 自动化用 `MYSQL_PWD`;**6379 常被 Windows Redis 3.x 占用** → 项目 Docker 映射 **6380**;Milvus 中文路径需英文 `MILVUS_URI`;问数模板需灌 `seed-analyst-query-templates.sql` 才见蓝色「模板命中」标签;`battery_report.json` **不入库**(`.gitignore`)。 ------ diff --git a/docs/memory/FRAMEWORK.md b/docs/memory/FRAMEWORK.md index 9f0f934..3a1bd2b 100644 --- a/docs/memory/FRAMEWORK.md +++ b/docs/memory/FRAMEWORK.md @@ -35,15 +35,15 @@ | 模块 | 职责 | 依赖 | 代码状态 | | --- | --- | --- | --- | | 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 产品库 | **S2 + Wave3 部分(2026-09-10)**:Chat SSE · 1B/R1 · **C-04 阈值** · **C-05 nav** · **C-11 匹配** · 13 槽 L1 · **786 pytest** +| 客户财富 Agent | L1 画像、事实查询、阈值提醒 | Core RO、Milvus 产品库 | **S2 + Wave3(2026-09-10)**:Chat SSE · 1B/R1 · C-04/C-05/C-11 · **804 pytest** | 代理人助手 Agent | L2 画像、RAG、草稿 | L1 只读、Milvus | 空壳 service(chat 骨架已通) | -| 数据分析 Agent | NL→SQL→解读 | Core RO、画像只读 | **S3+P2 + 445cfbb 护栏/口径(2026-09-10)**:guardrail Decimal/编号/时间窗 · 流水 N-01 消歧 · **795 pytest** | +| 数据分析 Agent | NL→SQL→解读 | Core RO、画像只读 | **S3+P2+D-06(2026-09-10)**:guardrail/口径 · **结果缓存+写侧失效** · **模板填参**(`template_service`)· **804 pytest** | | 风控监测 Agent | 预警、L3、R-02 适当性 | 交易事件、AML 名单 | **已实现 B1~B9b + C1~C6(FR-1~10)**:事件线 + 对话线 + 集中度/时效升级/代理人行为链;**AL-09 已并入 `merger` 分支** | | Core 只读层 | L0 事实查询 | `jinrong_core` | **已实现 + 已接对话 Tool(T-04)**:core_ro 经 app/tool/core_tools.py 三只读 Tool(L0/持仓/流水)进 chat;风控扩展查询照旧 | | 共用底座 | 会话、审计、输入防护 | MySQL 11 表 + Redis | **已接入(2026-09-07)**:会话(T-06 session_repository + memory_service 窗口)、审计中间件(T-02 http_access + input_guard_log 双写)、agent_tool_call Tool 留痕(T-04)、输入防护(T-03 input_guard:注入词表纯函数检测 + oversize + Redis 固定窗口限流,chat 链路 限流→注入/超长→归属) | | 对话编排 | LangGraph StateGraph + DeepSeek | langgraph/langchain-openai | **已实现**:customer/advisor/risk/analyst 四线;**analyst 问数**独立 `analyst_agent`(非 chat StateGraph) | | 同步脚本 | 归属、Neo4j | Core → agent / 图库 | **sync_*.py 已实现** | -| 前端 Demo(`web/`) | 四角色工作台、平台读 UI、Chat | FastAPI v0.1 + chat B/C | **P0 已接(2026-09-09)**:ChatPanel/SSE · 游客试聊 · 平台只读 · 行情 · 风控台账+处置 · **问数工作台** · 模拟交易演示页 · **19 Vitest** | +| 前端 Demo(`web/`) | 四角色工作台、平台读 UI、Chat | FastAPI v0.1 + chat B/C | **P0 Demo 齐备(2026-09-10)**:四角色页+Chat/SSE · 问数+模板标签 · 风控四页 · 行情 · **19 Vitest** · 分析对话仍占位 | ------ diff --git a/docs/memory/ITERATION.md b/docs/memory/ITERATION.md index 719aae3..5708118 100644 --- a/docs/memory/ITERATION.md +++ b/docs/memory/ITERATION.md @@ -23,4 +23,6 @@ | 2026-09-09 | **客服 Agent 代码合并**(`customer-service-agent` 只增不盖) | 用户要求合并上传内容 | `客服Agent-合并说明.md` · Wave1~5 新增文件 · CS-C-11 迁移 SQL · wave 测试暂 ignore | | 2026-09-10 | **客服 Wave3 批次**:1B 共用 sanitize · C-04/C-05/C-11 等 · **786 pytest** | 用户「全做」批次 | MEMORY / REQUIREMENTS / FLOW / TODO / 课程 | | 2026-09-10 | **数据分析 Agent 护栏/口径迭代**(cherry-pick `445cfbb` 功能层)· guardrail Decimal/编号/时间窗 · 流水 N-01 消歧 · battery 脚本改 `issue_dev_token` | 远程 `data-analysis-agent` 未合 merger | guardrail / dict_service / wave6 测试 / `数据分析Agent-代码迭代.md` | -| 2026-09-10 | **客服合规拍板落地**:1B sanitize 分治 · R1 L1 Top-K · MEMORY/课程/测试包 | 误转人工 + 画像膨胀 | MEMORY §3 · TEST-2026-09-10-CS-001 · 776 pytest | +| 2026-09-10 | **数据分析 D-06 缓存**:结果缓存表世代 + 写侧 bump(trade/alert/L3)· **模板填参**(`template_service`)· 问数页 template/cache 标签 · `804 pytest` | 用户拍板 D-06 必须 · PII 脱敏暂缓 | cache_service / template_service / analyst_agent / web | +| 2026-09-10 | **风控前端 P1 + 演示**:台账筛选 · 适当性/AML 页 · `prepare_all.ps1` · 深潜课模块 7 | 2026-09-10 拍板收口 | web/risk · scripts/demo · docs/course | +| 2026-09-10 | **`battery_report.json` 不入库** | 本地跑分产物 | `.gitignore` | diff --git a/docs/memory/MEMORY.md b/docs/memory/MEMORY.md index 82e2e36..44099de 100644 --- a/docs/memory/MEMORY.md +++ b/docs/memory/MEMORY.md @@ -9,7 +9,7 @@ **项目是什么:** 金融四 Agent(客户财富 / 代理人 / 数据分析 / 风控)共用数据层与合规底座;**不**互调 LLM,跨 Agent 走 L1/L2/L3 画像与预警表。 -**当前进度:** 需求与表设计已定 · **风控 + 平台 API + 客服 S2 Wave3 部分 + 数据分析 S3/P2(445cfbb 护栏/口径)** · **795 pytest** · **19 Vitest** · **Redis @ 6380** +**当前进度:** 需求与表设计已定 · **风控 + 平台 API + 客服 S2 Wave3 + 数据分析 S3/P2/D-06 + 前端四角色 P0 Demo** · **804 pytest** · **19 Vitest** · **Redis @ 6380** · **`merger` 工作区未 commit** **工作分支:** 团队开发在 **`merger`**;历史 `risk-control-agent` 交付冻结。 @@ -24,8 +24,8 @@ | `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` | **已实现** | POST /api/chat · **POST /api/chat/stream(customer 分流 → prepare_customer_stream)** · visitor · sessions 三端点 | | `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/analyst.py` `analyst_auth_adapter.py` | **已实现(S3)** | 问数 `POST /api/analyst/chat` · dashboard/assets/metrics · **`get_platform_auth_context`(无 X-Agent-Type)** · customer `self` 域 | -| `app/service/analyst_agent.py` 等 | **已实现(S3)** | SQL guard · guardrail · analytics_repo · 编排 | +| `app/api/analyst.py` `analyst_auth_adapter.py` | **已实现(S3+D-06)** | 问数 `POST /api/analyst/chat` · dashboard/assets/metrics · **`get_platform_auth_context`** · `meta.template_hit` / `cache_hit` | +| `app/service/analyst_agent.py` `template_service.py` `cache_service.py` | **已实现(S3+D-06)** | NL2SQL 编排 · guardrail · **结果缓存(表世代键)+ 写侧 bump**(`analyst_cache_invalidate`)· **模板填参**(published `analytics_query_template`) | | `app/api/knowledge.py` `admin.py` | 空壳 | 待审计查询台与知识库 API(T-21 拍板一期只做脚本入库,上传/重建端点不做) | | `app/service/platform/` | **已实现(v0.1)** | 封装 core_ro + `PLATFORM_RESPONSE_DESENSITIZE` 脱敏开关 | | `app/service/embedding.py` `milvus_service.py` `rag_service.py` | **已实现(T21-1/2/4)** | Ollama bge-m3 1024 维(失败不静默降级)/ kb_product_rules 建集合+upsert+合规过滤检索 / search_knowledge→chunks+source_refs 溯源 | @@ -45,10 +45,10 @@ | `app/service/threshold_service.py` | **已实现(C-04)** | L1 `threshold_pref_summary` → `customer_threshold_config`;持仓查询加权盈亏 vs 阈值 → `customer_notify_log` | | `app/utils/sanitize_postprocess.py` | **已实现(1B 共用)** | 数据查询 intent(含 nav_query)违禁 → 回退 fact_text;RAG/闲聊 → COMPLIANCE_REJECT;均不自动 transfer | | `scripts/core/*.sql` + `reset.ps1` | **已实现** | Core 模拟库 DDL + 种子 | -| `scripts/agent/` `scripts/demo/` `scripts/dev/` | **已实现** | AML 种子 + 演示数据 + `run_sql_file.py` + **`start-redis.ps1`**(Docker Redis 优先)+ issue_dev_token | +| `scripts/agent/` `scripts/demo/` `scripts/dev/` | **已实现** | AML 种子 · **`prepare_all.ps1` 一键灌库** · `seed-analyst-query-templates.sql`(模板缓存)· `run_query_battery.py`(**不入库**)· `start-redis.ps1` | | `scripts/sync/*.py` | **已实现** | 归属同步 + Neo4j 全图 | -| `tests/` | **已实现** | **795 用例** 1 skipped(Wave3 customer + threshold + sanitize_postprocess + 1B/R1) -| `docs/course/` | **交互课程集(2026-09-09)** | 打开 `docs/course/index.html` 导览中心 · 总览 + 7 模块深潜课 | +| `tests/` | **已实现** | **804 用例** 1 skipped(Wave6 template/cache + Wave3 customer + 1B/R1) +| `docs/course/` | **交互课程集** | 导览中心 + 风控深潜 **7 模块**(含模块 7 写侧并发) | `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` | | `docs/项目框架设计/合并注意事项-风控模块并入main.md` | **AL-09 已执行(2026-09-08)** | 合并接线完成;接缝见《风控Agent模块边界与合并接缝标注.md》 | @@ -58,7 +58,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+P2(2026-09-09)** | 四 Agent Chat(**customer SSE**)· 问数+看板+资产沉淀 · 风控台账/模拟交易 · `api/analyst.ts` | +| `web/` | **P0 Demo 齐备(2026-09-10)** | 四角色 Dashboard/Chat · 问数工作台(**模板/缓存标签**)· 资产沉淀 · 风控台账筛选+适当性+AML+模拟交易 · 平台行情 · **分析对话仍为轻量占位**(NL2SQL 走问数页) | **本地 bootstrap(首次):** 完整步骤与前置说明见 `FLOW.md` §0(权威),速览: @@ -69,15 +69,15 @@ 4. mysql … < 01-mysql-共用底座.sql # jinrong_agent 共用 11 表 mysql … < 02-mysql-agent专用.sql # 风控四表 + risk_aml_list 5. mysql … < scripts/agent/seed-aml-list.sql # AML 名单(Windows 乱码:`python scripts/dev/fix_utf8_seed.py`) - (风控演示:scripts/demo/prepare_risk_demo.sql,reset 后重跑) + (风控演示:`.\scripts\demo\prepare_all.ps1` 或 `prepare_risk_demo.sql` · PRD §10.2) 6. python scripts/sync/sync_advisor_rel.py && python scripts/sync/sync_neo4j.py 7. `docker compose up -d redis`(或 `.\scripts\dev\start-redis.ps1`)→ **REDIS_URL=redis://127.0.0.1:6380/0**(Docker Redis 7;避开本机 Windows Redis 占 6379) -8. uvicorn … · python -m pytest(**795 绿**);问数冒烟 · 可选 `mysql … < scripts/agent/seed-analyst-metric-dict.sql` +8. uvicorn … · python -m pytest(**804 绿**);问数:`seed-analyst-metric-dict.sql` + **`seed-analyst-query-templates.sql`**(模板命中) ``` **AL-09 合并后架构(一句话):** 宿主 `gateway/` + 模块 `deps.py` **双栈并存**;对外登录/token **统一**;chat/risk 均走模块鉴权;接缝 S2 用 `auth_adapter`。 -**下一步(见 TODO):** 接口契约发群(复制稿)· 风控前端 polish(台账筛选等)· 客服 L1/L2 Redis(**风控不做 L1/L2**)· Vitest 补测(可选) +**下一步(见 TODO):** git commit `merger` · 20 题 battery 实跑 · 客服手工验收/TEST-LOG · 接口契约发群 · analyst Q17/Q7 挂账 · D-09/N-03/N-07 未做 **Redis(2026-09-09):** 推荐 **Docker** `jinrong-redis`(`redis:7-alpine`)· 宿主机 **6380** → 容器 6379 · `.env` `REDIS_URL=redis://127.0.0.1:6380/0` · 客户端 **RESP2**(`database.py` / `redis_gateway.py`)。 @@ -102,8 +102,8 @@ ## 1. 项目简介 - **名称:** JinRong 金融四 Agent 智能管家 -- **当前阶段:** **代销平台 v0.1 + AL-09 + 客服 S2 + 数据分析 S3/P2 + 前端 P0(2026-09-09)** -- **当前优先级:** 接口契约发群 · 风控前端 polish · 客服画像 Redis L1/L2(风控仅 L3 已接) +- **当前阶段:** **代销平台 v0.1 + AL-09 + 客服 S2 Wave3 + 数据分析 S3/P2/D-06 + 前端 P0 Demo(2026-09-10)** +- **当前优先级:** merger 提交 · battery 跑分 · 客服验收 · analyst 多轮/溯源/转人工(规格缺口)· 客服 L1/L2 Redis(风控仅 L3) ------ @@ -180,8 +180,10 @@ Core 模拟:scripts/core/reset.ps1 · 文档 docs/项目框架设计/Core模 依赖:requirements.txt(LangGraph + langchain-core/openai + FastAPI + SQLAlchemy) 启动:uvicorn app.main:app --reload → GET /health Redis:`docker compose up -d redis` · `REDIS_URL=redis://127.0.0.1:6380/0` · `scripts/dev/start-redis.ps1` -测试:python -m pytest(**795 绿**;集成需本机 MySQL + `risk_aml_list` + `prepare_risk_demo.sql`) -前端:cd web && npm run dev · npm run build/test/lint(**19** Vitest) +测试:python -m pytest(**804 绿**;集成需本机 MySQL + AML + 风控演示数据) +前端:cd web && npm run dev · npm run build/test/lint(**19** Vitest)· 四角色 Demo 见 `docs/frontend/FRONTEND-HANDOFF.md` §8 +问数模板:mysql … < scripts/agent/seed-analyst-query-templates.sql +风控一键灌库:.\scripts\demo\prepare_all.ps1 运维/演示脚本: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) @@ -229,6 +231,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` **795 绿** · Redis **6380** · uvicorn + `/health` · 客户助手 Chat SSE · 测试包 `docs/memory/tests/2026-09-10-customer-1b-r1/`) +5. 如何验证?(`python -m pytest` **804 绿** · Redis **6380** · uvicorn + `/health` · 问数页模板标签 · 测试包 `docs/memory/tests/2026-09-10-customer-1b-r1/`) 大任务:FRAMEWORK/FLOW 与实现状态不符时先更新 memory 再编码(用户确认跳过除外)。 diff --git a/docs/memory/TODO.md b/docs/memory/TODO.md index f619d41..6e472a1 100644 --- a/docs/memory/TODO.md +++ b/docs/memory/TODO.md @@ -5,18 +5,18 @@ ## 进行中 -**2026-09-10 批次**(`merger` · 基线 **795 pytest**):客服 Wave3 + 数据分析 445cfbb 功能层已落工作区 · **未 commit** +**2026-09-10 批次**(`merger` · 基线 **804 pytest** · `npm run build` 绿):客服 Wave3 + analyst D-06/445cfbb + 风控前端三页 + 课程/文档 · **未 commit** ### 本批次 · 优先收尾(推荐顺序) -- [ ] **git commit `merger`**:客服 Wave3 + analyst guardrail/dict + 课程 layout 修复 + 文档(你确认后执行) -- [x] **风控深潜课改版(方案 1 · 6 模块 · 读者 dev)**:见 `docs/superpowers/specs/2026-09-10-risk-course-design.md` · 模块 1–6 已写 · `build_all.py` 已跑 +- [ ] **git commit `merger`**:Wave3 + analyst D-06/模板缓存 + 风控前端/灌库/深潜课7 + 问数 UI 标签 + 文档(你确认后执行) +- [x] **风控深潜课改版(方案 1 · 7 模块 · 读者 dev)**:模块 1–7 已写(含写侧并发)· `jinrong-module-risk/index.html` 已拼接 - [ ] **数据分析 · 20 题 live battery**:`uvicorn` + DeepSeek → `python scripts/dev/run_query_battery.py` → 本地写 `scripts/dev/battery_report.json`(**已拍板:不入库** · 见 `.gitignore`) - [ ] **客服 · 手工验收**:`docs/memory/tests/2026-09-10-customer-1b-r1/MANUAL-CHECKLIST.md`(CUST-9527 持仓/sanitize/R1 种子) - [ ] **客服 · Redis DEL**:灌 R1 种子后 `redis-cli -p 6380 DEL profile:l1:CUST-9527`(6380 未起则先 `start-redis.ps1`) - [ ] **测试包签核**:`TEST-LOG-2026-09-10-CS-001` → 模块负责人 zhangyong 确认 - [ ] **接口契约发群稿**:`docs/项目管理/接口契约发群-2026-09-09.md`(复制到群即完成) -- [ ] **口径字典种子**:本机执行 `scripts/agent/seed-analyst-metric-dict.sql`(若未灌) +- [ ] **口径字典/问数模板种子**:本机执行 `seed-analyst-metric-dict.sql` · **`seed-analyst-query-templates.sql`**(若未灌) ### 需拍板(定了再开任务) @@ -48,9 +48,11 @@ ### 前端 `web/` · P0 收尾 -> 主链路已通;以下为 polish / 文档 / 已知接缝缺口。 +> **四角色 Demo 主链路已通**(登录 → Dashboard → Chat/问数/风控 REST);以下为 polish / 规格缺口。 -- [x] 四角色 Dashboard · 平台只读 · ChatPanel · 游客试聊 · 行情 · 风控台账页 · 问数工作台(`AnalystQueryPage`) +- [x] 四角色 Dashboard · 平台只读 · ChatPanel · 游客试聊 · 行情 · 风控台账+筛选+适当性+AML+模拟交易 · 问数工作台+资产沉淀 +- [x] **问数结果标签**:`AnalystQueryPage` 展示 `template_hit` / `cache_hit`(2026-09-10) +- [ ] **分析对话与问数合一** / **看板钻取** — 规格 D-09/D-12,往后排 - [ ] **Vitest 补测**(可选):`useChatPanel` · `api/analyst.ts` mock - [x] **simulate 交易 UI**:风控菜单「模拟交易」+ `RiskSimulatePage` + `api/simulate.ts`(演示说明 · A-3/A-1 预设) - [x] **接口契约发群稿**(见 `docs/项目管理/接口契约发群-2026-09-09.md` · 复制到群即完成) @@ -82,7 +84,7 @@ ### 数据分析 Agent · S3 接缝(2026-09-09 已接线) -> 清单:`docs/项目框架设计/数据分析Agent-合并说明.md` · **795 passed** · 冒烟 `scripts/dev/smoke_analyst.py` +> 清单:`docs/项目框架设计/数据分析Agent-合并说明.md` · **804 passed** · 冒烟 `scripts/dev/smoke_analyst.py` - [x] merge + 接缝(`analyst_router` · `analyst_auth_adapter` · 问数走 `get_platform_auth_context`) - [x] customer `self` 域 + 「AI 分析有风险」尾注 @@ -93,7 +95,9 @@ - [x] **P2 · 口径字典种子 SQL**(`scripts/agent/seed-analyst-metric-dict.sql` · 本机需手工执行) - [x] **customer Chat SSE**(`chat.py` stream → `prepare_customer_stream` · 前端 `mode="stream"`) - [x] **STAFF-30001/30002 追加 risk_demo**(`jwt_service.py` · 模拟交易页可造预警) -- [x] **445cfbb 功能层 cherry-pick**(2026-09-10):`guardrail.py` · `dict_service.py` 流水消歧 · wave6 测试 · `run_query_battery.py` · `数据分析Agent-代码迭代.md` +- [x] **445cfbb 功能层 cherry-pick**(2026-09-10):`guardrail.py` · `dict_service.py` · wave6 测试 · `run_query_battery.py` +- [x] **D-06 双层缓存**(2026-09-10):结果缓存+表世代写侧失效 · 模板填参 · 问数页标签 · 种子 SQL +- [ ] **D-09 多轮追问** · **N-03 溯源明细** · **N-07 转人工** — 前后端均未做 ### 数据分析 Agent · 445cfbb 合入后开放项 @@ -197,6 +201,7 @@ - [x] 2026-09-05 `core_ro.py` + `settings.mysql_core_database` + sync 脚本 - [x] 2026-09-05 Agent 编排依赖改为 LangGraph(requirements.txt) - [x] 2026-09-05 memory 文件夹更新(新 Agent 交接清单) -- [x] 2026-09-10 客服 Wave3 + analyst 445cfbb cherry-pick + 课程 layout 修复(工作区 · **795 pytest** · 未 commit) +- [x] 2026-09-10 merger 批次(工作区 · **804 pytest** · 未 commit):Wave3 · analyst D-06 · 风控前端/灌库/深潜课7 · 问数 template 标签 +- [x] 2026-09-10 客服 Wave3 + analyst 445cfbb cherry-pick + 课程 layout 修复(**795 pytest** · 已并入上项) - [x] 2026-09-09 数据分析 Agent S3 合并接线 + 问数页 + 迁移/冒烟(`773 passed` · commit `af9fb71`) - [x] 2026-09-09 数据分析 Agent 需求规格定稿 v1.1(`docs/需求拆解/01-数据分析Agent需求规格.md`) diff --git a/web/src/pages/analytics/AnalystQueryPage.tsx b/web/src/pages/analytics/AnalystQueryPage.tsx index 865b868..2ac1091 100644 --- a/web/src/pages/analytics/AnalystQueryPage.tsx +++ b/web/src/pages/analytics/AnalystQueryPage.tsx @@ -1,4 +1,4 @@ -import { Alert, Button, Card, Collapse, Input, Row, Col, Space, Spin, Table, Typography } from 'antd' +import { Alert, Button, Card, Collapse, Input, Row, Col, Space, Spin, Table, Tag, Typography } from 'antd' import type { ColumnsType } from 'antd/es/table' import { useEffect, useState } from 'react' import { getAnalystDashboard, postAnalystChat, type AnalystChatResponse } from '../../api/analyst' @@ -140,6 +140,18 @@ export function AnalystQueryPage() { description={result.suggestions?.join(' · ')} /> ) : null} + {(result.status === 'success' || result.status === 'degrade') && + (result.meta.template_hit || result.meta.cache_hit) ? ( + + {result.meta.template_hit ? ( + + 模板命中 + {result.meta.template_key ? ` · ${result.meta.template_key}` : ''} + + ) : null} + {result.meta.cache_hit ? 结果缓存 : null} + + ) : null} {(result.status === 'success' || result.status === 'degrade') && result.answer ? ( {result.answer} @@ -168,9 +180,7 @@ export function AnalystQueryPage() { items={[ { key: 'sql', - label: `SQL(${result.meta.row_count} 行 · ${result.meta.exec_ms} ms${ - result.meta.cache_hit ? ' · 缓存命中' : '' - })`, + label: `SQL(${result.meta.row_count} 行 · ${result.meta.exec_ms} ms)`, children:
{result.sql}
, }, ]}