RAG 아키텍처 v2: 3단계 라우팅, 멀티-컬렉션 RAG, 선택적 메모리
Phase 1-3 구현: - init.sql v2: 12테이블 (기존 5 + 신규 7) + 분류기 v2 프롬프트 - migrate-v2.sql: 기존 DB 마이그레이션 스크립트 - setup-qdrant.sh: tk_company 컬렉션 + payload 인덱스 설정 - 워크플로우 v2 (37노드): 토큰검증, Rate Limit, 프리필터, 분류기v2(response_tier), 3-tier 라우팅(local/Haiku/Opus), 멀티-컬렉션 RAG, 예산 체크, 선택적 메모리 - .env.example + docker-compose.yml: 새 환경변수 추가 - CLAUDE.md, QUICK_REFERENCE.md, docs/architecture.md 전면 갱신 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
69
init/setup-qdrant.sh
Normal file
69
init/setup-qdrant.sh
Normal file
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# Qdrant 컬렉션 설정: tk_company 생성 + chat_memory 인덱스 추가
|
||||
# 실행: bash init/setup-qdrant.sh
|
||||
|
||||
QDRANT_URL="${QDRANT_URL:-http://localhost:6333}"
|
||||
|
||||
echo "=== Qdrant 컬렉션 설정 ==="
|
||||
|
||||
# 1. tk_company 컬렉션 생성 (bge-m3: 1024 dimensions)
|
||||
echo "▶ tk_company 컬렉션 생성..."
|
||||
curl -s -X PUT "${QDRANT_URL}/collections/tk_company" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{
|
||||
"vectors": {
|
||||
"size": 1024,
|
||||
"distance": "Cosine"
|
||||
}
|
||||
}' | python3 -m json.tool
|
||||
|
||||
# 2. tk_company payload 인덱스 생성
|
||||
echo "▶ tk_company 인덱스 생성..."
|
||||
for field in year department doc_type created_at; do
|
||||
field_type="keyword"
|
||||
if [ "$field" = "year" ]; then field_type="integer"; fi
|
||||
if [ "$field" = "created_at" ]; then field_type="keyword"; fi
|
||||
|
||||
curl -s -X PUT "${QDRANT_URL}/collections/tk_company/index" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{
|
||||
\"field_name\": \"${field}\",
|
||||
\"field_schema\": \"${field_type}\"
|
||||
}" | python3 -c "import sys,json; print(f' {\"${field}\"}: {json.loads(sys.stdin.read()).get(\"status\", \"error\")}')"
|
||||
done
|
||||
|
||||
# 3. chat_memory 인덱스 추가 (username, topic, intent)
|
||||
echo "▶ chat_memory 인덱스 추가..."
|
||||
for field in username topic intent; do
|
||||
curl -s -X PUT "${QDRANT_URL}/collections/chat_memory/index" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{
|
||||
\"field_name\": \"${field}\",
|
||||
\"field_schema\": \"keyword\"
|
||||
}" | python3 -c "import sys,json; print(f' {\"${field}\"}: {json.loads(sys.stdin.read()).get(\"status\", \"error\")}')"
|
||||
done
|
||||
|
||||
# 4. 확인
|
||||
echo ""
|
||||
echo "=== 컬렉션 목록 ==="
|
||||
curl -s "${QDRANT_URL}/collections" | python3 -c "
|
||||
import sys,json
|
||||
data = json.loads(sys.stdin.read())
|
||||
for c in data.get('result',{}).get('collections',[]):
|
||||
name = c['name']
|
||||
info = json.loads(open('/dev/stdin','r').read()) if False else None
|
||||
print(f' - {name}')
|
||||
" 2>/dev/null || curl -s "${QDRANT_URL}/collections" | python3 -m json.tool
|
||||
|
||||
echo ""
|
||||
echo "=== tk_company 상세 ==="
|
||||
curl -s "${QDRANT_URL}/collections/tk_company" | python3 -c "
|
||||
import sys,json
|
||||
data = json.loads(sys.stdin.read())
|
||||
r = data.get('result',{})
|
||||
print(f' 벡터수: {r.get(\"points_count\",0)}')
|
||||
print(f' 상태: {r.get(\"status\",\"unknown\")}')
|
||||
" 2>/dev/null || echo " (확인 실패)"
|
||||
|
||||
echo ""
|
||||
echo "설정 완료!"
|
||||
Reference in New Issue
Block a user