DSPy.rb CodeAct: LLM 기반 Ruby 코드 실행 에이전트 개발 및 활용

Let the Model Write Your Tools

작성자
Ruby AI News
발행일
2025년 11월 27일

핵심 요약

  • 1 DSPy.rb CodeAct는 LLM이 Ruby 코드를 생성하고 실행하여 웹 API 데이터 페치 등 다양한 작업을 해결하는 모듈입니다.
  • 2 에이전트는 Think-Code-Observe 루프를 통해 동적으로 코드를 생성하고 실행하며, 시그니처를 통해 전문화된 동작을 정의할 수 있습니다.
  • 3 CodeAct는 유연한 데이터 처리와 API 조합에 유용하나, `eval` 사용으로 인한 보안 위험 때문에 프로덕션 환경에서는 샌드박싱이 필수적입니다.

도입

이 게시물은 DSPy.rb의 CodeAct 모듈을 소개하며, LLM(Large Language Model)이 Ruby 코드를 직접 작성하고 실행하여 복잡한 작업을 해결하는 방법을 다룹니다. CodeAct는 사전에 정의된 도구 없이 에이전트가 실시간으로 코드를 생성함으로써 웹 API로부터 데이터를 가져오는 것과 같은 연구 작업을 수행할 수 있도록 지원합니다. 본문에서는 최소한의 연구 에이전트 구현 사례를 통해 CodeAct의 작동 방식과 주요 기능을 상세히 탐구합니다.

CodeAct 에이전트는 DSPy 시그니처를 기반으로 특정 작업을 수행하도록 정의됩니다.

시그니처 정의 (The Signature)

  • ResearchQuery 클래스: 에이전트의 목표를 명확히 정의합니다.
    • 설명: “웹 콘텐츠를 가져오고 분석하기 위한 Ruby 코드를 생성하여 주제를 연구합니다.”
    • 입력: query (연구 질문), context (사용 가능한 라이브러리 및 가이드라인)
    • 출력: answer (연구 결과 기반의 답변)
  • 이 시그니처는 에이전트가 어떤 정보를 받아 어떤 결과를 도출해야 하는지 LLM에게 지시하는 역할을 합니다.

컨텍스트 제공 (The Context)

  • RESEARCH_CONTEXT 상수는 에이전트가 활용할 수 있는 Ruby 라이브러리(Net::HTTP, URI, JSON)와 유용한 API 엔드포인트(GitHub API, Wikipedia API)를 문자열 형태로 제공합니다. 이는 LLM이 코드를 생성할 때 참고할 수 있는 환경 정보가 됩니다.

에이전트 실행 과정 (Running the Agent)

  • DSPy 설정 후 DSPy::CodeAct 인스턴스를 생성하고, querycontext를 전달하여 에이전트를 호출합니다.

  • 실행 예시: “rails/rails 리포지토리는 몇 개의 별을 가지고 있나요?”라는 쿼리에 대해 에이전트는 GitHub API를 사용하여 별 개수를 성공적으로 가져옵니다.

  • Three Phases: 에이전트는 다음 세 단계를 반복하여 작업을 수행합니다.

    • Think (사고): 접근 방식에 대해 추론합니다. (예: GitHub API 사용 결정)
    • Code (코드 생성 및 실행): Ruby 코드를 생성하고 실행합니다. (예: Net::HTTP를 사용하여 API 호출)
    • Observe (관찰): 작업 완료 여부를 판단하거나 다음 단계를 결정합니다.

시그니처를 통한 전문화 (Specializing via Signatures)

  • 시그니처를 변경함으로써 다양한 목적의 에이전트를 생성할 수 있습니다.
    • AnalyzeCSV: CSV 데이터를 분석하고 통계를 계산하는 데이터 분석 에이전트.
    • ExplainCode: 코드 스니펫을 실행하여 동작을 이해하고 설명하는 코드 설명 에이전트.
  • 각 시그니처는 LLM의 접근 방식을 안내하고, 입출력 필드는 에이전트의 데이터 흐름을 정의합니다.

사용 시점 (When to Use This)

  • CodeAct: 유연한 데이터 페치 또는 변환, 여러 API 조합, 파싱 및 파생 값 계산이 필요할 때 적합합니다. 도구 정의 없이 자율적으로 코드를 생성합니다.

  • ReAct: 잘 정의된 인터페이스를 가진 도구가 있거나, 에이전트의 동작을 엄격하게 제어해야 할 때 더 적합합니다.

샌드박싱 옵션 (Sandboxing Options)

  • CodeAct는 생성된 코드 실행을 위해 eval을 사용하므로 보안 위험이 있습니다.

  • 프로덕션 환경 대안:
    • Docker 컨테이너: trusted-sandbox Gem을 사용하여 격리된 환경에서 리소스 제한과 함께 코드 실행. (오버헤드: ~100ms+)
    • V8 엔진: ruby_box Gem을 통해 Ruby 코드를 JS로 컴파일 후 V8에서 실행. (빠르지만 Ruby 호환성 제한)
    • 프로세스 격리: safe_ruby Gem을 사용하여 화이트리스트 메서드와 함께 프로세스 포크. (중간 오버헤드)
    • WebAssembly (WASM): wasmer-ruby Gem을 사용하여 메모리 안전한 WASM 샌드박스. (복잡한 설정)
  • 제한적인 실험용 가드레일: SaferCodeAct와 같이 특정 패턴 차단 및 타임아웃을 적용하는 방식은 완벽한 샌드박스가 아니므로, 신뢰할 수 없는 입력에 대해서는 Docker나 WASM과 같은 강력한 격리 방안을 고려해야 합니다.

결론

DSPy.rb의 CodeAct 모듈은 LLM이 Ruby 코드를 동적으로 생성하고 실행함으로써, 웹 콘텐츠 연구, 데이터 분석, 코드 이해 등 다양한 복잡한 작업을 효과적으로 자동화할 수 있는 강력한 프레임워크를 제공합니다. 개발자는 시그니처 정의만으로 에이전트의 전문성을 부여할 수 있어 유연한 개발이 가능합니다. 그러나 생성된 코드 실행 시 `eval` 사용으로 인한 보안 취약점이 존재하므로, 프로덕션 환경에 적용하기 전에 Docker 컨테이너나 WebAssembly와 같은 견고한 샌드박싱 솔루션을 반드시 도입하여 안전성을 확보해야 합니다. 이는 CodeAct의 잠재력을 최대한 활용하면서도 시스템의 무결성을 유지하는 데 필수적입니다.

댓글 0

로그인이 필요합니다

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

로그인 하러 가기

아직 댓글이 없습니다

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