기존 Rails 구조는 OpportunityEnrichmentService
를 통해 Apollo API에서 메타데이터를 가져왔습니다. 이를 Ruby OpenAI 젬을 활용, ChatGPT를 호출하는 LlmEnrichment
클래스로 대체하는 것이 목표였습니다. 개발팀은 TDD 방식으로 구현하며, OpenAI의 함수 호출 모드를 활용하여 LLM이 특정 스키마에 따라 구조화된 필드를 반환하도록 정의했습니다. 이 모드는 LLM이 마치 함수를 호출하고 인수를 제공하는 것처럼 작동하여, 애플리케이션이 ChatGPT의 응답을 데이터로 직접 활용할 수 있게 합니다.
개발 과정에서 날짜 형식 불일치, 필드 누락, 응답 신뢰도 부족 등의 문제가 발생했습니다. 이를 해결하기 위해 OpenAI의 required
파라미터와 “strict mode”를 사용하여 응답 형식의 일관성을 확보했습니다. 내용의 일관성은 여전히 개선이 필요했지만, thoughtbot
의 설립 연도(2003년)는 정확하게 반환되었습니다.
설계 불확실성 해소를 위해 ‘Riffing’ 기법을 활용했습니다. 이는 임시 파일에서 코드 형태로 아이디어를 자유롭게 구상하는 빠르고 협업적인 방식입니다. 또한, ActiveJob::Performs
젬을 통해 Rails 잡(Job) 구조를 단순화하고 상용구 코드를 줄이는 방법도 소개되었습니다.