Spaces:
Sleeping
Sleeping
File size: 2,815 Bytes
c8b1f17 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
-- 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对话历史记录表';
|