Spaces:
Sleeping
Sleeping
File size: 2,459 Bytes
08bdd80 |
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 |
-- 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%가 적용됩니다.', '수당');
|