Spaces:
Sleeping
Sleeping
Upload supabase_setup.sql with huggingface_hub
Browse files- 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%가 적용됩니다.', '수당');
|