Files
group_fqcd_jr/docs/22-四大Agent流程实现拆解.md
T
lzf_0626 a876e9ead7 docs: 新增四大 Agent 流程实现拆解(客服/投顾/风控/场外运营)
对四份需求文档(智能客服方案 v1.3、基金运营流程、风控模块详细业务流程、投资顾问流程)
与现有底座逐项比对后的实现拆解,用于开工前明确边界、工作量与决策点。

核心结论:可实现。底座 52 张表与流程设计高度吻合——风控的
ack_status/is_escalated/close_reason/trigger_rule_codes、客服的 svc_handover_ticket.confidence、
投顾的 client_facing_content.review_status、biz_work_order 的双录与风险揭示字段均已在位;
客服方案的七步骨架与 BaseAgent 骨架完全一致;适当性 C1-C5/R1-R5 已实现且不接受调用方传值;
风控文档定义的 SSE 事件(start/tools/delta/replace/done)与底座现有实现完全一致。

文档内容:
1. 覆盖度总览 + 四模块逐项拆解(已就绪 / 需新写 / 必须业务补充)。
2. 指出两处真实缺口:邮件 SMTP 在 app/ 中零实现;规则引擎只有 trigger_rule_codes 字段
   而无引擎本体(风控明确要求"规则引擎产生预警、Agent 不产生",属确定性逻辑,不能用模型代替)。
3. 指出场外运营是唯一需要新建表的模块(底座 15 张 fin_* 全为场内模拟交易,
   AGENTS.md 要求场外流程独立,不得写入场内交易表)。
4. 列出 6 个必须先决策的事项:接口形态(底座异步 + SSE vs 方案的同步 chat/customer)、
   模型与 embedding 维度(直接决定 Milvus 集合 schema)、RAG 混合判定公式(方案未给)、
   规则引擎的承载方式、场外运营排期、合规校验前置还是后置。
5. 建议开工顺序:客服 → 投顾 → 风控(规则引擎宜单独立项)→ 场外运营(缺真实单据样本)。

说明:本提交只含拆解文档,不含需求原文。需求原文的纯文本提取物位于 _flows/(未跟踪),
是否入库待定;临时提取脚本已删除。
2026-09-10 18:35:52 +08:00

170 lines
13 KiB
Markdown
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.
# 四大 Agent 流程实现拆解(基于现有底座)
> 输入:`智能客服Agent专项设计方案`(v1.3, 1664 行)、`基金运营流程`、`风控模块详细业务流程`、`投资顾问流程`。
> 目的:在动手前说清「哪些能直接用底座、哪些要新写、哪些必须你们先定」。
## 0. 一句话结论
**能实现。** 决定性原因是:**底座的 52 张表与这几份流程的设计高度吻合**,
绝大部分工作是「填 Service / Agent 逻辑」,而不是「重建表结构」——后者才是真正贵的部分。
举几个直接对上的例子(均为实际字段名):
| 流程要求 | 底座已有的字段 |
| --- | --- |
| 风控「确认接收 / 关闭误报 / 升级处理」 | `fin_risk_alert.ack_status / handler_id / is_escalated / escalation_reason / close_reason / trigger_rule_codes` |
| 风控「站内通知 + 邮件,发送失败不影响预警」 | `fin_risk_notification.channel / send_status / fail_reason / receiver_email` |
| 客服「转人工携带意图与置信度」 | `svc_handover_ticket.intent / confidence / reason_code / conversation_summary / source_references` |
| 投顾「输出为草稿,须投顾审核签发」 | `client_facing_content.draft_content / review_status / reviewer_user_id / published_at` |
| 投顾「双录 / 风险揭示 / 二次确认」 | `biz_work_order.recording_reference / risk_disclosure_ack_at / second_confirmation_at / risk_rule_hits` |
| 投顾「C1-C5 ↔ R1-R5 最严口径」 | **已实现**:`app/service/suitability_service.py`(255 行,风险等级只取最新测评、不接受调用方传值) |
| 客服「7 个负面词零容忍」 | `agent_negative_word` 表 + 底座合规检查步骤 |
| 客服「回复模板 / 免责声明话术」 | `agent_reply_template` 表 |
| 客服「同义问法」 | `agent_faq_synonym` 表 |
| 客服「意图阈值 0.6」 | `agent_intent_config.confidence_threshold`(已生效) |
另外,客服方案的**七步骨架(①输入鉴权②记忆召回③意图路由④核心逻辑⑤结果生成⑥数据沉淀⑦事件广播)与底座的
`BaseAgent` 骨架完全一致**——这份方案就是按底座设计的,`__init_subclass__` 已强制⑥⑦不可被子类绕过。
## 1. 覆盖度总览
| 模块 | 所需表 | Service 现状 | 主要缺口 | 相对工作量 |
| --- | --- | --- | --- | --- |
| **智能客服** | 全部就绪 | 覆盖最好(意图/知识/转人工/负面词/模板/会话) | 三集合知识检索、客服 Agent 本体、脱敏工具、状态机 | 中 |
| **投资顾问** | 全部就绪 | 适当性已实现;组合/报告无 | 策略配置、组合构建、报告生成、审核签发流 | 中 |
| **风控监测** | 全部就绪 | **几乎为零**(`risk_alert` 仅 4 处命中,多为 ORM) | **规则引擎**、扫描服务、预警处置 API、日报、邮件 | 大 |
| **基金运营(场外)** | **无场外表** | 无 | 需新建独立表 + 单据解析 + 核对规则 | 大(且缺样本) |
## 2. 智能客服 Agent
### 2.1 底座直接可用的
七步骨架、鉴权与画像、RBAC、审计、幂等、限流、事件(Outbox 现成)、配置发布、
意图配置与阈值、负面词、回复模板、同义问法、转人工工单、会话与消息、SSE 流式、
记忆读写、知识元数据表。
> 值得注意:风控文档定义的 SSE 事件 `start / tools / delta / replace / done`
> **与底座现有实现完全一致**;而客服方案通篇只写「SSE 流式」、未定义事件类型——
> 这一项以底座现成为准即可,不需要新设计。
### 2.2 需要新写的
1. **三集合知识检索**:`fin_faq_collection`(TopK 3) / `fin_product_collection`(TopK 5) /
`fin_policy_collection`(TopK 5)。底座的 Milvus 适配器目前服务于**记忆向量**,
知识检索的集合 schema、三级路由、按 `score` 排序、md5 去重、`expire_date` 过滤都要新写。
维度 1024 / `COSINE` / `IVF_FLAT`(nlist=128, nprobe=16) 已在方案里给定。
2. **客服 Agent 本体**:5 类意图分支(product_inquiry / policy_explain / faq / chitchat / transfer_human),
`faq` 走「检索直返不经 LLM」,其余走 RAG + 生成 + 来源引用。
3. **强制免责声明注入**:方案要求「基类强制注入、子类不得绕过」——需挂到底座的结果生成阶段。
4. **脱敏工具 `mask_tool`**:身份证/卡号/手机号不回显,仅掩码。
5. **会话状态机 5 态**:`idle / processing / clarifying / answering / transferring`。
6. **三档兜底判定**:高/中/低置信分别对应直接回答 / 加不完整提示 / 兜底话术+转人工。
7. **澄清机制**:≤2 轮、每轮追问 1 个槽位;**闲聊边界**:≤3 轮后强制引导业务。
8. **suggestions 生成**:接口已有该字段但无生成逻辑。
### 2.3 方案自己写了「未明确」、必须你们补的
| 项 | 说明 |
| --- | --- |
| 「RAG 混合判定」公式与阈值 | 方案写「绝对阈值 AND(相对间隙 OR 分布优势)」,**公式、数值、三档分数区间全文未给** |
| 熔断次数 N | 「连续失败 N 次熔断」,N 未给 |
| QPS 限流阈值 | 只写「令牌桶/滑动窗口」,数值未给 |
| 业务侧表名 | 方案只写「MySQL LIKE 检索」「画像直连 MySQL」,**未给任何表名** |
| 跨 Agent 联动规则 | 客服识别「高净值/大额意愿/敏感话题」后的联动规则未定义 |
| 合规校验是否前置 | §0.4 评审点自己提出「是否应前置到答案生成之前」,**未定论** |
### 2.4 ⚠️ 与底座接口形态的冲突(必须决策)
方案设计的是 **`POST /api/chat/customer`,同步返回 `reply`**;
底座 `docs/05` 规定的是 **`POST /api/v1/agent-runs` → 202 + `run_id` → SSE 订阅结果**。
两者不是简单改名,是**调用模型不同**:底座是「受理即返回、Worker 异步执行」,方案是「同步等答案」。
- 采用底座形态:前端要改成「提交后订阅 SSE」,但天然获得审计、重试、限流、可观测、多 Worker 扩展。
- 采用方案同步形态:与底座现有 `docs/05` 冲突,且长耗时请求会占满连接。
**建议采用底座形态**,把「同步返回」作为 SSE 的首包体验(首 token <800ms 目标可达成),
但这需要你确认,因为会影响前端联调方式。
## 3. 投资顾问 Agent
| 流程步骤 | 现状 |
| --- | --- |
| 1 客户认知 / 问卷采集 | 表就绪(`fin_customer_profile`、`fin_risk_assessment`),问卷入口需新写 |
| 2 风险测评与适当性匹配 | **已实现**(`suitability_service`,C1-C5 × R1-R5 硬约束) |
| 3 投资目标与期限 | 需新写(目标书、回撤约束、期限分档) |
| 4 匹配投顾策略 | 需新写(保守/稳健/平衡/进取/激进 + 大类资产配置比例) |
| 5 筛选基金构建组合 | 需新写(核心+卫星、集中度检查、重复持仓检查、推荐理由) |
| 6 签署协议与授权范围 | 表就绪(`biz_work_order` 的授权/双录字段),流程需新写 |
| 7 申购赎回 | **底座是场内模拟交易**(`fin_sim_order`);投顾流程的申赎若指场外,需与运营模块统一 |
| 8 持续监控 | 表就绪(`fin_holding`、`fin_nav_history`),监控看板需新写 |
| 9 调仓再平衡 | 需新写(偏离阈值、调仓建议、**重新适当性校验**) |
| 10 报告与陪伴 | 表就绪(`client_facing_content`),报告生成+审核签发需新写 |
**合规要点都已映射到表**:草稿态 + 投顾审核(`review_status`)、免责声明、脱敏、
留痕(操作人/时间/输入/输出/判断依据/审批意见)。
## 4. 风控监测 Agent —— 表最全,但代码最少
底座有 `fin_risk_alert`(29 列) / `fin_risk_notification`(14 列) / `biz_work_order`(30 列) /
`fin_capital_flow` / `fin_transaction` / `fin_holding` / `sys_login_record` / `interaction_audit`,
**风控文档 §2 要求的七类数据源全部覆盖**。
但代码侧几乎为零,必须新写:
1. **规则引擎**(核心,且是**确定性逻辑**)。风控文档明确写「**规则引擎负责判断是否生成预警,
Agent 不负责生成预警**」——这条与底座设计一致(Agent 只读),但引擎本身要新做:
规则定义与存储、规则执行、命中写入 `fin_risk_alert.trigger_rule_codes`、优先级计算。
**底座目前没有规则表**,只有 `trigger_rule_codes` 这个字段。
2. **扫描服务**(读七类数据 → 执行规则 → 未命中/命中分支 → 高风险生成通知)。
3. **预警处置 API**:确认接收 / 关闭误报(理由 1-500 字)/ 升级(文档注明「后端已有接口,前端弹窗未接入」)。
4. **日报生成**:前八项**确定性统计**,只有第 9 项「建议优化方向」用模型(超时/空/异常时用规则化建议)。
5. **邮件 SMTP**:`grep MAIL|SMTP` 在 `app/` 中**零匹配**,完全没实现;要求「发送失败只记日志,不影响预警和站内通知」。
6. **风控 Agent 对话**:只读工具(预警/证据/风险概览/预警列表),流式 + 模板降级。
## 5. 基金运营(场外)—— 唯一需要新建表的模块
底座 15 张 `fin_*` 全是**场内模拟交易**;运营流程是**场外申购赎回**,
而 `AGENTS.md` 明确「场外基金运营流程独立,不得写入场内交易表」
→ 因此**必须新建场外一组表**,不能复用场内表。
流程本身可拆成三段:
1. **单据采集与解析**:从运营邮箱取中国结算邮件 → 解析申购/赎回单扫描件 → 关键字段提取 + 格式校验。
涉及邮件收取(另一处 SMTP/IMAP 缺口)与文档解析(底座无此能力)。
2. **核对规则**(文档已给全字段):申购后单一持有比例上限、单日申购金额上限、金额格式(两位小数/万元)、
日期格式、巨额赎回、赎回金额 vs 可用金额、最低申购金额、是否在开放期、反洗钱嫌疑。
其中 `fin_product.single_investor_max_holding_ratio / min_amount / open_period_start/end` 已就绪,**但场外产品需要独立表**。
3. **人在回路**:NL2SQL 确认 → 汇总统计 → 是否上报风控 → 是否给资金清算岗 → 回单给中国结算。
⚠️ **文档自己写了「待工作:不同的申购赎回单子,以作实际操作案例」** —— 也就是说**缺样本数据**。
没有真实单据样本,解析规则只能靠猜,建议先把这段挂起或只做「字段定义 + 表结构 + 人工录入」版本。
## 6. 你必须先决策的 6 件事
| # | 决策点 | 影响 |
| --- | --- | --- |
| 1 | **接口形态**:底座异步 `agent-runs` + SSE,还是方案里的同步 `chat/customer` | 决定前端联调方式;建议用底座的 |
| 2 | **模型选型**:方案写 `qwen-turbo`(意图) + Qwen Embedding(1024 维);底座现配 `deepseek-flash` | **embedding 维度直接决定 Milvus 集合 schema**,定错了要重建知识库 |
| 3 | **RAG 混合判定公式与三档分数区间** | 方案未给,是客服模块的核心算法 |
| 4 | **规则引擎的规则从哪来**:代码常量、数据库表,还是管理界面配置 | 决定风控模块的架构,也决定业务人员能否自己加规则 |
| 5 | **场外运营是否排在首批** | 它缺样本数据,且要新建一组表 |
| 6 | **合规校验前置还是后置**(方案 §0.4 自己提的待评审点) | 影响链路结构与首响时延 |
## 7. 建议开工顺序
| 顺序 | 模块 | 理由 |
| --- | --- | --- |
| 1 | **智能客服 Agent** | 底座覆盖度最高(表全 + 机制全),最容易做出可演示闭环;缺的只是三集合检索与 Agent 本体 |
| 2 | **投资顾问 Agent** | 硬约束(适当性)已实现,`client_facing_content` 现成,主要补生成与审核流 |
| 3 | **风控 Agent** | 表最全但代码最少,且**规则引擎是全新架构**(确定性逻辑,不能用模型代替),建议单独立项 |
| 4 | **场外运营** | 唯一要新建表 + 缺样本,建议等有真实单据样本再动 |
**每个模块我都建议按同一个节奏交付**:先做只读最小闭环(端到端脚本 + 审计可见)→ 你们验业务逻辑 →
再扩分支与边界;涉及写数据的(风控处置、调仓、场外核对)先给事务/并发/幂等方案再动手。
## 8. 这份拆解的边界
- 四个模块的**表结构就绪度**是我逐表查库确认的(不是读文档推断)。
- 每份需求文档里的**具体业务规则**(阈值、公式、话术)我只做了提取与对照,**正确性未经业务确认**。
- 「工作量」是相对量级(中/大),不是人日估算——那需要先定第 6 节的 6 件事。