feat(AISVC-T7): 嵌入模型可插拔设计与文档解析支持 [AC-AISVC-29, AC-AISVC-30, AC-AISVC-31, AC-AISVC-32, AC-AISVC-33, AC-AISVC-34, AC-AISVC-35, AC-AISVC-36, AC-AISVC-37, AC-AISVC-38, AC-AISVC-39, AC-AISVC-40, AC-AISVC-41]
- 新增 EmbeddingProvider 抽象基类和工厂模式 [AC-AISVC-29, AC-AISVC-30]
- 实现 OllamaEmbeddingProvider 和 OpenAIEmbeddingProvider [AC-AISVC-29, AC-AISVC-30]
- 新增 EmbeddingConfigManager 支持配置热更新 [AC-AISVC-31, AC-AISVC-32]
- 新增 DocumentParser 抽象接口和工厂类 [AC-AISVC-33]
- 实现 PDF/Word/Excel/Text 文档解析器 [AC-AISVC-33, AC-AISVC-34, AC-AISVC-35]
- 新增嵌入管理 API 端点 [AC-AISVC-38, AC-AISVC-39, AC-AISVC-40, AC-AISVC-41]
- 更新文档上传流程支持多格式文档解析 [AC-AISVC-36, AC-AISVC-37]
- 更新 OpenAPI 契约添加嵌入管理接口
- 添加数据库初始化脚本
- 更新规范文档标记 Phase 7 完成
2026-02-24 15:08:08 +00:00
|
|
|
-- AI Service Database Initialization Script
|
|
|
|
|
-- Version: 0.2.0
|
|
|
|
|
-- Description: Creates all required tables for AI Service with multi-tenant support
|
|
|
|
|
--
|
|
|
|
|
-- Usage:
|
|
|
|
|
-- psql -U postgres -f scripts/init_db.sql
|
|
|
|
|
-- Or connect to ai_service database and run this script
|
|
|
|
|
|
|
|
|
|
-- ============================================
|
|
|
|
|
-- Chat Sessions Table
|
|
|
|
|
-- ============================================
|
|
|
|
|
CREATE TABLE IF NOT EXISTS chat_sessions (
|
|
|
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
|
|
|
tenant_id VARCHAR NOT NULL,
|
|
|
|
|
session_id VARCHAR NOT NULL,
|
|
|
|
|
channel_type VARCHAR,
|
|
|
|
|
metadata JSON,
|
|
|
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
|
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- ============================================
|
|
|
|
|
-- Chat Messages Table
|
|
|
|
|
-- ============================================
|
|
|
|
|
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
|
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
|
|
|
tenant_id VARCHAR NOT NULL,
|
|
|
|
|
session_id VARCHAR NOT NULL,
|
|
|
|
|
role VARCHAR NOT NULL,
|
|
|
|
|
content TEXT NOT NULL,
|
|
|
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- ============================================
|
|
|
|
|
-- Knowledge Bases Table
|
|
|
|
|
-- ============================================
|
|
|
|
|
CREATE TABLE IF NOT EXISTS knowledge_bases (
|
|
|
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
|
|
|
tenant_id VARCHAR NOT NULL,
|
|
|
|
|
name VARCHAR NOT NULL,
|
|
|
|
|
description VARCHAR,
|
|
|
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
|
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- ============================================
|
|
|
|
|
-- Documents Table
|
|
|
|
|
-- ============================================
|
|
|
|
|
CREATE TABLE IF NOT EXISTS documents (
|
|
|
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
|
|
|
tenant_id VARCHAR NOT NULL,
|
|
|
|
|
kb_id VARCHAR NOT NULL,
|
|
|
|
|
file_name VARCHAR NOT NULL,
|
|
|
|
|
file_path VARCHAR,
|
|
|
|
|
file_size INTEGER,
|
|
|
|
|
file_type VARCHAR,
|
|
|
|
|
status VARCHAR NOT NULL DEFAULT 'pending',
|
|
|
|
|
error_msg VARCHAR,
|
|
|
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
|
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- ============================================
|
|
|
|
|
-- Index Jobs Table
|
|
|
|
|
-- ============================================
|
|
|
|
|
CREATE TABLE IF NOT EXISTS index_jobs (
|
|
|
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
|
|
|
tenant_id VARCHAR NOT NULL,
|
|
|
|
|
doc_id UUID NOT NULL,
|
|
|
|
|
status VARCHAR NOT NULL DEFAULT 'pending',
|
|
|
|
|
progress INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
error_msg VARCHAR,
|
|
|
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
|
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
|
|
|
);
|
|
|
|
|
|
2026-02-25 18:52:50 +00:00
|
|
|
-- ============================================
|
|
|
|
|
-- API Keys Table [AC-AISVC-50]
|
|
|
|
|
-- ============================================
|
|
|
|
|
CREATE TABLE IF NOT EXISTS api_keys (
|
|
|
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
|
|
|
key VARCHAR NOT NULL UNIQUE,
|
|
|
|
|
name VARCHAR NOT NULL,
|
|
|
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
|
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
|
|
|
);
|
|
|
|
|
|
feat(AISVC-T7): 嵌入模型可插拔设计与文档解析支持 [AC-AISVC-29, AC-AISVC-30, AC-AISVC-31, AC-AISVC-32, AC-AISVC-33, AC-AISVC-34, AC-AISVC-35, AC-AISVC-36, AC-AISVC-37, AC-AISVC-38, AC-AISVC-39, AC-AISVC-40, AC-AISVC-41]
- 新增 EmbeddingProvider 抽象基类和工厂模式 [AC-AISVC-29, AC-AISVC-30]
- 实现 OllamaEmbeddingProvider 和 OpenAIEmbeddingProvider [AC-AISVC-29, AC-AISVC-30]
- 新增 EmbeddingConfigManager 支持配置热更新 [AC-AISVC-31, AC-AISVC-32]
- 新增 DocumentParser 抽象接口和工厂类 [AC-AISVC-33]
- 实现 PDF/Word/Excel/Text 文档解析器 [AC-AISVC-33, AC-AISVC-34, AC-AISVC-35]
- 新增嵌入管理 API 端点 [AC-AISVC-38, AC-AISVC-39, AC-AISVC-40, AC-AISVC-41]
- 更新文档上传流程支持多格式文档解析 [AC-AISVC-36, AC-AISVC-37]
- 更新 OpenAPI 契约添加嵌入管理接口
- 添加数据库初始化脚本
- 更新规范文档标记 Phase 7 完成
2026-02-24 15:08:08 +00:00
|
|
|
-- ============================================
|
|
|
|
|
-- Indexes
|
|
|
|
|
-- ============================================
|
|
|
|
|
|
|
|
|
|
-- Chat Sessions Indexes
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_chat_sessions_tenant_id ON chat_sessions (tenant_id);
|
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS ix_chat_sessions_tenant_session ON chat_sessions (tenant_id, session_id);
|
|
|
|
|
|
|
|
|
|
-- Chat Messages Indexes
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_chat_messages_tenant_id ON chat_messages (tenant_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_chat_messages_tenant_session ON chat_messages (tenant_id, session_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_chat_messages_tenant_session_created ON chat_messages (tenant_id, session_id, created_at);
|
|
|
|
|
|
|
|
|
|
-- Knowledge Bases Indexes
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_knowledge_bases_tenant_id ON knowledge_bases (tenant_id);
|
|
|
|
|
|
|
|
|
|
-- Documents Indexes
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_documents_tenant_id ON documents (tenant_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_documents_tenant_kb ON documents (tenant_id, kb_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_documents_tenant_status ON documents (tenant_id, status);
|
|
|
|
|
|
|
|
|
|
-- Index Jobs Indexes
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_index_jobs_tenant_id ON index_jobs (tenant_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_index_jobs_tenant_doc ON index_jobs (tenant_id, doc_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_index_jobs_tenant_status ON index_jobs (tenant_id, status);
|
|
|
|
|
|
2026-02-25 18:52:50 +00:00
|
|
|
-- API Keys Indexes [AC-AISVC-50]
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_api_keys_key ON api_keys (key);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_api_keys_is_active ON api_keys (is_active);
|
|
|
|
|
|
feat(AISVC-T7): 嵌入模型可插拔设计与文档解析支持 [AC-AISVC-29, AC-AISVC-30, AC-AISVC-31, AC-AISVC-32, AC-AISVC-33, AC-AISVC-34, AC-AISVC-35, AC-AISVC-36, AC-AISVC-37, AC-AISVC-38, AC-AISVC-39, AC-AISVC-40, AC-AISVC-41]
- 新增 EmbeddingProvider 抽象基类和工厂模式 [AC-AISVC-29, AC-AISVC-30]
- 实现 OllamaEmbeddingProvider 和 OpenAIEmbeddingProvider [AC-AISVC-29, AC-AISVC-30]
- 新增 EmbeddingConfigManager 支持配置热更新 [AC-AISVC-31, AC-AISVC-32]
- 新增 DocumentParser 抽象接口和工厂类 [AC-AISVC-33]
- 实现 PDF/Word/Excel/Text 文档解析器 [AC-AISVC-33, AC-AISVC-34, AC-AISVC-35]
- 新增嵌入管理 API 端点 [AC-AISVC-38, AC-AISVC-39, AC-AISVC-40, AC-AISVC-41]
- 更新文档上传流程支持多格式文档解析 [AC-AISVC-36, AC-AISVC-37]
- 更新 OpenAPI 契约添加嵌入管理接口
- 添加数据库初始化脚本
- 更新规范文档标记 Phase 7 完成
2026-02-24 15:08:08 +00:00
|
|
|
-- ============================================
|
|
|
|
|
-- Verification
|
|
|
|
|
-- ============================================
|
|
|
|
|
-- Run this to verify all tables are created:
|
|
|
|
|
-- SELECT tablename FROM pg_tables WHERE schemaname = 'public' ORDER BY tablename;
|