티스토리 뷰

반응형

FastAPI로 AI API 만들기 - Ollama와 CrewAI 연동

Manus와 같은 AI 시스템을 구축하려면 AI 모델을 API 형태로 제공할 필요가 있습니다.
이번 글에서는 FastAPI를 사용하여 CrewAI 기반 AI 에이전트를 REST API로 배포하는 방법을 배워봅니다.


🔹 1. FastAPI란?

📌 FastAPI 개요

FastAPI는 Python 기반의 고성능 웹 프레임워크로,
비동기(Async) 기반으로 빠른 속도와 간결한 코드를 제공하는 것이 특징입니다.

FastAPI의 주요 기능

  • 비동기 처리 지원 (async/await)
  • 자동 문서화 (Swagger, Redoc 지원)
  • Python 타입 힌트를 활용한 강력한 데이터 검증
  • FastAPI + CrewAI + Ollama를 결합하여 AI API 구축 가능

Manus 스타일 AI 시스템에서 FastAPI가 필요한 이유

  • AI Agent를 웹 서비스(API) 형태로 제공
  • 다른 서비스(웹 앱, 모바일, 챗봇 등)에서 AI 활용 가능
  • 비동기 API 처리로 빠른 응답 속도 유지

🔹 2. FastAPI 설치 및 기본 설정

📌 1. FastAPI 설치하기

FastAPI 및 Uvicorn 설치 (서버 실행기 포함)

pip install fastapi uvicorn

CrewAI, Ollama 설치 (이미 설치되지 않았다면 추가)

pip install crewai ollama

설치 확인

import fastapi
print("FastAPI 버전:", fastapi.__version__)

🔹 3. FastAPI + CrewAI + Ollama 연동하기

반응형

이제 FastAPI를 사용하여 CrewAI 기반 AI 에이전트를 API로 제공하는 코드를 작성해봅니다.

🔹 Python 코드 (FastAPI + CrewAI + Ollama AI API 구축)

from fastapi import FastAPI
from pydantic import BaseModel
from crewai import Agent, Task, Crew
import ollama

# FastAPI 앱 생성
app = FastAPI()

# Ollama 기반 AI 실행 함수
def query_ollama(prompt):
    response = ollama.chat(model="mistral", messages=[{"role": "user", "content": prompt}])
    return response["message"]["content"]

# AI 에이전트 정의
researcher = Agent(
    name="연구원",
    role="최신 AI 기술을 조사하는 AI",
    backstory="AI 기술 트렌드를 분석하는 전문가",
    model="mistral"
)

writer = Agent(
    name="기술 작가",
    role="기술 블로그를 작성하는 AI",
    backstory="기술 문서를 전문적으로 작성하는 AI",
    model="mistral"
)

# API 요청 데이터 모델
class QueryRequest(BaseModel):
    question: str

# FastAPI 엔드포인트 생성 (AI 질문 처리)
@app.post("/ask_ai/")
async def ask_ai(request: QueryRequest):
    task1 = Task(description=f"{request.question}", agent=researcher)
    task2 = Task(description="조사한 내용을 블로그 글로 정리해줘.", agent=writer)

    crew = Crew(agents=[researcher, writer], tasks=[task1, task2])
    result = crew.kickoff()

    return {"response": result}

# FastAPI 서버 실행 명령
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

API 엔드포인트 설명

HTTP Method 엔드포인트 설명

POST /ask_ai/ AI 에이전트에게 질문하고 응답 받기

FastAPI 서버 실행하기

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

FastAPI Swagger 문서 확인
서버 실행 후, 웹 브라우저에서 다음 URL로 이동하면 API 문서를 볼 수 있습니다.
http://127.0.0.1:8000/docs

API 테스트 (cURL 요청 예제)

curl -X 'POST' 'http://127.0.0.1:8000/ask_ai/' \
     -H 'Content-Type: application/json' \
     -d '{"question": "2024년 AI 기술 트렌드는?"}'

📌 실행 결과:
AI 연구원이 최신 AI 트렌드를 조사하고,
AI 기술 작가가 이를 정리하여 응답 반환

응답 예시 (JSON 형태)

{
  "response": "2024년 AI 기술 트렌드는 대규모 언어 모델, 멀티모달 AI, AI 윤리 및 규제 강화 등입니다..."
}

🔹 4. FastAPI + CrewAI API 확장하기

FastAPI를 활용하여 AI API를 확장할 수 있습니다.

추가 기능 1: AI 모델 선택 옵션 추가

사용자가 특정 AI 모델(Mistral, Llama3 등)을 선택할 수 있도록 API를 확장할 수 있습니다.

class QueryRequest(BaseModel):
    question: str
    model: str = "mistral"  # 기본 모델은 Mistral

@app.post("/ask_ai/")
async def ask_ai(request: QueryRequest):
    response = ollama.chat(
        model=request.model,
        messages=[{"role": "user", "content": request.question}]
    )
    return {"response": response["message"]["content"]}

추가 기능 2: AI 에이전트 역할을 사용자 정의 가능하도록 변경

사용자가 AI 에이전트의 역할을 직접 설정할 수 있도록 수정할 수 있습니다.

class AgentRequest(BaseModel):
    question: str
    role: str

@app.post("/custom_agent/")
async def custom_agent(request: AgentRequest):
    dynamic_agent = Agent(
        name="사용자 정의 AI",
        role=request.role,
        backstory="사용자가 요청한 역할을 수행하는 AI",
        model="mistral"
    )

    task = Task(description=request.question, agent=dynamic_agent)
    crew = Crew(agents=[dynamic_agent], tasks=[task])
    result = crew.kickoff()

    return {"response": result}

테스트 요청 (cURL 예제)

curl -X 'POST' 'http://127.0.0.1:8000/custom_agent/' \
     -H 'Content-Type: application/json' \
     -d '{"question": "Python 비동기 프로그래밍 개념을 설명해줘.", "role": "Python 전문가"}'

응답 예시

{
  "response": "Python의 비동기 프로그래밍은 asyncio 라이브러리를 사용하여 동작하며..."
}

🎯 5. FastAPI를 활용한 AI API 구축 정리

FastAPI를 사용하면 AI 에이전트를 API로 제공할 수 있다.
CrewAI와 Ollama를 연동하여 AI 협업 시스템을 구축할 수 있다.
API 요청을 통해 특정 AI 모델을 실행하거나, 맞춤형 에이전트를 생성할 수 있다.
FastAPI의 비동기 기능을 활용하면 빠르고 확장 가능한 AI API를 만들 수 있다.


🚀 다음 글 미리보기:

👉 "나만의 AI 에이전트 설계하기 (역할 기반 AI 구현)"
👉 AI의 역할을 정의하고, 맞춤형 AI 시스템을 설계하는 방법을 배워봅니다.

 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함
반응형