-- ============================================================================ -- 技能表(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);