📂 backend/api/generation.py

from fastapi import APIRouter
from pydantic import BaseModel
from generator.prompt_builder import build_prompt
from generator.llm_inference import generate_answer

router = APIRouter()

# 요청 스키마
class GenerateRequest(BaseModel):
    query: str
    context_docs: list

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

@router.post("/generate", response_model=GenerateResponse)
async def generate(request: GenerateRequest):
    prompt = build_prompt(request.query, request.context_docs)
    output = generate_answer(prompt)
    return {"output": output}

✨ 구조 설명

요소설명
query사용자가 입력한 질문
context_docs/search에서 찾아온 문서 리스트
build_prompt질문 + 문서들을 자연스러운 prompt로 묶어줌
generate_answerprompt를 LLM에 넘겨서 결과 생성

📂 backend/api/main.py에 라우터 연결 추가

from api.generation import router as generation_router

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

(✅ /api/generate 경로로 POST 요청 가능)


📋 ToDo 체크

/generate API 라우터 구축
✅ FastAPI에 연결
✅ 요청/응답 스키마 완성


🧱 그럼 지금 필요한 모듈은?

모듈설명
generator/prompt_builder.py질문 + 문맥 ➔ 자연어 프롬프트 텍스트
generator/llm_inference.py프롬프트 → 모델에 넣고 결과 생성

이 두 개 만들어야 진짜 완성된다.


🚀 지금까지 빌드된 플로우

POST /api/search
    ➔ 관련 문서 리스트 반환
POST /api/generate
    ➔ 문서 리스트 + 질문 → 답변 생성

✍️ 다음 스텝

✅ 다음은:

  • prompt_builder.py 만들어서
    "문서들과 질문을 합쳐" 모델이 이해할 수 있는 prompt를 만들고,
  • llm_inference.py 만들어서
    "프롬프트를 모델에 넣고" 결과를 생성하는 걸 구현한다.

📣 정리

"Retrieval과 Generation을 완전히 분리하고,
각각 명확한 책임을 가진 모듈로 관리한다."


👉 다음 질문

prompt_builder.py

Was this page helpful?