Files
XingHuo/docs/memory/REQUIREMENTS.md
T
GaoYiYuan_0626 301c78edc3 feat: T-04 Core RO Tool 节点——chat Tool 接入+归属校验+agent_tool_call 落库
- app/tool/core_tools.py: 三只读 Tool(query_customer_profile/holdings/recent_trades, Core RO 仅 SELECT) + TOOL_REGISTRY 白名单(requires_customer); JSON 安全化(Decimal 两位/时间 isoformat)
- app/service/tool_service.py: match_intent 关键词意图(仅 customer/advisor; risk/analyst 空转归 C1/C2) + assert_tool_access 归属断言(customer 本人/advisor assigned/risk_officer 全量/其余拒, 口径对齐 deps.assert_customer_access) + run_tool 编排(白名单→校验→执行→agent_tool_call 落库, 落库失败降级 warning)
- agent_service: 图 START→tool→llm→guard; Tool 结果注入 LLM 上下文(SystemMessage); 降级回复带 Tool 摘要; chat() 可选 session 上下文(缺省空转, T-07 兼容)
- session_repository: insert_tool_call(message_id 一期 NULL, session_id+trace_id 可还原)
- 归属拒绝口径: Tool 层不抛 403 改 blocked 留痕(AUTH_403_* 同码), 对话内呈现——API 层 deny 铁律不变
- tests: test_chat_tools 20 例(三态+落库字段+降级+图注入) + test_chat 4 例(全链路/JWT 外 debug 通道), _ddl 补 agent_tool_call/core_holding, 297 绿
- 真库冒烟: uvicorn+真 MySQL/Redis chat 触发持仓查询 success 落痕 47ms, 现场已清理
2026-09-07 08:43:36 +08:00

4.1 KiB
Raw Blame History

需求拆解(对照开发)

来源:docs/需求拆解/业务场景优先级清单.md(P0)
合规:docs/需求拆解/Agent风险与合规约束汇总.md
数据:docs/需求拆解/数据交互矩阵.md


本轮范围

  • 目的: 四 Agent 服务四类人群,统一数据层 + 合规底座,可对话闭环。
  • 明确不做: 自动交易、营销推荐、Agent 互调 LLM、自动冻户、Streamlit、P3 平台能力。

Wave 0 · 共用底座

ID 需求 验收对照 状态 TODO
F-01 JWT + RBAC + 数据归属 越权 403 + audit;JWT 手册 §13 已完成(T-01,2026-09-07):auth_service 验签/吊销 + deps 工厂(Bearer 全环境 + dev debug 头兜底)+ X-Agent-Type 准入矩阵 + 归属断言(B6 已有);越权 403 + audit + input_guard_log 双写 T-01
F-02 全量审计留痕 trace_id 可还原 已完成(T-02,2026-09-07):http_access 审计中间件 + X-Trace-Id/X-Request-Id 双贯通 + 4xx/500 统一错误体;业务判定审计 B6 已接 T-02
F-03 输入防护 input_guard_log 部分(2026-09-07):input_guard_log 双写通道已由 T-02 接通(鉴权拒绝类);防护规则(prompt_injection/oversize/限流)待做 T-03
F-04 Core 只读层 不改 Core 账;Repository 只 SELECT 已完成(T-04,2026-09-07):core_ro(含风控扩展)经 app/tool/core_tools.py 三只读 Tool 接入 chat(L0/持仓/流水);Tool 层归属校验(A-01 语义:customer 本人/advisor assigned/risk_officer 全量)+ agent_tool_call 全留痕;Core 侧仍仅 SELECT T-04
R0-DB MySQL 共用 11 表 + Redis 01-mysql-共用底座.sql SQL 已定;本机已灌库(B9b 走查验证) T-05(本机已完成)
R0-CORE Core 模拟 + 同步 reset.ps1 + sync 脚本 脚本已落地 T-05

F-01 部分完成说明: B6 已落地 app/api/deps.py(AuthContext Pydantic + get_auth_context() 工厂,dev 从 X-Debug-Role/X-Debug-Actor 头构造;T-01 就绪后仅替换工厂内部为 JWT 解析)。

F-04 完成说明(T-04,2026-09-07): app/repository/core_ro.py(含风控扩展)仅 SELECT 不变;对话接入经 app/tool/core_tools.py(query_customer_profile / query_holdings / query_recent_trades,TOOL_REGISTRY 白名单)+ app/service/tool_service.py(run_tool:归属校验→执行→agent_tool_call 落库);agent_service 图为 START→tool→llm→guard,customer_id 由会话注入不接受 LLM 生成。风控四 Tool 归 C1 复用同一 runner。

Wave 1 · 内部 Agent P0

ID 需求 验收对照 状态 TODO
D-01~D-04 分析:客户/产品/预警查数 + SQL 留痕 analytics_query_log 未做 T-10
A-01~A-05 代理人:画像/规则/草稿/流程/合规巡检 非归属 403;草稿不外发 未做 T-20

Wave 2 · 风控 P0

详细需求见 docs/PRD/PRD-风控监测Agent.md(v1.0 已冻结);范围含 R-04(P1 顺手做)、R-05 仅预留 L3 接口。

ID 需求 验收对照 状态 TODO
R-01 大额预警 risk_alert pending_review 已实现(B1~B6,A-1/A-2 用例绿) T-30
R-02 适当性阻断请求 唯一阻断场景 已实现(suitability SUIT-001~008 + check API 带鉴权 + 网关阻断,B5/B6;MySQL 手工 SQL 对照挂账 B9b) T-31
R-03 AML 命中通知 不自动冻户 已实现(aml_service + scan API + L3 联动;对话通知线待 T-32 阶段 C) T-32
R-04 频繁/试探模式预警 聚合出单 + 去重 已实现(B1 规则 + B2 聚合去重) T-30
R-05 L3 画像写入 最小写入(最高档合并) 已实现(profile_l3 防降级;risk_score 一期保持 NULL 归评分模型首写) T-30

Wave 3 · 客户 P0

ID 需求 验收对照 状态 TODO
C-01~C-05 持仓/产品/规则/阈值/净值 无买卖指导 未做 T-40

P1+ 见 docs/需求拆解/业务场景优先级清单.md §3。