auto_agent/智能化部署agent-demo后端项目骨架设计.md
2026-04-08 19:28:26 +08:00

719 lines
13 KiB
Markdown

# 智能化部署 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. 为后续替换真实系统和服务拆分预留空间。