| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- -- ============================================================================
- -- Agent 工具清单表(agent_tool)
- --
- -- 设计要点:
- -- 1) 这张表是**代码的镜像**:应用启动时用反射扫出 module/agent/tools 下所有 @Tool 方法,
- -- 再与 agent 运行时装配(工具组、入参 JSON Schema)对照,按工具名 upsert;
- -- 2) 页面「插件与技能 → 工具」只读展示,不做人工维护,因此没有业务外键、也没有编辑入口;
- -- 3) code 里删掉的工具不删行,只置 status = 'DELETED'(保留行便于追溯历史工具);
- -- 4) tool_name 唯一:模型调用工具只认它,重名会让调用落到不确定的实现。
- --
- -- 执行库:PostgreSQL(master)
- --
- -- ⚠️ 建表由**人工执行本脚本**完成,应用启动时不做 DDL。
- -- 项目约定:固定表名的建表语句只放 sql/ 脚本;代码里 @Update("CREATE TABLE ...") 仅限
- -- 表名动态生成、无法预先写死的场景(如 rag_ws{workspaceId}_d{dims} 向量表)。
- -- 表不存在时应用仍能正常启动,只是工具清单不同步、页面展示空清单(启动日志会提示执行本脚本)。
- -- ============================================================================
- CREATE TABLE IF NOT EXISTS agent_tool (
- id BIGINT PRIMARY KEY, -- 应用侧生成(雪花 ID)
- tool_name VARCHAR(128) NOT NULL, -- 工具名(@Tool(name=...)),模型调用标识
- tool_class VARCHAR(255), -- 声明该工具的类(便于从表反查代码)
- tool_method VARCHAR(128), -- 方法名
- group_code VARCHAR(32), -- 工具组编码:call/trans/track/graph/person/file;基础工具为 base
- group_label VARCHAR(64), -- 工具组中文名
- group_description TEXT, -- 工具组描述(写给模型的「什么时候该激活我」)
- group_sort INTEGER, -- 分组排序位(业务组按注册顺序,基础工具最后)
- default_active BOOLEAN, -- 是否新会话默认装备
- description TEXT, -- 工具描述(@Tool(description=...))
- parameters JSONB, -- 入参 JSON Schema(框架从 @ToolParam 推导,原样存)
- read_only BOOLEAN, -- 是否只读工具(@Tool(readOnly=true))
- status VARCHAR(16), -- ACTIVE | DELETED
- create_at TIMESTAMP,
- update_at TIMESTAMP
- );
- -- 同步按工具名 upsert,唯一约束放在数据库侧兜底
- CREATE UNIQUE INDEX IF NOT EXISTS uk_agent_tool_name ON agent_tool (tool_name);
- COMMENT ON TABLE agent_tool IS 'Agent 工具清单:启动时反射扫描 @Tool 后与运行时装配合并同步,页面只读';
- COMMENT ON COLUMN agent_tool.tool_name IS '工具名(@Tool(name=...)):模型调用时使用的标识,全表唯一';
- COMMENT ON COLUMN agent_tool.tool_class IS '声明该工具的类,便于从表反查代码';
- COMMENT ON COLUMN agent_tool.tool_method IS '方法名,与 tool_class 一起定位实现';
- COMMENT ON COLUMN agent_tool.group_code IS '工具组编码;不属于任何业务组的归到 base(基础工具,会话里始终可用)';
- COMMENT ON COLUMN agent_tool.group_label IS '工具组中文名(页面分组标题)';
- COMMENT ON COLUMN agent_tool.group_description IS '工具组描述原文,写给模型看「什么时候该激活我」';
- COMMENT ON COLUMN agent_tool.group_sort IS '分组排序位:业务组按注册表顺序,基础工具排最后';
- COMMENT ON COLUMN agent_tool.default_active IS '是否新会话默认装备(其余组由模型用 reset_equipped_tools 按需激活)';
- COMMENT ON COLUMN agent_tool.description IS '工具描述,模型选型的主要依据';
- COMMENT ON COLUMN agent_tool.parameters IS '入参 JSON Schema({type,properties,required,$defs}),页面按它渲染参数表';
- COMMENT ON COLUMN agent_tool.read_only IS '是否只读工具(当前全部为只读:不写案件数据)';
- COMMENT ON COLUMN agent_tool.status IS 'ACTIVE | DELETED;代码里已删除的工具置 DELETED 而不删行';
|