📂 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_answer | prompt를 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