agent_skill.sql 4.2 KB

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