feat(threshold): Implement customer loss threshold configuration and notification system

- Added `ThresholdRepository` for managing customer loss threshold configurations and notifications.
- Introduced `threshold_service` to handle loss threshold alerts based on customer portfolio performance.
- Enhanced `customer_prompts` to include new intent for querying product net values.
- Updated `customer_service` to integrate new threshold alert functionality into existing workflows.
- Implemented `sanitize_postprocess` for improved compliance handling in customer interactions.
- Enhanced course documentation to reflect updates in advisor training modules and interactive elements.

This update significantly improves the customer experience by providing proactive loss threshold notifications and enhancing the overall service framework.
This commit is contained in:
2026-09-10 10:57:40 +08:00
parent 6f222f1c56
commit 4b8e11c9bd
102 changed files with 4054 additions and 445 deletions
@@ -3,8 +3,8 @@
<p class="eyebrow animate-in">模块 2 · 编排内核</p>
<h1 class="module-title animate-in">14 节点 LangGraph:<br>从回忆到归档</h1>
<p class="module-lead animate-in">
客户线不走 <code>agent_service</code> 那张三张牌(tool→llm→guard),而是
<code>customer_service.py</code> 里一张更大的
客户线不走顾问通用 tool→llm→guard 编排(<code>agent_service.py</code>),而是
登录客户 14 节点 LangGraph 编排(<code>customer_service.py</code>)里一张更大的
<span class="term" data-definition="LangGraph = 用「节点 + 边」画出的对话流程图;每个节点是一段 Python 函数,边决定下一步走哪条分支。">LangGraph</span>。
入口永远是 <code>recall_memory</code>,出口经 <code>save_memory</code> 写记忆后收尾。
</p>
@@ -16,7 +16,7 @@
<div class="badge-item"><span class="badge-code">2</span><span class="badge-desc">intent_classify · LLM 分意图</span></div>
<div class="badge-item"><span class="badge-code">3</span><span class="badge-desc">rag_search · fin_* Milvus</span></div>
<div class="badge-item"><span class="badge-code">4</span><span class="badge-desc">param_extract · 抽查询参数</span></div>
<div class="badge-item"><span class="badge-code">5</span><span class="badge-desc">tool_call · core_ro_tool</span></div>
<div class="badge-item"><span class="badge-code">5</span><span class="badge-desc">tool_call · Core 只读 Tool(core_ro_tool.py)</span></div>
<div class="badge-item"><span class="badge-code">6</span><span class="badge-desc">interpret · 解读 fact_text</span></div>
<div class="badge-item"><span class="badge-code">7</span><span class="badge-desc">generate · RAG 拼回复</span></div>
<div class="badge-item"><span class="badge-code">8</span><span class="badge-desc">chitchat · 闲聊</span></div>
@@ -29,6 +29,7 @@
</div>
<div class="callout callout-accent">
<strong>分支规则:</strong> <code>intent_classify</code> 之后走 RAG(产品/政策/FAQ)、走 Tool(持仓/流水/风评)、或走静态话术(拒绝/转人工/闲聊)。所有生成分支最后都汇入 <code>save_memory</code>。
<strong>口吻护栏与转人工决策</strong>见模块 4。
</div>
</div>
@@ -132,7 +133,7 @@
<div class="screen animate-in">
<div class="translation-block">
<div class="translation-code">
<span class="translation-label">图构建 · customer_service.py</span>
<span class="translation-label">图构建 · 登录客户 14 节点 LangGraph 编排(customer_service.py)</span>
<pre><code><span class="code-line">g.set_entry_point(<span class="code-string">"recall_memory"</span>)</span>
<span class="code-line">g.add_edge(<span class="code-string">"recall_memory"</span>, <span class="code-string">"intent_classify"</span>)</span>
<span class="code-line">g.add_conditional_edges(<span class="code-string">"intent_classify"</span>, _route, {...})</span>