이제 LLM이 Rails 애플리케이션을 직접 구축하는 다음 단계로 나아갈 준비가 완료되었습니다. 이 새로운 시스템인 LlamaBot은 다음과 같은 구조로 작동합니다.
LlamaBot 아키텍처
- 프론트엔드 인터페이스:
localhost:8000
에서 실행되는 FastAPI 애플리케이션은 좌측에 채팅 인터페이스를 제공하며, 우측 iFrame에는localhost:3000
에서 실행되는 LlamaPress Rails 앱의 프론트 페이지가 로드됩니다. - LLM 에이전트: 채팅 인터페이스는 웹소켓 연결을 통해 FastAPI로 메시지를 전송하고, 이는 LangGraph로 연결됩니다. LangGraph 내에는 ReAct 에이전트가 포함되어 있으며, 이 에이전트는 파일 시스템 읽기/쓰기, Rails 터미널 명령어 실행(스캐폴딩, Rake 태스크, 콘솔 등), Git 히스토리 코드 커밋 등의 도구 호출 기능을 가집니다.
Docker Compose 환경
전체 시스템은 단일 docker-compose.yml
파일을 통해 네 개의 컨테이너로 구성됩니다.
* Ruby on Rails 컨테이너: localhost:3000
에서 LlamaPress를 실행합니다.
* FastAPI/LangGraph 컨테이너: localhost:8000
에서 LlamaBot의 핵심 로직을 담당합니다.
* Postgres 컨테이너: Rails의 데이터베이스 및 LangGraph 에이전트 체크포인트 저장에 사용됩니다.
* Redis 컨테이너: 브라우저에서 Rails로의 ActionCable 웹소켓 통신을 지원합니다.
파일 시스템 접근 및 코드 수정 시연
가장 중요한 진전은 Rails Docker 컨테이너와 FastAPI Docker 컨테이너 간의 공유 볼륨 마운트를 통해 파일 시스템 접근이 가능해졌다는 점입니다. 이를 통해 FastAPI 애플리케이션 내부에서 Rails 앱 컨테이너의 파일 내용을 직접 볼 수 있습니다.
- 볼륨 마운트 예시:
yaml llamapress: volumes: - ./app:/rails/app - ./config/routes.rb:/rails/config/routes.rb - ./db:/rails/db llamabot: volumes: - ./app:/app/app/rails/app - ./config/routes.rb:/app/app/rails/config/routes.rb - ./db:/app/app/rails/db - ./LlamaBot/app:/app/app
- LLM의 파일 탐색: 디버깅 세션을 통해 LLM이 Rails 앱의
app
,config
,db
디렉토리를 탐색하고,app/controllers
,app/models
,app/views
등 하위 디렉토리의 파일 목록을 성공적으로 확인하는 것이 입증되었습니다. - 코드 수정 시연: LLM은
app/views/devise/registrations/new.html.erb
파일의h1
태그 내용을 “Build a website in seconds!”에서 “Hello world from Leonardo?”로 성공적으로 변경했습니다. 이는 LLM이 Rails 애플리케이션 코드를 직접 읽고 쓸 수 있음을 의미합니다.
이러한 파일 시스템 접근 능력은 LLM이 Rails 애플리케이션의 구조를 이해하고, 사용자의 요청에 따라 코드를 직접 수정할 수 있는 기반을 마련합니다.