auto_agent/智能化部署agent-demo接口定义说明.md.txt
2026-04-08 19:08:56 +08:00

915 lines
16 KiB
Plaintext

# 智能化部署 Agent Demo 接口定义说明
## 1. 文档说明
### 1.1 文档目的
本文档用于定义智能化部署 Agent MVP 阶段的 demo 接口,作为前后端开发、联调和本地 Agent 接入的直接输入。
本文档覆盖以下接口范围:
1. Agent 对外任务接口。
2. 云端与本地 Agent 的交互接口。
3. 软件 A demo 接口。
4. 身份 demo 接口。
5. 审批 demo 接口。
### 1.2 设计目标
1. 先打通完整闭环。
2. 接口语义尽量稳定,便于后续替换为真实系统。
3. 上层编排尽量不感知 demo 与真实系统差异。
4. 所有关键动作可追溯、可审计。
### 1.3 非目标
本文档不覆盖:
1. 前端页面字段细节。
2. 数据库表结构 DDL。
3. 真实软件 A 适配细节。
4. 所有部署场景的扩展字段。
---
## 2. 总体约定
## 2.1 协议约定
1. 协议采用 `HTTPS + JSON`。
2. 字符编码采用 `UTF-8`。
3. 时间字段统一采用 `yyyy-MM-dd HH:mm:ss.SSS` 字符串格式,例如 `2026-04-07 18:00:00.123`。
4. 未特殊说明时,所有时间字段默认时区为 `Asia/Shanghai`。
5. 所有写接口建议支持 `request_id` 做幂等控制。
## 2.2 字段命名规范
1. 所有 JSON 字段统一采用 `snake_case`。
2. 主键、关联键、设备键、任务键统一使用 `*_id` 后缀,例如 `task_id`、`approval_id`、`edge_id`。
3. 状态字段统一使用 `*_status` 后缀,例如 `task_status`、`approval_status`。
4. 类型字段统一使用 `*_type` 后缀,例如 `action_type`、`os_type`。
5. 时间点字段统一使用 `*_at` 后缀,例如 `created_at`、`finished_at`、`expire_at`;通用响应时间字段保留 `timestamp`。
6. 毫秒级耗时统一使用 `*_ms` 后缀,例如 `duration_ms`、`latency_ms`、`timeout_ms`。
7. 数量统计统一使用 `*_count` 后缀,例如 `log_error_count`、`total_count`。
8. 集合字段优先使用复数名词,例如 `roles`、`permissions`、`target_nodes`。
9. 布尔字段按语义命名,通用执行结果使用 `success`,权限判断使用 `allowed`,验证结果使用 `*_ok`。
10. 令牌有效期等以秒为单位的持续时间字段统一使用 `*_seconds` 后缀,例如 `expires_in_seconds`。
## 2.3 通用请求头
面向用户调用:
```http
Authorization: Bearer <access_token>
Content-Type: application/json
X-Request-Id: 2f6af6ad-8d98-4f6a-90d4-1ec6a661f701
X-Tenant-Id: tenant-demo
```
面向本地 Agent 调用:
```http
Authorization: Bearer <edge_token>
Content-Type: application/json
X-Request-Id: 4a2e9309-5670-43cf-a88e-7ab5a36190e1
X-Edge-Id: edge-shanghai-001
X-Signature: <signature>
```
## 2.4 通用响应格式
所有接口统一返回如下格式:
```json
{
"request_id": "2f6af6ad-8d98-4f6a-90d4-1ec6a661f701",
"success": true,
"code": "OK",
"message": "success",
"data": {},
"timestamp": "2026-04-08 14:30:00.123"
}
```
字段说明:
1. `request_id`:请求唯一标识。
2. `success`:是否成功。
3. `code`:业务错误码。
4. `message`:可读描述。
5. `data`:业务数据。
6. `timestamp`:响应时间。
## 2.5 通用错误码
建议保留以下错误码:
1. `OK`
2. `INVALID_PARAM`
3. `UNAUTHORIZED`
4. `FORBIDDEN`
5. `NOT_FOUND`
6. `CONFLICT`
7. `APPROVAL_REQUIRED`
8. `CONFIRM_REQUIRED`
9. `TOOL_CALL_FAILED`
10. `EDGE_UNAVAILABLE`
11. `SOFTWARE_A_FAILED`
12. `TIMEOUT`
13. `INTERNAL_ERROR`
## 2.6 关键枚举定义
### 2.5.1 风险等级
```json
["LOW", "MEDIUM", "HIGH"]
```
### 2.5.2 任务状态
```json
[
"CREATED",
"PENDING_CONFIRM",
"PENDING_APPROVAL",
"RUNNING",
"VERIFYING",
"SUCCEEDED",
"FAILED",
"PARTIAL_SUCCEEDED",
"CANCELLED"
]
```
### 2.5.3 审批状态
```json
["NOT_REQUIRED", "PENDING", "APPROVED", "REJECTED", "EXPIRED"]
```
### 2.5.4 动作类型
```json
[
"DEPLOY",
"PUSH_CONFIG",
"START_SERVICE",
"STOP_SERVICE",
"RESTART_SERVICE",
"ROLLBACK",
"QUERY_LOG",
"HEALTH_CHECK",
"CALL_THIRD_PARTY_API"
]
```
---
## 3. Agent 对外接口
## 3.1 创建任务
`POST /api/agent/tasks`
说明:
1. 接收用户自然语言输入。
2. 返回任务解析结果。
3. 若缺参或需要确认,不直接执行。
请求示例:
```json
{
"input_text": "把 order-service 1.2.3 部署到测试环境",
"channel": "WEB",
"session_id": "sess-001",
"tenant_id": "tenant-demo",
"context": {
"preferred_env": "test"
}
}
```
响应示例:
```json
{
"request_id": "req-001",
"success": true,
"code": "OK",
"message": "success",
"data": {
"task_id": "task-20260408-001",
"parsed_intent": {
"action_type": "DEPLOY",
"app_code": "order-service",
"env": "test",
"version": "1.2.3"
},
"missing_slots": [],
"risk_level": "MEDIUM",
"task_status": "PENDING_CONFIRM",
"next_action": "CONFIRM_TASK"
},
"timestamp": "2026-04-08 14:30:00.123"
}
```
## 3.2 确认任务
`POST /api/agent/tasks/{task_id}/confirm`
说明:
1. 用户确认结构化任务。
2. 低中风险任务确认后可进入执行。
3. 高风险任务确认后进入审批。
请求示例:
```json
{
"confirmed": true,
"comment": "确认执行"
}
```
响应示例:
```json
{
"request_id": "req-002",
"success": true,
"code": "OK",
"message": "task confirmed",
"data": {
"task_id": "task-20260408-001",
"task_status": "RUNNING",
"approval_status": "NOT_REQUIRED"
},
"timestamp": "2026-04-08 14:31:00.123"
}
```
## 3.3 查询任务详情
`GET /api/agent/tasks/{task_id}`
响应示例:
```json
{
"request_id": "req-003",
"success": true,
"code": "OK",
"message": "success",
"data": {
"task_id": "task-20260408-001",
"task_status": "VERIFYING",
"approval_status": "NOT_REQUIRED",
"risk_level": "MEDIUM",
"intent": {
"action_type": "DEPLOY",
"app_code": "order-service",
"env": "test",
"version": "1.2.3"
},
"tool_calls": [
{
"tool_name": "deploy_package",
"success": true
}
],
"verification_result": {
"process_ok": true,
"port_ok": true,
"http_ok": true,
"log_error_count": 0
},
"summary": "部署成功,自动验证通过"
},
"timestamp": "2026-04-08 14:35:00.123"
}
```
## 3.4 查询任务报告
`GET /api/agent/tasks/{task_id}/report`
说明:
返回完整执行报告,适合前端展示和审计导出。
响应 `data` 建议包含:
1. `task_basic`
2. `intent_snapshot`
3. `approval_trace`
4. `tool_trace`
5. `verification_trace`
6. `result_summary`
7. `audit_trace`
## 3.5 取消任务
`POST /api/agent/tasks/{task_id}/cancel`
说明:
1. 仅允许取消未完成任务。
2. 已经进入软件 A 执行阶段时,需要根据执行状态判断是否支持取消。
---
## 4. 云端与本地 Agent 交互接口
## 4.1 Edge 心跳
`POST /api/agent/edge/heartbeat`
请求示例:
```json
{
"edge_id": "edge-shanghai-001",
"hostname": "customer-host-01",
"os_type": "WINDOWS",
"agent_version": "0.1.0",
"capabilities": [
"check_process",
"check_port",
"http_health_check",
"grep_log",
"service_control_windows"
]
}
```
## 4.2 Edge 拉取任务
`POST /api/agent/edge/tasks/pull`
请求示例:
```json
{
"edge_id": "edge-shanghai-001",
"max_tasks": 5
}
```
响应示例:
```json
{
"request_id": "req-101",
"success": true,
"code": "OK",
"message": "success",
"data": {
"tasks": [
{
"task_id": "task-20260408-001",
"step_id": "step-verify-01",
"tool_name": "http_health_check",
"params": {
"url": "http://10.0.0.12:8080/actuator/health",
"timeout_ms": 3000
},
"expire_at": "2026-04-08 14:40:00.123"
}
]
},
"timestamp": "2026-04-08 14:35:10.123"
}
```
## 4.3 Edge 回传执行结果
`POST /api/agent/edge/tasks/report`
请求示例:
```json
{
"edge_id": "edge-shanghai-001",
"task_id": "task-20260408-001",
"step_id": "step-verify-01",
"tool_name": "http_health_check",
"success": true,
"code": "OK",
"message": "200 OK",
"data": {
"status_code": 200,
"latency_ms": 45
},
"evidence": {
"response_body": "{\"status\":\"UP\"}"
},
"started_at": "2026-04-08 14:35:11.123",
"finished_at": "2026-04-08 14:35:11.456"
}
```
## 4.4 Edge 上报异常
`POST /api/agent/edge/events`
说明:
用于上报:
1. 本地 Agent 异常。
2. 工具不可用。
3. 证书异常。
4. 系统资源异常。
---
## 5. 软件 A Demo 接口
## 5.1 设计说明
软件 A demo 版本用于支撑 MVP 闭环,其接口语义需尽量贴近未来真实软件 A 的标准能力。
建议 base path:
`/api/demo/software-a`
## 5.2 创建部署任务
`POST /api/demo/software-a/deploy-tasks`
请求示例:
```json
{
"operator": {
"user_id": "u1001",
"user_name": "alice"
},
"tenant_id": "tenant-demo",
"app_code": "order-service",
"env": "test",
"version": "1.2.3",
"target_nodes": [
"10.0.0.12",
"10.0.0.13"
],
"deploy_options": {
"graceful": true
}
}
```
响应示例:
```json
{
"request_id": "req-sa-001",
"success": true,
"code": "OK",
"message": "deploy task created",
"data": {
"software_a_task_id": "sa-task-001",
"task_status": "RUNNING"
},
"timestamp": "2026-04-08 14:32:00.123"
}
```
## 5.3 查询部署任务状态
`GET /api/demo/software-a/deploy-tasks/{software_a_task_id}`
响应 `data` 建议包含:
1. `software_a_task_id`
2. `task_status`
3. `progress_percent`
4. `app_code`
5. `env`
6. `version`
7. `target_nodes`
8. `started_at`
9. `finished_at`
10. `error_detail`
## 5.4 推送配置
`POST /api/demo/software-a/config/push`
请求示例:
```json
{
"operator": {
"user_id": "u1001",
"user_name": "alice"
},
"app_code": "order-service",
"env": "test",
"config_template": "default-v1",
"config_version": "20260408-01",
"target_nodes": [
"10.0.0.12"
]
}
```
## 5.5 服务控制
### 5.5.1 启动服务
`POST /api/demo/software-a/services/start`
### 5.5.2 停止服务
`POST /api/demo/software-a/services/stop`
### 5.5.3 重启服务
`POST /api/demo/software-a/services/restart`
统一请求示例:
```json
{
"operator": {
"user_id": "u1001",
"user_name": "alice"
},
"app_code": "order-service",
"env": "test",
"target_nodes": [
"10.0.0.12"
]
}
```
## 5.6 查询日志
`POST /api/demo/software-a/logs/search`
请求示例:
```json
{
"app_code": "order-service",
"env": "test",
"time_range": {
"start_at": "2026-04-08 14:20:00.123",
"end_at": "2026-04-08 14:30:00.123"
},
"keywords": [
"ERROR",
"Exception"
],
"limit": 100
}
```
响应 `data` 建议包含:
1. `total_count`
2. `entries`
3. `summary`
`entries` 单条建议字段:
1. `timestamp`
2. `level`
3. `host`
4. `message`
## 5.7 查询指标
`POST /api/demo/software-a/metrics/query`
请求示例:
```json
{
"app_code": "order-service",
"env": "test",
"metric_names": [
"cpu_usage",
"memory_usage",
"http_5xx_count"
],
"time_range": {
"start_at": "2026-04-08 14:20:00.123",
"end_at": "2026-04-08 14:30:00.123"
}
}
```
## 5.8 查询应用拓扑
`GET /api/demo/software-a/apps/{app_code}/topology?env=test`
## 5.9 权限校验
`POST /api/demo/software-a/permissions/check`
请求示例:
```json
{
"operator": {
"user_id": "u1001",
"user_name": "alice"
},
"action_type": "DEPLOY",
"app_code": "order-service",
"env": "test"
}
```
响应示例:
```json
{
"request_id": "req-sa-009",
"success": true,
"code": "OK",
"message": "success",
"data": {
"allowed": true,
"reason": ""
},
"timestamp": "2026-04-08 14:31:00.123"
}
```
---
## 6. 身份 Demo 接口
## 6.1 设计说明
身份 demo 用于 MVP 阶段闭环,不要求完全模拟现网身份系统,但必须支持:
1. 登录。
2. 用户信息查询。
3. 角色信息查询。
4. 基础权限集合返回。
建议 base path:
`/api/demo/identity`
## 6.2 登录
`POST /api/demo/identity/login`
请求示例:
```json
{
"username": "alice",
"password": "demo-password"
}
```
响应示例:
```json
{
"request_id": "req-id-001",
"success": true,
"code": "OK",
"message": "login success",
"data": {
"access_token": "demo-token-alice",
"expires_in_seconds": 7200,
"user": {
"user_id": "u1001",
"user_name": "alice",
"display_name": "Alice",
"roles": [
"DEPLOY_OPERATOR"
],
"tenant_id": "tenant-demo"
}
},
"timestamp": "2026-04-08 14:00:00.123"
}
```
## 6.3 获取当前用户信息
`GET /api/demo/identity/me`
## 6.4 查询用户权限
`GET /api/demo/identity/users/{user_id}/permissions`
响应 `data` 建议包含:
1. `user_id`
2. `roles`
3. `permissions`
4. `allowed_envs`
5. `allowed_apps`
## 6.5 验证 Token
`POST /api/demo/identity/token/introspect`
---
## 7. 审批 Demo 接口
## 7.1 设计说明
审批 demo 用于高风险动作闭环,至少支持:
1. 创建审批单。
2. 查询审批单。
3. 通过或驳回审批。
4. 审批记录留痕。
建议 base path:
`/api/demo/approval`
## 7.2 创建审批单
`POST /api/demo/approval/requests`
请求示例:
```json
{
"task_id": "task-20260408-888",
"risk_level": "HIGH",
"operator": {
"user_id": "u1001",
"user_name": "alice"
},
"action_type": "RESTART_SERVICE",
"target": {
"app_code": "user-service",
"env": "prod"
},
"reason": "生产故障恢复",
"approvers": [
"u2001"
]
}
```
响应示例:
```json
{
"request_id": "req-ap-001",
"success": true,
"code": "OK",
"message": "approval created",
"data": {
"approval_id": "ap-20260408-001",
"approval_status": "PENDING"
},
"timestamp": "2026-04-08 14:40:00.123"
}
```
## 7.3 查询审批单
`GET /api/demo/approval/requests/{approval_id}`
## 7.4 审批决策
`POST /api/demo/approval/requests/{approval_id}/decision`
请求示例:
```json
{
"decision": "APPROVED",
"comment": "同意执行",
"operator": {
"user_id": "u2001",
"user_name": "bob"
}
}
```
`decision` 可选值:
```json
["APPROVED", "REJECTED"]
```
## 7.5 查询待审批列表
`GET /api/demo/approval/requests?approval_status=PENDING&approver_user_id=u2001`
---
## 8. 建议的内部对象结构
## 8.1 Task 对象
```json
{
"task_id": "task-20260408-001",
"session_id": "sess-001",
"tenant_id": "tenant-demo",
"operator": {
"user_id": "u1001",
"user_name": "alice"
},
"action_type": "DEPLOY",
"app_code": "order-service",
"env": "test",
"version": "1.2.3",
"target_nodes": [
"10.0.0.12"
],
"risk_level": "MEDIUM",
"approval_status": "NOT_REQUIRED",
"task_status": "RUNNING"
}
```
## 8.2 ToolCall 对象
```json
{
"tool_call_id": "tool-call-001",
"task_id": "task-20260408-001",
"tool_name": "deploy_package",
"request_payload": {},
"response_payload": {},
"success": true,
"duration_ms": 1200,
"started_at": "2026-04-08 14:31:00.123",
"finished_at": "2026-04-08 14:31:01.456"
}
```
## 8.3 Approval 对象
```json
{
"approval_id": "ap-20260408-001",
"task_id": "task-20260408-888",
"approval_status": "PENDING",
"approvers": [
"u2001"
],
"decision_logs": []
}
```
---
## 9. 典型时序
## 9.1 部署时序
1. 用户调用 `POST /api/agent/tasks` 发起自然语言请求。
2. Agent 完成解析并返回 `task_id` 和结构化结果。
3. 用户调用确认接口。
4. Agent 调用身份 demo 获取操作者信息和权限。
5. Agent 调用软件 A demo 权限校验。
6. Agent 调用软件 A demo 创建部署任务。
7. Agent 轮询软件 A demo 查询状态。
8. Agent 调用 Edge 接口执行本地验证。
9. Agent 汇总结果,更新任务状态并生成报告。
## 9.2 高风险审批时序
1. 用户发起高风险任务。
2. Agent 判定需要审批。
3. Agent 调用审批 demo 创建审批单。
4. 审批人完成审批。
5. Agent 检查审批结果。
6. 审批通过后进入执行。
---
## 10. demo 与正式系统的替换原则
1. Agent 上层只依赖统一语义接口,不直接依赖 demo 接口字段差异。
2. 软件 A demo、身份 demo、审批 demo 均应封装在适配层后面。
3. 后续替换真实系统时,优先保持上层对象模型不变。
4. 如真实系统能力不足,应在适配层内做降级,而不是修改编排主链路。
---
## 11. 推荐开发顺序
1. 先完成通用响应格式、错误码和枚举定义。
2. 再完成 Agent 对外任务接口。
3. 再完成软件 A demo 接口。
4. 再完成身份 demo 和审批 demo。
5. 最后完成本地 Agent 拉取任务与结果回传接口。
这样可以最短路径打通 MVP 主链路。