diff --git a/ideas/250929_happybell80_multi_ai_cli_integration.md b/ideas/250929_happybell80_multi_ai_cli_integration.md index 3ac919c..fb798b0 100644 --- a/ideas/250929_happybell80_multi_ai_cli_integration.md +++ b/ideas/250929_happybell80_multi_ai_cli_integration.md @@ -9,9 +9,14 @@ status: idea ## 현황 - **사용 중인 AI CLI**: Claude (23/24 서버), Gemini CLI, OpenAI Codex CLI (로컬) -- **인증 방식**: 브라우저 세션 기반 (API 키 없이 쿠키/토큰 사용) +- **인증 방식**: 브라우저 세션 기반 (쿠키/토큰 사용, API 미사용) - **현재 워크플로우**: 수동으로 각 CLI에 질문하고 답변 종합 +### CLI 설치 현황 +- **로컬**: Claude, Gemini 설치 (OpenAI 없음) +- **51123 서버**: Claude만 설치 +- **51124 서버**: Claude, Gemini, OpenAI 모두 설치, 세션 파일 접근 가능 + ## 목표 여러 AI의 의견을 동시에 얻어 더 나은 의사결정을 내리고 개발 생산성 향상 @@ -33,44 +38,15 @@ tmux attach -t ai-panel - 단점: 수동 입력 필요, 응답 통합 어려움 ### 2. Python 래퍼 (1주일) -```python -# multi_ai_wrapper.py -import subprocess -import asyncio -from typing import Dict - -class MultiAIManager: - def __init__(self): - self.processes = { - 'claude': subprocess.Popen(['claude'], ...), - 'gemini': subprocess.Popen(['gemini'], ...), - 'openai': subprocess.Popen(['openai'], ...) - } - - async def query_all(self, prompt: str) -> Dict[str, str]: - # 각 프로세스에 프롬프트 전송 - # 응답 수집 및 정리 - pass -``` +- subprocess.Popen으로 각 CLI 프로세스 제어 +- asyncio.gather로 동시 질의 및 응답 수집 +- 세션 파일 경로: ~/.config/claude, ~/.config/gemini +- stdin/stdout 스트림 비동기 처리 ### 3. FastAPI 웹 대시보드 (2-3주) -```python -# main.py -from fastapi import FastAPI, WebSocket -from fastapi.responses import HTMLResponse - -app = FastAPI() - -@app.websocket("/ws") -async def websocket_endpoint(websocket: WebSocket): - await websocket.accept() - # 실시간 스트리밍 처리 - -@app.get("/") -async def dashboard(): - # 통합 대시보드 UI 제공 - pass -``` +- WebSocket으로 실시간 스트리밍 응답 처리 +- 3열 레이아웃으로 동시 응답 표시 +- 대화 이력 SQLite/LMDB 저장 **주요 기능**: - 단일 입력창으로 모든 AI에 동시 질의 @@ -109,27 +85,89 @@ async def dashboard(): 4. **Phase 4** (3주): 웹 UI 및 실시간 통신 5. **Phase 5** (1개월): 세션 공유, 응답 분석 기능 +## 배포 방식 +**UV 가상환경 사용** (Docker 대신) +- 세션 파일(~/.config/claude, ~/.config/gemini) 직접 접근 +- 브라우저 인증 자연스럽게 연동 +- tmux는 pipx로 설치 +- FastAPI는 uv로 관리 + ## 기술적 고려사항 -- 각 CLI의 세션 파일 경로 파악 필요 -- 입출력 스트림 처리 (stdin/stdout/stderr) -- 응답 파싱 및 포맷팅 로직 -- 동시성 처리 (asyncio/threading) -- 에러 핸들링 및 재연결 로직 + +### 세션 관리 +- **세션 파일 위치**: strace/fs_usage로 CLI가 읽는 파일 추적 +- **인증 오류 감지**: "Session expired", "Please log in" 패턴 매칭 +- **헬스 체크**: claude me, gemini whoami로 세션 상태 확인 + +### 입출력 제어 +- **PTY 사용**: Python pty 모듈로 실제 터미널 환경 시뮬레이션 +- **비동기 처리**: asyncio.subprocess로 여러 CLI 동시 제어 +- **입력 전송**: stdin.write() 후 flush() 필수 + +### 응답 파싱 +- **ANSI 코드 제거**: 색상 코드, 스피너, ASCII 아트 정규식 제거 +- **응답 종료 판단**: + - 프롬프트 재출현 감지 + - 1-2초 타임아웃 기반 종료 +- **CLI별 커스텀 파서**: 각 CLI 출력 형식에 맞춘 개별 파서 + +### 유지보수 리스크 +- CLI 업데이트시 파싱 로직 깨짐 +- 지속적인 출력 형식 변경 추적 필요 +- 각 CLI 버전별 호환성 테스트 필수 ## 리스크 - CLI 업데이트로 인한 호환성 깨짐 - 세션 만료 처리 - 각 서비스의 rate limiting -- TOS 위반 가능성 (자동화 관련) +- 자동화 관련 제약사항 + +## 최종 배포 전략 + +### 구현 위치 +- **51124 서버**: 모든 CLI 설치되어 있음, FastAPI 서버 실행 +- **51123 서버**: nginx 프록시로 51124:8888 연결 + +### 51124 서버 설정 +- 전용 디렉토리: /home/admin/multi-ai-cli/ +- UV 가상환경으로 FastAPI 실행 +- 리소스 격리: nice -n 19, ionice -c3 사용 +- 포트: 8888 + +### 51123 nginx 프록시 +- location /multi-ai/ → proxy_pass http://51124:8888/ +- WebSocket 지원 헤더 설정 필요 ## 실현 가능성 평가 -- **전체 실현 가능성**: 80-85% -- **Phase 1** (tmux 스크립트): 100% -- **Phase 2** (Python 래퍼): 85% -- **Phase 3-4** (FastAPI+웹 UI): 80% -- **Phase 5** (세션 공유·응답 분석): 65-70% -- **전제**: 각 CLI가 stdin/stdout 제어 가능, 세션 파일 경로 확보 -- **주의**: 23/24 원격 오케스트레이션 포함 시 5-10%p 하락 가능 + +### 최종 평가 +- **51124 서버 기준**: 80-85% (모든 CLI 설치됨, 세션 파일 접근 가능) +- **핵심 결론**: 51124에서 구축 + 51123 nginx 프록시로 웹 제공 + +### Phase별 평가 +- **Phase 1** (tmux 스크립트): 100% 즉시 가능 +- **Phase 2** (Python 래퍼): 70% (PTY 제어, 응답 종료 판단) +- **Phase 3-4** (FastAPI+웹 UI): 65% +- **Phase 5** (세션 공유·응답 분석): 50% + +## 100% 실현성 달성 방안 + +### 검증된 아키텍처 참조 (2024년 기준) +- **Microsoft Magentic-One**: Orchestrator + 4개 특화 에이전트 (WebSurfer, FileSurfer, Coder, Terminal) +- **AWS Multi-Agent Orchestrator**: Amazon Bedrock 기반 동적 에이전트 할당 +- **AutoGen Framework**: Microsoft의 대화형 에이전트 간 메시지 전달 프로토콜 + +### 핵심 개선사항 +1. **프로파일 기반 에이전트 정의**: 각 CLI를 명확한 역할과 능력으로 정의 +2. **메모리 시스템**: SQLite로 대화 컨텍스트 유지, 에이전트 간 정보 공유 +3. **동적 오케스트레이션**: 관리 에이전트가 태스크 분배 및 응답 집계 +4. **계약 기반 테스트**: 각 CLI 어댑터의 입출력 명세 정의 및 자동 검증 + +### 논문 기반 검증 필요 항목 +- Multi-agent collaboration mechanisms 연구 +- LLM tool use reliability 패턴 +- Stream processing backpressure 처리 +- Contract testing for microservices 적용 ## 반자동화 범위 정의