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"

Was this page helpful?