Files
X-Agents/server/migrations/agent_system.sql
DESKTOP-72TV0V4\caoxiaozhu e5ea4ff359 feat: 更新数据库和后端服务
- 新增chat_sessions和chat_groups数据库表
- 更新skill_handler和model相关接口
- 修改main.go注册新路由

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 14:33:54 +08:00

106 lines
3.9 KiB
SQL

-- =====================================================
-- Agent System Database Migration
-- Run this script if you want vector-based memory storage
-- Note: Requires pgvector extension for PostgreSQL
-- =====================================================
-- Enable pgvector extension (PostgreSQL only)
-- CREATE EXTENSION IF NOT EXISTS vector;
-- Agent Memory with Vector Embedding (Optional - for vector search)
-- This table is optional. If not using vector search, use agent_memories table instead.
-- CREATE TABLE IF NOT EXISTS agent_memory_vectors (
-- id VARCHAR(191) PRIMARY KEY,
-- agent_id VARCHAR(191) NOT NULL,
-- user_id VARCHAR(191),
-- content TEXT NOT NULL,
-- embedding vector(1536), -- Adjust dimension based on your embedding model
-- memory_type VARCHAR(20), -- experience/preference/conversation
-- importance INT DEFAULT 5,
-- created_at DATETIME(3),
-- updated_at DATETIME(3),
-- INDEX idx_agent_vector USING ivfflat (agent_id, embedding vector_cosine_ops),
-- INDEX idx_importance (agent_id, importance DESC)
-- );
-- For MySQL (without vector support, use text search instead)
CREATE TABLE IF NOT EXISTS agent_memory_vectors (
id VARCHAR(191) PRIMARY KEY,
agent_id VARCHAR(191) NOT NULL,
user_id VARCHAR(191),
content TEXT NOT NULL,
embedding_text TEXT, -- Store serialized vector for MySQL
memory_type VARCHAR(20),
importance INT DEFAULT 5,
created_at DATETIME(3),
updated_at DATETIME(3),
INDEX idx_agent_memory_agent (agent_id),
INDEX idx_agent_memory_user (agent_id, user_id),
INDEX idx_importance (agent_id, importance DESC)
);
-- Agent Task Indexes
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agent_user ON agent_tasks(agent_id, user_id);
CREATE INDEX IF NOT EXISTS idx_agent_tasks_session ON agent_tasks(session_id);
CREATE INDEX IF NOT EXISTS idx_agent_tasks_status ON agent_tasks(status);
CREATE INDEX IF NOT EXISTS idx_agent_tasks_created ON agent_tasks(created_at DESC);
-- Agent Team Indexes
CREATE INDEX IF NOT EXISTS idx_agent_team_supervisor ON agent_teams(supervisor_agent_id);
CREATE INDEX IF NOT EXISTS idx_agent_team_member ON agent_teams(member_agent_id);
-- Chat Sessions Table
CREATE TABLE IF NOT EXISTS chat_sessions (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
agent_id VARCHAR(36),
title VARCHAR(255),
model_id VARCHAR(36),
status VARCHAR(20) DEFAULT 'active',
created_at DATETIME(3),
updated_at DATETIME(3),
INDEX idx_chat_sessions_user (user_id),
INDEX idx_chat_sessions_agent (agent_id),
INDEX idx_chat_sessions_updated (updated_at DESC)
);
-- Chat Messages Table
CREATE TABLE IF NOT EXISTS chat_messages (
id VARCHAR(36) PRIMARY KEY,
session_id VARCHAR(36) NOT NULL,
role VARCHAR(20),
content TEXT,
tokens_used INT DEFAULT 0,
duration_ms INT DEFAULT 0,
metadata TEXT,
created_at DATETIME(3),
INDEX idx_chat_messages_session (session_id),
INDEX idx_chat_messages_created (created_at ASC)
);
-- Chat Groups Table
CREATE TABLE IF NOT EXISTS chat_groups (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
agent_ids TEXT,
status VARCHAR(20) DEFAULT 'active',
created_at DATETIME(3),
updated_at DATETIME(3),
INDEX idx_chat_groups_user (user_id)
);
-- Agent Memory Indexes
CREATE INDEX IF NOT EXISTS idx_agent_memory_agent ON agent_memories(agent_id);
CREATE INDEX IF NOT EXISTS idx_agent_memory_user ON agent_memories(agent_id, user_id);
CREATE INDEX IF NOT EXISTS idx_agent_memory_type ON agent_memories(memory_type);
-- Agent Skills Indexes
CREATE INDEX IF NOT EXISTS idx_agent_skills_agent ON agent_skills(agent_id);
CREATE INDEX IF NOT EXISTS idx_agent_skills_skill ON agent_skills(skill_id);
-- Agent Knowledge Base Indexes
CREATE INDEX IF NOT EXISTS idx_agent_kb_agent ON agent_knowledge_bases(agent_id);
CREATE INDEX IF NOT EXISTS idx_agent_kb_kb ON agent_knowledge_bases(knowledge_base_id);