Spaces:
Sleeping
Sleeping
A newer version of the Gradio SDK is available: 6.13.0
๐ ์ฌ์ฉ ๊ฐ์ด๋ (ํ๊ตญ์ด)
๋ชฉ์ฐจ
1. ์ค์น
1-1. Python ํ๊ฒฝ ํ์ธ
python --version # 3.8 ์ด์ ํ์
1-2. ๊ฐ์ํ๊ฒฝ ์์ฑ
# ๊ฐ์ํ๊ฒฝ ์์ฑ
python -m venv venv
# ํ์ฑํ (๋งฅ/๋ฆฌ๋
์ค)
source venv/bin/activate
# ํ์ฑํ (์๋์ฐ)
venv\Scripts\activate
1-3. ์์กด์ฑ ์ค์น
pip install -r requirements.txt
์ค์น๋๋ ์ฃผ์ ํจํค์ง:
- FastAPI (์น ์๋ฒ)
- Anthropic (Claude API)
- ChromaDB (๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค)
- Sentence Transformers (์๋ฒ ๋ฉ)
- PyPDF2, pdfplumber (PDF ์ฒ๋ฆฌ)
2. PDF ์ธ๋ฑ์ฑ
2-1. ํ๊ฒฝ ๋ณ์ ์ค์
.env ํ์ผ ์์ฑ:
cp .env.example .env
.env ํ์ผ ํธ์ง:
# ํ์: Anthropic API ํค
ANTHROPIC_API_KEY=sk-ant-api03-xxx...
# ํ์: PDF ํ์ผ ๊ฒฝ๋ก (๋ก์ปฌ ๋งฅ๋ถ)
PDF_SOURCE_PATH=/Users/seongjincho/Desktop/HYU-06-๊ณตํ๋ฐ์ฌ ๋์ ๊ธฐ/25.8.15(ํ๋๋ฉํธ DB ๋ ํผ๋ฐ์ค)/data/
# ์ ํ: ์๋ฒ ๋ฉ ๋ชจ๋ธ (๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ ๊ถ์ฅ)
EMBEDDING_MODEL=sentence-transformers
EMBEDDING_MODEL_NAME=all-MiniLM-L6-v2
2-2. ์ธ๋ฑ์ฑ ์คํ
python scripts/index_pdfs.py
์์ ์์ ์๊ฐ:
- 2,639๊ฐ PDF ํ์ผ
- ์ฝ 30-60๋ถ (๋ฌด๋ฃ ๋ชจ๋ธ ์ฌ์ฉ ์)
- ์ฒ์ ์คํ ์ ๋ชจ๋ธ ๋ค์ด๋ก๋ ์ถ๊ฐ (~90MB)
์งํ ๊ณผ์ :
[1/4] PDF ํ์ผ ์ฒ๋ฆฌ ์ค...
- ์ ์ฒด ๋ฌธ์: 2639๊ฐ
- ์ ์ฒด ํ์ด์ง: 50000+ํ์ด์ง
[2/4] ํ
์คํธ ์ฒญํน ์ค...
- ์ ์ฒด ์ฒญํฌ: 30000+๊ฐ
[3/4] ์๋ฒ ๋ฉ ์์ฑ ์ค...
- ์๋ฒ ๋ฉ ๊ฐ์: 30000+๊ฐ
- ์๋ฒ ๋ฉ ์ฐจ์: 384์ฐจ์
[4/4] Vector DB์ ์ ์ฅ ์ค...
- ์ ์ฅ ์๋ฃ!
2-3. ์ธ๋ฑ์ฑ ํ์ธ
python scripts/check_vector_db.py
3. API ์๋ฒ ์คํ
3-1. ์๋ฒ ์์
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
๋๋ ๊ฐ๋จํ๊ฒ:
python app/main.py
3-2. ์๋ฒ ํ์ธ
๋ธ๋ผ์ฐ์ ์์:
- API ๋ฌธ์: http://localhost:8000/docs
- ๋์ฒด ๋ฌธ์: http://localhost:8000/redoc
ํฐ๋ฏธ๋์์:
curl http://localhost:8000/health
4. ์ง๋ฌธํ๊ธฐ
4-1. ์น UI๋ก ์ง๋ฌธ (๊ฐ์ฅ ์ฌ์)
- http://localhost:8000/docs ์ ์
POST /queryํด๋ฆญ- "Try it out" ํด๋ฆญ
- Request body ์ ๋ ฅ:
{
"question": "๊ธ์ต์๊ธฐ์ ์ฃผ์ ์์ธ์?",
"top_k": 5,
"enable_metacognition": true
}
- "Execute" ํด๋ฆญ
4-2. ํฐ๋ฏธ๋์์ ์ง๋ฌธ
curl -X POST http://localhost:8000/query \
-H "Content-Type: application/json" \
-d '{
"question": "ํฌํธํด๋ฆฌ์ค ๋ค๊ฐํ์ ํจ๊ณผ๋?",
"top_k": 5,
"enable_metacognition": true
}'
4-3. Python ์คํฌ๋ฆฝํธ๋ก ์ง๋ฌธ
python scripts/test_query.py
๋๋ Python ์ฝ๋์์:
import requests
response = requests.post(
"http://localhost:8000/query",
json={
"question": "์ค์์ํ ๊ธ๋ฆฌ ์ ์ฑ
์ ํจ๊ณผ๋?",
"top_k": 5,
"enable_metacognition": True
}
)
result = response.json()
print(result["answer"])
5. ๊ณ ๊ธ ์ฌ์ฉ๋ฒ
5-1. ๋ฉํ์ธ์ง ๋นํ์ฑํ (๋น ๋ฅธ ์๋ต)
{
"question": "์ง๋ฌธ",
"top_k": 5,
"enable_metacognition": false
}
์ฐจ์ด์ :
- ๋ฉํ์ธ์ง ํ์ฑํ: 10-30์ด, ๊ณ ํ์ง
- ๋ฉํ์ธ์ง ๋นํ์ฑํ: 2-5์ด, ์ผ๋ฐ ํ์ง
5-2. ๊ฒ์ ๊ฒฐ๊ณผ ๊ฐ์ ์กฐ์
{
"question": "์ง๋ฌธ",
"top_k": 10, // ๋ ๋ง์ ๋ฌธ์ ๊ฒ์
"enable_metacognition": true
}
5-3. ๋ฉํ๋ฐ์ดํฐ ํํฐ๋ง
ํน์ ์ ์์ ๋ ผ๋ฌธ๋ง ๊ฒ์:
{
"question": "์ง๋ฌธ",
"top_k": 5,
"filter_metadata": {
"author": "John Doe"
}
}
5-4. ์๋ต ๊ตฌ์กฐ ์ดํด
{
"question": "์๋ณธ ์ง๋ฌธ",
"answer": "์์ฑ๋ ๋ต๋ณ",
"sources": [
{
"text": "๋ฌธ์ ๋ด์ฉ...",
"source_filename": "paper123.pdf",
"similarity": 0.89,
"metadata": {
"title": "๋
ผ๋ฌธ ์ ๋ชฉ",
"author": "์ ์"
}
}
],
"metacognition": {
"thinking_history": [...],
"iterations": 2
},
"search_stats": {
"documents_found": 5,
"top_similarity": 0.89
}
}
6. ๋ฌธ์ ํด๊ฒฐ
๋ฌธ์ 1: PDF ๊ฒฝ๋ก ์ค๋ฅ
FileNotFoundError: Directory not found
ํด๊ฒฐ:
# .env ํ์ผ์์ PDF ๊ฒฝ๋ก ํ์ธ
nano .env
# ๊ฒฝ๋ก๊ฐ ์ ํํ์ง ํ์ธ
ls "/Users/seongjincho/Desktop/..."
๋ฌธ์ 2: API ํค ์ค๋ฅ
AuthenticationError: Invalid API key
ํด๊ฒฐ:
# .env ํ์ผ ํ์ธ
nano .env
# ANTHROPIC_API_KEY๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธ
# ํค๋ sk-ant-api03-๋ก ์์ํด์ผ ํจ
๋ฌธ์ 3: Vector DB๊ฐ ๋น์ด์์
total_documents: 0
ํด๊ฒฐ:
# ์ธ๋ฑ์ฑ ๋จผ์ ์คํ
python scripts/index_pdfs.py
# ํ์ธ
python scripts/check_vector_db.py
๋ฌธ์ 4: ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ
MemoryError
ํด๊ฒฐ:
# scripts/index_pdfs.py ์์
# ๋ฐฐ์น ํฌ๊ธฐ ์ค์ด๊ธฐ
embeddings = embedder.embed_batch(texts, batch_size=16) # 32 โ 16
๋ฌธ์ 5: ์๋ฒ๊ฐ ์์๋์ง ์์
Address already in use
ํด๊ฒฐ:
# ํฌํธ ๋ณ๊ฒฝ
uvicorn app.main:app --reload --port 8001
# ๋๋ .env ํ์ผ์์
API_PORT=8001
๋ฌธ์ 6: ์๋ฒ ๋ฉ ๋ชจ๋ธ ๋ค์ด๋ก๋ ์คํจ
ConnectionError
ํด๊ฒฐ:
# ์๋์ผ๋ก ๋ชจ๋ธ ๋ค์ด๋ก๋
python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('all-MiniLM-L6-v2')"
๐ก ํ
์ฑ๋ฅ ์ต์ ํ
- SSD ์ฌ์ฉ: Vector DB๋ SSD์ ์ ์ฅ ๊ถ์ฅ
- ๋ฉ๋ชจ๋ฆฌ: ์ต์ 8GB RAM ๊ถ์ฅ
- ๋ฐฐ์น ํฌ๊ธฐ: GPU ์์ผ๋ฉด batch_size=16-32
๋น์ฉ ์ ๊ฐ
- ๋ฌด๋ฃ ์๋ฒ ๋ฉ: Sentence Transformers ์ฌ์ฉ
- ๋ฉํ์ธ์ง ๋นํ์ฑํ: ๋น ๋ฅธ ํ ์คํธ ์
ํ์ง ํฅ์
- ๋ฉํ์ธ์ง ํ์ฑํ: ๊ณ ํ์ง ๋ต๋ณ ํ์ ์
- top_k ์ฆ๊ฐ: ๋ ๋ง์ ๋ฌธ์ ์ฐธ๊ณ
- ์ฒญํฌ ํฌ๊ธฐ ์กฐ์ : ๊ธด ๋ฌธ๋งฅ ํ์ ์
๐ ์ง์
๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ผ๋ฉด:
- GitHub Issues ๋ฑ๋ก
- ๋ก๊ทธ ํ์ผ ์ฒจ๋ถ
- ์๋ฌ ๋ฉ์์ง ์ ์ฒด ๋ณต์ฌ
๋ก๊ทธ ํ์ธ:
# API ์๋ฒ ๋ก๊ทธ๋ ํฐ๋ฏธ๋์ ์ถ๋ ฅ๋จ
# ํ์์ ํ์ผ๋ก ์ ์ฅ
uvicorn app.main:app > server.log 2>&1