模块 1 · 从用户视角出发

JinRong 是什么?
一次「问 AI」背后发生了什么

这是一个金融智能管家 Demo:四类人用四个不同的 AI 助手(客户 / 理财师 / 分析员 / 风控), 共用同一套数据和合规规则。没有真实银行 Core,用本地模拟库代替。

你已经在用的能力

  • 登录后看持仓、流水、产品行情(平台只读 API)
  • 和 AI 对话(同步或流式 SSE)
  • 分析员问数(自然语言 → SQL → 表格)
  • 风控看预警台账、做模拟交易造演示数据
为什么要懂这些? 你指挥 AI 改功能时,得知道「这是对话线还是平台 API」「要不要带 X-Agent-Type」——否则改完浏览器 401,AI 也会绕圈。

想象:客户打开「客户助手」发一句话

下面是一次真实链路的简化版(2026-09 现状:客户线已走SSE 流式)。

🖥浏览器 web/
🚪四 Agent 对话 HTTP 入口(chat.py)四 Agent 对话 HTTP 入口
🤖登录客户 14 节点编排(customer_service.py)登录客户 14 节点编排
🗄Core + Milvus

点击「下一步」看数据怎么流

入口
# web/src/api/chat.ts
'X-Agent-Type': agentType,  // customer | risk | …
Authorization: `Bearer ${token}`
白话

前端每次调「对话 API」都要带两样东西:登录令牌 + 你正在用哪条 Agent 线。

后端据此决定走客服 LangGraph 还是通用 顾问通用 tool→llm→guard 编排(agent_service.py),以及能不能过门禁。

分析员「问数工作台」调 API 时,要不要带 X-Agent-Type?

模块 2 · 认识主要角色

四个 Agent,
各干各的活

它们不互相打电话(不调彼此的 LLM)。要共享信息,走数据库里的画像层、预警表、平台 API。 像一栋楼里的四个窗口,共用同一套档案室。

四个窗口分别是谁

客户财富 Agent

服务登录客户本人:查持仓/流水、产品规则 RAG、合规话术。代码:登录客户 14 节点编排(customer_service.py)登录客户 14 节点编排

代理人助手

服务理财师:聊名下客户、公开知识库。代码:顾问通用 tool→llm→guard 编排(agent_service.py)顾问通用 tool→llm→guard 编排 + advisor 分支

数据分析 Agent

NL→SQL 问数、看板 metrics、口径资产。独立路由 /api/analyst/*

风控监测 Agent

预警台账、适当性、AML、模拟交易触发规则。代码:app/service/risk/*

群聊:一次请求里谁跟谁说话

理财师问「客户 CUST-9527 持仓如何」——简化对话:

代码地图(改功能前先找门)

app/
FastAPI 应用入口(main.py)FastAPI 应用入口 — 挂载所有路由
四 Agent 对话 HTTP 入口(chat.py)四 Agent 对话 HTTP 入口 — app/api/chat.py
问数 REST 路由(analyst.py)问数 REST 路由 — app/api/analyst.py
风控 REST(risk.py)风控 REST — app/api/risk.py · 模拟交易 HTTP 入口(simulate.py)模拟交易 HTTP 入口 — app/api/simulate.py
登录客户 14 节点编排(customer_service.py)登录客户 14 节点编排 — app/service/customer_service.py
顾问通用 tool→llm→guard 编排(agent_service.py)顾问通用 tool→llm→guard 编排 — app/service/agent_service.py
web/
src/pages/* — 四角色页面
src/api/*.ts — 调后端(注意鉴权头差异)

客户打开「客户助手」时,编排跑在哪?

模块 3 · 进门钥匙

JWT 与 X-Agent-Type:
两套门禁别混

JWT 证明「你是谁」;X-Agent-Type 证明「你正在敲哪扇窗」。本项目里有两套验法,混用会 401。

两条通道(背下来能少踩一半坑)

场景鉴权函数X-Agent-Type
对话 / 风控 RESTget_auth_context必须(customer/advisor/risk/analyst)
平台只读 / 问数get_platform_auth_context不要
模拟交易get_auth_context要;且角色需 risk_demo 或客户本人
真实 bug 已修: 风控台账 risk.ts 曾缺 X-Agent-Type: risk,JWT 正确也会 401。指挥 AI 接新 REST 时记得对照这条表。
CODE · 模块鉴权工厂(deps.py)模块鉴权工厂
agent_type = request.headers.get("X-Agent-Type")
if not agent_type:
    raise ApiError(401, "AUTH_401_MISSING_AGENT_TYPE")
assert_agent_access(auth, agent_type, ...)
白话

读请求头:你声明自己是 customer 还是 risk?

没声明 → 直接 401,连业务代码都进不去。

再查矩阵:STAFF-30001 能不能走 risk 线?客户 token 能不能走 advisor 线?

Demo 账号(本地登录页一键用)

CUST-9527客户
STAFF-10086理财师
STAFF-20001分析员
STAFF-30001风控 + risk_demo

改 宿主 JWT 签发/验签(jwt_service.py)宿主 JWT 签发/验签 里角色后,必须重新登录 才会拿到新 JWT。

客户「我的持仓」页调 /api/customers/.../holdings,要带 X-Agent-Type 吗?

模块 4 · 数据从哪来

双 MySQL、Redis、
模拟 Core 与风控引擎

没有真实银行 Core。L0 事实(客户、持仓、流水)在 jinrong_core 模拟库; Agent 会话、预警、审计在 jinrong_agent。像前台展示用的假金库 + 后台自己的笔记本。

分层速记

  • L0 — jinrong_core 只读(Tool / 问数 SQL _guard 白名单)
  • L1/L2/L3 画像 — agent 库 MySQL 表(客户/顾问/风控 enrich)
  • 会话窗口 — Redis(TTL 2h,挂了会降级回 MySQL)
  • RAG — Milvus 向量库 + data/kb/ 产品手册

风控演示:模拟交易 → 出预警

🧪模拟交易 UI
⚙trade_gateway
🛡risk_engine
📋risk_alert 表

A-3 预设:CUST-3001 · 50 万 · 大额预警

问数 · sql_guard
# 分析 Agent 只读 SELECT,customer 域强制 self
assert_analyst_query_access(auth)
# 客户问数:仅趋势/统计,尾部「AI 分析有风险」
白话

问数不是随便跑 SQL:先过权限域,再过只读与白名单。

客户角色不能查别人的数据,也不能给投资建议(产品规则写死在 guardrail)。

项目硬规则:Agent 能不能直接改 Core 里客户的「正式风险等级」?

模块 5 · 现状与下一步

现在做到哪?
怎么本地跑起来

分支 merger · 测试基线 825 pytest · 前端 22 Vitest · Redis Docker 6380。 文档入口:docs/memory/MEMORY.md §0 · 答辩提纲 docs/答辩/答辩知识点清单.md · 滚动版见模块 8。

已完成(2026-09-10 快照)

✓ 平台 API v0.1

客户/产品/顾问/合规只读 REST

✓ 四 Agent 对话 + SSE

客服 Wave3 · 游客 1B · customer 14 节点

✓ 问数 S3 + D-06

模板填参 · 结果缓存 + 写侧 bump · 问数 UI 标签

✓ 风控 + 前端 P0

台账/模拟/AML 页 · prepare_all.ps1 灌库

仍开放(指挥 AI 前先心里有数)

  • 接口契约发群(稿在 docs/项目管理/接口契约发群-2026-09-09.md)
  • 风控演示种子 / cron 脚本(运维向,见 TODO)
  • 画像 Redis L1/L2 热缓存未全接
  • 口径字典种子 SQL 需本机执行一次

本地启动(最小路径)

1

pip install -r requirements.txt

2

.\scripts\demo\prepare_all.ps1 或 .\scripts\core\reset.ps1

3

.\scripts\dev\start-redis.ps1 → 6380

4

uvicorn app.main:app --reload :8000

5

cd web && npm run dev → :5173 代理 API

6

python -m pytest 验收 825 绿

改后端后: 若浏览器问数 404,多半是 :8000 的 uvicorn 没重启,OpenAPI 里还缺新路由。

情景题:AI 说「问数和 Chat 用同一套鉴权」

你怎么回复?

想继续深入? 模块 8 有答辩 5~8 分钟动线;或打开 课程中心 按角色深潜。

模块 6 · 硬阀门

改代码前先念五条
踩了就是合规事故

四 Agent 可以各自演进,但有几条是全项目硬阀门——不是「最好遵守」,是写进合规文档、测试也会卡住的规则。 指挥 AI 加功能前,先用这张表判断「能不能做」。

五条硬阀门(2026-09 快照)

① Core 正式 C1~C5 不可被画像覆盖

L0 风评在 jinrong_core 是权威;L1 画像 enrich 只能辅助,不能改正式等级。

② 审计表只 INSERT

audit_log / input_guard_log 等只追加、不 UPDATE/DELETE——留痕不可篡改。

③ 仅 R-02 可阻断交易

适当性不匹配可在网关拦单;R-01/R-03 只生成预警,不自动冻户。

④ 代理人草稿不外发

顾问 Agent 产出是草稿;没有「一键发给客户」API,须人工复核后才能外用。

⑤ 四 Agent 不互调 LLM

跨角色协作走 L1/L2/L3 画像表与 risk_alert,禁止 A 调 B 的 LangGraph。

还有技术硬阀门: Core 模拟库除模拟交易网关外只读;Streamlit 禁止引入(MEMORY 第 3 节)。

数据流:谁有权改什么

📖Core 只读
💳模拟网关
⚠预警台账
📋审计总账

点击「下一步」看写入边界

AI 建议「大额预警命中就自动冻结账户」,你怎么回复?

模块 7 · 未实现对照

文档写了 ≠ 代码有
2026-09 快照表

指挥 AI 时最容易把「需求规格里的 P0」当成「仓库已经做完」。 下表是课程专用快照(不写入项目记忆文件),对照 merger 分支实际代码。

已实现(别重复造轮子)

✓平台 API v0.1 · 四 Agent 对话 + customer SSE
✓问数 S3 + D-06 模板/结果缓存 · 风控台账 + 模拟交易 + 前端四页
✓客服 14 节点 + 游客 9 节点 · R-02 网关阻断

未实现 / 演示停在某层(指挥 AI 前先查)

空壳 API

知识库空壳 API(knowledge.py)· 管理空壳 API(admin.py)空壳 API — T-21 拍板一期只做脚本入库,无上传/重建端点。

T-20 顾问工作台

A-03 话术草稿复核 · A-05 合规巡检台 · A-06 跟进草稿入库 — prompt 有约束,无前端/表流程。

前端仍简版

风控 P1 已接(筛选/适当性/AML)· 看板无钻取 · 分析 Chat 仍占位 · 平台适当性按钮部分未接。

运维 cron 无 UI

FR-9 超期升级 cron(escalation_scan.py)FR-9 cron · FR-10 行为扫描 cron(agent_behavior_scan.py)FR-10 cron — 引擎在,须手动跑脚本。

演示边界

转人工 = API 字段 + 橙色 Tag · debug 头仅 dev · 脱敏默认关 · 无真呼叫中心排队。

画像热缓存

L1 Redis 全量热缓存 · L2 Repository — 客服线部分已接,宿主/顾问未全接。

注意: REQUIREMENTS.md 部分 Wave 条目仍标「未做」,与代码不同步——以本表 + 各模块深潜课为准。

鉴权三线速查(跨课总表)

三条入口
对话 Chat    → get_auth_context + X-Agent-Type
问数/平台    → get_platform_auth_context(无 Agent 头)
风控 REST    → get_auth_context + X-Agent-Type: risk
白话

401 MISSING_AGENT_TYPE:Chat 忘了带头,不是 JWT 坏了。

问数页加 X-Agent-Type: analyst 是错方向——会走错鉴权栈。

持仓页用平台鉴权,不要 Agent 头——和 Chat 不是一套。

AI 说「补全 knowledge 上传 API 就能用 RAG」,你怎么回?

模块 8 · 答辩动线

5~8 分钟 Demo
+ 必背铁律

对照 docs/答辩/答辩稿.md 与 DEMO-SOP-答辩全流程.md:先讲清四角色不互调 LLM与合规铁律,再按动线展示业务,收口讲四角色价值(不口播缺陷与测试数)。 手册 docs/答辩/README.md · 幻灯片 · 答辩稿 · 功能测试(内部)。

30 秒总架构(开口即说)

分层

浏览器 → FastAPI → 编排 service → tool/repository → 双库 MySQL + Redis + Milvus

四条入口

Chat · 客服 14 节点 · 问数 + analyze · /api/advisor-agent 顾问 REST(2026-09-12 合入)

铁律

L0 画像不可覆盖 · 仅 R-02 可阻断交易 · 风控不自动冻户 · 审计只 INSERT

推荐演示顺序(动画)

🖥登录/Dashboard
💬客户线
🛡风控线
📊问数线

灌库:prepare_all.ps1 + seed_advisor_agent.ps1 · SOP + 幻灯片见 docs/答辩/

群聊:评委问「四个 Agent 为什么不互相打电话?」

诚实边界(主动说加分)

  • 客户交易 2026-09-13:选购清单 · Modal · holding 同步(工作区未 commit)
  • 顾问 REST 已合入 · T-20 / KYC D2 / D3 open
  • L0 是模拟 Core,不是真银行托管库
  • 问数与 Chat 已拆分 · D-09 多轮 · D-12 钻取 open
  • 看板无钻取 · 行情 Phase B 草案未接
  • 知识库 T-21 脚本入库,上传 API 一期不做

评委:「刷新 Dashboard 会先红一下再正常,是不是没做错误处理?」

全文提纲: 仓库内 docs/答辩/答辩知识点清单.md · 深潜按角色打开 课程中心。