muyeong commited on
Commit
08bdd80
·
verified ·
1 Parent(s): c7e7771

Upload supabase_setup.sql with huggingface_hub

Browse files
Files changed (1) hide show
  1. supabase_setup.sql +66 -0
supabase_setup.sql ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -- Supabase 데이터베이스 설정 스크립트
2
+ -- Supabase SQL Editor에서 실행하세요
3
+
4
+ -- 1. pgvector 확장 활성화
5
+ CREATE EXTENSION IF NOT EXISTS vector;
6
+
7
+ -- 2. 문서 테이블 생성
8
+ CREATE TABLE IF NOT EXISTS documents (
9
+ id BIGSERIAL PRIMARY KEY,
10
+ title TEXT NOT NULL,
11
+ content TEXT NOT NULL,
12
+ category TEXT DEFAULT '일반',
13
+ embedding VECTOR(768), -- ko-sroberta 모델 차원
14
+ created_at TIMESTAMPTZ DEFAULT NOW()
15
+ );
16
+
17
+ -- 3. 채팅 기록 테이블 생성
18
+ CREATE TABLE IF NOT EXISTS chat_history (
19
+ id BIGSERIAL PRIMARY KEY,
20
+ session_id TEXT NOT NULL,
21
+ user_message TEXT NOT NULL,
22
+ bot_response TEXT NOT NULL,
23
+ created_at TIMESTAMPTZ DEFAULT NOW()
24
+ );
25
+
26
+ -- 4. 벡터 검색 함수 생성
27
+ CREATE OR REPLACE FUNCTION match_documents(
28
+ query_embedding VECTOR(768),
29
+ match_count INT DEFAULT 3
30
+ )
31
+ RETURNS TABLE (
32
+ id BIGINT,
33
+ title TEXT,
34
+ content TEXT,
35
+ category TEXT,
36
+ similarity FLOAT
37
+ )
38
+ LANGUAGE plpgsql
39
+ AS $$
40
+ BEGIN
41
+ RETURN QUERY
42
+ SELECT
43
+ d.id,
44
+ d.title,
45
+ d.content,
46
+ d.category,
47
+ 1 - (d.embedding <=> query_embedding) AS similarity
48
+ FROM documents d
49
+ WHERE d.embedding IS NOT NULL
50
+ ORDER BY d.embedding <=> query_embedding
51
+ LIMIT match_count;
52
+ END;
53
+ $$;
54
+
55
+ -- 5. 인덱스 생성 (검색 성능 향상)
56
+ CREATE INDEX IF NOT EXISTS documents_embedding_idx
57
+ ON documents
58
+ USING ivfflat (embedding vector_cosine_ops)
59
+ WITH (lists = 100);
60
+
61
+ -- 6. 샘플 데이터 (선택사항)
62
+ INSERT INTO documents (title, content, category) VALUES
63
+ ('연차휴가 기준', '소방공무원의 연차휴가는 근속년수에 따라 다르게 부여됩니다. 1년 미만: 11일, 1년 이상 2년 미만: 12일, 2년 이상: 매년 1일씩 가산되어 최대 21일까지 부여됩니다.', '휴가'),
64
+ ('당직근무 시간', '소방서 당직근무는 일반적으로 09:00부터 다음날 09:00까지 24시간 교대근무 형태로 운영됩니다. 다만, 각 소방서별로 상이할 수 있습니다.', '근무'),
65
+ ('병가 신청', '병가는 질병 또는 부상으로 인해 직무를 수행할 수 없을 때 신청합니다. 연간 60일 이내 사용 가능하며, 7일 이상 병가시 의사 진단서가 필요합니다.', '휴가'),
66
+ ('초과근무수당', '초과근무수당은 정규 근무시간을 초과하여 근무한 경우 지급됩니다. 평일 초과근무는 통상임금의 150%, 휴일근무는 200%가 적용됩니다.', '수당');