티스토리 뷰
🚀 FastAPI 기반 로컬 LLM + RAG 챗봇 만들기 – FastAPI에서 Ollama API 호출 구현
octo54 2025. 2. 26. 22:12🚀 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 테스트 및 디버깅"을 작성합니다!
'project > 로컬 LLM + RAG 기반 AI 채팅봇 만들기' 카테고리의 다른 글
🚀 FastAPI 기반 로컬 LLM + RAG 챗봇 만들기 – Docker를 활용한 PostgreSQL 및 pgvector 설정 (0) | 2025.02.27 |
---|---|
🚀 FastAPI 기반 로컬 LLM + RAG 챗봇 만들기 – PostgreSQL 및 pgvector 개요 (0) | 2025.02.26 |
🚀 FastAPI 기반 로컬 LLM + RAG 챗봇 만들기 – 2.2.1 FastAPI에서 Ollama API 호출 개요 (0) | 2025.02.26 |
🚀 FastAPI 기반 로컬 LLM + RAG 챗봇 만들기 – FastAPI의 비동기(Async) 처리 방식 (0) | 2025.02.26 |
🚀 FastAPI 기반 로컬 LLM + RAG 챗봇 만들기 – FastAPI 개요 및 특징 (0) | 2025.02.26 |
- Total
- Today
- Yesterday
- 백엔드
- Webpack
- 관리자
- fastapi
- 프론트엔드
- nextJS
- Ktor
- 로컬LLM
- AI챗봇
- Python
- Next.js
- llm
- Docker
- rag
- PostgreSQL
- 페이지
- LangChain
- 웹개발
- REACT
- Page
- nodejs
- 챗봇개발
- Project
- 리액트
- 백엔드개발
- 개발블로그
- github
- kotlin
- til
- babel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |