티스토리 뷰
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 시스템을 설계하는 방법을 배워봅니다.
'study > ai prompt' 카테고리의 다른 글
AI 기억력 추가하기 - 세션 기반 대화 관리 (0) | 2025.03.16 |
---|---|
나만의 AI 에이전트 설계하기 (역할 기반 AI 구현) (0) | 2025.03.15 |
CrewAI란? 다중 AI 에이전트 시스템 이해하기 (0) | 2025.03.15 |
Ollama 설치 및 기본 사용법 (로컬 LLM 실행하기) (0) | 2025.03.14 |
Manus 스타일 AI Agent란? Ollama + CrewAI로 맞춤형 AI 만들기 (0) | 2025.03.14 |
- Total
- Today
- Yesterday
- rag
- App Router
- Prisma
- PostgreSQL
- Docker
- AI챗봇
- github
- fastapi
- 웹개발
- Webpack
- LangChain
- llm
- 백엔드개발
- kotlin
- REACT
- 관리자
- nextJS
- SEO최적화
- Next.js
- 프론트엔드
- nodejs
- seo 최적화 10개
- SEO 최적화
- 스마트 컨트랙트
- 개발블로그
- AI 자동화
- NestJS
- gatsbyjs
- Ktor
- CI/CD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |