Spaces:
Sleeping
Sleeping
| -- HR 对话质量评估系统 - Supabase 数据库表结构 | |
| -- 在 Supabase SQL Editor 中执行此脚本 | |
| -- 创建对话历史表 | |
| CREATE TABLE IF NOT EXISTS conversation_history ( | |
| id UUID DEFAULT gen_random_uuid() PRIMARY KEY, | |
| session_id TEXT NOT NULL, | |
| user_message TEXT NOT NULL, | |
| assistant_message TEXT NOT NULL, | |
| analysis_report JSONB, | |
| context_summary JSONB, | |
| metadata JSONB, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() | |
| ); | |
| -- 创建索引以提高查询性能 | |
| CREATE INDEX IF NOT EXISTS idx_conversation_history_session_id ON conversation_history(session_id); | |
| CREATE INDEX IF NOT EXISTS idx_conversation_history_created_at ON conversation_history(created_at DESC); | |
| -- 启用行级安全性 (RLS) | |
| ALTER TABLE conversation_history ENABLE ROW LEVEL SECURITY; | |
| -- 允许所有操作(演示环境,生产环境应限制访问) | |
| CREATE POLICY "Enable all access for conversation_history" ON conversation_history | |
| FOR ALL USING (true); | |
| -- 创建获取会话历史的函数 | |
| CREATE OR REPLACE FUNCTION get_conversation_history(p_session_id TEXT, p_limit INTEGER DEFAULT 50) | |
| RETURNS TABLE ( | |
| id UUID, | |
| session_id TEXT, | |
| user_message TEXT, | |
| assistant_message TEXT, | |
| analysis_report JSONB, | |
| context_summary JSONB, | |
| metadata JSONB, | |
| created_at TIMESTAMP WITH TIME ZONE | |
| ) | |
| LANGUAGE plpgsql | |
| AS $$ | |
| BEGIN | |
| RETURN QUERY | |
| SELECT * | |
| FROM conversation_history | |
| WHERE session_id = p_session_id | |
| ORDER BY created_at ASC | |
| LIMIT p_limit; | |
| END; | |
| $$; | |
| -- 创建删除会话的函数 | |
| CREATE OR REPLACE FUNCTION delete_session(p_session_id TEXT) | |
| RETURNS INTEGER | |
| LANGUAGE plpgsql | |
| AS $$ | |
| DECLARE | |
| deleted_count INTEGER; | |
| BEGIN | |
| DELETE FROM conversation_history | |
| WHERE session_id = p_session_id; | |
| GET DIAGNOSTICS deleted_count = ROW_COUNT; | |
| RETURN deleted_count; | |
| END; | |
| $$; | |
| -- 创建统计函数 | |
| CREATE OR REPLACE FUNCTION get_conversation_statistics(p_hours INTEGER DEFAULT 24) | |
| RETURNS TABLE ( | |
| total_conversations BIGINT, | |
| unique_sessions BIGINT, | |
| avg_score NUMERIC, | |
| high_risk_count BIGINT | |
| ) | |
| LANGUAGE plpgsql | |
| AS $$ | |
| BEGIN | |
| RETURN QUERY | |
| SELECT | |
| COUNT(*) as total_conversations, | |
| COUNT(DISTINCT session_id) as unique_sessions, | |
| COALESCE(AVG( | |
| CASE | |
| WHEN analysis_report->>'overall_score' IS NOT NULL | |
| THEN CAST(analysis_report->>'overall_score' AS NUMERIC) | |
| ELSE NULL | |
| END | |
| ), 0) as avg_score, | |
| COUNT(*) FILTER ( | |
| WHERE analysis_report->'risk_assessment'->>'risk_level' = 'high' | |
| ) as high_risk_count | |
| FROM conversation_history | |
| WHERE created_at >= NOW() - (p_hours || ' hours')::INTERVAL; | |
| END; | |
| $$; | |
| -- 评论:表创建完成 | |
| -- COMMENT ON TABLE conversation_history IS 'HR对话历史记录表'; | |