2단계: /search
API 만들기
(= Retrieval API 구축)
📂 새로운 파일 생성
backend/api/retrieval.py
🛠️ retrieval.py
코드
from fastapi import APIRouter
from pydantic import BaseModel
from retriever.vectordb import search_documents
router = APIRouter()
# 요청받을 데이터 포맷 정의
class SearchRequest(BaseModel):
query: str
top_k: int = 5 # 기본적으로 상위 5개 검색
# 응답 데이터 포맷 정의
class SearchResponse(BaseModel):
documents: list
@router.post("/search", response_model=SearchResponse)
async def search(request: SearchRequest):
docs = search_documents(request.query, top_k=request.top_k)
return {"documents": docs}
✨ 설명
요소 | 설명 |
---|---|
APIRouter() | FastAPI 라우터 객체로 모듈 분리 |
SearchRequest | 사용자가 보낸 검색 질문 (query ) |
search_documents() | 벡터DB에 검색 요청 (retriever에서 직접 처리) |
top_k | 검색할 문서 수 (디폴트 5개) |
SearchResponse | 검색 결과 리스트 형태로 반환 |
📂 main.py에 라우터 연결
backend/api/main.py
수정해서
retrieval.py
라우터를 등록해야 해:
from api.retrieval import router as retrieval_router
app.include_router(retrieval_router, prefix="/api")
🌟 최종 경로 정리
요청 | 설명 |
---|---|
POST /api/search | 질문(query)을 보내면, 연관된 문서를 리스트로 반환 |
(ex)
POST /api/search
{
"query": "중개업자가 사무소를 옮긴 경우",
"top_k": 3
}
응답
{
"documents": [
"공인중개사는 사무소를 이전한 경우 신고해야 합니다.",
"사무소 이전 시 간판 철거 의무가 있습니다.",
"이전 신고 지연 시 과태료 부과됩니다."
]
}
📋 ToDo 체크
✅ /search
API 라우터 구축
✅ FastAPI에 연결
✅ 요청/응답 스키마 정의 완료
🚀 다음 스텝
지금 /search
API는 search_documents 함수가 필요해.
👉 그래서 다음은:
retriever/vectordb.py
파일 만들고- search_documents() 함수 구현해야 해.
✍️ 다음 액션
"retriever/vectordb.py"