13 KiB
13 KiB
智能化部署 Agent Demo 后端项目骨架设计
1. 文档说明
1.1 文档目的
本文档用于定义智能化部署 Agent demo 阶段的后端项目骨架,作为研发启动时的直接输入。
本文档重点解决以下问题:
- demo 后端采用什么形态落地。
- 项目如何分层和分模块。
- 哪些模块先实现,哪些模块后实现。
- 数据如何落库。
- 如何与软件 A demo、身份 demo、审批 demo、本地 Agent 对接。
1.2 适用范围
本文档适用于:
- 后端研发。
- 架构设计。
- 联调排期。
- demo 落地实施。
1.3 设计原则
- demo 阶段优先打通主链路,不优先拆分微服务。
- 内部采用清晰模块边界,后续可平滑拆分。
- Agent 编排、策略治理、任务中心、适配器层必须独立建模。
- 所有对外系统都通过适配器访问,不允许业务逻辑直接耦合具体 demo 接口。
- 数据模型、字段命名、时间格式与现有两份文档保持一致。
2. demo 阶段推荐落地形态
2.1 总体建议
demo 阶段建议采用:
单体后端服务 + 模块化分层 + 外部 demo 适配器 + 独立本地 Agent
原因:
- 当前目标是尽快打通闭环,而不是先解决分布式复杂度。
- 软件 A、审批、身份本身都是 demo 版,先用单体服务更容易联调。
- 任务编排、审批状态、工具调用、审计日志之间耦合较强,单体更利于快速演进。
- 后续如果边界稳定,可以将任务中心、审批中心、模型网关逐步拆分。
2.2 部署单元建议
demo 阶段建议至少包含 4 个运行单元:
agent-backendedge-agentpostgresredis
可选:
software-a-demoidentity-demoapproval-demo
如果希望进一步压缩工作量,也可以把 software-a-demo、identity-demo、approval-demo 合并进 agent-backend 的 mock 模块中。
3. 技术栈建议
3.1 demo 后端推荐技术栈
建议优先采用:
- Python 3.11+
- FastAPI
- Pydantic
- SQLAlchemy
- PostgreSQL
- Redis
- LangGraph
3.2 选择理由
3.2.1 为什么推荐 Python
- LangGraph 生态更直接。
- demo 阶段实现 Agent 编排更快。
- 适合快速完成工具适配和状态流转。
- 本地 Agent 也更容易做跨平台实现。
3.2.2 为什么推荐 FastAPI
- 定义接口快。
- Pydantic 模型与接口文档天然匹配。
- 适合 demo 阶段快速落地。
3.2.3 为什么保留 PostgreSQL 和 Redis
- PostgreSQL 用于结构化任务、审批、审计落库。
- Redis 用于任务队列、幂等键、短期上下文和轮询状态。
3.3 如果团队必须走 Java
如果团队明确只能走 Java,也可以替换为:
- Spring Boot
- Spring Web
- JPA / MyBatis
- PostgreSQL
- Redis
但 demo 阶段的 Agent 编排效率通常不如 Python 方案。
4. 项目结构建议
4.1 仓库形态建议
建议采用单仓结构:
smart-deploy-agent-demo/
backend/
edge-agent/
docs/
scripts/
deploy/
4.2 后端目录结构建议
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 层
职责:
- 接收 HTTP 请求。
- 请求参数校验。
- 调用 service。
- 输出统一响应格式。
建议按接口边界拆分:
api/agentapi/edgeapi/internal
说明:
api/agent对应用户侧接口。api/edge对应本地 Agent 侧接口。api/internal对应内部管理、健康检查、mock 控制等接口。
5.2 schemas 层
职责:
- 定义请求响应模型。
- 与接口文档字段保持一致。
- 避免 service 层直接处理原始 dict。
5.3 models 层
职责:
- 定义数据库模型。
- 维护持久化结构。
- 不承载复杂业务逻辑。
5.4 repositories 层
职责:
- 封装数据库访问。
- 对 service 层提供统一持久化接口。
- 隔离 ORM 细节。
5.5 services 层
这是后端核心业务层。
职责:
- 编排任务创建。
- 调用风险引擎。
- 调用审批服务。
- 调用适配器。
- 维护任务状态机。
- 汇总结果和生成报告。
5.6 adapters 层
职责:
- 封装软件 A demo 调用。
- 封装身份 demo 调用。
- 封装审批 demo 调用。
- 封装模型网关调用。
- 封装本地 Agent 调度。
原则:
- 所有外部系统接入必须先经过 adapter。
- 上层 service 不直接拼接第三方 URL。
- adapter 返回统一对象模型,而不是原始第三方响应。
5.7 workflows 层
职责:
- 定义 LangGraph 状态机。
- 管理任务节点顺序。
- 将业务 service 组合成可运行工作流。
建议 workflow 按场景拆分:
deploy_workflowquery_log_workflowapproval_workflow
5.8 workers 层
职责:
- 执行异步任务。
- 轮询软件 A demo 状态。
- 拉起验证流程。
- 处理长任务和超时任务。
6. 建议的核心服务拆分
6.1 task_service
职责:
- 创建任务。
- 查询任务。
- 确认任务。
- 取消任务。
- 更新任务状态。
6.2 agent_service
职责:
- 驱动整体任务执行。
- 调用 intent、risk、approval、adapter、report 等服务。
- 负责主链路协调。
6.3 intent_service
职责:
- 调用模型网关解析自然语言。
- 生成结构化意图。
- 标记缺失字段。
6.4 risk_service
职责:
- 基于环境、动作、应用类型计算风险等级。
- 判断是否需要确认。
- 判断是否需要审批。
6.5 approval_service
职责:
- 发起审批。
- 查询审批状态。
- 同步审批结果到任务。
6.6 verification_service
职责:
- 生成验证步骤。
- 调度本地 Agent。
- 汇总验证结果。
6.7 report_service
职责:
- 生成任务详情。
- 生成任务报告。
- 生成用户可读摘要。
6.8 audit_service
职责:
- 记录关键行为。
- 记录工具调用轨迹。
- 记录审批轨迹。
- 记录最终结果。
6.9 edge_service
职责:
- 管理边缘节点注册和心跳。
- 下发待执行步骤。
- 接收执行结果和异常事件。
7. 数据库表建议
7.1 核心表清单
demo 阶段建议至少建立以下表:
tasktask_steptool_callapproval_requestapproval_decision_logaudit_logedge_nodeedge_tasksession_contextapp_metadata
7.2 task 表建议字段
task_idsession_idtenant_idoperator_user_idoperator_user_nameinput_textaction_typeapp_codeenvversionrisk_levelapproval_statustask_statussummarycreated_atupdated_at
7.3 task_step 表建议字段
step_idtask_idstep_typestep_namestep_statusexecutor_typetarget_edge_idrequest_payloadresponse_payloadstarted_atfinished_at
7.4 tool_call 表建议字段
tool_call_idtask_idstep_idtool_namerequest_payloadresponse_payloadsuccessduration_msstarted_atfinished_at
7.5 approval_request 表建议字段
approval_idtask_idapproval_statusrisk_leveloperator_user_idapprover_user_idsreasoncreated_atupdated_at
7.6 audit_log 表建议字段
audit_idtask_idactionoperator_user_idtargetresultdetailtimestamp
8. 关键运行链路如何落到代码
8.1 创建任务链路
对应模块:
api/agent/tasks.pyservices/task_service.pyservices/intent_service.pyservices/risk_service.pyrepositories/task_repository.py
执行步骤:
- 接收自然语言输入。
- 调用
intent_service生成结构化意图。 - 调用
risk_service生成风险等级。 - 保存任务和初始状态。
- 返回
task_id和下一步动作。
8.2 确认任务链路
对应模块:
api/agent/tasks.pyservices/task_service.pyservices/agent_service.pyservices/approval_service.pyworkers/task_runner.py
执行步骤:
- 接收确认请求。
- 检查任务状态。
- 如需审批则发起审批。
- 如无需审批则投递异步执行任务。
8.3 执行部署链路
对应模块:
workflows/deploy_workflow.pyservices/agent_service.pyadapters/software_a/demo_adapter.pyworkers/task_polling_worker.pyservices/verification_service.py
执行步骤:
- 调用软件 A demo 创建部署任务。
- 轮询部署状态。
- 部署成功后生成验证步骤。
- 下发到本地 Agent。
- 汇总验证结果。
- 生成报告。
8.4 本地验证链路
对应模块:
api/edge/tasks.pyservices/edge_service.pyadapters/edge/edge_dispatcher.pyworkers/verify_worker.py
执行步骤:
- 本地 Agent 拉取待执行步骤。
- 执行本地工具。
- 上报执行结果。
- 后端归档步骤状态并更新任务状态。
9. 本地 Agent 骨架建议
9.1 本地 Agent 目录建议
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 设计原则
- 仅拉取结构化任务。
- 不接收自由文本命令。
- 不开放任意 shell。
- 工具按操作系统分类适配。
- 所有执行结果结构化回传。
10. 配置与环境变量建议
后端建议至少支持以下配置:
APP_ENVAPP_PORTDATABASE_URLREDIS_URLLLM_BASE_URLLLM_API_KEYSOFTWARE_A_BASE_URLSOFTWARE_A_TIMEOUT_MSIDENTITY_BASE_URLAPPROVAL_BASE_URLEDGE_TOKEN_SECRETDEFAULT_TIMEZONE
本地 Agent 建议至少支持:
EDGE_IDEDGE_NAMEBACKEND_BASE_URLEDGE_ACCESS_TOKENEDGE_OS_TYPEPOLL_INTERVAL_MS
11. 开发顺序建议
11.1 第一批必须完成
- 通用响应模型。
- 配置加载。
- 数据库连接。
task、approval_request、audit_log表。POST /api/agent/tasksPOST /api/agent/tasks/{task_id}/confirmGET /api/agent/tasks/{task_id}
11.2 第二批完成
- 软件 A demo adapter。
- 部署工作流。
- 审批 demo adapter。
- 身份 demo adapter。
- 异步任务执行。
11.3 第三批完成
- edge 心跳。
- edge 拉取任务。
- edge 回传结果。
- 验证结果汇总。
- 任务报告接口。
11.4 第四批完成
- 审计查询。
- 应用元数据管理。
- 错误处理完善。
- 观测能力补齐。
12. 测试建议
12.1 单元测试
优先覆盖:
intent_servicerisk_servicetask_serviceapproval_service- adapter 错误转换
12.2 集成测试
优先覆盖:
- 创建任务 -> 确认任务 -> 执行部署 -> 完成验证
- 高风险任务 -> 创建审批 -> 审批通过 -> 执行
- Edge 拉取任务 -> 执行 -> 回传
12.3 联调测试
至少覆盖:
- 软件 A demo 联调。
- 身份 demo 联调。
- 审批 demo 联调。
- 本地 Agent 联调。
13. 后续拆分方向
当 demo 稳定后,建议按以下边界拆分:
agent-api:接入与任务接口agent-orchestrator:Agent 编排和工作流执行agent-governance:审批、权限、风险、审计agent-edge-gateway:本地 Agent 接入与调度
但在 demo 阶段,不建议一开始就拆。
14. 结论
demo 阶段最合适的落地方式不是复杂微服务,而是:
单体后端服务承接主业务链路,内部按模块清晰分层;本地 Agent 独立运行;软件 A、身份、审批通过 adapter 接入。
这套骨架的目标不是"一次到位",而是:
- 尽快打通主链路。
- 让模块边界稳定下来。
- 为后续替换真实系统和服务拆分预留空间。