LLM 멀티 어댑터로 production 안정성 확보하기 — lazy loading과 interactive CLI 패턴

AI 에이전트 플랫폼을 production에 올릴 때 가장 까다로운 건 안정성이다. 이번에 LLMMixer v0.3을 만들면서 Claude, GPT-4, Gemini를 하나의 워크플로에서 쓸 때 생기는 문제들을 해결했다. 특히 node-pty를 통한 interactive CLI와 lazy loading 패턴이 핵심이었다. 배경: 멀티 LLM 워크플로 ...

By · · 1 min read
LLM 멀티 어댑터로 production 안정성 확보하기 — lazy loading과 interactive CLI 패턴

Source: DEV Community

AI 에이전트 플랫폼을 production에 올릴 때 가장 까다로운 건 안정성이다. 이번에 LLMMixer v0.3을 만들면서 Claude, GPT-4, Gemini를 하나의 워크플로에서 쓸 때 생기는 문제들을 해결했다. 특히 node-pty를 통한 interactive CLI와 lazy loading 패턴이 핵심이었다. 배경: 멀티 LLM 워크플로 엔진 LLMMixer는 여러 LLM을 조합해서 복잡한 작업을 처리하는 플랫폼이다. 코드 분석은 Claude에게, 문서 생성은 GPT-4에게, 데이터 추출은 Gemini에게 맡기는 식으로 각 모델의 강점을 활용한다. 이번 v0.3에서 목표는 production readiness였다. 개발 환경에서만 돌아가는 프로토타입이 아니라, 실제 서비스에서 쓸 수 있는 수준의 안정성을 확보해야 했다. node-pty로 interactive CLI 처리하기 가장 큰 변화는 node-pty 도입이었다. LLM이 생성한 코드를 실행할 때 interactive 명령어 처리가 필요했기 때문이다. 기존 방식의 한계 처음에는 child_process.spawn()으로 CLI 도구를 실행했다. 하지만 npm install이나 git commit 같은 명령어에서 사용자 입력을 기다리면 프로세스가 멈춘다. // 이렇게 하면 안 된다 const result = spawn('npm', ['install'], { stdio: 'inherit' }); // interactive prompt가 나오면 무한 대기 node-pty 활용 패턴 AI에게 이런 식으로 프롬프팅했다: "node-pty를 써서 pseudo-terminal을 만들고, CLI 명령어의 output을 실시간으로 캡처해. interactive prompt가 나오면 미리 정의된 응답을 자동으로 보내도록 구현해. timeout 처리도 필요하다." import * as pty from 'node-pty'; const terminal = pty.spawn('npm', ['install'], { na