CREATE SCHEMA IF NOT EXISTS ai;

-- AI智能体配置
DROP TABLE IF EXISTS ai.tb_agent CASCADE;
CREATE TABLE ai.tb_agent(
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    agent_id           VARCHAR(50)   NOT NULL,               -- 智能体ID
    name               VARCHAR(50)   NOT NULL,               -- 智能体名称
    description        VARCHAR(500)  DEFAULT NULL,           -- 智能体描述
    link               VARCHAR(500)  DEFAULT NULL,           -- 智能体url
    api_key            VARCHAR(500)  NOT NULL,               -- dify智能体APIKEY
    is_outer           BOOLEAN       DEFAULT false,          -- 是否是对外智能体，未登录可用
    introduce          VARCHAR(500)  NOT NULL,               -- 引导词
    prompt_cards       JSONB         DEFAULT '[]'::jsonb,    -- 提示卡片数组 [{file_id:'', prompt:''}]
    category           VARCHAR(50)   NOT NULL,               -- 分类
    creator            VARCHAR(50)   DEFAULT NULL,           -- 创建者
    updater            VARCHAR(50)   DEFAULT NULL,           -- 更新者
    create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
    update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
    delete_time        TIMESTAMPTZ   DEFAULT NULL,           -- 删除时间
    deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
    PRIMARY KEY (agent_id),
    UNIQUE (optsn),
    UNIQUE (api_key)
);

-- AI智能体对话
DROP TABLE IF EXISTS ai.tb_chat CASCADE;
CREATE TABLE ai.tb_chat(
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    chat_id            VARCHAR(50)   NOT NULL,               -- 对话ID
    agent_id           VARCHAR(50)   NOT NULL,               -- 智能体ID
    user_id            VARCHAR(50)   NOT NULL,               -- 用户ID
    user_type          BOOLEAN       NOT NULL DEFAULT true,  -- 用户类型 true-系统内部人员 false-系统外部人员
    title              VARCHAR(500)  NOT NULL,               -- 对话标题
    channel            VARCHAR(50)   DEFAULT 'agent',        -- 对话渠道 agent、wechat
    create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
    update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
    delete_time        TIMESTAMPTZ   DEFAULT NULL,           -- 删除时间
    deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
    PRIMARY KEY (chat_id),
    UNIQUE (optsn)
);

-- AI智能体对话消息
DROP TABLE IF EXISTS ai.tb_chat_message CASCADE;
CREATE TABLE ai.tb_chat_message(
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    message_id         VARCHAR(50)   NOT NULL,               -- 消息ID
    dify_message_id    VARCHAR(100)  DEFAULT NULL,           -- Dify消息ID
    chat_id            VARCHAR(50)   NOT NULL,               -- 对话ID
    role               VARCHAR(50)   NOT NULL,               -- 角色：user-用户/ai-智能体/recipient-来客
    content            TEXT          NOT NULL,               -- 消息内容
    files              VARCHAR(50)[] DEFAULT NULL,           -- 文件id数组
    comment            VARCHAR(50)  DEFAULT NULL,           -- 评价
    create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
    update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
    delete_time        TIMESTAMPTZ   DEFAULT NULL,           -- 删除时间
    deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
    PRIMARY KEY (message_id),
    UNIQUE (optsn)
);


-- 知识库配置 bidding和workcase2个服务使用
DROP TABLE IF EXISTS ai.tb_knowledge CASCADE;
CREATE TABLE ai.tb_knowledge(
    -- 知识库dify相关配置
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    knowledge_id       VARCHAR(50)   NOT NULL,               -- 知识库ID
    title              VARCHAR(255)  NOT NULL,               -- 知识库标题
    avatar             VARCHAR(255)  DEFAULT NULL,           -- 知识库头像
    description        VARCHAR(500)  DEFAULT NULL,           -- 知识库描述
    dify_dataset_id    VARCHAR(100)  DEFAULT NULL,           -- Dify知识库ID（Dataset ID）
    dify_indexing_technique VARCHAR(50) DEFAULT 'high_quality', -- Dify索引方式（high_quality/economy）
    embedding_model    VARCHAR(100)  DEFAULT NULL,           -- 向量模型名称
    embedding_model_provider VARCHAR(100) DEFAULT NULL,      -- 向量模型提供商
    rerank_model       VARCHAR(100)  DEFAULT NULL,           -- Rerank模型名称
    rerank_model_provider VARCHAR(100) DEFAULT NULL,         -- Rerank模型提供商
    reranking_enable   BOOLEAN       DEFAULT false,          -- 是否启用Rerank
    retrieval_top_k    INTEGER       DEFAULT 2,              -- 检索Top K（返回前K个结果）
    retrieval_score_threshold DECIMAL(3,2) DEFAULT 0.00,     -- 检索分数阈值（0.00-1.00）
    document_count     INTEGER       DEFAULT 0,              -- 文档数量
    total_chunks       INTEGER       DEFAULT 0,              -- 总分段数
    -- 下面是服务使用
    service            VARCHAR(50)   DEFAULT NULL,           -- 所属服务 workcase、bidding
    project_id         VARCHAR(50)   DEFAULT NULL,           -- bidding所属项目ID
    category           VARCHAR(50)   DEFAULT NULL,           -- 所属分类  workcase 内部知识库、外部知识库
    creator            VARCHAR(50)   NOT NULL,               -- 创建者（用户ID）
    dept_path          VARCHAR(50)   DEFAULT NULL,           -- 创建者部门路径
    updater            VARCHAR(50)   DEFAULT NULL,           -- 更新者
    create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
    update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
    delete_time        TIMESTAMPTZ   DEFAULT NULL,           -- 删除时间
    deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
    PRIMARY KEY (optsn),
    UNIQUE (knowledge_id),
    UNIQUE (dify_dataset_id)
);

-- 知识库配置表字段注释
COMMENT ON TABLE ai.tb_knowledge IS '知识库配置表';
COMMENT ON COLUMN ai.tb_knowledge.optsn IS '流水号';
COMMENT ON COLUMN ai.tb_knowledge.knowledge_id IS '知识库ID';
COMMENT ON COLUMN ai.tb_knowledge.title IS '知识库标题';
COMMENT ON COLUMN ai.tb_knowledge.avatar IS '知识库头像';
COMMENT ON COLUMN ai.tb_knowledge.description IS '知识库描述';
COMMENT ON COLUMN ai.tb_knowledge.dify_dataset_id IS 'Dify知识库ID（Dataset ID）';
COMMENT ON COLUMN ai.tb_knowledge.dify_indexing_technique IS 'Dify索引方式（high_quality/economy）';
COMMENT ON COLUMN ai.tb_knowledge.embedding_model IS '向量模型名称';
COMMENT ON COLUMN ai.tb_knowledge.embedding_model_provider IS '向量模型提供商';
COMMENT ON COLUMN ai.tb_knowledge.rerank_model IS 'Rerank模型名称';
COMMENT ON COLUMN ai.tb_knowledge.rerank_model_provider IS 'Rerank模型提供商';
COMMENT ON COLUMN ai.tb_knowledge.reranking_enable IS '是否启用Rerank';
COMMENT ON COLUMN ai.tb_knowledge.retrieval_top_k IS '检索Top K（返回前K个结果）';
COMMENT ON COLUMN ai.tb_knowledge.retrieval_score_threshold IS '检索分数阈值（0.00-1.00）';
COMMENT ON COLUMN ai.tb_knowledge.document_count IS '文档数量';
COMMENT ON COLUMN ai.tb_knowledge.total_chunks IS '总分段数';
COMMENT ON COLUMN ai.tb_knowledge.service IS '所属服务 workcase、bidding';
COMMENT ON COLUMN ai.tb_knowledge.project_id IS 'bidding所属项目ID';
COMMENT ON COLUMN ai.tb_knowledge.category IS '所属分类 workcase 内部知识库、外部知识库';
COMMENT ON COLUMN ai.tb_knowledge.creator IS '创建者（用户ID）';
COMMENT ON COLUMN ai.tb_knowledge.dept_path IS '创建者部门路径';
COMMENT ON COLUMN ai.tb_knowledge.updater IS '更新者';
COMMENT ON COLUMN ai.tb_knowledge.create_time IS '创建时间';
COMMENT ON COLUMN ai.tb_knowledge.update_time IS '更新时间';
COMMENT ON COLUMN ai.tb_knowledge.delete_time IS '删除时间';
COMMENT ON COLUMN ai.tb_knowledge.deleted IS '是否删除';
-- bidding知识库根据project等变化
-- workcase知识库固定8个
-- workcase外部知识库：4个知识库：
-- 1. 设备操作指南
-- 2. 常见故障解决方案
-- 3. 三包外服务政策
-- 4. 配件咨询话术
-- workcase内部知识库：4个知识库：
-- 1. 技术维修手册
-- 2. 产品参数明细
-- 3. 内部服务流程规范
-- 4. 客户服务话术模板

-- 知识库文件 文件上传dify知识库，对dify内的文件修改不生成新版本， 只有重新上传才生成新版本
DROP TABLE IF EXISTS ai.tb_knowledge_file CASCADE;
CREATE TABLE ai.tb_knowledge_file(
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    knowledge_id       VARCHAR(50)   NOT NULL,               -- 知识库ID
    file_root_id       VARCHAR(50)   NOT NULL,               -- 文件根ID
    file_id            VARCHAR(50)   NOT NULL,               -- 文件ID
    dify_file_id       VARCHAR(50)   NOT NULL,               -- dify文件ID
    version            INTEGER       NOT NULL DEFAULT 1,               -- 文件版本
    create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
    update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
    delete_time        TIMESTAMPTZ   DEFAULT NULL,           -- 删除时间
    deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
    PRIMARY KEY (optsn),
    UNIQUE (knowledge_id, file_id)
);

-- 知识库文件表字段注释
COMMENT ON TABLE ai.tb_knowledge_file IS '知识库文件表';
COMMENT ON COLUMN ai.tb_knowledge_file.optsn IS '流水号';
COMMENT ON COLUMN ai.tb_knowledge_file.knowledge_id IS '知识库ID';
COMMENT ON COLUMN ai.tb_knowledge_file.file_root_id IS '文件根ID';
COMMENT ON COLUMN ai.tb_knowledge_file.file_id IS '文件ID';
COMMENT ON COLUMN ai.tb_knowledge_file.dify_file_id IS 'dify文件ID';
COMMENT ON COLUMN ai.tb_knowledge_file.version IS '文件版本';
COMMENT ON COLUMN ai.tb_knowledge_file.create_time IS '创建时间';
COMMENT ON COLUMN ai.tb_knowledge_file.update_time IS '更新时间';
COMMENT ON COLUMN ai.tb_knowledge_file.delete_time IS '删除时间';
COMMENT ON COLUMN ai.tb_knowledge_file.deleted IS '是否删除';

