168 lines
11 KiB
SQL
168 lines
11 KiB
SQL
-- =============================================================================
|
||
-- pbl_agent_runtime M4a 契约层 DDL(MySQL 方言)
|
||
-- 对应 QC 退回 #3/#7:恢复 pbl_tool_registry(工具注册表)+ 新增 pbl_llm_call_log
|
||
-- (LLM 调用留痕:超时/重试/限流/兜底),使数据表回到技能声明的 6 张。
|
||
--
|
||
-- 6 张表:
|
||
-- 1. pbl_agent_def Agent 定义(designer 可写 / critic 零写)
|
||
-- 2. pbl_tool_registry 工具注册表(13 启用 / 9 禁用,含 pbl.publish 禁用)
|
||
-- 3. pbl_agent_trace Agent 执行轨迹(第28章 7 要素,append-only)
|
||
-- 4. pbl_agent_tool_call 工具调用明细(服务端裁决留痕,append-only)
|
||
-- 5. pbl_approval 人工审批单(14.2 四类,无绕过路径)
|
||
-- 6. pbl_llm_call_log LLM 调用日志(append-only)
|
||
--
|
||
-- 库名由 ServerEnv().get_module_dbname('pbl_agent_runtime') 决定,脚本内不硬编码库名。
|
||
-- 离线契约层使用同构 sqlite DDL(pbl_agent_runtime/m4a_store.py:DDL_SQLITE)。
|
||
-- =============================================================================
|
||
|
||
-- 1) Agent 定义 ----------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS pbl_agent_def (
|
||
id VARCHAR(40) NOT NULL COMMENT '主键',
|
||
tenant_id VARCHAR(40) NOT NULL COMMENT '租户ID(所有读写强制打头)',
|
||
agent_code VARCHAR(64) NOT NULL COMMENT 'Agent 编码:designer / critic',
|
||
agent_name VARCHAR(128) COMMENT 'Agent 名称',
|
||
role VARCHAR(32) COMMENT '角色:designer / critic',
|
||
write_scope VARCHAR(255) DEFAULT 'none' COMMENT '可写域;critic 固定 none',
|
||
can_write TINYINT(1) DEFAULT 0 COMMENT '是否可写:critic=0(零写权限)',
|
||
perms TEXT COMMENT '持有权限码 JSON 数组',
|
||
model VARCHAR(64) COMMENT '绑定模型',
|
||
system_prompt TEXT COMMENT '系统提示词',
|
||
status VARCHAR(16) DEFAULT 'active' COMMENT 'active / disabled',
|
||
created_at DATETIME COMMENT '创建时间',
|
||
updated_at DATETIME COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY ux_agent_def_tenant_code (tenant_id, agent_code)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='M4a Agent 定义(Designer/Critic)';
|
||
|
||
-- 2) 工具注册表 ----------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS pbl_tool_registry (
|
||
id VARCHAR(40) NOT NULL COMMENT '主键',
|
||
tenant_id VARCHAR(40) NOT NULL COMMENT '租户ID',
|
||
tool_key VARCHAR(128) NOT NULL COMMENT '工具键:如 pbl.publish / blueprint.write',
|
||
tool_name VARCHAR(128) COMMENT '工具名称',
|
||
category VARCHAR(32) COMMENT '分类:blueprint/compiler/evidence/...',
|
||
write_class TINYINT(1) DEFAULT 0 COMMENT '1=写类工具(critic 一律 DENY)',
|
||
audit_append TINYINT(1) DEFAULT 0 COMMENT '1=只追加留痕类',
|
||
status VARCHAR(16) DEFAULT 'disabled' COMMENT 'enabled / disabled(默认 disabled=fail-closed)',
|
||
required_perm VARCHAR(128) COMMENT '调用所需权限码',
|
||
approval_type VARCHAR(32) COMMENT '强制审批类型(四类之一),NULL=无需审批',
|
||
params_schema TEXT COMMENT '入参 JSON Schema',
|
||
risk_level VARCHAR(16) DEFAULT 'medium' COMMENT 'low/medium/high/forbidden',
|
||
reason VARCHAR(512) COMMENT '禁用原因(审计可读)',
|
||
sort_no INT DEFAULT 0 COMMENT '排序',
|
||
version INT DEFAULT 1 COMMENT '版本号(每次变更 +1)',
|
||
created_at DATETIME COMMENT '创建时间',
|
||
updated_at DATETIME COMMENT '更新时间',
|
||
created_by VARCHAR(64) COMMENT '创建人',
|
||
updated_by VARCHAR(64) COMMENT '最后变更人',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY ux_tool_registry_tenant_key (tenant_id, tool_key),
|
||
KEY ix_tool_registry_status (tenant_id, status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='M4a 工具注册表(13 启用 / 9 禁用)';
|
||
|
||
-- 3) Agent 执行轨迹(append-only)---------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS pbl_agent_trace (
|
||
id VARCHAR(40) NOT NULL COMMENT '主键',
|
||
tenant_id VARCHAR(40) NOT NULL COMMENT '租户ID',
|
||
trace_id VARCHAR(40) NOT NULL COMMENT '轨迹ID',
|
||
run_id VARCHAR(40) COMMENT '运行ID',
|
||
step_no INT DEFAULT 0 COMMENT '步序',
|
||
stage VARCHAR(32) COMMENT '阶段:designer_run/critic_run/adjudicate/...',
|
||
who VARCHAR(64) COMMENT '7要素-谁',
|
||
occurred_at DATETIME COMMENT '7要素-何时',
|
||
what TEXT COMMENT '7要素-做了什么',
|
||
why TEXT COMMENT '7要素-为什么',
|
||
how TEXT COMMENT '7要素-怎么做',
|
||
result TEXT COMMENT '7要素-结果',
|
||
evidence_ref VARCHAR(255) COMMENT '7要素-证据引用',
|
||
tool_key VARCHAR(128) COMMENT '关联工具',
|
||
decision VARCHAR(16) COMMENT 'ALLOW / DENY / READ_ONLY',
|
||
created_at DATETIME COMMENT '创建时间',
|
||
PRIMARY KEY (id),
|
||
KEY ix_trace_tenant_trace (tenant_id, trace_id),
|
||
KEY ix_trace_run (tenant_id, run_id, step_no)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='M4a Agent 执行轨迹(append-only,禁 UPDATE/DELETE)';
|
||
|
||
-- 4) 工具调用明细(append-only)------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS pbl_agent_tool_call (
|
||
id VARCHAR(40) NOT NULL COMMENT '主键',
|
||
tenant_id VARCHAR(40) NOT NULL COMMENT '租户ID',
|
||
trace_id VARCHAR(40) COMMENT '轨迹ID',
|
||
call_no INT DEFAULT 0 COMMENT '同轨迹内调用序号',
|
||
agent_code VARCHAR(64) COMMENT '发起 Agent',
|
||
tool_key VARCHAR(128) COMMENT '被裁决工具',
|
||
params_json TEXT COMMENT '入参快照',
|
||
decision VARCHAR(16) COMMENT 'ALLOW / DENY',
|
||
denied_at_step VARCHAR(32) COMMENT 'DENY 命中步(S1~S8 键名)',
|
||
reason_code VARCHAR(64) COMMENT '机器可读拒绝码',
|
||
approval_id VARCHAR(40) COMMENT '关联审批单',
|
||
latency_ms INT DEFAULT 0 COMMENT '裁决耗时',
|
||
created_at DATETIME COMMENT '创建时间',
|
||
PRIMARY KEY (id),
|
||
KEY ix_tool_call_trace (tenant_id, trace_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='M4a 服务端裁决留痕(append-only)';
|
||
|
||
-- 5) 人工审批单 ----------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS pbl_approval (
|
||
id VARCHAR(40) NOT NULL COMMENT '主键',
|
||
tenant_id VARCHAR(40) NOT NULL COMMENT '租户ID',
|
||
approval_id VARCHAR(40) NOT NULL COMMENT '审批单号',
|
||
approval_type VARCHAR(32) NOT NULL COMMENT 'publish/compile_execute/blueprint_approve/tool_registry_change',
|
||
title VARCHAR(255) COMMENT '标题',
|
||
payload_json TEXT COMMENT '审批载荷',
|
||
status VARCHAR(16) DEFAULT 'pending' COMMENT 'pending/approved/rejected/expired',
|
||
requested_by VARCHAR(64) COMMENT '发起人',
|
||
agent_code VARCHAR(64) COMMENT '关联 Agent',
|
||
tool_key VARCHAR(128) COMMENT '关联工具',
|
||
decided_by VARCHAR(64) COMMENT '裁决人(必须真人,禁 agent)',
|
||
decided_at DATETIME COMMENT '裁决时间',
|
||
decision_comment VARCHAR(512) COMMENT '裁决意见',
|
||
expires_at DATETIME COMMENT '过期时间',
|
||
created_at DATETIME COMMENT '创建时间',
|
||
updated_at DATETIME COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY ux_approval_tenant_id (tenant_id, approval_id),
|
||
KEY ix_approval_status (tenant_id, status, approval_type)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='M4a 四类强制人工审批(无绕过路径)';
|
||
|
||
-- 6) LLM 调用日志(append-only)------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS pbl_llm_call_log (
|
||
id VARCHAR(40) NOT NULL COMMENT '主键',
|
||
tenant_id VARCHAR(40) NOT NULL COMMENT '租户ID',
|
||
agent_code VARCHAR(64) COMMENT 'designer / critic',
|
||
run_id VARCHAR(40) COMMENT '运行ID',
|
||
purpose VARCHAR(32) COMMENT 'designer_run / critic_run',
|
||
model VARCHAR(64) COMMENT '模型名',
|
||
attempt_no INT DEFAULT 1 COMMENT '第几次尝试',
|
||
status VARCHAR(16) DEFAULT 'ok' COMMENT 'ok/timeout/error/rate_limited/fallback',
|
||
latency_ms INT DEFAULT 0 COMMENT '耗时',
|
||
timeout_ms INT DEFAULT 0 COMMENT '超时阈值',
|
||
retry_count INT DEFAULT 0 COMMENT '重试次数',
|
||
rate_limited TINYINT(1) DEFAULT 0 COMMENT '是否被限流',
|
||
fallback_used TINYINT(1) DEFAULT 0 COMMENT '是否走兜底',
|
||
prompt_chars INT DEFAULT 0 COMMENT '提示词长度',
|
||
prompt_hash CHAR(64) COMMENT '提示词 SHA256(不落原文,防泄漏)',
|
||
response_chars INT DEFAULT 0 COMMENT '响应长度',
|
||
tokens_in INT DEFAULT 0 COMMENT '输入 token',
|
||
tokens_out INT DEFAULT 0 COMMENT '输出 token',
|
||
error_code VARCHAR(64) COMMENT '错误码',
|
||
error_msg VARCHAR(512) COMMENT '错误摘要',
|
||
created_at DATETIME COMMENT '创建时间',
|
||
PRIMARY KEY (id),
|
||
KEY ix_llm_log_tenant_agent (tenant_id, agent_code, created_at),
|
||
KEY ix_llm_log_status (tenant_id, status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='M4a LLM 调用留痕(超时/重试/限流/兜底,append-only)';
|
||
|
||
-- =============================================================================
|
||
-- 种子数据(幂等;实际由 seed_registry() 写入,此处仅作 DBA 参考与灾备重建)
|
||
-- 13 启用工具
|
||
-- =============================================================================
|
||
-- blueprint.read / blueprint.write / blueprint.validate / blueprint.approve(审批)
|
||
-- compiler.compile / compiler.execute(审批) / evidence.collect / assessment.score
|
||
-- kdb.query / runtime.event / agent.trace_write / approval.create / tool_registry.read
|
||
--
|
||
-- 9 禁用工具(risk_level=forbidden,status=disabled)
|
||
-- pbl.publish / blueprint.publish_auto / compiler.autorun / kdb.write / tenant.switch
|
||
-- rbac.grant / approval.auto_decide / trace.delete / llm.raw_exec
|
||
-- =============================================================================
|