ruby_llm을 활용한 도구 추상화 및 구현
-
인프라 구성: ruby_llm 젬은 다양한 LLM 프로바이더와의 상호작용을 깔끔한 API로 추상화하며,
Conversation모델을 통해 대화 맥락과 메시지 히스토리를 관리합니다. -
도구 정의(Tooling): DSL을 사용하여 검색 도구의 파라미터와 설명을 정의하며, 이는 LLM이 상황에 맞게 도구를 선택하는 컨텍스트로 활용됩니다.
보안과 검색의 통합 (RAG 전략)
-
Algolia 및 Pundit 결합: 자연어 쿼리가 들어오면 Algolia를 통해 데이터를 검색하고, 그 결과를 Rails의
Pundit정책 스코프로 필터링합니다. 이를 통해 LLM은 오직 현재 사용자가 권한을 가진 데이터에만 접근할 수 있게 됩니다. -
데이터 캡슐화: LLM에게 무제한적인 데이터베이스 접근권을 주는 대신, 특정 함수 호출을 통해서만 정제된 JSON 데이터를 반환받도록 설계하여 보안 사고를 예방합니다.
아키텍처 및 모델 성능 평가
-
비동기 UI 업데이트: 사용자의 메시지는
ActiveJob을 통해 백그라운드에서 처리되며, 결과는Turbo Streams를 통해 실시간으로 프론트엔드에 반영되어 사용자 경험을 개선합니다. -
LLM 모델 비교: GPT-4는 환각 증상이 잦고 최신 고성능 모델은 다단계 도구 호출 시 지연 시간이 발생했으나, 테스트 결과 GPT-4o가 속도와 도구 사용의 정확도 면에서 가장 우수한 성능을 보였습니다.