OpenAI나 Anthropic의 유료 API를 연결해 멀티 에이전트 시스템을 테스트하다 보면 생각보다 빠르게 비용이 청구됩니다. 에이전트들이 서로 피드백을 주고받는 과정에서 한 번의 실행만으로 수만 개의 토큰이 순식간에 소비되기 때문입니다.
특히 테스트 단계에서 프롬프트를 조금만 잘못 짜도 RateLimitError나 크레딧 소진 문제를 겪기 쉽습니다.
이러한 비용 부담 없이 내 PC에서 무료로 멀티 에이전트를 무제한 테스트하기 위해 Ollama(로컬 오픈소스 LLM)와 CrewAI를 연동한 파이프라인을 직접 구축해 보았습니다. 설치부터 실제 파이썬 연동 코드, 그리고 로컬 모델 연동 시 반드시 마주치는 JSON 파싱 오류 트러블슈팅 방법까지 정리해 드립니다.
1. 사전 환경 구성: Ollama 및 로컬 모델 준비
로컬 LLM을 구동하기 위해 오픈소스 엔진인 Ollama를 먼저 세팅합니다. 가벼우면서도 에이전트 역할 수행 능력이 뛰어난 모델을 다운로드합니다.
1) Ollama 설치 및 모델 다운로드
터미널(또는 CMD)을 열고 모델을 내려받습니다.
Bash
# Ollama 실행 확인 (백그라운드에서 실행 중이어야 함)
ollama serve
# 가볍고 성능이 뛰어난 8B 모델 다운로드 (RAM 16GB 기준 권장)
ollama pull llama3.1:8b
2) 파이썬 가상환경 및 패키지 설치
라이브러리 간 충돌을 방지하기 위해 가상환경을 생성하고 최신 패키지를 설치합니다.
Bash
# 가상환경 생성 및 활성화
python -m venv agent-env
source agent-env/bin/activate # Windows: agent-env\Scripts\activate
# 필수 라이브러리 설치
pip install crewai langchain-community
2. 실전 코드: CrewAI와 로컬 Ollama 모델 연동
Ollama는 로컬 포트(http://localhost:11434)를 통해 OpenAI 호환 엔드포인트를 제공합니다. CrewAI의 LLM 클래스를 사용해 로컬 모델을 바인딩하고, [자료 리서치 에이전트]와 [콘텐츠 작성 에이전트]가 협업하는 파이프라인을 작성합니다.
Python
import os
from crewai import LLM, Agent, Crew, Process, Task
# 1. 로컬 Ollama LLM 인스턴스 정의
# temperature를 0.2로 낮춰 로컬 모델의 환각과 형식 이탈을 방지합니다.
local_llm = LLM(
model="ollama/llama3.1:8b",
base_url="http://localhost:11434",
temperature=0.2,
)
# 2. 에이전트(Agent) 정의
researcher = Agent(
role="기술 리서처",
goal="주어진 주제에 대한 핵심 기술 트렌드와 장단점을 요약",
backstory="최신 오픈소스 소프트웨어 생태계를 분석하는 테크 리서치 전문가",
verbose=True,
llm=local_llm,
)
writer = Agent(
role="테크 테크니컬 라이터",
goal="리서치 요약본을 바탕으로 실무자를 위한 깔끔한 보고서 작성",
backstory="복잡한 엔지니어링 개념을 명확한 마크다운 문서로 작성하는 전문 작가",
verbose=True,
llm=local_llm,
)
# 3. 작업(Task) 정의
task_research = Task(
description="2026년 기준 '로컬 LLM과 클라우드 LLM의 비용/보안 측면 비교' 핵심 3가지 정리",
expected_output="3가지 핵심 요약 불릿 포인트",
agent=researcher,
)
task_write = Task(
description="리서치 결과를 인용하여 개발자를 위한 권장 사항 가이드 작성",
expected_output="서론-본론-결론 구조의 완성된 마크다운 문서",
agent=writer,
)
# 4. 크루(Crew) 생성 및 실행
tech_crew = Crew(
agents=[researcher, writer],
tasks=[task_research, task_write],
process=Process.sequential, # 순차 실행
verbose=True,
)
print("### 멀티 에이전트 파이프라인 가동 ###")
result = tech_crew.kickoff()
print("\n[최종 결과물]:\n", result)
3. 실무 트러블슈팅: 로컬 모델 구축 시 발생하는 2대 에러 해결
로컬 모델(7B~8B급)을 멀티 에이전트에 붙이면 고성능 클라우드 모델(GPT-4o 등)과 달리 출력 형식 에러가 자주 발생합니다. 실제 테스트 중 겪었던 문제와 해결 코드입니다.
문제 1: OutputParserException (JSON 파싱 실패 및 무한 반복)
- 원인: 로컬 소형 모델은 에이전트 도구 호출(Tool Calling) 시 요구되는 특정 JSON 출력 형식을 정확히 맞추지 못해 CrewAI 엔진에서 파싱 에러를 내며 무한 루프를 도는 경우가 있습니다.
- 해결법: 에이전트 설정에서
allow_delegation=False로 위임 권한을 제한하거나,max_iter=3옵션을 지정해 파싱 실패 시 강제로 종료되도록 방어벽을 칩니다.
Python
researcher = Agent(
role="기술 리서처",
goal="...",
backstory="...",
llm=local_llm,
allow_delegation=False, # 위임 루프 차단
max_iter=3, # 최대 시도 횟수 제한으로 무한 토큰 낭비 방지
)
문제 2: Connection Refused: localhost:11434
- 원인: Ollama 데몬이 백그라운드에서 꺼져 있거나 포트 점유가 꼬였을 때 발생합니다.
- 해결법: 터미널에서 프로세스를 다시 띄우고 포트 활성 상태를 확인합니다.
Bash
# 백그라운드에서 Ollama 강제 재시작
pkill ollama
ollama serve &
# 엔드포인트 응답 테스트
curl http://localhost:11434/api/tags
4. 로컬 vs 클라우드 LLM 에이전트 비교 및 요약
| 비교 항목 | 로컬 환경 (Ollama + 8B) | 유료 클라우드 (OpenAI / Anthropic) |
| API 비용 | 0원 (완전 무료) | 토큰당 과금 (테스트 시 수천 원~수만 원 소모) |
| 보안/프라이버시 | 사내 데이터 외부 유출 위험 전혀 없음 | 서드파티 서버로 데이터 전송 |
| 추론 속도 | PC 사양(VRAM, RAM)에 의존 | 클라우드 고성능 가속기 기반 (빠름) |
| 지시 이행력 | 복잡한 도구 연동 시 가끔 포맷 오류 발생 | 복잡한 조건문과 다단계 도구 호출 완벽 지원 |
5. 결론: 어떤 방식으로 개발 파이프라인을 설계해야 할까?
초기 단계에서 멀티 에이전트의 워크플로우를 기획하고 프롬프트 로직을 검증할 때는 Ollama 기반의 로컬 환경에서 0원으로 무제한 테스트하는 방식이 훨씬 경제적입니다.
로컬에서 에이전트 간의 역할 분담과 피드백 루프가 안정적으로 작동하는 것을 확인한 뒤, 실제 서비스 배포 시점에만 플래그십 클라우드 모델로 교체하는 2단계 전략을 추천합니다.