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 매크로를 통해 필요한 입력값을 선언하고, instructions나 tools 정의 시 블록 내에서 해당 데이터를 참조할 수 있습니다. 이는 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 기능을 구현할 수 있음을 증명합니다.