ai模块修改

This commit is contained in:
2025-12-15 15:26:05 +08:00
parent 3767150fd6
commit 8a03ede7dc
56 changed files with 3403 additions and 1119 deletions

View File

@@ -0,0 +1,166 @@
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
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
title VARCHAR(500) NOT 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 (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
chat_id VARCHAR(50) NOT NULL, -- 对话ID
role VARCHAR(50) NOT NULL, -- 角色user-用户/assistant-智能体/recipient-客服
content TEXT NOT NULL, -- 消息内容
files VARCHAR(50)[] DEFAULT NULL, -- 文件id数组
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知识库IDDataset 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知识库IDDataset 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 VARCHAR(50) NOT 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, 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 '是否删除';

View File

@@ -1,306 +0,0 @@
-- -- =============================
-- -- 智能体管理和平台基础设施模块
-- -- 支持智能体广场、API集成管理、智能体运维监控
-- -- =============================
-- CREATE SCHEMA IF NOT EXISTS agent;
-- -- 智能体定义表
-- DROP TABLE IF EXISTS agent.tb_agent CASCADE;
-- CREATE TABLE agent.tb_agent (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- agent_id VARCHAR(50) NOT NULL, -- 智能体ID
-- agent_code VARCHAR(100) NOT NULL, -- 智能体编码(唯一标识)
-- agent_name VARCHAR(255) NOT NULL, -- 智能体名称
-- agent_type VARCHAR(50) NOT NULL, -- 智能体类型bidding-招投标/customer_service-客服/knowledge_assistant-知识助手/custom-自定义
-- display_name VARCHAR(255) NOT NULL, -- 展示名称
-- description TEXT, -- 智能体描述
-- icon VARCHAR(500), -- 图标URL
-- banner VARCHAR(500), -- Banner图URL
-- version VARCHAR(20) DEFAULT '1.0.0', -- 版本号
-- model_provider VARCHAR(50), -- 模型提供商openai/anthropic/baidu/aliyun/custom
-- model_name VARCHAR(100), -- 模型名称
-- model_config JSONB, -- 模型配置温度、最大tokens等
-- prompt_template TEXT, -- 提示词模板
-- system_prompt TEXT, -- 系统提示词
-- capabilities TEXT[], -- 能力列表
-- access_level VARCHAR(20) DEFAULT 'private', -- 访问级别public-公开/private-私有/internal-内部
-- is_published BOOLEAN DEFAULT false, -- 是否发布到智能体广场
-- usage_count INTEGER DEFAULT 0, -- 使用次数
-- rating DECIMAL(3,2) DEFAULT 0, -- 评分0-5
-- rating_count INTEGER DEFAULT 0, -- 评分人数
-- tags TEXT[], -- 标签数组
-- category VARCHAR(100), -- 分类
-- dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
-- owner_user_id VARCHAR(50), -- 所有者用户ID
-- status VARCHAR(20) DEFAULT 'active', -- 状态active-激活/inactive-停用/under_maintenance-维护中
-- 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 (agent_code)
-- );
-- CREATE INDEX idx_agent_type ON agent.tb_agent(agent_type) WHERE deleted = false;
-- CREATE INDEX idx_agent_published ON agent.tb_agent(is_published) WHERE deleted = false AND is_published = true;
-- CREATE INDEX idx_agent_category ON agent.tb_agent(category) WHERE deleted = false;
-- COMMENT ON TABLE agent.tb_agent IS '智能体定义表';
-- COMMENT ON COLUMN agent.tb_agent.agent_type IS '智能体类型bidding/customer_service/knowledge_assistant/custom';
-- -- 智能体会话表
-- DROP TABLE IF EXISTS agent.tb_agent_session CASCADE;
-- CREATE TABLE agent.tb_agent_session (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- session_id VARCHAR(50) NOT NULL, -- 会话ID
-- agent_id VARCHAR(50) NOT NULL, -- 智能体ID
-- user_id VARCHAR(50) NOT NULL, -- 用户ID
-- session_type VARCHAR(30) DEFAULT 'chat', -- 会话类型chat-对话/task-任务/workflow-工作流
-- session_name VARCHAR(255), -- 会话名称
-- context JSONB, -- 会话上下文
-- session_status VARCHAR(20) DEFAULT 'active', -- 会话状态active-活跃/paused-暂停/ended-结束
-- start_time TIMESTAMPTZ DEFAULT now(), -- 开始时间
-- end_time TIMESTAMPTZ, -- 结束时间
-- message_count INTEGER DEFAULT 0, -- 消息数量
-- token_usage INTEGER DEFAULT 0, -- Token使用量
-- cost DECIMAL(10,4) DEFAULT 0, -- 成本
-- dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
-- creator VARCHAR(50) DEFAULT NULL, -- 创建者
-- create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
-- update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
-- deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
-- PRIMARY KEY (session_id),
-- UNIQUE (optsn),
-- FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );
-- CREATE INDEX idx_session_agent ON agent.tb_agent_session(agent_id) WHERE deleted = false;
-- CREATE INDEX idx_session_user ON agent.tb_agent_session(user_id) WHERE deleted = false;
-- COMMENT ON TABLE agent.tb_agent_session IS '智能体会话表';
-- -- 智能体消息表
-- DROP TABLE IF EXISTS agent.tb_agent_message CASCADE;
-- CREATE TABLE agent.tb_agent_message (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- message_id VARCHAR(50) NOT NULL, -- 消息ID
-- session_id VARCHAR(50) NOT NULL, -- 会话ID
-- agent_id VARCHAR(50) NOT NULL, -- 智能体ID
-- role VARCHAR(20) NOT NULL, -- 角色user-用户/assistant-助手/system-系统/function-函数
-- content TEXT, -- 消息内容
-- content_type VARCHAR(30) DEFAULT 'text', -- 内容类型text-文本/image-图片/file-文件/structured-结构化数据
-- function_call JSONB, -- 函数调用JSON格式
-- function_response JSONB, -- 函数响应
-- token_count INTEGER, -- Token数量
-- model_name VARCHAR(100), -- 使用的模型
-- kb_references JSONB, -- 知识库引用JSON数组
-- metadata JSONB, -- 消息元数据
-- dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
-- create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
-- deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
-- PRIMARY KEY (message_id),
-- UNIQUE (optsn),
-- FOREIGN KEY (session_id) REFERENCES agent.tb_agent_session(session_id),
-- FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );
-- CREATE INDEX idx_msg_session ON agent.tb_agent_message(session_id, create_time) WHERE deleted = false;
-- CREATE INDEX idx_msg_agent ON agent.tb_agent_message(agent_id) WHERE deleted = false;
-- COMMENT ON TABLE agent.tb_agent_message IS '智能体消息表';
-- -- 智能体工具表
-- DROP TABLE IF EXISTS agent.tb_agent_tool CASCADE;
-- CREATE TABLE agent.tb_agent_tool (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- tool_id VARCHAR(50) NOT NULL, -- 工具ID
-- tool_code VARCHAR(100) NOT NULL, -- 工具编码
-- tool_name VARCHAR(255) NOT NULL, -- 工具名称
-- tool_type VARCHAR(50) NOT NULL, -- 工具类型api-API调用/function-函数/plugin-插件/integration-集成
-- description TEXT, -- 工具描述
-- function_schema JSONB, -- 函数SchemaOpenAI function calling格式
-- api_endpoint VARCHAR(500), -- API端点
-- api_method VARCHAR(10), -- API方法GET/POST/PUT/DELETE
-- api_headers JSONB, -- API请求头
-- auth_type VARCHAR(30), -- 认证类型none/api_key/oauth2/bearer
-- auth_config JSONB, -- 认证配置(加密存储)
-- request_template TEXT, -- 请求模板
-- response_template TEXT, -- 响应模板
-- timeout_seconds INTEGER DEFAULT 30, -- 超时时间(秒)
-- retry_count INTEGER DEFAULT 3, -- 重试次数
-- is_enabled BOOLEAN DEFAULT true, -- 是否启用
-- usage_count INTEGER DEFAULT 0, -- 使用次数
-- dept_path VARCHAR(255) DEFAULT 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 (tool_id),
-- UNIQUE (optsn),
-- UNIQUE (tool_code)
-- );
-- CREATE INDEX idx_tool_type ON agent.tb_agent_tool(tool_type) WHERE deleted = false;
-- COMMENT ON TABLE agent.tb_agent_tool IS '智能体工具表';
-- -- API集成注册表
-- DROP TABLE IF EXISTS agent.tb_api_integration CASCADE;
-- CREATE TABLE agent.tb_api_integration (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- integration_id VARCHAR(50) NOT NULL, -- 集成ID
-- integration_name VARCHAR(255) NOT NULL, -- 集成名称
-- integration_type VARCHAR(50) NOT NULL, -- 集成类型rest_api/soap/graphql/webhook/mq
-- provider VARCHAR(100), -- 提供商
-- base_url VARCHAR(500), -- 基础URL
-- version VARCHAR(20), -- API版本
-- auth_type VARCHAR(30) DEFAULT 'none', -- 认证类型
-- auth_config JSONB, -- 认证配置(加密存储)
-- endpoints JSONB, -- 端点列表JSON数组
-- rate_limit INTEGER, -- 速率限制(请求/秒)
-- timeout_seconds INTEGER DEFAULT 30, -- 超时时间
-- retry_config JSONB, -- 重试配置
-- health_check_url VARCHAR(500), -- 健康检查URL
-- health_status VARCHAR(20) DEFAULT 'unknown', -- 健康状态healthy-健康/unhealthy-不健康/unknown-未知
-- last_health_check TIMESTAMPTZ, -- 最后健康检查时间
-- documentation_url VARCHAR(500), -- 文档URL
-- is_enabled BOOLEAN DEFAULT true, -- 是否启用
-- dept_path VARCHAR(255) DEFAULT 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 (integration_id),
-- UNIQUE (optsn)
-- );
-- CREATE INDEX idx_integration_type ON agent.tb_api_integration(integration_type) WHERE deleted = false;
-- CREATE INDEX idx_integration_health ON agent.tb_api_integration(health_status) WHERE deleted = false;
-- COMMENT ON TABLE agent.tb_api_integration IS 'API集成注册表';
-- -- API调用日志表
-- DROP TABLE IF EXISTS agent.tb_api_call_log CASCADE;
-- CREATE TABLE agent.tb_api_call_log (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- log_id VARCHAR(50) NOT NULL, -- 日志ID
-- integration_id VARCHAR(50), -- 集成ID
-- tool_id VARCHAR(50), -- 工具ID
-- agent_id VARCHAR(50), -- 智能体ID
-- session_id VARCHAR(50), -- 会话ID
-- user_id VARCHAR(50), -- 用户ID
-- endpoint VARCHAR(500) NOT NULL, -- 请求端点
-- method VARCHAR(10) NOT NULL, -- 请求方法
-- request_headers JSONB, -- 请求头
-- request_body TEXT, -- 请求体
-- response_status INTEGER, -- 响应状态码
-- response_headers JSONB, -- 响应头
-- response_body TEXT, -- 响应体
-- duration_ms INTEGER, -- 请求耗时(毫秒)
-- is_success BOOLEAN, -- 是否成功
-- error_message TEXT, -- 错误信息
-- retry_count INTEGER DEFAULT 0, -- 重试次数
-- ip_address VARCHAR(45), -- IP地址
-- dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
-- create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
-- PRIMARY KEY (log_id),
-- UNIQUE (optsn)
-- );
-- CREATE INDEX idx_api_log_integration ON agent.tb_api_call_log(integration_id, create_time DESC);
-- CREATE INDEX idx_api_log_agent ON agent.tb_api_call_log(agent_id, create_time DESC);
-- CREATE INDEX idx_api_log_status ON agent.tb_api_call_log(is_success, create_time DESC);
-- COMMENT ON TABLE agent.tb_api_call_log IS 'API调用日志表';
-- -- 智能体监控指标表
-- DROP TABLE IF EXISTS agent.tb_agent_metrics CASCADE;
-- CREATE TABLE agent.tb_agent_metrics (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- metric_id VARCHAR(50) NOT NULL, -- 指标ID
-- agent_id VARCHAR(50) NOT NULL, -- 智能体ID
-- metric_date DATE NOT NULL, -- 指标日期
-- metric_hour INTEGER, -- 指标小时0-23
-- total_sessions INTEGER DEFAULT 0, -- 总会话数
-- active_sessions INTEGER DEFAULT 0, -- 活跃会话数
-- total_messages INTEGER DEFAULT 0, -- 总消息数
-- total_tokens BIGINT DEFAULT 0, -- 总Token数
-- total_cost DECIMAL(10,4) DEFAULT 0, -- 总成本
-- avg_response_time INTEGER, -- 平均响应时间(毫秒)
-- success_rate DECIMAL(5,4), -- 成功率
-- error_count INTEGER DEFAULT 0, -- 错误次数
-- api_call_count INTEGER DEFAULT 0, -- API调用次数
-- avg_rating DECIMAL(3,2), -- 平均评分
-- rating_count INTEGER DEFAULT 0, -- 评分数量
-- dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
-- create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
-- update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
-- PRIMARY KEY (metric_id),
-- UNIQUE (optsn),
-- UNIQUE (agent_id, metric_date, metric_hour),
-- FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );
-- CREATE INDEX idx_metrics_agent_date ON agent.tb_agent_metrics(agent_id, metric_date DESC);
-- COMMENT ON TABLE agent.tb_agent_metrics IS '智能体监控指标表';
-- -- 智能体异常日志表
-- DROP TABLE IF EXISTS agent.tb_agent_error_log CASCADE;
-- CREATE TABLE agent.tb_agent_error_log (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- log_id VARCHAR(50) NOT NULL, -- 日志ID
-- agent_id VARCHAR(50) NOT NULL, -- 智能体ID
-- session_id VARCHAR(50), -- 会话ID
-- error_type VARCHAR(50) NOT NULL, -- 错误类型model_error-模型错误/api_error-API错误/timeout-超时/rate_limit-限流/other-其他
-- error_code VARCHAR(50), -- 错误代码
-- error_message TEXT NOT NULL, -- 错误信息
-- stack_trace TEXT, -- 堆栈跟踪
-- request_context JSONB, -- 请求上下文
-- severity VARCHAR(20) DEFAULT 'error', -- 严重级别critical-致命/error-错误/warning-警告
-- is_resolved BOOLEAN DEFAULT false, -- 是否已解决
-- resolution_notes TEXT, -- 解决方案备注
-- dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
-- create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
-- resolve_time TIMESTAMPTZ, -- 解决时间
-- PRIMARY KEY (log_id),
-- UNIQUE (optsn),
-- FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );
-- CREATE INDEX idx_error_agent ON agent.tb_agent_error_log(agent_id, create_time DESC);
-- CREATE INDEX idx_error_severity ON agent.tb_agent_error_log(severity) WHERE is_resolved = false;
-- COMMENT ON TABLE agent.tb_agent_error_log IS '智能体异常日志表';
-- -- 智能体评价表
-- DROP TABLE IF EXISTS agent.tb_agent_rating CASCADE;
-- CREATE TABLE agent.tb_agent_rating (
-- optsn VARCHAR(50) NOT NULL, -- 流水号
-- rating_id VARCHAR(50) NOT NULL, -- 评价ID
-- agent_id VARCHAR(50) NOT NULL, -- 智能体ID
-- session_id VARCHAR(50), -- 会话ID
-- user_id VARCHAR(50) NOT NULL, -- 用户ID
-- rating INTEGER NOT NULL, -- 评分1-5星
-- dimensions JSONB, -- 分维度评分(准确性、速度、友好度等)
-- feedback TEXT, -- 评价反馈
-- tags TEXT[], -- 标签
-- is_anonymous BOOLEAN DEFAULT false, -- 是否匿名
-- dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
-- create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
-- deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
-- PRIMARY KEY (rating_id),
-- UNIQUE (optsn),
-- FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );
-- CREATE INDEX idx_rating_agent ON agent.tb_agent_rating(agent_id) WHERE deleted = false;
-- COMMENT ON TABLE agent.tb_agent_rating IS '智能体评价表';

View File

@@ -1,156 +0,0 @@
-- =============================
-- 泰豪电源AI数智化平台 - 完整数据库初始化脚本
-- 包含所有业务模块的表结构
-- =============================
-- 安装必要的扩展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- UUID生成
CREATE EXTENSION IF NOT EXISTS "pg_trgm"; -- 全文搜索
CREATE EXTENSION IF NOT EXISTS "btree_gin"; -- GIN索引支持
-- CREATE EXTENSION IF NOT EXISTS "vector"; -- pgvector向量检索需要单独安装
-- =============================
-- 1. 系统基础模块(权限、用户、部门、角色)
-- =============================
\i createTablePermission.sql
\i createTableUser.sql
-- =============================
-- 2. 文件管理模块
-- =============================
\i createTableFile.sql
-- =============================
-- 3. 消息通知模块
-- =============================
\i createTableMessage.sql
-- =============================
-- 4. 日志模块
-- =============================
\i createTableLog.sql
-- =============================
-- 5. 配置管理模块
-- =============================
\i createTableConfig.sql
-- =============================
-- 6. 知识库管理模块
-- =============================
\i createTableKnowledge.sql
-- =============================
-- 7. 招投标智能体业务模块
-- =============================
\i createTableBidding.sql
-- =============================
-- 8. 智能客服系统业务模块
-- =============================
\i createTableCustomerService.sql
-- =============================
-- 9. 智能体管理和平台基础设施模块
-- =============================
\i createTableAgent.sql
-- =============================
-- 创建视图
-- =============================
-- 用户完整信息视图
CREATE OR REPLACE VIEW sys.v_user_full_info AS
SELECT
u.user_id,
u.email,
u.phone,
u.wechat_id,
u.status,
ui.avatar,
ui.full_name,
ui.gender,
ui.level,
u.create_time,
u.update_time
FROM sys.tb_sys_user u
LEFT JOIN sys.tb_sys_user_info ui ON u.user_id = ui.user_id
WHERE u.deleted = false AND (ui.deleted = false OR ui.deleted IS NULL);
-- 用户角色权限视图
CREATE OR REPLACE VIEW sys.v_user_role_permission AS
SELECT DISTINCT
ur.user_id,
r.role_id,
r.name AS role_name,
p.permission_id,
p.code AS permission_code,
p.name AS permission_name,
m.module_id,
m.name AS module_name
FROM sys.tb_sys_user_role ur
JOIN sys.tb_sys_role r ON ur.role_id = r.role_id
JOIN sys.tb_sys_role_permission rp ON r.role_id = rp.role_id
JOIN sys.tb_sys_permission p ON rp.permission_id = p.permission_id
LEFT JOIN sys.tb_sys_module m ON p.module_id = m.module_id
WHERE ur.deleted = false
AND r.deleted = false
AND rp.deleted = false
AND p.deleted = false;
-- 智能体使用统计视图
CREATE OR REPLACE VIEW agent.v_agent_usage_stats AS
SELECT
a.agent_id,
a.agent_name,
a.agent_type,
COUNT(DISTINCT s.session_id) AS total_sessions,
COUNT(DISTINCT s.user_id) AS unique_users,
SUM(s.message_count) AS total_messages,
AVG(s.token_usage) AS avg_token_usage,
AVG(r.rating) AS avg_rating,
COUNT(r.rating_id) AS rating_count,
MAX(s.start_time) AS last_used_time
FROM agent.tb_agent a
LEFT JOIN agent.tb_agent_session s ON a.agent_id = s.agent_id AND s.deleted = false
LEFT JOIN agent.tb_agent_rating r ON a.agent_id = r.agent_id AND r.deleted = false
WHERE a.deleted = false
GROUP BY a.agent_id, a.agent_name, a.agent_type;
-- 客服工单统计视图
CREATE OR REPLACE VIEW customer_service.v_ticket_stats AS
SELECT
t.ticket_status,
t.priority,
t.ticket_type,
COUNT(*) AS ticket_count,
AVG(EXTRACT(EPOCH FROM (t.resolution_time - t.create_time))/3600) AS avg_resolution_hours,
AVG(t.customer_rating) AS avg_rating,
COUNT(CASE WHEN t.is_overdue THEN 1 END) AS overdue_count
FROM customer_service.tb_ticket t
WHERE t.deleted = false
GROUP BY t.ticket_status, t.priority, t.ticket_type;
-- 招投标项目统计视图
CREATE OR REPLACE VIEW bidding.v_project_stats AS
SELECT
p.project_status,
p.project_type,
COUNT(*) AS project_count,
SUM(p.budget_amount) AS total_budget,
SUM(CASE WHEN p.winning_status = 'won' THEN 1 ELSE 0 END) AS won_count,
SUM(CASE WHEN p.winning_status = 'won' THEN p.winning_amount ELSE 0 END) AS total_won_amount,
AVG(CASE WHEN p.winning_status = 'won' THEN p.winning_amount / NULLIF(p.budget_amount, 0) ELSE NULL END) AS avg_win_rate
FROM bidding.tb_bidding_project p
WHERE p.deleted = false
GROUP BY p.project_status, p.project_type;
COMMENT ON VIEW sys.v_user_full_info IS '用户完整信息视图';
COMMENT ON VIEW sys.v_user_role_permission IS '用户角色权限视图';
COMMENT ON VIEW agent.v_agent_usage_stats IS '智能体使用统计视图';
COMMENT ON VIEW customer_service.v_ticket_stats IS '客服工单统计视图';
COMMENT ON VIEW bidding.v_project_stats IS '招投标项目统计视图';
-- =============================
-- 数据库初始化完成
-- =============================

View File

@@ -15,6 +15,8 @@ CREATE TABLE file.tb_sys_file (
-- TbSysFileDTO 特有字段
file_id VARCHAR(50) NOT NULL, -- 文件ID (主键)
file_root_id VARCHAR(50) DEFAULT NULL, -- 文件根ID
version VARCHAR(50) DEFAULT NULL, -- 文件版本
name VARCHAR(255) NOT NULL, -- 文件名
path VARCHAR(500) NOT NULL, -- 文件路径
size BIGINT NOT NULL, -- 文件大小(字节)
@@ -50,6 +52,8 @@ COMMENT ON COLUMN file.tb_sys_file.deleted IS '是否已删除0-未删除1
-- TbSysFileDTO 特有字段注释
COMMENT ON COLUMN file.tb_sys_file.file_id IS '文件ID (主键)';
COMMENT ON COLUMN file.tb_sys_file.file_root_id IS '文件根ID';
COMMENT ON COLUMN file.tb_sys_file.version IS '文件版本';
COMMENT ON COLUMN file.tb_sys_file.name IS '文件名';
COMMENT ON COLUMN file.tb_sys_file.path IS '文件路径';
COMMENT ON COLUMN file.tb_sys_file.size IS '文件大小(字节)';
@@ -72,49 +76,4 @@ CREATE INDEX idx_file_uploader ON file.tb_sys_file(uploader) WHERE deleted = 0;
CREATE INDEX idx_file_bucket ON file.tb_sys_file(bucket_name) WHERE deleted = 0;
CREATE INDEX idx_file_status ON file.tb_sys_file(status) WHERE deleted = 0;
CREATE INDEX idx_file_create_time ON file.tb_sys_file(create_time) WHERE deleted = 0;
CREATE INDEX idx_file_md5 ON file.tb_sys_file(md5_hash) WHERE deleted = 0;
-- =============================
-- 文件关联表
-- =============================
DROP TABLE IF EXISTS file.tb_file_relation CASCADE;
CREATE TABLE file.tb_file_relation (
optsn VARCHAR(50) NOT NULL,
relation_id VARCHAR(50) NOT NULL,
file_id VARCHAR(50) NOT NULL,
object_type VARCHAR(50) NOT NULL, -- 对象类型bidding_project/ticket/document等
object_id VARCHAR(50) NOT NULL, -- 对象ID
relation_type VARCHAR(30) DEFAULT 'attachment', -- 关联类型attachment-附件/avatar-头像/banner-横幅
order_num INTEGER DEFAULT 0, -- 排序号
service_type VARCHAR(50), -- 服务类型继承自object_type
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 (relation_id),
UNIQUE (optsn),
FOREIGN KEY (file_id) REFERENCES file.tb_sys_file(file_id)
);
COMMENT ON TABLE file.tb_file_relation IS '文件关联表';
COMMENT ON COLUMN file.tb_file_relation.optsn IS '流水号';
COMMENT ON COLUMN file.tb_file_relation.relation_id IS '关联ID';
COMMENT ON COLUMN file.tb_file_relation.file_id IS '文件ID';
COMMENT ON COLUMN file.tb_file_relation.object_type IS '对象类型bidding_project/ticket/document等';
COMMENT ON COLUMN file.tb_file_relation.object_id IS '对象ID';
COMMENT ON COLUMN file.tb_file_relation.relation_type IS '关联类型attachment-附件/avatar-头像/banner-横幅';
COMMENT ON COLUMN file.tb_file_relation.order_num IS '排序号';
COMMENT ON COLUMN file.tb_file_relation.service_type IS '服务类型继承自object_type';
COMMENT ON COLUMN file.tb_file_relation.creator IS '创建者';
COMMENT ON COLUMN file.tb_file_relation.updater IS '更新者';
COMMENT ON COLUMN file.tb_file_relation.create_time IS '创建时间';
COMMENT ON COLUMN file.tb_file_relation.update_time IS '更新时间';
COMMENT ON COLUMN file.tb_file_relation.delete_time IS '删除时间';
COMMENT ON COLUMN file.tb_file_relation.deleted IS '是否删除';
-- 文件关联表索引
CREATE INDEX idx_file_relation_object ON file.tb_file_relation(object_type, object_id) WHERE deleted = false;
CREATE INDEX idx_file_relation_file ON file.tb_file_relation(file_id) WHERE deleted = false;
CREATE INDEX idx_file_relation_service ON file.tb_file_relation(service_type) WHERE deleted = false;
CREATE INDEX idx_file_md5 ON file.tb_sys_file(md5_hash) WHERE deleted = 0;

View File

@@ -1,153 +0,0 @@
-- =============================
-- 知识库管理模块
-- 支持:招投标知识库、客服知识库、企业内部知识库
-- =============================
CREATE SCHEMA IF NOT EXISTS knowledge;
-- 知识库表(多租户知识库定义)
DROP TABLE IF EXISTS knowledge.tb_knowledge_base CASCADE;
CREATE TABLE knowledge.tb_knowledge_base (
optsn VARCHAR(50) NOT NULL, -- 流水号
agent_id VARCHAR(50) NOT NULL, -- 智能体id
knowledge_id VARCHAR(50) NOT NULL, -- 知识库ID
name VARCHAR(255) NOT NULL, -- 知识库名称
kb_type VARCHAR(50) NOT NULL, -- 知识库类型bidding-招投标/customer_service-客服/internal-内部协同
access_level VARCHAR(20) NOT NULL DEFAULT 'private', -- 访问级别public-公开/private-私有/internal-内部
description TEXT, -- 知识库描述
storage_path VARCHAR(500), -- 存储路径
version VARCHAR(20) DEFAULT '1.0', -- 当前版本号
config JSONB DEFAULT NULL, -- 知识库配置JSON格式索引配置、检索参数等
service_type VARCHAR(50), -- 服务类型bidding/customer_service/internal冗余kb_type便于查询
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
status VARCHAR(20) NOT NULL DEFAULT 'active', -- 状态active-激活/inactive-停用/archived-归档
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 (knowledge_id),
UNIQUE (optsn)
);
CREATE INDEX idx_kb_type ON knowledge.tb_knowledge_base(kb_type) WHERE deleted = false;
CREATE INDEX idx_kb_service ON knowledge.tb_knowledge_base(service_type) WHERE deleted = false;
CREATE INDEX idx_kb_dept_path ON knowledge.tb_knowledge_base(dept_path) WHERE deleted = false;
COMMENT ON TABLE knowledge.tb_knowledge_base IS '知识库表';
COMMENT ON COLUMN knowledge.tb_knowledge_base.kb_type IS '知识库类型bidding-招投标/customer_service-客服/internal-内部协同';
COMMENT ON COLUMN knowledge.tb_knowledge_base.service_type IS '服务类型冗余存储便于快速过滤与kb_type保持一致';
COMMENT ON COLUMN knowledge.tb_knowledge_base.access_level IS '访问级别public-公开/private-私有/internal-内部';
-- 知识文档表
DROP TABLE IF EXISTS knowledge.tb_knowledge_document CASCADE;
CREATE TABLE knowledge.tb_knowledge_document (
optsn VARCHAR(50) NOT NULL, -- 流水号
doc_id VARCHAR(50) NOT NULL, -- 文档ID
knowledge_id VARCHAR(50) NOT NULL, -- 所属知识库ID
title VARCHAR(500) NOT NULL, -- 文档标题
doc_type VARCHAR(50) NOT NULL, -- 文档类型text-文本/pdf/word/excel/image/video
category VARCHAR(100), -- 文档分类(自动或手动分类)
content TEXT, -- 文档内容(文本类型)
content_summary TEXT, -- 内容摘要AI生成
file_id VARCHAR(50), -- 关联文件表ID
file_path VARCHAR(500), -- 文件路径
file_size BIGINT, -- 文件大小(字节)
mime_type VARCHAR(100), -- MIME类型
version INTEGER DEFAULT 1, -- 文档版本号(仅做记录)
root_doc_id VARCHAR(50), -- 根文档ID版本组标识保留用于整体版本管理
tags TEXT[], -- 文档标签数组
keywords TEXT[], -- 关键词数组AI提取
embedding_status VARCHAR(20) DEFAULT 'pending', -- 向量化状态pending-待处理/processing-处理中/completed-完成/failed-失败
embedding_model VARCHAR(100), -- 使用的向量化模型
chunk_count INTEGER DEFAULT 0, -- 切片数量
metadata JSONB DEFAULT NULL, -- 文档元数据JSON格式
source_url VARCHAR(500), -- 来源URL
service_type VARCHAR(50), -- 服务类型(继承自知识库)
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
status VARCHAR(20) NOT NULL DEFAULT 'active', -- 状态active-激活/inactive-停用/archived-归档
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 (doc_id),
UNIQUE (optsn)
);
CREATE INDEX idx_doc_kb ON knowledge.tb_knowledge_document(knowledge_id) WHERE deleted = false;
CREATE INDEX idx_doc_service ON knowledge.tb_knowledge_document(service_type) WHERE deleted = false;
CREATE INDEX idx_doc_category ON knowledge.tb_knowledge_document(category) WHERE deleted = false;
CREATE INDEX idx_doc_embedding_status ON knowledge.tb_knowledge_document(embedding_status) WHERE deleted = false;
CREATE INDEX idx_doc_tags ON knowledge.tb_knowledge_document USING GIN(tags) WHERE deleted = false;
CREATE INDEX idx_doc_root ON knowledge.tb_knowledge_document(root_doc_id) WHERE deleted = false;
COMMENT ON TABLE knowledge.tb_knowledge_document IS '知识文档表文档级元数据版本控制在chunk级别';
COMMENT ON COLUMN knowledge.tb_knowledge_document.service_type IS '服务类型(从知识库继承,用于服务间隔离)';
COMMENT ON COLUMN knowledge.tb_knowledge_document.version IS '文档版本号仅做记录实际版本控制在chunk级别';
COMMENT ON COLUMN knowledge.tb_knowledge_document.root_doc_id IS '根文档ID用于文档整体版本管理可选';
COMMENT ON COLUMN knowledge.tb_knowledge_document.embedding_status IS '向量化状态pending/processing/completed/failed';
-- 知识文档片段表用于RAG检索
DROP TABLE IF EXISTS knowledge.tb_knowledge_chunk CASCADE;
CREATE TABLE knowledge.tb_knowledge_chunk (
optsn VARCHAR(50) NOT NULL, -- 流水号
chunk_id VARCHAR(50) NOT NULL, -- 片段ID
doc_id VARCHAR(50) NOT NULL, -- 所属文档ID
knowledge_id VARCHAR(50) NOT NULL, -- 所属知识库ID
chunk_index INTEGER NOT NULL, -- 片段索引(在文档中的顺序)
content TEXT NOT NULL, -- 片段内容
content_length INTEGER, -- 内容长度
embedding vector(1536), -- 向量嵌入假设使用OpenAI 1536维
chunk_type VARCHAR(20) DEFAULT 'text', -- 片段类型text-文本/table-表格/image-图片
version INTEGER DEFAULT 1, -- chunk版本号每次修改自动+1
root_chunk_id VARCHAR(50), -- 根chunk ID同一chunk的不同版本共享此ID
is_current BOOLEAN DEFAULT true, -- 是否当前使用的版本
position_info JSONB, -- 位置信息(页码、坐标等)
metadata JSONB, -- 片段元数据
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (chunk_id),
UNIQUE (optsn)
);
CREATE INDEX idx_chunk_doc ON knowledge.tb_knowledge_chunk(doc_id) WHERE deleted = false;
CREATE INDEX idx_chunk_kb ON knowledge.tb_knowledge_chunk(knowledge_id) WHERE deleted = false;
CREATE INDEX idx_chunk_root_current ON knowledge.tb_knowledge_chunk(root_chunk_id, is_current) WHERE deleted = false;
CREATE INDEX idx_chunk_current ON knowledge.tb_knowledge_chunk(is_current) WHERE deleted = false AND is_current = true;
-- 向量检索索引需要安装pgvector扩展建议只索引当前版本
-- CREATE INDEX idx_chunk_embedding ON knowledge.tb_knowledge_chunk USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100) WHERE deleted = false AND is_current = true;
COMMENT ON TABLE knowledge.tb_knowledge_chunk IS '知识文档片段表RAG检索基本单位支持chunk级版本控制';
COMMENT ON COLUMN knowledge.tb_knowledge_chunk.version IS 'chunk版本号整数每次修改自动+1';
COMMENT ON COLUMN knowledge.tb_knowledge_chunk.root_chunk_id IS '根chunk ID同一chunk的所有版本共享此ID首次创建时等于chunk_id';
COMMENT ON COLUMN knowledge.tb_knowledge_chunk.is_current IS '是否当前使用的版本每个root_chunk_id只有一个is_current=trueRAG检索时只使用当前版本';
COMMENT ON COLUMN knowledge.tb_knowledge_chunk.embedding IS '向量嵌入需要pgvector扩展建议只为is_current=true的chunk生成';
-- 知识访问日志表
DROP TABLE IF EXISTS knowledge.tb_knowledge_access_log CASCADE;
CREATE TABLE knowledge.tb_knowledge_access_log (
optsn VARCHAR(50) NOT NULL, -- 流水号
log_id VARCHAR(50) NOT NULL, -- 日志ID
knowledge_id VARCHAR(50), -- 知识库ID
doc_id VARCHAR(50), -- 文档ID
user_id VARCHAR(50) NOT NULL, -- 用户ID
access_type VARCHAR(20) NOT NULL, -- 访问类型view-查看/download-下载/search-搜索/edit-编辑
query_text TEXT, -- 搜索查询文本
result_count INTEGER, -- 搜索结果数量
ip_address VARCHAR(45), -- IP地址
user_agent TEXT, -- 用户代理
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
PRIMARY KEY (log_id),
UNIQUE (optsn)
);
CREATE INDEX idx_access_log_user ON knowledge.tb_knowledge_access_log(user_id, create_time DESC);
CREATE INDEX idx_access_log_kb ON knowledge.tb_knowledge_access_log(knowledge_id, create_time DESC);
COMMENT ON TABLE knowledge.tb_knowledge_access_log IS '知识访问日志表';

View File

@@ -24,8 +24,8 @@
-- 5. 配置管理模块
\i createTableConfig.sql
-- 6. 知识库管理模块
\i createTableKnowledge.sql
-- 6. AI模块 智能体+知识库
\i createTableAI.sql
-- 7. 招投标业务模块
\i createTableBidding.sql
@@ -33,9 +33,6 @@
-- 8. 智能客服业务模块
\i createTableWorkcase.sql
-- 9. 智能体模块(暂不启用)
-- \i createTableAgent.sql
-- =============================
-- 第二阶段:初始化基础数据
-- =============================

View File

@@ -62,6 +62,23 @@ INSERT INTO config.tb_sys_config (
('CFG-0416', 'cfg_sms_tpl_register', 'sms.templateCode.register','注册验证码模板', 'SMS_491985030', 'String', 'input', '注册验证码模板编码', NULL, NULL, 'notify', 'mod_message', 130, 1, '注册验证码短信模板', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0417', 'cfg_sms_timeout', 'sms.timeout', '请求超时时间', '30000', 'INTEGER', 'input', '请求超时时间(毫秒)', NULL, NULL, 'notify', 'mod_message', 140, 1, 'API请求超时时间5000-60000', 'system', NULL, NULL, now(), NULL, NULL, false),
-- Dify AI 配置
-- Dify 基础配置
('CFG-0450', 'cfg_dify_api_base', 'dify.apiBaseUrl', 'Dify API地址', 'http://localhost:8000/v1', 'String', 'input', 'Dify API基础地址', NULL, NULL, 'dify', 'mod_agent', 10, 1, 'Dify服务的API基础地址如 http://localhost/dify/api', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0452', 'cfg_dify_knowledge_key','dify.knowledgeApiKey', '知识库API密钥', 'dataset-nupqKP4LONpzdXmGthIrbjeJ', 'String', 'password', '知识库API密钥', NULL, NULL, 'dify', 'mod_agent', 30, 1, '用于访问Dify知识库的API密钥', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0453', 'cfg_dify_timeout', 'dify.timeout', '请求超时时间', '60', 'INTEGER', 'input', '请求超时时间(秒)', NULL, NULL, 'dify', 'mod_agent', 40, 1, 'API请求的超时时间10-600秒', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0454', 'cfg_dify_conn_timeout','dify.connectTimeout', '连接超时时间', '10', 'INTEGER', 'input', '连接超时时间(秒)', NULL, NULL, 'dify', 'mod_agent', 50, 1, 'API连接的超时时间5-60秒', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0455', 'cfg_dify_read_timeout','dify.readTimeout', '读取超时时间', '60', 'INTEGER', 'input', '读取超时时间(秒)', NULL, NULL, 'dify', 'mod_agent', 60, 1, 'API读取响应的超时时间10-600秒', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0456', 'cfg_dify_stream_timeout','dify.streamTimeout', '流式响应超时时间', '300', 'INTEGER', 'input', '流式响应超时时间(秒)', NULL, NULL, 'dify', 'mod_agent', 70, 1, '流式API响应的超时时间30-1800秒', 'system', NULL, NULL, now(), NULL, NULL, false),
-- Dify 上传配置
('CFG-0460', 'cfg_dify_upload_types','dify.upload.allowedTypes','允许的文件类型', 'pdf,txt,docx,doc,md,html,htm,xlsx,xls,csv', 'String', 'textarea', '上传文件允许的类型', NULL, NULL, 'dify', 'mod_agent', 80, 1, '支持上传的文件类型列表,逗号分隔', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0461', 'cfg_dify_upload_max', 'dify.upload.maxSize', '最大文件大小', '50', 'INTEGER', 'input', '最大文件大小MB', NULL, NULL, 'dify', 'mod_agent', 90, 1, '单个文件上传的最大大小限制1-500MB', 'system', NULL, NULL, now(), NULL, NULL, false),
-- Dify 知识库配置
('CFG-0470', 'cfg_dify_index_tech', 'dify.dataset.defaultIndexingTechnique','默认索引方式', 'high_quality', 'String', 'select', '默认索引方式', NULL, '["high_quality", "economy"]'::json, 'dify', 'mod_agent', 100, 1, '知识库文档的默认索引方式high_quality高质量或 economy经济', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0471', 'cfg_dify_embed_model', 'dify.dataset.defaultEmbeddingModel','默认Embedding模型', 'text-embedding-ada-002', 'String', 'input', '默认Embedding模型', NULL, NULL, 'dify', 'mod_agent', 110, 1, '知识库使用的默认Embedding模型名称', 'system', NULL, NULL, now(), NULL, NULL, false),
-- 日志与审计
('CFG-0501', 'cfg_log_level', 'log.level', '日志级别', 'INFO', 'String', 'select', '系统日志级别', NULL, '["DEBUG", "INFO", "WARN", "ERROR"]'::json, 'log', 'mod_system', 10, 0, 'DEBUG/INFO/WARN/ERROR', 'system', NULL, NULL, now(), NULL, NULL, false),
('CFG-0502', 'cfg_audit_retention', 'audit.retentionDays', '审计日志保留', '90', 'INTEGER', 'input', '审计日志保留天数', NULL, NULL, 'log', 'mod_system', 20, 0, '合规按需调整', 'system', NULL, NULL, now(), NULL, NULL, false),