Spaces:
Sleeping
Sleeping
| -- Supabase 데이터베이스 설정 스크립트 | |
| -- Supabase SQL Editor에서 실행하세요 | |
| -- 1. pgvector 확장 활성화 | |
| CREATE EXTENSION IF NOT EXISTS vector; | |
| -- 2. 문서 테이블 생성 | |
| CREATE TABLE IF NOT EXISTS documents ( | |
| id BIGSERIAL PRIMARY KEY, | |
| title TEXT NOT NULL, | |
| content TEXT NOT NULL, | |
| category TEXT DEFAULT '일반', | |
| embedding VECTOR(768), -- ko-sroberta 모델 차원 | |
| created_at TIMESTAMPTZ DEFAULT NOW() | |
| ); | |
| -- 3. 채팅 기록 테이블 생성 | |
| CREATE TABLE IF NOT EXISTS chat_history ( | |
| id BIGSERIAL PRIMARY KEY, | |
| session_id TEXT NOT NULL, | |
| user_message TEXT NOT NULL, | |
| bot_response TEXT NOT NULL, | |
| created_at TIMESTAMPTZ DEFAULT NOW() | |
| ); | |
| -- 4. 벡터 검색 함수 생성 | |
| CREATE OR REPLACE FUNCTION match_documents( | |
| query_embedding VECTOR(768), | |
| match_count INT DEFAULT 3 | |
| ) | |
| RETURNS TABLE ( | |
| id BIGINT, | |
| title TEXT, | |
| content TEXT, | |
| category TEXT, | |
| similarity FLOAT | |
| ) | |
| LANGUAGE plpgsql | |
| AS $$ | |
| BEGIN | |
| RETURN QUERY | |
| SELECT | |
| d.id, | |
| d.title, | |
| d.content, | |
| d.category, | |
| 1 - (d.embedding <=> query_embedding) AS similarity | |
| FROM documents d | |
| WHERE d.embedding IS NOT NULL | |
| ORDER BY d.embedding <=> query_embedding | |
| LIMIT match_count; | |
| END; | |
| $$; | |
| -- 5. 인덱스 생성 (검색 성능 향상) | |
| CREATE INDEX IF NOT EXISTS documents_embedding_idx | |
| ON documents | |
| USING ivfflat (embedding vector_cosine_ops) | |
| WITH (lists = 100); | |
| -- 6. 샘플 데이터 (선택사항) | |
| INSERT INTO documents (title, content, category) VALUES | |
| ('연차휴가 기준', '소방공무원의 연차휴가는 근속년수에 따라 다르게 부여됩니다. 1년 미만: 11일, 1년 이상 2년 미만: 12일, 2년 이상: 매년 1일씩 가산되어 최대 21일까지 부여됩니다.', '휴가'), | |
| ('당직근무 시간', '소방서 당직근무는 일반적으로 09:00부터 다음날 09:00까지 24시간 교대근무 형태로 운영됩니다. 다만, 각 소방서별로 상이할 수 있습니다.', '근무'), | |
| ('병가 신청', '병가는 질병 또는 부상으로 인해 직무를 수행할 수 없을 때 신청합니다. 연간 60일 이내 사용 가능하며, 7일 이상 병가시 의사 진단서가 필요합니다.', '휴가'), | |
| ('초과근무수당', '초과근무수당은 정규 근무시간을 초과하여 근무한 경우 지급됩니다. 평일 초과근무는 통상임금의 150%, 휴일근무는 200%가 적용됩니다.', '수당'); | |