| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- -- ============================================================================
- -- 技能表(agentscope_skills / agentscope_skill_resources)+ 启停表(agent_skill_state)
- --
- -- 设计要点:
- -- 1) 技能本体交给官方 JDBC 技能仓库(io.agentscope.extensions.jdbc.skill.JdbcAgentSkillRepository),
- -- 两张表的列名/类型/约束必须与方言实现(PostgresDialect)完全一致,
- -- 官方仓库初始化时会做结构校验,改列会导致启动失败;
- -- 2) 官方用 namespace 做作用域隔离:唯一键 UNIQUE(namespace, name),同一 namespace 内名字唯一、
- -- 跨 namespace 可重名。本项目一个用户一个 namespace(namespace = 登录用户 ID 字符串),
- -- 所以「不同用户拥有同名技能」是允许的,也不需要额外的归属表;
- -- 3) 官方没有启停概念,{@code enabled} 记在本项目自建的 agent_skill_state 里,按
- -- (user_id, skill_name) 唯一 —— 启停是每个用户自己的开关,不影响别人;
- -- 4) 技能正文存 skill_content,frontmatter 解析出的 metadata 存 metadata_json;
- -- 附属文件存 agentscope_skill_resources(resource_path 为相对路径,二进制按 "base64:" 前缀存文本)。
- --
- -- 执行库:PostgreSQL(master)
- --
- -- ⚠️ 建表由**人工执行本脚本**完成,应用启动时不做 DDL(与 agent_tool_pack.sql 同约定)。
- -- 方言配置为 autoCreateTable(false),表不存在时应用启动即报错,属预期行为。
- --
- -- ⚠️ 本脚本是「开发阶段重建」:会先删掉旧结构的两张技能表和旧的 agent_skill_meta。
- -- 早期版本(2.1.0-BETA1)建的是无 namespace 的表,结构不兼容,必须重建。
- -- 如果库里已有需要保留的技能数据,先导出再执行。
- -- ============================================================================
- DROP TABLE IF EXISTS agentscope_skill_resources;
- DROP TABLE IF EXISTS agentscope_skills;
- DROP TABLE IF EXISTS agent_skill_meta;
- -- ---------------------------------------------------------------------------
- -- 官方表 1:技能本体(按 namespace 分区)
- -- ---------------------------------------------------------------------------
- CREATE TABLE agentscope_skills (
- id BIGSERIAL PRIMARY KEY,
- namespace VARCHAR(64) NOT NULL DEFAULT 'default',
- name VARCHAR(255) NOT NULL,
- description TEXT NOT NULL,
- skill_content TEXT NOT NULL,
- source VARCHAR(255) NOT NULL,
- metadata_json TEXT NULL,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- CONSTRAINT uk_namespace_name UNIQUE (namespace, name)
- );
- -- ---------------------------------------------------------------------------
- -- 官方表 2:技能附属文件(复合主键 + 级联删除 + namespace 索引)
- -- ---------------------------------------------------------------------------
- CREATE TABLE agentscope_skill_resources (
- id BIGINT NOT NULL,
- namespace VARCHAR(64) NOT NULL DEFAULT 'default',
- resource_path VARCHAR(500) NOT NULL,
- resource_content TEXT NOT NULL,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (id, resource_path),
- FOREIGN KEY (id) REFERENCES agentscope_skills(id) ON DELETE CASCADE
- );
- CREATE INDEX agentscope_skill_resources_namespace_idx
- ON agentscope_skill_resources (namespace);
- -- ---------------------------------------------------------------------------
- -- 启停(本项目自建;一个用户的技能开关,不影响其他用户)
- -- ---------------------------------------------------------------------------
- CREATE TABLE agent_skill_state (
- id BIGINT PRIMARY KEY, -- 应用侧生成(雪花 ID)
- user_id BIGINT NOT NULL, -- 登录用户 ID(= 技能所在的 namespace)
- skill_name VARCHAR(255) NOT NULL,
- enabled BOOLEAN NOT NULL DEFAULT TRUE, -- false = 不进入该用户的技能目录
- create_at TIMESTAMP DEFAULT now(),
- update_at TIMESTAMP DEFAULT now()
- );
- CREATE UNIQUE INDEX uk_agent_skill_state_user_name ON agent_skill_state(user_id, skill_name);
|