118 lines
6.7 KiB
HTML
118 lines
6.7 KiB
HTML
<section class="module" id="module-4">
|
||||
|
|
<div class="module-inner">
|
|||
|
|
<p class="eyebrow animate-in">模块 4 · 未做与误区</p>
|
|||
|
|
<h1 class="module-title animate-in">T-20 还没做<br>Neo4j 也不是对话 Tool</h1>
|
|||
|
|
<p class="module-lead animate-in">
|
|||
|
|
顾问线 chat 骨架已通,但<strong>草稿复核工作台、合规巡检、Neo4j 实时查询</strong>都还没进对话链路。
|
|||
|
|
课程中心卡片写 Neo4j,容易让 AI 去改不存在的 Cypher 节点——这模块专门纠偏。
|
|||
|
|
</p>
|
|||
|
|
|
|||
|
|
<div class="screen animate-in">
|
|||
|
|
<h2>T-20 未实现清单(2026-09 快照)</h2>
|
|||
|
|
<div class="pattern-cards">
|
|||
|
|
<div class="pattern-card">
|
|||
|
|
<h3>A-03 话术草稿</h3>
|
|||
|
|
<p>无 <code>advisor_draft</code> 表流程 · 无复核 UI · prompt 里「草稿不外发」≠ 有工作台。</p>
|
|||
|
|
</div>
|
|||
|
|
<div class="pattern-card">
|
|||
|
|
<h3>A-05 合规巡检</h3>
|
|||
|
|
<p>合规专员抽检全量顾问会话 — 无前端/API。</p>
|
|||
|
|
</div>
|
|||
|
|
<div class="pattern-card">
|
|||
|
|
<h3>A-06 跟进日志</h3>
|
|||
|
|
<p>确认后回写 L2 — 对话线未入库跟进草稿。</p>
|
|||
|
|
</div>
|
|||
|
|
<div class="pattern-card">
|
|||
|
|
<h3>已有</h3>
|
|||
|
|
<p>顾问通用 tool→llm→guard 编排(<code>agent_service.py</code>)tool→llm→guard · G-01 归属 · <code>search_knowledge</code>(kb_product_rules)。</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="callout callout-accent">
|
|||
|
|
<strong>prompt 禁外发 ≠ 系统禁外发:</strong> 代码里没有「发给客户」API,但也没有强制 <code>review_status</code> 门禁——上线前必须补 T-20。
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class="screen animate-in">
|
|||
|
|
<h2>Neo4j:同步脚本,不是 LangGraph 节点</h2>
|
|||
|
|
<div class="translation-block">
|
|||
|
|
<div class="translation-code">
|
|||
|
|
<span class="translation-label">实际存在 · Neo4j 关系图离线同步(sync_neo4j.py)/ 顾问归属离线同步(sync_advisor_rel.py)离线同步脚本</span>
|
|||
|
|
<pre><code><span class="code-line">python scripts/sync/sync_neo4j.py</span>
|
|||
|
|
<span class="code-line">python scripts/sync/sync_advisor_rel.py</span>
|
|||
|
|
<span class="code-line"><span class="code-comment"># Neo4j 关系图离线同步(sync_neo4j.py)/ 顾问归属离线同步(sync_advisor_rel.py)离线同步脚本</span></span></code></pre>
|
|||
|
|
</div>
|
|||
|
|
<div class="translation-english">
|
|||
|
|
<span class="translation-label">白话</span>
|
|||
|
|
<div class="translation-lines">
|
|||
|
|
<p class="tl">顾问对话<strong>不</strong>在运行时发 Cypher;名下客户靠 G-01 + Core 只读 Tool(<code>core_ro_tool.py</code>)。</p>
|
|||
|
|
<p class="tl">指挥 AI「加 Neo4j Tool 查客户关系」= 新需求,不是修现有 bug。</p>
|
|||
|
|
<p class="tl">Neo4j 数据来自 Neo4j 关系图离线同步(sync_neo4j.py)/ 顾问归属离线同步(sync_advisor_rel.py)batch sync,和 Chat 会话无实时联动。</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class="screen animate-in">
|
|||
|
|
<h2>群聊:顾问想「一键发给客户」</h2>
|
|||
|
|
<div class="chat-window" id="chat-advisor-m4">
|
|||
|
|
<div class="chat-messages">
|
|||
|
|
<div class="chat-message" data-msg="0" data-sender="adv" style="display:none">
|
|||
|
|
<div class="chat-avatar" style="background:#8B6B4A">顾</div>
|
|||
|
|
<div class="chat-bubble">
|
|||
|
|
<span class="chat-sender" style="color:#8B6B4A">理财师</span>
|
|||
|
|
<p>帮客户写一段持仓说明,我要发微信</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="chat-message" data-msg="1" data-sender="llm" style="display:none">
|
|||
|
|
<div class="chat-avatar" style="background:#6B5B4A">AI</div>
|
|||
|
|
<div class="chat-bubble">
|
|||
|
|
<span class="chat-sender" style="color:#6B5B4A">顾问通用 tool→llm→guard 编排(agent_service.py)</span>
|
|||
|
|
<p>生成草稿文本(引用 fact_text)· 系统<strong>无</strong>外发通道</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="chat-message" data-msg="2" data-sender="you" style="display:none">
|
|||
|
|
<div class="chat-avatar" style="background:#2A7B9B">你</div>
|
|||
|
|
<div class="chat-bubble">
|
|||
|
|
<span class="chat-sender" style="color:#2A7B9B">正确指挥</span>
|
|||
|
|
<p>先补 T-20 草稿表 + review_status,不要加 POST /send-to-customer</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="chat-typing" id="chat-advisor-m4-typing" style="display:none">
|
|||
|
|
<div class="chat-avatar" id="chat-advisor-m4-typing-avatar">…</div>
|
|||
|
|
<div class="chat-typing-dots"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div>
|
|||
|
|
</div>
|
|||
|
|
<div class="chat-controls">
|
|||
|
|
<button class="btn chat-next-btn">下一条</button>
|
|||
|
|
<button class="btn chat-all-btn">全部播放</button>
|
|||
|
|
<button class="btn chat-reset-btn">重播</button>
|
|||
|
|
<span class="chat-progress"></span>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class="quiz-container" id="quiz-advisor-m4">
|
|||
|
|
<div class="quiz-question-block"
|
|||
|
|
data-correct="option-c"
|
|||
|
|
data-explanation-right="对。Neo4j 是 Neo4j 关系图离线同步(sync_neo4j.py)/ 顾问归属离线同步(sync_advisor_rel.py)离线灌图;顾问 runtime 走 core_ro + G-01,不是 Cypher Tool。"
|
|||
|
|
data-explanation-wrong="Neo4j 不在 顾问通用 tool→llm→guard 编排(agent_service.py)LangGraph 里,别按课程卡片字面去加 Cypher 节点。">
|
|||
|
|
<h3 class="quiz-question">顾问 Chat 查「我名下有哪些客户」,代码走哪?</h3>
|
|||
|
|
<div class="quiz-options">
|
|||
|
|
<button class="quiz-option" data-value="option-a" onclick="selectOption(this)">
|
|||
|
|
<div class="quiz-option-radio"></div><span>Neo4j Cypher Tool</span>
|
|||
|
|
</button>
|
|||
|
|
<button class="quiz-option" data-value="option-b" onclick="selectOption(this)">
|
|||
|
|
<div class="quiz-option-radio"></div><span>POST /api/chat/visitor</span>
|
|||
|
|
</button>
|
|||
|
|
<button class="quiz-option" data-value="option-c" onclick="selectOption(this)">
|
|||
|
|
<div class="quiz-option-radio"></div><span>顾问通用编排(agent_service.py)+ Core 只读 Tool(core_ro_tool.py)+ G-01 归属</span>
|
|||
|
|
</button>
|
|||
|
|
</div>
|
|||
|
|
<div class="quiz-feedback"></div>
|
|||
|
|
</div>
|
|||
|
|
<button class="quiz-check-btn" onclick="checkQuiz('quiz-advisor-m4')">检查答案</button>
|
|||
|
|
<button class="quiz-reset-btn" onclick="resetQuiz('quiz-advisor-m4')">重做</button>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|