# 智能化部署 Agent Demo 后端项目骨架设计

## 1. 文档说明

### 1.1 文档目的

本文档用于定义智能化部署 Agent demo 阶段的后端项目骨架,作为研发启动时的直接输入。

本文档重点解决以下问题:

1. demo 后端采用什么形态落地。
2. 项目如何分层和分模块。
3. 哪些模块先实现,哪些模块后实现。
4. 数据如何落库。
5. 如何与软件 A demo、身份 demo、审批 demo、本地 Agent 对接。

### 1.2 适用范围

本文档适用于:

1. 后端研发。
2. 架构设计。
3. 联调排期。
4. demo 落地实施。

### 1.3 设计原则

1. demo 阶段优先打通主链路,不优先拆分微服务。
2. 内部采用清晰模块边界,后续可平滑拆分。
3. Agent 编排、策略治理、任务中心、适配器层必须独立建模。
4. 所有对外系统都通过适配器访问,不允许业务逻辑直接耦合具体 demo 接口。
5. 数据模型、字段命名、时间格式与现有两份文档保持一致。

---

## 2. demo 阶段推荐落地形态

## 2.1 总体建议

demo 阶段建议采用:

**单体后端服务 + 模块化分层 + 外部 demo 适配器 + 独立本地 Agent**

原因:

1. 当前目标是尽快打通闭环,而不是先解决分布式复杂度。
2. 软件 A、审批、身份本身都是 demo 版,先用单体服务更容易联调。
3. 任务编排、审批状态、工具调用、审计日志之间耦合较强,单体更利于快速演进。
4. 后续如果边界稳定,可以将任务中心、审批中心、模型网关逐步拆分。

## 2.2 部署单元建议

demo 阶段建议至少包含 4 个运行单元:

1. `agent-backend`
2. `edge-agent`
3. `postgres`
4. `redis`

可选:

1. `software-a-demo`
2. `identity-demo`
3. `approval-demo`

如果希望进一步压缩工作量,也可以把 `software-a-demo`、`identity-demo`、`approval-demo` 合并进 `agent-backend` 的 mock 模块中。

---

## 3. 技术栈建议

## 3.1 demo 后端推荐技术栈

建议优先采用:

1. Python 3.11+
2. FastAPI
3. Pydantic
4. SQLAlchemy
5. PostgreSQL
6. Redis
7. LangGraph

## 3.2 选择理由

### 3.2.1 为什么推荐 Python

1. LangGraph 生态更直接。
2. demo 阶段实现 Agent 编排更快。
3. 适合快速完成工具适配和状态流转。
4. 本地 Agent 也更容易做跨平台实现。

### 3.2.2 为什么推荐 FastAPI

1. 定义接口快。
2. Pydantic 模型与接口文档天然匹配。
3. 适合 demo 阶段快速落地。

### 3.2.3 为什么保留 PostgreSQL 和 Redis

1. PostgreSQL 用于结构化任务、审批、审计落库。
2. Redis 用于任务队列、幂等键、短期上下文和轮询状态。

## 3.3 如果团队必须走 Java

如果团队明确只能走 Java,也可以替换为:

1. Spring Boot
2. Spring Web
3. JPA / MyBatis
4. PostgreSQL
5. Redis

但 demo 阶段的 Agent 编排效率通常不如 Python 方案。

---

## 4. 项目结构建议

## 4.1 仓库形态建议

建议采用单仓结构:

```text
smart-deploy-agent-demo/
  backend/
  edge-agent/
  docs/
  scripts/
  deploy/
```

## 4.2 后端目录结构建议

```text
backend/
  app/
    api/
      agent/
      edge/
      internal/
    core/
      config.py
      logging.py
      security.py
      exceptions.py
      constants.py
    domain/
      task/
      approval/
      audit/
      edge/
      metadata/
    schemas/
      common.py
      task.py
      approval.py
      edge.py
      software_a.py
    models/
      task.py
      tool_call.py
      approval.py
      audit_log.py
      edge_node.py
      session_context.py
      app_metadata.py
    repositories/
      task_repository.py
      approval_repository.py
      audit_repository.py
      edge_repository.py
      metadata_repository.py
    services/
      task_service.py
      agent_service.py
      intent_service.py
      risk_service.py
      approval_service.py
      audit_service.py
      edge_service.py
      verification_service.py
      report_service.py
    adapters/
      llm/
        llm_gateway.py
      software_a/
        base.py
        demo_adapter.py
      identity/
        base.py
        demo_adapter.py
      approval/
        base.py
        demo_adapter.py
      edge/
        edge_dispatcher.py
    workflows/
      deploy_workflow.py
      query_log_workflow.py
      approval_workflow.py
    workers/
      task_runner.py
      task_polling_worker.py
      verify_worker.py
    db/
      base.py
      session.py
      migrations/
    main.py
  tests/
    api/
    services/
    workflows/
    adapters/
```

---

## 5. 模块职责设计

## 5.1 api 层

职责:

1. 接收 HTTP 请求。
2. 请求参数校验。
3. 调用 service。
4. 输出统一响应格式。

建议按接口边界拆分:

1. `api/agent`
2. `api/edge`
3. `api/internal`

说明:

1. `api/agent` 对应用户侧接口。
2. `api/edge` 对应本地 Agent 侧接口。
3. `api/internal` 对应内部管理、健康检查、mock 控制等接口。

## 5.2 schemas 层

职责:

1. 定义请求响应模型。
2. 与接口文档字段保持一致。
3. 避免 service 层直接处理原始 dict。

## 5.3 models 层

职责:

1. 定义数据库模型。
2. 维护持久化结构。
3. 不承载复杂业务逻辑。

## 5.4 repositories 层

职责:

1. 封装数据库访问。
2. 对 service 层提供统一持久化接口。
3. 隔离 ORM 细节。

## 5.5 services 层

这是后端核心业务层。

职责:

1. 编排任务创建。
2. 调用风险引擎。
3. 调用审批服务。
4. 调用适配器。
5. 维护任务状态机。
6. 汇总结果和生成报告。

## 5.6 adapters 层

职责:

1. 封装软件 A demo 调用。
2. 封装身份 demo 调用。
3. 封装审批 demo 调用。
4. 封装模型网关调用。
5. 封装本地 Agent 调度。

原则:

1. 所有外部系统接入必须先经过 adapter。
2. 上层 service 不直接拼接第三方 URL。
3. adapter 返回统一对象模型,而不是原始第三方响应。

## 5.7 workflows 层

职责:

1. 定义 LangGraph 状态机。
2. 管理任务节点顺序。
3. 将业务 service 组合成可运行工作流。

建议 workflow 按场景拆分:

1. `deploy_workflow`
2. `query_log_workflow`
3. `approval_workflow`

## 5.8 workers 层

职责:

1. 执行异步任务。
2. 轮询软件 A demo 状态。
3. 拉起验证流程。
4. 处理长任务和超时任务。

---

## 6. 建议的核心服务拆分

## 6.1 task_service

职责:

1. 创建任务。
2. 查询任务。
3. 确认任务。
4. 取消任务。
5. 更新任务状态。

## 6.2 agent_service

职责:

1. 驱动整体任务执行。
2. 调用 intent、risk、approval、adapter、report 等服务。
3. 负责主链路协调。

## 6.3 intent_service

职责:

1. 调用模型网关解析自然语言。
2. 生成结构化意图。
3. 标记缺失字段。

## 6.4 risk_service

职责:

1. 基于环境、动作、应用类型计算风险等级。
2. 判断是否需要确认。
3. 判断是否需要审批。

## 6.5 approval_service

职责:

1. 发起审批。
2. 查询审批状态。
3. 同步审批结果到任务。

## 6.6 verification_service

职责:

1. 生成验证步骤。
2. 调度本地 Agent。
3. 汇总验证结果。

## 6.7 report_service

职责:

1. 生成任务详情。
2. 生成任务报告。
3. 生成用户可读摘要。

## 6.8 audit_service

职责:

1. 记录关键行为。
2. 记录工具调用轨迹。
3. 记录审批轨迹。
4. 记录最终结果。

## 6.9 edge_service

职责:

1. 管理边缘节点注册和心跳。
2. 下发待执行步骤。
3. 接收执行结果和异常事件。

---

## 7. 数据库表建议

## 7.1 核心表清单

demo 阶段建议至少建立以下表:

1. `task`
2. `task_step`
3. `tool_call`
4. `approval_request`
5. `approval_decision_log`
6. `audit_log`
7. `edge_node`
8. `edge_task`
9. `session_context`
10. `app_metadata`

## 7.2 task 表建议字段

1. `task_id`
2. `session_id`
3. `tenant_id`
4. `operator_user_id`
5. `operator_user_name`
6. `input_text`
7. `action_type`
8. `app_code`
9. `env`
10. `version`
11. `risk_level`
12. `approval_status`
13. `task_status`
14. `summary`
15. `created_at`
16. `updated_at`

## 7.3 task_step 表建议字段

1. `step_id`
2. `task_id`
3. `step_type`
4. `step_name`
5. `step_status`
6. `executor_type`
7. `target_edge_id`
8. `request_payload`
9. `response_payload`
10. `started_at`
11. `finished_at`

## 7.4 tool_call 表建议字段

1. `tool_call_id`
2. `task_id`
3. `step_id`
4. `tool_name`
5. `request_payload`
6. `response_payload`
7. `success`
8. `duration_ms`
9. `started_at`
10. `finished_at`

## 7.5 approval_request 表建议字段

1. `approval_id`
2. `task_id`
3. `approval_status`
4. `risk_level`
5. `operator_user_id`
6. `approver_user_ids`
7. `reason`
8. `created_at`
9. `updated_at`

## 7.6 audit_log 表建议字段

1. `audit_id`
2. `task_id`
3. `action`
4. `operator_user_id`
5. `target`
6. `result`
7. `detail`
8. `timestamp`

---

## 8. 关键运行链路如何落到代码

## 8.1 创建任务链路

对应模块:

1. `api/agent/tasks.py`
2. `services/task_service.py`
3. `services/intent_service.py`
4. `services/risk_service.py`
5. `repositories/task_repository.py`

执行步骤:

1. 接收自然语言输入。
2. 调用 `intent_service` 生成结构化意图。
3. 调用 `risk_service` 生成风险等级。
4. 保存任务和初始状态。
5. 返回 `task_id` 和下一步动作。

## 8.2 确认任务链路

对应模块:

1. `api/agent/tasks.py`
2. `services/task_service.py`
3. `services/agent_service.py`
4. `services/approval_service.py`
5. `workers/task_runner.py`

执行步骤:

1. 接收确认请求。
2. 检查任务状态。
3. 如需审批则发起审批。
4. 如无需审批则投递异步执行任务。

## 8.3 执行部署链路

对应模块:

1. `workflows/deploy_workflow.py`
2. `services/agent_service.py`
3. `adapters/software_a/demo_adapter.py`
4. `workers/task_polling_worker.py`
5. `services/verification_service.py`

执行步骤:

1. 调用软件 A demo 创建部署任务。
2. 轮询部署状态。
3. 部署成功后生成验证步骤。
4. 下发到本地 Agent。
5. 汇总验证结果。
6. 生成报告。

## 8.4 本地验证链路

对应模块:

1. `api/edge/tasks.py`
2. `services/edge_service.py`
3. `adapters/edge/edge_dispatcher.py`
4. `workers/verify_worker.py`

执行步骤:

1. 本地 Agent 拉取待执行步骤。
2. 执行本地工具。
3. 上报执行结果。
4. 后端归档步骤状态并更新任务状态。

---

## 9. 本地 Agent 骨架建议

## 9.1 本地 Agent 目录建议

```text
edge-agent/
  app/
    core/
      config.py
      security.py
      logging.py
    client/
      backend_client.py
    executors/
      process_executor.py
      port_executor.py
      http_executor.py
      log_executor.py
      windows_service_executor.py
      linux_service_executor.py
    registry/
      tool_registry.py
    scheduler/
      polling_runner.py
    main.py
```

## 9.2 本地 Agent 设计原则

1. 仅拉取结构化任务。
2. 不接收自由文本命令。
3. 不开放任意 shell。
4. 工具按操作系统分类适配。
5. 所有执行结果结构化回传。

---

## 10. 配置与环境变量建议

后端建议至少支持以下配置:

1. `APP_ENV`
2. `APP_PORT`
3. `DATABASE_URL`
4. `REDIS_URL`
5. `LLM_BASE_URL`
6. `LLM_API_KEY`
7. `SOFTWARE_A_BASE_URL`
8. `SOFTWARE_A_TIMEOUT_MS`
9. `IDENTITY_BASE_URL`
10. `APPROVAL_BASE_URL`
11. `EDGE_TOKEN_SECRET`
12. `DEFAULT_TIMEZONE`

本地 Agent 建议至少支持:

1. `EDGE_ID`
2. `EDGE_NAME`
3. `BACKEND_BASE_URL`
4. `EDGE_ACCESS_TOKEN`
5. `EDGE_OS_TYPE`
6. `POLL_INTERVAL_MS`

---

## 11. 开发顺序建议

## 11.1 第一批必须完成

1. 通用响应模型。
2. 配置加载。
3. 数据库连接。
4. `task`、`approval_request`、`audit_log` 表。
5. `POST /api/agent/tasks`
6. `POST /api/agent/tasks/{task_id}/confirm`
7. `GET /api/agent/tasks/{task_id}`

## 11.2 第二批完成

1. 软件 A demo adapter。
2. 部署工作流。
3. 审批 demo adapter。
4. 身份 demo adapter。
5. 异步任务执行。

## 11.3 第三批完成

1. edge 心跳。
2. edge 拉取任务。
3. edge 回传结果。
4. 验证结果汇总。
5. 任务报告接口。

## 11.4 第四批完成

1. 审计查询。
2. 应用元数据管理。
3. 错误处理完善。
4. 观测能力补齐。

---

## 12. 测试建议

## 12.1 单元测试

优先覆盖:

1. `intent_service`
2. `risk_service`
3. `task_service`
4. `approval_service`
5. adapter 错误转换

## 12.2 集成测试

优先覆盖:

1. 创建任务 -> 确认任务 -> 执行部署 -> 完成验证
2. 高风险任务 -> 创建审批 -> 审批通过 -> 执行
3. Edge 拉取任务 -> 执行 -> 回传

## 12.3 联调测试

至少覆盖:

1. 软件 A demo 联调。
2. 身份 demo 联调。
3. 审批 demo 联调。
4. 本地 Agent 联调。

---

## 13. 后续拆分方向

当 demo 稳定后,建议按以下边界拆分:

1. `agent-api`:接入与任务接口
2. `agent-orchestrator`:Agent 编排和工作流执行
3. `agent-governance`:审批、权限、风险、审计
4. `agent-edge-gateway`:本地 Agent 接入与调度

但在 demo 阶段,不建议一开始就拆。

---

## 14. 结论

demo 阶段最合适的落地方式不是复杂微服务,而是:

**单体后端服务承接主业务链路,内部按模块清晰分层;本地 Agent 独立运行;软件 A、身份、审批通过 adapter 接入。**

这套骨架的目标不是"一次到位",而是:

1. 尽快打通主链路。
2. 让模块边界稳定下来。
3. 为后续替换真实系统和服务拆分预留空间。
