292 lines
15 KiB
Markdown
292 lines
15 KiB
Markdown
# 业务域接入评估
|
||
|
||
> 版本:v1.0
|
||
> 评估日期:2026-09-09
|
||
> 评估对象:客服、风控、投顾、运营四个业务域接入公共 Agent 底座的可行性
|
||
> 评估依据:四份业务域工作流程文档 + 奶龙基金底座代码现状核对
|
||
> **评估结论:四个域 100% 阻塞在同样两个公共出口上(模型调用、工具调用)。补完这两个出口前,交付给组员做业务实现会大面积返工。**
|
||
|
||
---
|
||
|
||
## 1. 结论摘要
|
||
|
||
| 判定项 | 结论 |
|
||
|---|---|
|
||
| 底座公共能力(鉴权、运行闭环、SSE、会话、审计、配置) | ✅ 就绪,四域可直接依赖 |
|
||
| 模型生成 / 意图分类出口 | ❌ 缺失,**四域全部依赖** |
|
||
| 工具执行器 | ❌ 缺失,**四域全部依赖** |
|
||
| 适当性校验(C1-C5/R1-R5) | ❌ 缺失,投顾合规红线 |
|
||
| Milvus 知识检索 | ❌ 缺失,客服 RAG 阻塞 |
|
||
| 是否可交付组员做业务实现 | **暂不可**,建议先补 3 项 P0 公共能力 |
|
||
| 组员可并行开展的工作 | ✅ 业务 API、业务表、Agent 声明、契约测试 |
|
||
|
||
---
|
||
|
||
## 2. 评估依据
|
||
|
||
### 2.1 需求来源(四份业务域文档)
|
||
|
||
| 文档 | 规模 | 性质 | 详细度 |
|
||
|---|---|---|---|
|
||
| `智能客服Agent专项设计方案(2).html` | 191 KB / 42,166 字符 / 2,250 行 | 设计方案(含 Milvus 三集合路由代码、Go/No-Go 清单) | ★★★★★ |
|
||
| `投资顾问流程+(2).docx` | 16 KB / 1,688 字符 / 74 行 | 流程规范(四阶段 10 环节 + 适当性矩阵) | ★★★★ |
|
||
| `风控模块详细业务流程.md` | 5.5 KB / 175 行 | **当前系统现状描述**(8 个流程) | ★★★ |
|
||
| `基金运营流程.docx` | 13 KB / 905 字符 / 24 行 | 需求要点(2 个功能) | ★★ |
|
||
|
||
> docx 与 html 的纯文本已提取至 `_tmp_extract/`(临时产物,可删除)。
|
||
|
||
### 2.2 底座现状核对方法
|
||
|
||
- 逐文件核对 `app/` 下 82 个源文件的服务、仓储、契约层实现;
|
||
- 关键词检索:`ToolExecutor` / `tool_executor` / `milvus` / `suitab` / `classify`;
|
||
- 复用 `docs/06-底座代码测试报告.md` 附录 D 的独立验收结论。
|
||
|
||
---
|
||
|
||
## 3. 底座能力就绪度矩阵
|
||
|
||
| 能力 | 实现证据 | 状态 | 四域可用性 |
|
||
|---|---|---|---|
|
||
| 鉴权 / RBAC / 数据范围 | `identity_repository.py`、`agent/authorizer.py` | ✅ | 全部 |
|
||
| 运行受理 + 幂等 | `agent_run_application_service.py`、`request_idempotency` | ✅ | 全部 |
|
||
| Outbox + 独立 Worker | `worker/runtime.py`、`worker/__main__.py` | ✅ | 全部 |
|
||
| SSE(`start/tools/delta/replace/done`) | `api/views/agent_run_sse.py` | ✅ | 风控文档事件序列与底座**完全对齐** |
|
||
| 会话状态 + 澄清轮次 | `model/session.py`、`svc_conversation_session` | ✅ | 客服、风控 |
|
||
| 转人工工单 | `svc_handover_ticket`、`public_platform_service.py` | ✅ | 客服 |
|
||
| 审计留痕 | `interaction_audit`、`AgentPersistenceService` | ✅ | 投顾"可追溯可举证"可满足 |
|
||
| 禁止表达合规 | `agent_negative_word` + `agent/governance.py` | ✅ | 客服 7 个零容忍词、投顾红线 |
|
||
| 配置发布 + 模型路由 + Prompt 版本 | `admin_service.py`、`config_release` 等 5 张表 | ✅ | 全部 |
|
||
| 记忆召回(含跨客户越界校验) | `memory_service.py`、`base.py:77` | ✅ | 投顾客户认知 |
|
||
| **模型生成 / 意图分类** | 仅 `model_gateway.py` 的 Protocol + 调度,**无 adapter、无 BaseAgent 出口** | ❌ | **全部阻塞** |
|
||
| **工具执行器** | `app/service/` 下**无 `tool/` 目录** | ❌ | **全部阻塞** |
|
||
| **适当性校验** | 全项目检索无实现 | ❌ | 投顾阻塞 |
|
||
| Milvus 知识检索 | 仅 `config.py:28-30` 配置项 | ❌ | 客服阻塞 |
|
||
|
||
---
|
||
|
||
## 4. 四域需求映射
|
||
|
||
### 4.1 客服域
|
||
|
||
**需求要点**:5 类意图(`faq`/`product_inquiry`/`policy_explain`/`chitchat`/`transfer_human`)、3 个 Milvus 集合(FAQ/产品/政策)、转人工分级触发、负面词零容忍、七步骨架对齐。
|
||
|
||
| 需求 | 底座支撑 | 状态 |
|
||
|---|---|---|
|
||
| 5 类意图声明 | `AgentDefinition.supported_intents` | ✅ 可声明 |
|
||
| **意图分类** | 无分类器实现 | ❌ |
|
||
| **三集合 RAG 检索** | 无 Milvus 实现;`knowledge_service.py` 为空壳 | ❌ |
|
||
| **账户/持仓只读查询** | 无工具执行器 | ❌ |
|
||
| 转人工工单 | `svc_handover_ticket` + 接口 | ✅ |
|
||
| 负面词拦截 | 已审核规则真实生效 | ✅ |
|
||
| 会话状态机 | `svc_conversation_session` | ✅ |
|
||
| SSE 流式 | `delta` 分块 + `replace` 恢复 | ✅ |
|
||
| 低置信三档兜底 | 阈值逻辑待确认 | ⚠️ |
|
||
|
||
### 4.2 风控域
|
||
|
||
> 注意:该文档描述的是**当前系统现状**(文末"程序只能由用户通过 `python -m app.main` 手动启动"),非新需求。迁移到 FastAPI 底座时需重新对齐启动方式。
|
||
|
||
| 需求 | 底座支撑 | 状态 |
|
||
|---|---|---|
|
||
| 工作台(统计/队列/通知) | 业务接口,属 B 类扩展 | 待组员实现 |
|
||
| 规则扫描 | 业务逻辑,不属于 Agent | 待组员实现 |
|
||
| 预警处置(确认/误报/升级) | **Agent 不可执行**,人工操作 → B 类接口 | ✅ 边界清晰 |
|
||
| **Agent 只读工具**(预警/证据/概览/列表) | 无工具执行器 | ❌ |
|
||
| **日报"建议优化方向"** | 无模型出口 | ❌ |
|
||
| SSE 事件序列 | 与底座契约完全一致 | ✅ |
|
||
|
||
### 4.3 投顾域
|
||
|
||
**需求要点**:四阶段 10 环节、C1-C5/R1-R5 匹配矩阵(**文档标注"硬约束,不可绕过"**)、5 条合规红线、全流程留痕。
|
||
|
||
| 需求 | 底座支撑 | 状态 |
|
||
|---|---|---|
|
||
| **适当性校验** | 无实现 | ❌ **合规红线** |
|
||
| **产品筛选 / 组合构建** | 无工具执行器 | ❌ |
|
||
| **方案草案生成** | 无模型出口 | ❌ |
|
||
| 审核发布 | `client_facing_content` 表在 | ⚠️ 接口待确认 |
|
||
| 负面词(禁保本/稳赚) | ✅ | ✅ |
|
||
| 留痕(操作人/时间/输入/输出/审批) | `interaction_audit` | ✅ |
|
||
| 记忆召回(客户认知) | ✅ 含跨客户校验 | ✅ |
|
||
|
||
### 4.4 运营域
|
||
|
||
**需求要点**:场外申购赎回单确认核对(申购 4 项 + 赎回 2 项 + 通用 2 项校验)、新成立产品推介材料自动生成,均需"人在回路确认"。
|
||
|
||
| 需求 | 底座支撑 | 状态 |
|
||
|---|---|---|
|
||
| 邮件接入与附件识别 | 无邮件适配器 | ❌ |
|
||
| **关键字段提取** | 无模型出口 | ❌ |
|
||
| **与实际产品比对(NL2SQL)** | 无工具执行器 | ❌ |
|
||
| 人在回路确认 | B 类业务接口 | 待组员实现 |
|
||
| 异常上报风控 | 事件/接口 | ⚠️ 待对接 |
|
||
| **推介材料生成** | 无模型出口 | ❌ |
|
||
|
||
> 该文档仅 905 字符,无接口与字段定义,组员独立开工难度最大,建议补充需求说明。
|
||
|
||
---
|
||
|
||
## 5. 公共阻塞点
|
||
|
||
四个域的全部核心功能都落在同样两个出口上:
|
||
|
||
```text
|
||
业务 Agent(客服/风控/投顾/运营)
|
||
│
|
||
├── 需要「生成/分类」 ──✗── 模型出口缺失
|
||
│ (model_gateway 只有 Protocol,无 adapter;
|
||
│ BaseAgent 仅暴露 self.config / self.memories)
|
||
│
|
||
└── 需要「查数据/调业务」 ──✗── 工具执行器缺失
|
||
(app/service/ 下无 tool/ 目录,
|
||
allowed_tools 仅用于声明与交集校验)
|
||
```
|
||
|
||
**证据**:
|
||
- `model_gateway.py` 43 行,只有 `ModelGateway` Protocol、`ModelExecution` 数据类和 `ModelDispatchService` 调度逻辑;
|
||
- `base.py:26-27` 仅暴露 `self.config`、`self.memories`,无模型调用入口;
|
||
- `grep ToolExecutor` 仅命中 `allowed_tools` 的声明与校验(`contracts.py:59,71,74`、`admin_service.py:182,196`、`runtime_config_service.py:50`、`governance.py:48`),**无任何执行器类**。
|
||
|
||
---
|
||
|
||
## 6. 空壳接口与健康检查缺陷
|
||
|
||
本次核对新发现两处"路由存在但行为不正确"的实现,二者不影响接口覆盖率统计,但影响功能可用性判定。
|
||
|
||
### 6.1 `knowledge_service.py` 无条件返回 404
|
||
|
||
```python
|
||
class KnowledgeReferenceService:
|
||
async def resolve(self, context: RequestContext, token: str) -> dict[str, Any]:
|
||
await AuthorizationService.require(context, "knowledge:reference:read")
|
||
pieces = token.split(".")
|
||
...
|
||
raise ResourceNotFoundError("引用不存在") # 第 20 行:函数末尾无条件抛出
|
||
```
|
||
|
||
- 影响:K001 `GET /api/v1/knowledge-references/{reference_token}` 路由与 OpenAPI 均存在,但**永远不会返回数据**;
|
||
- 关联:客服域 RAG 引用链路的消费端为空。
|
||
|
||
### 6.2 健康检查硬编码
|
||
|
||
```python
|
||
checks["redis"] = True # health_service.py:18
|
||
checks["milvus"] = True # health_service.py:19
|
||
```
|
||
|
||
- 影响:`/internal/health/ready` 的 Redis / Milvus 检查为写死 `True`,非真实探测;**Milvus 或 Redis 故障时仍报 ready**,生产探针与熔断会失效;
|
||
- 建议:接入真实 ping,或在响应中显式标注为"未接入(optional projection)"而非 `True`。
|
||
|
||
### 6.3 使用文档描述了尚未实现的能力
|
||
|
||
`docs/09-底座使用文档.md` §9 写明模型调用链路:
|
||
|
||
```text
|
||
ConfigRelease → ModelRouterService → ModelGateway → 主端点/受控 fallback
|
||
```
|
||
|
||
§13「当前边界」亦称底座负责"模型路由"。但当前实现中:
|
||
|
||
- `app/service/model_gateway.py` 仅有 `ModelGateway` Protocol、`ModelExecution` 数据类与 `ModelDispatchService` 调度逻辑,**无任何供应商 adapter**;
|
||
- `BaseAgent` 未暴露模型调用入口(`base.py:26-27` 仅 `self.config`、`self.memories`);
|
||
- 该文档 §13 未标注"模型 adapter 与工具执行器尚未提供"。
|
||
|
||
**影响**:组员按该文档编写 `handle()` 时会认为可以调用模型,实际无处可调,容易诱发自行直连 HTTP 的绕行实现(违反 `01 §16.5`)。
|
||
|
||
**建议**:在该文档 §9、§13 增加显式缺口说明,或补齐实现后同步更新;两处内容必须与代码现状一致。
|
||
|
||
---
|
||
|
||
## 7. 补课顺序建议
|
||
|
||
| 优先级 | 补什么 | 解锁范围 | 预估 |
|
||
|---|---|---|---|
|
||
| **P0** | 模型网关 adapter(先接一个真实模型)+ `BaseAgent` 暴露调用入口 | 客服、投顾、运营、风控日报 **全部** | 1.5 天 |
|
||
| **P0** | 公共 `ToolExecutor` + 工具注册表 + 只读工具契约 | 客服查询、风控取证、投顾选基、运营 NL2SQL | 2 天 |
|
||
| **P0** | 适当性校验服务(C1-C5/R1-R5 矩阵) | 投顾合规红线(不可绕过) | 1 天 |
|
||
| P1 | 意图分类器(接模型路由) | 客服 5 类意图、风控意图分流 | 1 天 |
|
||
| P1 | Milvus 知识检索 + 修复 `knowledge_service` 空壳 | 客服 RAG | 2 天 |
|
||
| P2 | 健康检查真实探测 Redis / Milvus | 运维 | 0.5 天 |
|
||
|
||
**总计约 8 人日**,其中 P0 三项约 4.5 人日。
|
||
|
||
---
|
||
|
||
## 8. 组员可并行开展的工作
|
||
|
||
以下工作**不依赖**模型与工具出口,可立即启动:
|
||
|
||
| 工作项 | 说明 |
|
||
|---|---|
|
||
| 业务域 Controller / Service / Repository | B 类扩展,须遵守公共信封、幂等、分页、审计与 AST 分层约束 |
|
||
| 业务表设计与 Alembic 迁移 | 对照 `00-新数据库基线设计.md`,只增不改 |
|
||
| `AgentDefinition` 声明 | 角色、入口、意图集合、工具白名单(工具暂只声明不实现) |
|
||
| 业务 API 鉴权与契约测试 | 复用 `tests/unit/service/test_agent_authorization.py` 的参数化模式 |
|
||
| 前端联调 | 业务接口层(非 Agent 对话) |
|
||
| 需求补全 | 运营域文档过简,建议先补接口与字段定义 |
|
||
|
||
**不可开展**:`handle()` 中任何需要模型生成或工具调用的业务逻辑。
|
||
|
||
---
|
||
|
||
## 9. 风险提示
|
||
|
||
| # | 风险 | 说明 |
|
||
|---|---|---|
|
||
| 1 | 业务 Agent 绕开底座 | 若模型/工具出口长期缺失,组员可能自行在 `handle()` 内直连 HTTP 或数据库,违反 `01 §16.5` 与 `AGENTS.md` 第 7 条 |
|
||
| 2 | 接口覆盖率被误读 | 50/50 只代表路由存在,`knowledge_service` 空壳说明需按行为验收,而非按路由计数 |
|
||
| 3 | 风控文档与底座启动方式冲突 | 现状文档为旧系统描述,迁移时需重新对齐 |
|
||
| 4 | 运营域需求不足 | 905 字符无字段定义,直接派发会导致返工 |
|
||
|
||
---
|
||
|
||
## 10. 缺口闭环更新(v1.1)
|
||
|
||
> 本节记录 v1.0 所列缺口在后续两轮开发中的闭环情况。§1-§9 保留为历史证据,不再代表当前状态。
|
||
|
||
### 10.1 缺口状态对照
|
||
|
||
| 原缺口 | v1.0 | 当前 | 证据 |
|
||
|---|---|---|---|
|
||
| 模型生成出口 | ❌ 缺失 | ✅ 闭环 | `OpenAICompatibleGateway`、`DatabaseModelGateway`、`BaseAgent.generate_with_model` |
|
||
| 工具执行器 | ❌ 缺失 | ✅ 闭环 | `ToolExecutor` + `ToolRegistry`,`bootstrap` 注册 2 个内置工具 |
|
||
| 适当性校验 | ❌ 缺失 | ✅ 闭环 | `SuitabilityService`(C1-C5/R1-R5 + 有效期 + 双向留痕) |
|
||
| 意图分类器 | ❌ 缺失 | ✅ 闭环 | `base.py:104` 骨架调用 `classify_intent()` |
|
||
| 生产组装入口 | ❌ 空工厂 | ✅ 闭环 | `bootstrap.get_agent_factory()` 完整组装并注入 |
|
||
| 骨架契约测试 | ❌ 缺失 | ✅ 已补 | `tests/contract/test_agent_factory_contract.py` |
|
||
| 业务工具样板 | ❌ 无 | ✅ 已提供 | `fund_quote_service.py`(基金行情,209 行) |
|
||
| 健康检查 redis | ❌ 硬编码 | ✅ 已修 | 真实 ping |
|
||
| 健康检查 milvus | ❌ 硬编码 | ⚠️ 保留 | 有注释说明,建议改 `not_probed` |
|
||
| Milvus 知识检索 | ❌ 缺失 | ⚠️ 未闭环 | 客服 RAG 仍阻塞 |
|
||
| `knowledge_service` 空壳 | ⚠️ 无条件 404 | ⚠️ 未处理 | 同上一项 |
|
||
|
||
### 10.2 四域可开工判定(更新)
|
||
|
||
| 业务域 | v1.0 判定 | 当前判定 | 说明 |
|
||
|---|---|---|---|
|
||
| **客服** | ❌ 阻塞 | ⚠️ 部分可开工 | 意图分类、转人工、负面词、SSE 已就绪;**RAG 检索仍缺 Milvus 实现** |
|
||
| **风控** | ❌ 阻塞 | ✅ 可开工 | 只读工具机制就绪;日报模型建议可用 |
|
||
| **投顾** | ❌ 阻塞 | ✅ 可开工 | 适当性硬约束、方案生成、工具调用均已就绪 |
|
||
| **运营** | ❌ 阻塞 | ⚠️ 部分可开工 | 模型提取/生成可用;**邮件接入与 NL2SQL 需组员自建工具**;需求文档仍过简 |
|
||
|
||
### 10.3 剩余待办
|
||
|
||
| 优先级 | 事项 | 解锁范围 |
|
||
|---|---|---|
|
||
| P1 | Milvus 知识检索 + 修复 `knowledge_service` 空壳 | 客服 RAG |
|
||
| P2 | `milvus` 健康检查改为 `not_probed` 或真实探测 | 运维 |
|
||
| P2 | 运营域需求文档补充接口与字段定义 | 运营域开工 |
|
||
|
||
### 10.4 结论
|
||
|
||
底座的两个公共出口(模型、工具)已闭环,并有首个业务工具样板可照抄。**§5 的"四域 100% 阻塞"结论在 v1.1 后不再成立**:风控与投顾已具备完整开工条件,客服与运营除各自一项外部依赖(Milvus / 邮件与 NL2SQL)外均可开工。
|
||
|
||
---
|
||
|
||
## 11. 变更记录
|
||
|
||
| 版本 | 日期 | 变更 |
|
||
|---|---|---|
|
||
| v1.0 | 2026-09-09 | 首版:四域需求映射、公共阻塞点分析、空壳接口与健康检查缺陷、补课顺序建议 |
|
||
| v1.1 | 2026-09-09 | 新增 §10 缺口闭环更新:模型/工具/适当性/意图分类/组装/契约测试全部闭环,四域可开工判定更新,综合由"全阻塞"改为"风控投顾可开工" |
|