개발자 여러분 안녕하세요!
여기는 제가 처음으로 글을 올리는 것이며, 제가 만든 프로젝트를 공유하고자 합니다.
AI가 스스로 논쟁하는 것을 원해 본 적 있으신가요? 저는 최근 'AI Devil's Advocate'라는 프로젝트를 만들었습니다. 이것은 두 개의 AI 에이전트가 특정 주제에 대해 토론하고, Judge AI가 최종 판결을 내리는 다중 에이전트 토론 애플리케이션입니다.
하지만 이 프로젝트를 구축하는 과정에서 API Rate Limit 등 여러 가지 주요 난관에 부딪혔습니다.
제가 어떻게 이것을 만들었는지, 작동 방식은 어떠한지, 그리고 자동 폴백(Automatic Fallback)을 사용하여 속도 제한 문제를 어떻게 해결했는지 알려드리겠습니다.
AI Devil's Advocate란 무엇인가요?
이것은 자율적인 다중 에이전트 시스템으로 구성되어 있습니다. 여기서:
- Agent A (찬성 측): 주제에 대해 찬성하는 입장을 논합니다.
- Agent B (반대 측): 주제에 대해 반대하는 입장을 논합니다.
- Judge AI: 양쪽의 주장을 경청하고 구조화된 판결을 제공합니다.
이 시스템은 Python, LangGraph, Streamlit으로 완전히 구축되었으며, Groq, Google Gemini, OpenRouter와 같은 여러 무료 등급(free-tier) 제공업체를 지원합니다.
주요 기능 (Key Features)
- 다중 공급자 아키텍처 (Multi-Provider Architecture): Groq, Gemini, OpenRouter 간에 즉시 전환할 수 있습니다.
- 자동 429 폴백 (Automatic 429 Fallback) (핵심 기능): 활성화된 제공업체가 속도 제한(rate limit)이나 할당량 소진에 도달하면, 앱은 토론의 중단 없이 자동으로 다음 구성된 제공업체로 전환됩니다.
- 세련된 UI 및 애니메이션: 사용자 지정 CSS, Google Fonts (Inter/Poppins), 페이드인 애니메이션, 스타일화된 논쟁가 카드 등이 적용되었습니다.
- 스크립트 내보내기 (Transcript Exports): 전체 토론 내용을 클릭 한 번으로 스타일이 적용된 PDF 또는 Markdown 파일로 다운로드할 수 있습니다.
- 세션 API 호출 카운터: 실시간 사이드바 카운터를 통해 무료 등급 사용량을 모니터링할 수 있습니다.
기술 스택 및 아키텍처 (Tech Stack & Architecture)
- 프론트엔드: Streamlit (애니메이션을 위한 사용자 지정 CSS 포함)
- 오케스트레이션: LangGraph (다중 에이전트 흐름을 위한 상태 기계)
- LLM 팩토리: 제공업체 전환을 처리하는 사용자 지정
FallbackLLMWrapper 클래스.
- 제공업체: Groq (초저지연), Google Gemini, OpenRouter.
- 내보내기: ReportLab (PDF 생성을 위해 사용).
오류 처리(Fallback) 작동 방식
API 하나에 의존하는 대신, 모든 제공업체를 감싸는 llm_factory.py를 구축했습니다. 주력 LLM이 429 Too Many Requests 오류를 발생시키면, 이 래퍼가 이를 포착하여 즉시 목록의 다음 사용 가능한 제공업체로 프롬프트를 라우팅합니다. 토론은 절대 멈추지 않습니다!
직접 사용해 보세요!
Streamlit Community Cloud에 배포했습니다. 지금 바로 시도해 볼 수 있습니다:
실시간 데모 링크
오픈 소스
이 프로젝트는 완전히 오픈 소스입니다. 자유롭게 포크(fork)하거나, 새로운 제공업체를 추가하거나, UI를 개선해 주세요!
GitHub 저장소
제가 배운 것들
이것을 구축하면서 다음 내용에 대해 많이 배웠습니다:
- 다중 에이전트 대화를 위한 LangGraph에서의 상태 관리(State Management).
- 프로덕션 LLM에서의 오류 처리 (429 폴백은 정말 큰 도움이 됩니다).
- Streamlit의 UI/UX — 약간의 커스텀 CSS만으로 실제 SaaS 제품처럼 보이게 만들 수 있습니다.
질문이나 피드백이 있다면 아래에 댓글을 남겨주세요! 저는 현재 더 많은 에이전트 기반 AI 워크플로우를 탐색하고 있습니다.
그리고 이것은 제 첫 게시물이니, 글쓰기나 다른 부분에서 제가 실수한 부분이 있으면 알려주세요. 또한, 저장소가 마음에 드시면 별점(star)을 주시는 것을 고려해 주세요..
즐거운 코딩 되세요!