Ruby로 코딩 에이전트 구축하기: 보일러플레이트 제거와 단순함

Coding agent in 94 lines of Ruby

작성자
발행일
2025년 05월 14일

핵심 요약

  • 1 RubyLLM 젬을 활용하여 94줄의 Ruby 코드로 파일 읽기, 목록화, 편집, 셸 명령 실행 기능을 갖춘 코딩 에이전트를 구축하는 과정을 설명합니다.
  • 2 코딩 에이전트 개발은 복잡한 AI 전문 지식보다는 일반적인 소프트웨어 개발 기술에 가깝고, Ruby는 보일러플레이트를 줄여 개발을 간소화하는 데 매우 적합함을 강조합니다.
  • 3 파일 읽기, 목록화, 편집 도구를 통해 기본적인 에이전트를 구현한 후, 셸 명령 실행 도구를 추가하여 에이전트의 자가 테스트 및 코드 개선 능력을 향상시키는 방법을 제시합니다.

도입

Thorsten Ball의 "How to Build an Agent, or: The Emperor Has No Clothes" 글에서 코딩 에이전트 구축이 어렵지 않다는 주장에 영감을 받아, 저자는 Ruby 언어로 이를 더욱 간결하게 구현할 수 있음을 입증합니다. Go 언어로 작성된 원본 에이전트의 많은 부분이 보일러플레이트 코드임을 지적하며, Ruby가 이러한 불필요한 코드를 효과적으로 줄여 핵심 로직에 집중할 수 있게 한다는 점을 강조합니다. 이 글은 RubyLLM 젬을 사용하여 최소한의 코드로 강력한 코딩 에이전트를 만드는 과정을 상세히 설명합니다.

코딩 에이전트의 기본 구성

코딩 에이전트는 본질적으로 도구 접근 권한을 가진 AI 챗 에이전트입니다. 대부분의 최신 대규모 언어 모델(LLM)은 도구를 사용할 수 있으며, 이 도구들은 목적과 매개변수가 설명된 함수 형태로 LLM이 인식할 수 있도록 포맷됩니다. 기본적인 AI 챗 에이전트는 사용자 프롬프트 읽기, LLM에 전달, 응답 출력의 반복 루프로 구성됩니다.

필수 도구 구현

간단한 코딩 에이전트를 위해서는 단 세 가지 핵심 도구가 필요합니다.

  • 파일 읽기 (ReadFile): 주어진 파일 경로의 내용을 반환합니다. File.read(path) 한 줄로 구현되며, 오류 처리 로직을 포함하여 LLM이 스스로 오류를 복구할 수 있도록 돕습니다.

  • 파일 목록화 (ListFiles): 주어진 디렉토리 경로의 파일 및 디렉토리 목록을 반환합니다. 디렉토리 이름에는 /를 붙여 파일과 구분합니다. Dir.glob을 사용하여 구현됩니다.

  • 파일 편집 (EditFile): 파일 경로, 기존 문자열, 새 문자열을 받아 파일을 업데이트합니다. old_strnew_str로 대체하며, 파일이 존재하지 않으면 새로 생성하여 LLM이 새 파일을 작성할 수 있게 합니다. File.write(path, content.sub(old_str, new_str))를 사용합니다.

RubyLLM 젬 활용

이러한 도구들은 RubyLLM 젬의 RubyLLM::Tool 클래스를 상속받아 구현됩니다. descriptionparam을 통해 LLM에게 도구의 목적과 매개변수를 명확하게 전달합니다. Agent 클래스 내에서 @chat.with_tools 메서드를 통해 구현된 도구들을 LLM에 등록하여 사용할 수 있습니다. RubyLLM 젬은 LLM과 도구 간의 JSON 통신 및 응답 처리를 자동으로 관리하여 개발자가 복잡한 부분을 신경 쓰지 않도록 합니다.

에이전트 개선: 셸 명령 실행 도구

초기 에이전트는 코드를 생성만 할 뿐 실행할 수는 없었습니다. RunShellCommand 도구를 추가하여 에이전트가 셸 명령을 실행하고 그 결과를 바탕으로 코드를 테스트하고 개선할 수 있도록 합니다. 사용자 확인 과정을 거쳐 안전하게 명령을 실행하며, 이를 통해 에이전트는 생성한 코드의 테스트 실패를 스스로 진단하고 수정하는 능력을 갖추게 됩니다. 이로써 총 94줄의 Ruby 코드로 강력한 코딩 에이전트가 완성됩니다.

결론

이 프로젝트를 통해 코딩 에이전트 구축이 AI 전문 지식보다는 일반적인 소프트웨어 개발 능력에 크게 의존한다는 점이 명확해졌습니다. 특히 Ruby 언어는 탁월한 보일러플레이트 제거 능력과 높은 가독성을 바탕으로 이러한 종류의 애플리케이션 개발에 매우 적합함을 입증했습니다. `RubyLLM` 젬은 LLM과의 통합을 간소화하여 개발자가 핵심 로직 구현에 집중할 수 있도록 지원합니다. 결과적으로, 간단한 도구 추가만으로 에이전트의 기능을 크게 향상시킬 수 있으며, 이는 Ruby 개발자들에게 코딩 에이전트 아이디어를 실현할 수 있는 좋은 기회를 제공합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!