📂 backend/services/rag_pipeline.py

from retriever.vectordb import search_documents
from generator.prompt_builder import build_prompt
from generator.llm_inference import generate_answer

def rag_pipeline(query: str, top_k: int = 5) -> str:
    """
    1. 사용자 질문으로 관련 문서를 검색
    2. 검색된 문서와 함께 프롬프트 구성
    3. 프롬프트로부터 답변 생성
    """
    # 1. 검색
    context_docs = search_documents(query, top_k=top_k)

    # 2. 프롬프트 조립
    prompt = build_prompt(query, context_docs)

    # 3. 모델 추론
    output = generate_answer(prompt)

    return output

- 📂 backend/api/ask.py (새 파일!)

from fastapi import APIRouter
from pydantic import BaseModel
from services.rag_pipeline import rag_pipeline

router = APIRouter()

# 요청 스키마
class AskRequest(BaseModel):
    query: str
    top_k: int = 5

# 응답 스키마
class AskResponse(BaseModel):
    output: str

@router.post("/ask", response_model=AskResponse)
async def ask(request: AskRequest):
    output = rag_pipeline(request.query, top_k=request.top_k)
    return {"output": output}

- ✨ 설명

파트설명
rag_pipeline()검색 → 프롬프트 → 생성 모두 처리하는 함수
/api/ask사용자는 질문만 던지면 된다 (query)

- 📂 backend/api/main.py에 마지막 라우터 추가

from api.ask import router as ask_router

app.include_router(ask_router, prefix="/api")

- ✅ 최종 플로우

POST /api/ask
    ➔ search_documents()
    ➔ build_prompt()
    ➔ generate_answer()
    ➔ 답변 리턴

(완전 통합 완성형 RAG 파이프라인!)


- 📋 ToDo 체크

✅ RAG 파이프라인 구축
✅ FastAPI /ask 엔드포인트 추가
✅ end-to-end 서비스 완성


- 🚀 테스트 방법

터미널에서 서버 실행 후:

curl -X POST http://localhost:8000/api/ask \
    -H "Content-Type: application/json" \
    -d '{"query": "중개업자가 사무소를 옮겼을 때 해야 하는 일은?"}'

응답 예시:

{
  "output": "중개업자가 사무소를 이전한 경우, 지체 없이 신고하고 간판을 철거해야 합니다."
}

- 🎯 여기까지 요약

단계상태
Retrieval완성
Generation완성
RAG 파이프라인완성
API (/search, /generate, /ask)모두 완성

- ✍️ 다음 스텝 (선택사항)

✅ Next.js 프론트 연동 (API 호출하는 UI 만들기)
✅ RAG Retrieval 품질 개선 (reranking 추가)
✅ FastAPI Production 준비 (gunicorn, uvicorn worker, etc)


- 📣 다음 질문

Was this page helpful?