# X-Financial 智能化财务系统：双层 Agent 架构设计与开发落地全景指南

> **核心设计理念：确定性与概率性的完美解耦**
> 
> 在企业级财务系统中，“合规性”与“准确性”是不可妥协的底线。大语言模型（LLM）天生具有概率性（会产生幻觉），因此不能直接赋予其修改核心财务数据或放行审批的最高权限。
> 
> 本架构设计的核心，在于构建一个**“双层防线”**：
> 1.  **外层 Agent (自研流程大脑)**：提供 100% 的确定性。它是系统的执行者，严格按照预设流程和固化的规则行事，不具备“自我意识”，只负责“路由”、“拦截”和“记录”。
> 2.  **内层 Agent (Hermes 智囊核心)**：提供强大的概率性推理能力。它是系统的思考者，负责处理所有复杂、模糊、非结构化的任务（如阅读长文档、识别潜在风险），但它的输出**不能直接作用于业务**，而是转化为**规则配置**或**建议意见**，交由外层 Agent 或人类管理员执行。
> 
> 这两层架构不是相互独立的两个系统，而是形成一个**“闭环”**：内层提炼规则，外层执行规则；外层收集数据，内层分析数据。这种深度协同，既保障了系统的安全性，又赋予了系统极高的智能化水平。

---

## 一、 系统架构图景与职责边界深度剖析

### 1. 外层 Agent (Outer Agent)：流程与路由的绝对掌控者

**本质：一个高度可配置的业务工作流引擎与意图分发器。**

*   **开发技术栈建议**：FastAPI (后端) + Vue3 (前端) + PostgreSQL (持久化) + Redis (可选，用于状态缓存)。
*   **交互形态**：它直接面对用户。它可以是一个类似对话框的界面，但背后的逻辑是基于**状态机 (State Machine)** 驱动的。
*   **核心模块与职责 (What to do & How to do)**：

    *   **模块 1: 意图漏斗 (Intent Router)**
        *   **职责**：精准捕捉用户请求的第一诉求，并将其导向正确的处理管线。
        *   **方法**：
            *   *规则匹配优先*：使用简单的关键词或正则（例如：匹配到“报销”、“打车”字眼，直接激活报销向导）。
            *   *轻量级分类模型兜底*：对于模糊表述（如：“我上周去上海开会的钱怎么还没发？”），调用一个小参数的分类模型（或内层的快捷接口），将其分类为“状态查询”意图，并提取关键实体（如时间：上周，地点：上海）。
    *   **模块 2: 结构化状态机引擎 (State & Flow Controller)**
        *   **职责**：管理每一个业务对象（如一张报销单）的生命周期。从“草稿” -> “提交” -> “一级审批” -> “财务复核” -> “已打款”。
        *   **方法**：拒绝让大模型控制流程走向。流程流转必须基于代码逻辑中的条件判断（例如：如果金额 < 500，且员工级别为 M1，则跳过一级审批，直接进入财务复核）。外层 Agent 负责维护并推进这个状态。
    *   **模块 3: 确定性规则执行器 (Rule Execution Engine)**
        *   **职责**：财务合规的第一道硬性防线。不讲道理，只看数据。
        *   **方法**：当用户提交报销数据时，该模块会查询本地的 `business_rules` 数据库表。如果用户提交的住宿费是 850，而数据库规则明确上限是 800，则立刻抛出“阻断型错误” (Blocking Error)。**此过程绝对禁止调用大模型进行实时推断。**
    *   **模块 4: 标准化 API 网关 (API Gateway & Handshake Layer)**
        *   **职责**：封装所有对外层系统（如 ERP、HR 系统）和对内层 Hermes 的通信接口。控制并发，记录调用日志。

### 2. 内层 Agent (Hermes)：非结构化信息的提炼者与深度思考者

**本质：一个被严格隔离的智能计算引擎，专门处理人类擅长但传统代码难以处理的“软逻辑”。**

*   **开发技术栈建议**：Hermes 框架 + 向量数据库 (如 Milvus/PGVector) + 强力 LLM (如 GPT-4 或开源大模型)。
*   **交互形态**：对用户不可见，只作为外层 Agent 的“后端服务”存在。
*   **核心模块与职责 (What to do & How to do)**：

    *   **模块 1: 政策蒸馏器 (Policy Distiller) —— 解决“知行合一”的关键**
        *   **职责**：打破知识库（死文件）与业务流（活代码）之间的壁垒。
        *   **方法 (核心思路)**：
            1.  *触发*：管理员上传一份《差旅新规.pdf》。
            2.  *解析*：Hermes 逐段阅读文档。
            3.  *提取*：使用精心设计的 **Few-Shot Prompt 链**，强制模型识别特定的“控制变量”。
                *(Prompt 示例: "你是一个专业的财务合规审计员。请阅读以下段落，如果包含任何关于费用上限、职级限制、审批层级的规定，请严格按照以下 JSON Schema 输出：{category, location, level_req, max_amount, is_hard_limit}。如果未找到，输出空。")*
            4.  *回写*：Hermes 将提炼出的 JSON 结构转化为标准的 SQL Update 指令（或通过专用 API 接口），更新外层 Agent 依赖的 `business_rules` 表。
    *   **模块 2: 深度知识检索 (Deep RAG & Interpretation)**
        *   **职责**：为用户提供复杂制度的个性化解读。
        *   **方法**：当外层 Agent 无法解答用户的合规疑问时（意图识别为“政策咨询”），外层将请求转发给 Hermes。Hermes 在向量库中检索相关段落，并结合用户当前的上下文（如：员工职级、出差地），生成一份连贯、人性化的解答。
    *   **模块 3: 异步风险探针 (Asynchronous Risk Auditor)**
        *   **职责**：像“老会计”一样，在海量已发生或正在发生的业务数据中寻找蛛丝马迹。
        *   **方法**：
            1.  *定时任务*：每天凌晨启动。
            2.  *数据聚合*：从外层数据库提取当天的报销流水（去除敏感个资）。
            3.  *模式识别*：通过特定的 Prompt（例如寻找“拆单报销”、“异常高频的出租车票”）。
            4.  *生成报告*：生成结构化的风险预警报告，存入专用表，供管理员次日早晨审核，而不是直接去冻结员工账号。

---

## 二、 核心通信协议 (The Handshake)：两层的握手与数据交互

双层架构的成败，取决于这两层能否顺畅地交换信息，且保证安全。我们需要定义清晰的接口协议。

### 1. 同步查询接口 (外 -> 内：求知与解惑)

当外层遇到处理不了的“软逻辑”时触发。

*   **Endpoint (示例)**: `POST /hermes/api/v1/consult`
*   **外层 Request 结构**:
    ```json
    {
      "context": {
        "user_id": "emp_1001",
        "current_task": "travel_reimbursement",
        "form_data": {"city": "北京", "amount": 900}
      },
      "query": "因为展会原因酒店全满，只能订900的，能报销吗？"
    }
    ```
*   **内层 Hermes Response 结构**:
    ```json
    {
      "status": "success",
      "interpretation": "根据《差旅管理办法》第15条，展会期间允许上浮 20%。您的标准是800，上浮后为960，可以报销。",
      "action_recommendation": "require_special_approval", // 建议外层采取的动作
      "citations": ["policy_doc_v2_page_4"]
    }
    ```

### 2. 异步任务接口 (外 -> 内：派发耗时任务)

例如请求生成长篇分析报告或进行全量风险巡检。

*   **流程**：
    1.  外层调用 `POST /hermes/api/v1/jobs/generate_report`。
    2.  内层 Hermes 立即返回 `202 Accepted` 和一个 `job_id`。
    3.  内层 Hermes 在后台慢慢算。
    4.  计算完成后，内层通过 Webhook 回调外层的通知接口，外层再通过系统消息通知用户“您的报告已就绪”。

### 3. 规则推送机制 (内 -> 外：自动化立法)

这是最核心的逆向通信。内层提炼出的规则如何生效？

*   **流程**：
    1.  Hermes 提炼出新规则。
    2.  Hermes 调用外层的特权 API (如 `POST /admin/api/rules/sync`)，推送规则 payload。
    3.  外层 Agent 收到后，执行数据库 `UPSERT` 操作更新 `business_rules` 表。
    4.  *(可选但强烈建议)*：进入“待激活”状态，需要人类管理员在系统中点击“确认应用新规则”后，新规才正式生效。

---

## 三、 分阶段开发落地全景计划 (Implementation Roadmap)

开发应当遵循“先基建后上层、先确定后智能”的原则。

### Phase 1: 骨架搭建与基石铺设 (Foundation & Outer Shell)
*目标：构建一个哪怕没有 AI 也能运转的硬核流程系统，确立两层隔离。*

1.  **架构拆分验证**：在服务器层面，确保 Outer Agent (FastAPI) 和 Inner Hermes 分别在独立的进程（或容器）中运行，仅通过 HTTP/gRPC 通信。
2.  **动态规则引擎实现 (核心基建)**：
    *   在 PostgreSQL 中设计 `business_rules` 表结构。必须支持高度扩展性（例如采用 `JSONB` 字段存储具体约束参数）。
    *   在外层 Agent 开发一个“规则校验服务 (Rule Validation Service)”，该服务能够在任何报销动作发生前，拦截并比对 `business_rules`。
3.  **标准化流程闭环**：开发一个完整的、基于硬规则驱动的差旅报销单据流转全流程（填单 -> 校验 -> 提交 -> 审批）。验证在“硬规则”下系统运转良好。

### Phase 2: 知识注入与基础问答 (Hermes RAG Integration)
*目标：赋予系统“解答疑问”的能力。*

1.  **内层基建**：配置 Hermes 环境，接入向量数据库。
2.  **文档清洗管道 (ETL pipeline)**：将现有的财务政策 PDF/Word 文档清洗、分块 (Chunking) 并向量化入库。
3.  **问答桥接**：
    *   在外层前端 (Vue3) 提供一个“智能咨询”悬浮窗或独立页面。
    *   外层 Agent 接收问题，附带上用户的上下文（角色、权限），一并转发给内层 Hermes。
    *   验证 Hermes 能够根据向量库的内容，给出带出处的准确回答。

### Phase 3: 核心攻坚 —— 自动立法与双层联通 (Policy Distillation & Sync)
*目标：实现从“死文档”到“活规则”的自动化转化。*

1.  **蒸馏 Prompt 工程**：在 Hermes 中反复打磨“政策提炼”的 Prompt。针对你们公司常见的政策描述方式进行微调。
2.  **结构化提取测试**：手动上传不同版本的政策文档，测试 Hermes 能否稳定、准确地输出 JSON 格式的规则参数。
3.  **闭环联调**：
    *   开发 Hermes 向外层推送规则的 API。
    *   完成全链路测试：管理员界面上传新文档 -> Hermes 后台解析 -> 外层规则库自动更新 -> 前端即时生效新的金额限制。

### Phase 4: 高阶进化 —— 异步审计与主动防御 (Proactive Risk Auditing)
*目标：将系统从“被动响应”升级为“主动防护”。*

1.  **数据安全隧道**：建立从外层业务库向内层 Hermes 传递“脱敏业务快照”的通道。
2.  **风险模式定义**：梳理出 3-5 种典型的财务风险模式（如：异常聚集的餐饮发票、连续的单日高额交通费）。
3.  **Hermes 巡检任务**：编写定时任务逻辑，利用大模型的推理能力去比对这些模式和当天的业务快照数据。
4.  **风险看板**：在外层系统的管理后台开发“风险报告台”，展示 Hermes 生成的预警结果。

---

## 四、 关键风险与防范策略总结

1.  **大模型幻觉污染规则库**：
    *   **防范**：Hermes 提炼的所有硬性规则（尤其是金额、审批级数），在写入外层正式库之前，必须增加一个**“人工审核 (Human-in-the-loop)”** 环节。系统提示“检测到政策更新，提炼出 5 条新规则，请管理员确认应用”。
2.  **状态机混乱**：
    *   **防范**：外层 Agent 的流程控制代码必须使用强类型和严格的事务控制 (Transaction)。绝不允许任何组件（包括 AI）在不经过状态机合法校验的情况下直接修改数据库中的 `status` 字段。
3.  **性能瓶颈**：
    *   **防范**：所有外层必须做的事情（拦截、查询）必须在毫秒级完成。所有涉及调用 Hermes 的操作（问答、提炼、分析）全部采用异步设计或提供明确的 Loading 反馈。
