Files
group_fqcd_jr/docs/10-业务域接入评估.md
T

292 lines
15 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.
# 业务域接入评估
> 版本:v1.0
> 评估日期:2026-09-09
> 评估对象:客服、风控、投顾、运营四个业务域接入公共 Agent 底座的可行性
> 评估依据:四份业务域工作流程文档 + `jr-agent-platform` 底座代码现状核对
> **评估结论:四个域 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 缺口闭环更新:模型/工具/适当性/意图分类/组装/契约测试全部闭环,四域可开工判定更新,综合由"全阻塞"改为"风控投顾可开工" |