# 双 Agent 总体架构

## 1. 背景

X-Financial 后续需要同时支持两类智能化能力：

1. 用户主动发起的交互式流程操作。
2. 系统后台自动运行的定时巡检、统计、预警和知识维护。

如果用一个万能 Agent 同时处理这两类任务，风险会很高：

- 用户流程操作需要权限、确认、上下文追问。
- 定时巡检需要稳定批处理、失败重试、审计记录。
- 财务系统不能让大模型直接决定审批、付款、规则上线。

因此建议建设双 Agent 架构：

```text
Hermes Agent
  后台数字员工
  面向系统内循环
  定时、批量、巡检、统计、预警、知识候选

User Agent
  自建用户流程助手
  面向用户交互
  查询、解释、创建草稿、流程操作、审批辅助
```

两套 Agent 共享一套语义本体协议，由 Agent Orchestrator 统一调度。

## 2. 总体架构图

```text
                         ┌──────────────────────┐
                         │ 用户自然语言 / 定时任务 │
                         └───────────┬──────────┘
                                     │
                                     ▼
                         ┌──────────────────────┐
                         │ Semantic Ontology     │
                         │ 语义本体解析层          │
                         └───────────┬──────────┘
                                     │
                                     ▼
                         ┌──────────────────────┐
                         │ Agent Orchestrator    │
                         │ 路由 / 权限 / 审计 / 调度 │
                         └───────┬─────────┬────┘
                                 │         │
                   ┌─────────────▼─┐     ┌─▼──────────────┐
                   │ Hermes Agent  │     │ User Agent     │
                   │ 后台数字员工    │     │ 用户流程助手     │
                   └───────┬───────┘     └───────┬────────┘
                           │                     │
                           └──────────┬──────────┘
                                      │
             ┌────────────┬───────────┼───────────┬────────────┐
             ▼            ▼           ▼           ▼            ▼
        规则中心       MCP 服务      业务数据库     知识库       任务系统
```

## 3. 核心分层

### 3.1 语义本体层

负责把自然语言或任务配置转成结构化 JSON。

输出不是最终答案，而是统一协议：

```json
{
  "domain": "reimbursement",
  "scenario": "invoice_validation",
  "intent": "explain_risk",
  "entities": [],
  "time_range": {},
  "constraints": {},
  "risk_signals": [],
  "next_step": "run_rule"
}
```

### 3.2 编排层

Agent Orchestrator 负责：

- 判断应该由 Hermes 还是 User Agent 处理。
- 判断是否需要查数据库、跑规则、调 MCP、检索知识库。
- 检查用户权限。
- 记录审计日志。
- 控制失败重试。
- 对高风险动作要求用户或管理员确认。

### 3.3 Agent 层

Hermes 和 User Agent 不直接决定财务关键状态。

它们负责：

- 理解任务。
- 组织工具调用。
- 汇总工具结果。
- 生成建议、解释、报告、草稿。

### 3.4 能力层

能力层包括：

- 规则中心：管理 `.md` 规则文件、审核、版本。
- MCP：封装外部服务，如发票验真、银行流水、OCR、差旅平台。
- 数据库查询：查询报销、报账、应收、应付、账款数据。
- 知识库：制度文档、FAQ、历史解释、规则说明。
- 任务系统：定时任务、批量任务、重试、运行日志。

## 4. 关键边界

Hermes 可以：

- 定时读取数据。
- 执行规则检查。
- 调 MCP 查询外部状态。
- 生成风险报告。
- 生成知识候选。
- 生成待处理工单。

Hermes 不可以：

- 自动提交报销。
- 自动发起付款。
- 自动审批通过。
- 自动发布知识库正式内容。
- 自动上线规则。

User Agent 可以：

- 帮用户查询状态。
- 帮用户解释风险。
- 帮用户创建报销或付款草稿。
- 帮审批人生成审批意见。
- 在用户确认后调用流程 API。

User Agent 不可以：

- 绕过权限。
- 未确认直接提交关键动作。
- 自动最终审批。
- 自动付款。
- 修改规则审核状态。

## 5. 推荐建设顺序

```text
Step 1: 建立语义本体 JSON 协议
Step 2: 建立规则中心的规则/技能/MCP/任务目录
Step 3: 建立 Orchestrator 路由和审计
Step 4: 建立 User Agent 的只读查询和解释能力
Step 5: 建立 Hermes 的定时任务和报告能力
Step 6: 接入 MCP 和业务数据库
Step 7: 增加用户确认后的流程写入能力
Step 8: 增加知识候选和规则优化闭环
```

