티스토리 뷰

반응형

🚀 FastAPI 기반 로컬 LLM + RAG 챗봇 만들기 – FastAPI에서 Ollama API 호출 구현

이번 글에서는 FastAPI에서 Ollama API를 호출하는 기능을 구현합니다.
FastAPI 엔드포인트 생성 → Ollama API 요청 코드 작성 → API 실행 및 테스트 순서로 진행됩니다.


📌 1. FastAPI에서 Ollama API 호출 방식

FastAPI가 Ollama API를 호출하는 방식은 다음과 같습니다.

사용자 → (1) FastAPI → (2) Ollama API → (3) FastAPI 응답 → (4) 사용자에게 결과 반환

1️⃣ 사용자 → FastAPI에 POST /chat/ 요청을 보냄
2️⃣ FastAPI → Ollama API(http://localhost:11434/api/generate)에 요청 전달
3️⃣ Ollama → 프롬프트를 받아 LLM이 응답 생성
4️⃣ FastAPI → Ollama의 응답을 사용자에게 반환

💡 이 방식을 사용하면 FastAPI가 Ollama API의 프록시 역할을 하며, 챗봇 기능을 확장할 수 있습니다!


📌 2. FastAPI 엔드포인트 생성

📌 FastAPI에서 Ollama API를 호출하는 **POST 엔드포인트(/chat/)**를 생성합니다.

1️⃣ FastAPI 엔드포인트 구현

반응형

📌 app/api/v1/endpoints/chat.py 파일을 생성하고 다음 코드를 작성합니다.

from fastapi import APIRouter
from pydantic import BaseModel
import requests

router = APIRouter()

# Ollama API URL 설정
OLLAMA_API_URL = "http://localhost:11434/api/generate"

# 요청 데이터 모델 정의
class ChatRequest(BaseModel):
    prompt: str

# Ollama API 호출 엔드포인트
@router.post("/chat/")
async def chat_with_llm(request: ChatRequest):
    payload = {
        "model": "korean-llama3",  # 사용할 모델 지정
        "prompt": request.prompt,
        "stream": False  # 실시간 스트리밍 여부 (False: 일반 응답)
    }
    
    response = requests.post(OLLAMA_API_URL, json=payload)
    return response.json()

Swagger UI에서 /chat/ 엔드포인트 자동 생성
사용자의 입력(prompt)을 받아 Ollama API에 요청 후 응답 반환


📌 3. FastAPI에 라우터 등록

📌 app/main.py에서 엔드포인트를 FastAPI 애플리케이션에 추가합니다.

from fastapi import FastAPI
from app.api.v1.endpoints import chat

app = FastAPI(title="FastAPI LLM Chatbot")

# Ollama API 엔드포인트 등록
app.include_router(chat.router, prefix="/api/v1", tags=["chat"])

@app.get("/")
async def root():
    return {"message": "FastAPI LLM Chatbot is running!"}

이제 FastAPI 서버에서 Ollama API를 호출할 준비가 완료되었습니다! 🚀


📌 4. FastAPI 서버 실행 및 테스트

1️⃣ FastAPI 서버 실행

uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

2️⃣ API 호출 테스트 (curl 사용)

curl -X POST "http://localhost:8000/api/v1/chat/" -H "Content-Type: application/json" -d '{"prompt": "오늘 날씨 어때?"}'

예상 응답 (JSON 형식)

{
    "response": "오늘 날씨는 맑고 따뜻합니다.",
    "done": true
}

Swagger UI (http://localhost:8000/docs) 에서도 API 테스트 가능!


📌 5. 오류 해결 및 디버깅

🔥 1️⃣ requests.exceptions.ConnectionError: Failed to connect to Ollama API 오류

원인: Ollama 서버가 실행되지 않음
해결 방법:

ollama serve

🔥 2️⃣ No model found for 'korean-llama3' 오류

원인: Ollama에 모델이 등록되지 않음
해결 방법:

ollama create korean-llama3 -f modelfile

🔥 3️⃣ 422 Unprocessable Entity 오류

원인: prompt 필드가 JSON 형식으로 전달되지 않음
해결 방법:

{
    "prompt": "안녕하세요!"
}

📌 JSON 형식이 올바르게 전달되었는지 확인해야 합니다.


📌 6. 결론 및 다음 단계

FastAPI에서 Ollama API를 호출하는 기능을 구현 완료!
Swagger UI 및 curl을 사용하여 API 테스트 성공!
Ollama API 호출 시 발생할 수 있는 오류 해결 방법 학습!

🚀 다음 글에서는 "2.2.3 FastAPI + Ollama API 테스트 및 디버깅"을 작성합니다!

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함
반응형