5.8 KiB
5.8 KiB
智能化部署 Agent Demo 最小 DDL 设计
更新时间:2026-04-08
1. 文档目的
本文档用于定义 demo 第一阶段的最小数据库表结构,直接服务于以下目标:
- 支撑
POST /api/agent/tasks - 支撑
POST /api/agent/tasks/{task_id}/confirm - 支撑
GET /api/agent/tasks/{task_id} - 为后续审批、审计、工具调用留出可扩展落点
当前约束:
- demo 默认数据库采用
SQLite - 时间字段统一采用
yyyy-MM-dd HH:mm:ss.SSS - JSON 字段统一采用
snake_case - 复杂对象先以 JSON 字符串形式存储,后续切换 PostgreSQL 时可平滑升级为
JSONB
2. 本轮最小表清单
第一批仅落以下 4 张表:
taskapproval_requesttool_callaudit_log
说明:
task是主链路核心表。approval_request为高风险任务确认后进入审批预留。tool_call为后续软件 A demo / edge 验证接入预留。audit_log为关键动作审计预留。
3. 表结构设计
3.1 task
用途:
- 存储自然语言原始输入。
- 存储结构化意图快照。
- 存储风险等级、审批状态和任务状态。
- 存储结果摘要与时间戳。
字段:
task_idTEXT主键session_idTEXT非空tenant_idTEXT非空request_idTEXT可空input_textTEXT非空channelTEXT非空action_typeTEXT可空app_codeTEXT可空envTEXT可空versionTEXT可空risk_levelTEXT非空approval_statusTEXT非空task_statusTEXT非空parsed_intent_jsonTEXT非空missing_slots_jsonTEXT非空summaryTEXT可空created_atTEXT非空updated_atTEXT非空confirmed_atTEXT可空
建议索引:
idx_task_session_ididx_task_tenant_ididx_task_statusidx_task_created_at
3.2 approval_request
用途:
- 为
HIGH风险任务记录审批状态。 - 为后续审批 demo 接口联调预留。
字段:
approval_idTEXT主键task_idTEXT非空approval_statusTEXT非空risk_levelTEXT非空operator_user_idTEXT可空operator_user_nameTEXT可空approver_user_ids_jsonTEXT非空reasonTEXT可空created_atTEXT非空updated_atTEXT非空
建议索引:
idx_approval_task_ididx_approval_status
3.3 tool_call
用途:
- 记录软件 A demo、edge 验证和后续工具调用轨迹。
字段:
tool_call_idTEXT主键task_idTEXT非空step_idTEXT可空tool_nameTEXT非空request_payload_jsonTEXT非空response_payload_jsonTEXT非空successINTEGER非空duration_msINTEGER可空started_atTEXT可空finished_atTEXT可空
建议索引:
idx_tool_call_task_ididx_tool_call_tool_name
3.4 audit_log
用途:
- 记录任务创建、确认、审批等待和后续执行摘要。
字段:
audit_idTEXT主键task_idTEXT非空actionTEXT非空operator_user_idTEXT可空operator_user_nameTEXT可空targetTEXT可空resultTEXT非空detail_jsonTEXT非空timestampTEXT非空
建议索引:
idx_audit_task_ididx_audit_actionidx_audit_timestamp
4. SQLite 参考 DDL
CREATE TABLE IF NOT EXISTS task (
task_id TEXT PRIMARY KEY,
session_id TEXT NOT NULL,
tenant_id TEXT NOT NULL,
request_id TEXT,
input_text TEXT NOT NULL,
channel TEXT NOT NULL,
action_type TEXT,
app_code TEXT,
env TEXT,
version TEXT,
risk_level TEXT NOT NULL,
approval_status TEXT NOT NULL,
task_status TEXT NOT NULL,
parsed_intent_json TEXT NOT NULL,
missing_slots_json TEXT NOT NULL,
summary TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
confirmed_at TEXT
);
CREATE INDEX IF NOT EXISTS idx_task_session_id ON task (session_id);
CREATE INDEX IF NOT EXISTS idx_task_tenant_id ON task (tenant_id);
CREATE INDEX IF NOT EXISTS idx_task_status ON task (task_status);
CREATE INDEX IF NOT EXISTS idx_task_created_at ON task (created_at);
CREATE TABLE IF NOT EXISTS approval_request (
approval_id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
approval_status TEXT NOT NULL,
risk_level TEXT NOT NULL,
operator_user_id TEXT,
operator_user_name TEXT,
approver_user_ids_json TEXT NOT NULL,
reason TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_approval_task_id ON approval_request (task_id);
CREATE INDEX IF NOT EXISTS idx_approval_status ON approval_request (approval_status);
CREATE TABLE IF NOT EXISTS tool_call (
tool_call_id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
step_id TEXT,
tool_name TEXT NOT NULL,
request_payload_json TEXT NOT NULL,
response_payload_json TEXT NOT NULL,
success INTEGER NOT NULL,
duration_ms INTEGER,
started_at TEXT,
finished_at TEXT
);
CREATE INDEX IF NOT EXISTS idx_tool_call_task_id ON tool_call (task_id);
CREATE INDEX IF NOT EXISTS idx_tool_call_tool_name ON tool_call (tool_name);
CREATE TABLE IF NOT EXISTS audit_log (
audit_id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
action TEXT NOT NULL,
operator_user_id TEXT,
operator_user_name TEXT,
target TEXT,
result TEXT NOT NULL,
detail_json TEXT NOT NULL,
timestamp TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_audit_task_id ON audit_log (task_id);
CREATE INDEX IF NOT EXISTS idx_audit_action ON audit_log (action);
CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_log (timestamp);
5. 后续演进建议
- 当 demo 从单机联调进入多人并发联调时,优先切换到
PostgreSQL。 - 切换后可将
parsed_intent_json、missing_slots_json、detail_json等字段升级为JSONB。 - 若后续引入独立 worker 和多实例抢任务,再补
task_step、edge_task等表。