FastAPI + OpenAI로 30분 만에 AI 챗봇 만들기
FastAPI와 OpenAI API를 활용해 30분 만에 실전 수준의 AI 챗봇을 구축하는 방법을 단계별로 소개합니다. 환경 설정부터 배포까지, 실용적인 코드와 함께 확장 아이디어도 제공합니다.
왜 FastAPI와 OpenAI API인가?¶
AI 챗봇을 만들고 싶은데 복잡한 설정 때문에 망설이셨나요? FastAPI와 OpenAI API를 조합하면 정말 빠르게 실전 수준의 챗봇 서비스를 구축할 수 있습니다. FastAPI는 Python 기반의 고성능 웹 프레임워크로, 비동기 처리가 기본으로 탑재되어 있어 AI API 호출에 최적화되어 있습니다. OpenAI API는 GPT 모델을 간단한 REST API로 호출할 수 있게 해주죠. 이 둘의 조합은 마치 레고 블록처럼 쉽고 빠른 개발을 가능하게 합니다.
핵심 포인트: FastAPI의 자동 문서화 기능과 타입 힌팅은 개발 생산성을 2배 이상 높여줍니다. 특히 Pydantic 모델을 통한 데이터 검증은 API 안정성을 크게 향상시킵니다.
개발 환경 설정하기¶
먼저 필요한 패키지를 설치해볼까요? 가상환경을 만들고 아래 명령어를 실행하세요:
bash pip install fastapi uvicorn openai python-dotenv
각 패키지의 역할을 간단히 설명하면, fastapi는 웹 프레임워크, uvicorn은 ASGI 서버(FastAPI를 실행하는 엔진), openai는 OpenAI API 클라이언트, python-dotenv는 환경변수 관리 도구입니다.
프로젝트 구조는 다음과 같이 심플하게 시작합니다:
chatbot/ ├── main.py ├── .env └── requirements.txt
.env 파일에 OpenAI API 키를 저장하세요:
OPENAI_API_KEY=your_api_key_here
실용 팁: API 키는 절대 코드에 하드코딩하지 마세요. .gitignore에 .env를 추가하는 것도 잊지 마시고요!
챗봇 API 구현하기¶
이제 본격적으로 코드를 작성해봅시다. main.py를 열고 다음과 같이 작성하세요:
python from fastapi import FastAPI, HTTPException from pydantic import BaseModel from openai import OpenAI from dotenv import load_dotenv import os
load_dotenv() client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
app = FastAPI(title="AI Chatbot API")
class ChatRequest(BaseModel): message: str temperature: float = 0.7
class ChatResponse(BaseModel): reply: str tokens_used: int
@app.post("/chat", response_model=ChatResponse) async def chat(request: ChatRequest): try: response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "당신은 친절한 AI 어시스턴트입니다."}, {"role": "user", "content": request.message} ], temperature=request.temperature )
return ChatResponse(
reply=response.choices[0].message.content,
tokens_used=response.usage.total_tokens
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/") async def root(): return {"message": "AI Chatbot API is running!"}
이 코드의 핵심은 Pydantic 모델을 사용한 데이터 검증입니다. ChatRequest와 ChatResponse는 입출력 데이터의 타입을 보장하고, FastAPI가 자동으로 OpenAPI 문서를 생성해줍니다.
고급 팁: temperature 매개변수는 0~2 사이 값으로 AI 응답의 창의성을 조절합니다. 0에 가까울수록 일관되고, 높을수록 창의적인 답변을 생성합니다.
서버 실행과 테스트¶
터미널에서 다음 명령어로 서버를 실행합니다:
bash uvicorn main:app --reload
--reload 옵션은 코드 변경 시 자동으로 서버를 재시작해줍니다. 개발 단계에서 매우 유용하죠.
브라우저에서 http://localhost:8000/docs로 접속하면 Swagger UI가 나타납니다. 이게 바로 FastAPI의 강력한 기능 중 하나인데요, 코드를 작성하면 자동으로 API 문서가 생성되고 바로 테스트까지 가능합니다!
실제 API를 호출하려면 curl이나 Python requests를 사용하세요:
python import requests
response = requests.post( "http://localhost:8000/chat", json={"message": "안녕하세요! 오늘 날씨가 어때요?"} )
print(response.json())
성능 최적화 팁: 프로덕션 환경에서는 uvicorn main:app --workers 4처럼 워커 수를 늘려 동시 요청을 처리할 수 있습니다.
실전 활용과 확장 아이디어¶
기본 챗봇이 완성되었으니 이제 실전에서 활용할 수 있도록 확장해봅시다. 몇 가지 추천 기능을 소개합니다:
1. 대화 히스토리 관리: Redis나 SQLite를 연동해 사용자별 대화 맥락을 저장하세요. 이렇게 하면 이전 대화를 기억하는 챗봇을 만들 수 있습니다.
2. 스트리밍 응답: OpenAI API의 stream=True 옵션과 FastAPI의 StreamingResponse를 조합하면 ChatGPT처럼 실시간으로 답변이 생성되는 경험을 제공할 수 있습니다.
3. Rate Limiting: slowapi 패키지를 사용해 API 호출 횟수를 제한하세요. 비용 관리와 남용 방지에 필수적입니다.
4. 프롬프트 템플릿화: 다양한 페르소나(고객 상담원, 기술 지원, 교육 튜터 등)를 시스템 메시지로 정의해 용도별 챗봇을 만들 수 있습니다.
실제 서비스로 배포할 때는 Docker 컨테이너화를 추천합니다. Dockerfile을 작성하고 AWS ECS, Google Cloud Run, 또는 Render 같은 플랫폼에 배포하면 몇 분 만에 글로벌 서비스가 가능합니다.
보안 주의사항: 프로덕션에서는 반드시 HTTPS를 사용하고, API 키 인증을 추가하세요. FastAPI의 Security 유틸리티를 활용하면 OAuth2나 JWT 인증을 쉽게 구현할 수 있습니다.
이 글은 AI가 자동으로 작성했습니다.