섹션별 상세
FastAPI는 파이썬 기반 웹 프레임워크로 REST API 구축을 지원하며 Swagger UI를 통한 자동 문서화 기능을 갖추고 있어 별도의 프론트엔드 없이 엔드포인트 테스트가 가능하다.

RAG(Retrieval-Augmented Generation)는 LLM이 학습하지 않은 특정 지식에 접근할 수 있도록 검색과 생성을 결합한 기법으로 작동한다.
Ingestion 파이프라인은 문서를 불러와 RecursiveCharacterTextSplitter로 500자 단위로 분할하고 OpenAI 임베딩을 통해 벡터로 변환하여 FAISS 인덱스에 저장한다.
python
def ingest_document(file_path: str, filename: str = "") -> int:
# 1. Load
loader = PyPDFLoader(file_path) if file_path.endswith(".pdf") else TextLoader(file_path)
documents = loader.load()
# 2. Chunk
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(documents)
# 3. Embed and Store
global _vectorstore
if _vectorstore is None:
_vectorstore = FAISS.from_documents(chunks, embeddings)
else:
_vectorstore.add_documents(chunks)
# 4. Persist to disk
_vectorstore.save_local(FAISS_INDEX_PATH)
return len(chunks)문서를 불러와 청크로 나누고 임베딩하여 FAISS 벡터 DB에 저장하는 Ingestion 함수
Query 파이프라인은 사용자의 질문을 벡터로 변환하여 FAISS에서 유사한 청크 4개를 검색한 뒤 gpt-4.1-mini 모델에 전달하여 답변을 생성하는 체인으로 구성된다.
python
def query_rag(question: str, top_k: int = 4) -> dict:
vs = _load_vectorstore()
retriever = vs.as_retriever(search_kwargs={"k": top_k})
prompt = PromptTemplate.from_template("""Context: {context}
Question: {question}
Answer:""")
llm = ChatOpenAI(model="gpt-4.1-mini", temperature=0)
# LCEL chain
retrieve = RunnableParallel({"context": retriever | _format_docs, "question": RunnablePassthrough()})
answer_chain = prompt | llm | StrOutputParser()
retrieved = retrieve.invoke(question)
answer = answer_chain.invoke(retrieved)
return {"answer": answer, "sources": [doc.metadata.get("source") for doc in retrieved["context"]]}질문과 유사한 문서를 검색하고 LLM을 통해 답변을 생성하는 RAG 쿼리 함수
FastAPI 엔드포인트는 서버 상태를 확인하는 /health, 문서를 업로드하는 /ingest, 질의응답을 수행하는 /query로 이루어지며 Pydantic으로 데이터 형식을 엄격하게 정의한다.
python
@app.post("/query", response_model=QueryResponse)
def query(request: QueryRequest):
if not request.question.strip():
raise HTTPException(status_code=400, detail="Question cannot be empty.")
try:
result = query_rag(request.question, request.top_k)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
return QueryResponse(answer=result["answer"], sources=result["sources"])사용자의 질문을 받아 RAG 파이프라인을 실행하는 FastAPI POST 엔드포인트

HTTP 상태 코드를 활용하여 성공(200), 클라이언트 오류(400, 422), 서버 오류(500)를 구분함으로써 API의 안정성과 디버깅 편의성을 확보한다.

용어 해설
- 검색 증강 생성(RAG)
- — 외부 데이터베이스에서 질문과 관련된 정보를 검색한 뒤, 그 내용을 LLM에 전달하여 답변을 생성하게 하는 기법이다. 모델의 학습 데이터에 없는 최신 정보나 특정 도메인 지식을 활용할 수 있게 하여 답변의 정확도를 높이고 환각 현상을 줄인다.
- 패스트API(FastAPI)
- — 파이썬 3.8+의 표준 타입 힌트를 바탕으로 한 현대적이고 빠른 웹 프레임워크이다. 비동기 프로그래밍을 지원하며, 작성된 코드를 기반으로 Swagger UI와 같은 대화형 API 문서를 자동으로 생성하여 개발 효율성을 극대화한다.
- 페이스(FAISS)
- — Meta(Facebook)에서 개발한 고밀도 벡터의 효율적인 유사도 검색 및 클러스터링을 위한 라이브러리이다. 수백만 개의 텍스트 임베딩 중에서 질문과 가장 유사한 조각을 빠르게 찾아내는 벡터 데이터베이스 역할을 수행한다.
- 랭체인 표현 언어(LCEL)
- — LangChain 컴포넌트들을 체인 형태로 쉽게 연결하기 위해 설계된 선언적 언어이다. 파이프(|) 연산자를 사용하여 리트리버, 프롬프트, 모델, 출력 파서를 하나의 워크플로우로 묶어 복잡한 AI 로직을 간결하게 구현한다.
- 엔드포인트(Endpoint)
- — API 서버가 외부 클라이언트와 통신하기 위해 노출하는 특정 URL 경로이다. 각 엔드포인트는 GET, POST 등의 HTTP 메서드와 결합하여 데이터 조회, 생성, 삭제 등의 고유한 기능을 수행한다.
기술
- FastAPI
- LangChain
- FAISS
- OpenAI API
- Uvicorn
- Python
- Pydantic
활용 사례
- 사내 문서 기반 Q&A 챗봇
- PDF 분석 및 요약 API 서비스
- 로컬 지식 베이스 검색 시스템
언급된 리소스
API DocsOpenAI API Keys
AI 분석 전체 내용 보기
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
원문 발행 2026. 03. 02.수집 2026. 03. 02.출처 타입 RSS
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.