Files
group_xinghuo_jinrong/docs/course/jinrong-overview/modules/08-defense.html
T
zhanghongyu_0626 793c0307f8 feat(risk): Enhance risk management functionality and access control
- Updated `RiskListAccess` and `ThresholdWriteAccess` to enforce access control in the risk repository and threshold repository, ensuring only authorized roles can perform sensitive operations.
- Introduced new methods in `RiskRepository` for counting pending alerts and listing alerts with access checks, improving data security and compliance.
- Enhanced the `chat.py` and `deps.py` files to integrate compliance roles into the risk management matrix, allowing for more granular access control.
- Updated documentation to reflect the new testing baseline of 825 passed tests, indicating improved stability and functionality across the application.

This update significantly strengthens the risk management capabilities, ensuring robust access control and compliance with organizational policies.
2026-09-11 17:07:22 +08:00

127 lines
7.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<section class="module" id="module-8">
<div class="module-inner">
<p class="eyebrow animate-in">模块 8 · 答辩动线</p>
<h1 class="module-title animate-in">5~8 分钟 Demo<br>+ 必背铁律</h1>
<p class="module-lead animate-in">
对照 <code>docs/答辩/答辩知识点清单.md</code> 的滚动版:先讲清<strong>四角色不互调 LLM</strong>,再按动线演示,最后主动说边界。
基线 <strong>825 pytest</strong> · <strong>19 Vitest</strong> · 分支 <code>merger</code>。
</p>
<div class="screen animate-in">
<h2>30 秒总架构(开口即说)</h2>
<div class="pattern-cards">
<div class="pattern-card">
<h3>分层</h3>
<p>浏览器 → FastAPI → 编排 service → tool/repository → 双库 MySQL + Redis + Milvus</p>
</div>
<div class="pattern-card">
<h3>三条入口</h3>
<p>Chat + X-Agent-Type · 客服 customer 14 节点 · 问数 <code>/api/analyst/chat</code>(无 Agent 头)</p>
</div>
<div class="pattern-card">
<h3>铁律</h3>
<p>L0 画像不可覆盖 · 仅 R-02 可阻断交易 · 风控不自动冻户 · 审计只 INSERT</p>
</div>
</div>
</div>
<div class="screen animate-in">
<h2>推荐演示顺序(动画)</h2>
<div class="flow-animation" data-steps='[
{"highlight":"flow-actor-1","label":"① 登录 → Dashboard(平台只读 API 从 Core 来)"},
{"highlight":"flow-actor-2","label":"② 客户:持仓 / Chat SSE 或阈值提醒(Core + 1B sanitize)","packet":true,"from":"1","to":"2"},
{"highlight":"flow-actor-3","label":"③ 风控:模拟交易 → 台账 pending → 人工处置(事件线闭环)","packet":true,"from":"2","to":"3"},
{"highlight":"flow-actor-4","label":"④ 问数:「客户总数」→ 看模板命中标签 + SQL 折叠(D-06 + 护栏)","packet":true,"from":"3","to":"4"},
{"highlight":"flow-actor-1","label":"⑤ 可选:风控 Chat 只读查预警(强调不能改状态)","packet":true,"from":"4","to":"1"}
]'>
<div class="flow-actors">
<div class="flow-actor" id="flow-actor-1"><span class="flow-actor-icon">🖥</span><span>登录/Dashboard</span></div>
<div class="flow-actor" id="flow-actor-2"><span class="flow-actor-icon">💬</span><span>客户线</span></div>
<div class="flow-actor" id="flow-actor-3"><span class="flow-actor-icon">🛡</span><span>风控线</span></div>
<div class="flow-actor" id="flow-actor-4"><span class="flow-actor-icon">📊</span><span>问数线</span></div>
</div>
<p class="flow-step-label">灌库:<code>scripts/demo/prepare_all.ps1</code>(含 Core reset + 问数模板种子)</p>
<div class="flow-controls">
<button class="btn flow-next-btn">下一步</button>
<button class="btn flow-reset-btn">重来</button>
</div>
</div>
</div>
<div class="screen animate-in">
<h2>群聊:评委问「四个 Agent 为什么不互相打电话?」</h2>
<div class="chat-window" id="chat-defense-m8">
<div class="chat-messages">
<div class="chat-message" data-msg="0" data-sender="j" style="display:none">
<div class="chat-avatar" style="background:#2A7B9B">评委</div>
<div class="chat-bubble">
<span class="chat-sender" style="color:#2A7B9B">评委</span>
<p>风控 Agent 能不能直接让客服 Agent 去安抚客户?</p>
</div>
</div>
<div class="chat-message" data-msg="1" data-sender="you" style="display:none">
<div class="chat-avatar" style="background:#5A9DB8">你</div>
<div class="chat-bubble">
<span class="chat-sender" style="color:#5A9DB8">答辩口径</span>
<p>不互调 LLM。跨线靠<strong>表</strong>(如 <code>risk_alert</code>)和平台只读 API;审计按 Agent 边界留痕,避免一条链路里混处置权限。</p>
</div>
</div>
<div class="chat-message" data-msg="2" data-sender="j" style="display:none">
<div class="chat-avatar" style="background:#2A7B9B">评委</div>
<div class="chat-bubble">
<span class="chat-sender" style="color:#2A7B9B">评委</span>
<p>那数据怎么同步?</p>
</div>
</div>
<div class="chat-message" data-msg="3" data-sender="you" style="display:none">
<div class="chat-avatar" style="background:#5A9DB8">你</div>
<div class="chat-bubble">
<span class="chat-sender" style="color:#5A9DB8">答辩口径</span>
<p>交易写 Core → 风控引擎出单进 agent 库;客服查持仓走 Core RO Tool,不读风控写侧。问数只统计,<strong>不能</strong>调处置 API。</p>
</div>
</div>
</div>
<button class="btn chat-play-btn" data-chat="chat-defense-m8">播放对话</button>
</div>
</div>
<div class="screen animate-in">
<h2>诚实边界(主动说加分)</h2>
<ul>
<li>L0 是模拟 Core,不是真银行托管库</li>
<li>分析对话页占位,真 NL2SQL 在问数工作台(D-09 多轮未做)</li>
<li>看板无钻取 · 行情 Phase B 草案未接</li>
<li>知识库 T-21 脚本入库,上传 API 一期不做</li>
</ul>
<div class="quiz-container" id="quiz-defense-m8">
<div class="quiz-question-block"
data-correct="option-b"
data-explanation-right="对。StrictMode 开发态双 mount 会让两个并发请求竞态,旧响应覆盖新响应会「先闪错再正常」——已用 useAsyncSequence 按序号丢弃过期结果。"
data-explanation-wrong="这不是后端 500,多半是前端并发竞态;答辩可指向 web 课模块 4 与清单 §九。">
<h3 class="quiz-question">评委:「刷新 Dashboard 会先红一下再正常,是不是没做错误处理?」</h3>
<div class="quiz-options">
<button class="quiz-option" data-value="option-a" onclick="selectOption(this)">
<div class="quiz-option-radio"></div><span>是,axios 没 catch</span>
</button>
<button class="quiz-option" data-value="option-b" onclick="selectOption(this)">
<div class="quiz-option-radio"></div><span>否,React StrictMode 双请求竞态,已用 useAsyncSequence</span>
</button>
<button class="quiz-option" data-value="option-c" onclick="selectOption(this)">
<div class="quiz-option-radio"></div><span>是,JWT 过期</span>
</button>
</div>
<div class="quiz-feedback"></div>
</div>
<button class="quiz-check-btn" onclick="checkQuiz('quiz-defense-m8')">检查答案</button>
<button class="quiz-reset-btn" onclick="resetQuiz('quiz-defense-m8')">重做</button>
</div>
<div class="callout">
<strong>全文提纲:</strong> 仓库内 <code>docs/答辩/答辩知识点清单.md</code> · 深潜按角色打开 <a href="../index.html" style="color:var(--accent)">课程中心</a>。
</div>
<p class="module-footer-note">模块 8 · 2026-09-10 · 与答辩清单同步</p>
</div>
</div>
</section>