본문으로 건너뛰기

RubyLLM 1.12: 도구를 갖춘 LLM으로서의 에이전트 구현

RubyLLM 1.12: Agents Are Just LLMs with Tools

작성자
jeff
발행일
2026년 02월 17일

핵심 요약

  • 1 에이전트를 복잡한 오케스트레이션 엔진이 아닌, 도구(Tools)를 호출할 수 있는 기능을 갖춘 LLM으로 정의하며 단순함을 강조합니다.
  • 2 RubyLLM 1.12 버전은 중복되는 채팅 설정을 클래스 단위로 캡슐화할 수 있는 새로운 Agent DSL을 도입하여 코드 재사용성을 높였습니다.
  • 3 Rails와의 긴밀한 통합을 통해 ERB 기반 프롬프트 관리, 런타임 컨텍스트 주입, 데이터베이스 영속성 기능을 자연스럽게 지원합니다.

도입

최근 기술 업계에서 '에이전트'라는 용어는 마케팅 수사로 인해 본질이 흐려지는 경향이 있습니다. RubyLLM의 개발자는 에이전트를 단순히 '함수를 호출할 수 있는 LLM'으로 정의하며, 복잡한 프레임워크나 그래프 구조 없이도 강력한 에이전트를 구축할 수 있음을 역설합니다. 이번 1.12 업데이트는 이러한 철학을 바탕으로 개발자가 익숙한 Ruby 클래스 형식을 통해 에이전트를 정의하고 관리할 수 있는 체계적인 방법을 제시하며, 복잡한 AI 통합 과정을 Rubyist의 직관에 맞게 단순화합니다.

1. 에이전트의 재정의: 단순함의 미학

최근 기술 업계에서 ‘에이전트’는 가장 오용되는 단어 중 하나입니다. 많은 스타트업과 프레임워크가 복잡한 오케스트레이션 엔진이나 노드 그래프를 강조하지만, RubyLLM은 에이전트를 단순히 ‘도구(함수)를 호출할 수 있는 LLM’으로 정의하며 본질에 집중합니다. 모델이 주어진 도구 세트(데이터베이스 조회, API 호출, 파일 작업 등)를 언제 어떻게 사용할지 스스로 결정하고, 실행 결과를 바탕으로 추론을 이어가는 과정 자체가 에이전트의 핵심입니다. 별도의 ‘에이전트 모드’나 복잡한 엔진 없이도, 모델이 대화 이상의 행동을 할 수 있다면 그것이 바로 에이전트입니다. 이러한 접근 방식은 개발자가 시스템의 동작을 더 명확하게 이해하고 제어할 수 있게 돕습니다.

2. RubyLLM 1.12의 핵심: Agent DSL 도입 배경

RubyLLM 1.0부터 도구 호출 기능은 핵심 기능으로 존재해 왔습니다. 하지만 실제 애플리케이션 개발 과정에서 코드 중복 문제가 대두되었습니다. 동일한 모델 설정, 지시사항(Instructions), 도구 세트, 온도(Temperature) 설정이 컨트롤러, 백그라운드 작업, 서비스 객체 등 코드베이스 전반에 흩어져 중복되는 현상이 발생한 것입니다. Ruby 개발자라면 이러한 중복을 클래스로 추상화하려는 본능이 있으며, RubyLLM 1.12는 바로 이 지점에서 RubyLLM::Agent라는 새로운 DSL을 제공하여 문제를 해결합니다. 이는 객체 지향 프로그래밍의 원칙을 AI 설정 관리에도 그대로 적용한 결과입니다.

3. 클래스 기반 에이전트 정의와 활용

새로운 DSL을 사용하면 에이전트를 단 한 번 정의하고 어디서든 재사용할 수 있습니다. RubyLLM::Agent를 상속받은 클래스 내에서 model, instructions, tools, temperature와 같은 매크로를 사용합니다. 이는 기존의 with_* 메서드 호출과 일대일로 매칭되므로 새로운 개념을 배울 필요가 없습니다. 예를 들어 SupportAgent 클래스를 정의하면, 애플리케이션 어디에서나 SupportAgent.new.ask 호출만으로 복잡하게 구성된 에이전트 기능을 즉시 실행할 수 있습니다. 이는 코드의 가독성을 높일 뿐만 아니라, 에이전트의 행동 양식을 한곳에서 관리할 수 있게 해줍니다.

4. 런타임 컨텍스트와 지연 평가(Lazy Evaluation)

에이전트는 정적인 설정만으로는 부족하며 현재 사용자, 워크스페이스, 현재 시간과 같은 실시간 데이터가 필요합니다. RubyLLM 1.12는 이를 위해 블록과 람다를 활용한 지연 평가를 지원합니다. inputs 매크로를 통해 필요한 입력값을 선언하고, instructionstools 정의 시 블록 내에서 해당 데이터를 참조할 수 있습니다. 이는 Ruby 언어의 자연스러운 특성을 활용하여 런타임 컨텍스트를 안전하고 유연하게 주입할 수 있게 해줍니다. 개발자는 복잡한 상태 관리 없이도 각 요청에 최적화된 에이전트 인스턴스를 생성할 수 있습니다.

5. Rails 프롬프트 관리 규칙 및 영속성

Rails 환경에서 프롬프트는 단순한 문자열이 아닌 애플리케이션 코드의 일부로 취급되어야 합니다. RubyLLM은 app/prompts/ 경로 하위에 에이전트 클래스명에 맞춘 ERB 템플릿 파일을 두는 관례(Convention)를 도입했습니다. 이를 통해 프롬프트를 Git으로 버전 관리하고 PR을 통해 리뷰할 수 있습니다. 또한 chat_model 매크로를 사용하면 Rails 모델과 연동되어 대화 내용이 자동으로 데이터베이스에 저장됩니다. create! 메서드로 영속성 있는 대화를 시작하거나, find 메서드로 기존 대화를 불러와 설정을 적용하는 작업이 매우 직관적으로 이루어지며, 이는 대규모 서비스 운영에서 필수적인 기능입니다.

6. 기타 주요 업데이트 및 실무 적용

이번 1.12 릴리스에는 에이전트 DSL 외에도 AWS Bedrock의 Converse API 전체 지원과 Azure Foundry API 지원이 포함되었습니다. 이를 통해 개발자는 단일 인터페이스로 다양한 클라우드 제공업체의 모델을 제어할 수 있는 유연성을 확보하게 되었습니다. 또한 with_instructions 세맨틱이 개선되어 메시지 순서 보장 및 추가 옵션이 강화되었습니다. 이러한 기능들은 이미 실제 운영 환경(Chat with Work)에서 검증된 기능들로, 복잡한 프레임워크 없이 오직 Ruby의 힘만으로 강력한 AI 기능을 구현할 수 있음을 증명합니다.

결론

RubyLLM 1.12는 에이전트 구축의 복잡성을 걷어내고 Rubyist들에게 익숙한 객체 지향적 접근 방식을 제공합니다. 클래스 기반의 DSL, 지연 평가를 통한 런타임 컨텍스트 처리, Rails 프롬프트 관리 규칙 등은 실무 환경에서 LLM을 통합할 때 발생하는 유지보수의 어려움을 효과적으로 해결합니다. '에이전트는 도구를 가진 LLM일 뿐'이라는 명확한 정의 아래, RubyLLM은 복잡한 오케스트레이션 프레임워크 없이도 실질적인 AI 기능을 구현할 수 있는 가장 단순하면서도 강력한 도구로서의 입지를 다지고 있습니다.

댓글0

댓글 작성

댓글 삭제 시 비밀번호가 필요합니다.

이미 계정이 있으신가요? 로그인 후 댓글을 작성하세요.

0/1000
정중하고 건설적인 댓글을 작성해 주세요.