뉴렐릭 AI를 구축하면서 세운 목표는 모두에게 옵저버빌리티 역량을 제공하고, 텔레메트리 데이터에 관해 무엇이든 물어볼 수 있게 만들자는 것이었습니다. 뉴렐릭 AI는 고객이 일상적인 언어를 사용해 뉴렐릭 데이터베이스(NRDB)와 상호 작용할 수 있도록 하여 뉴렐릭 쿼리 언어(NRQL)에 익숙하지 않은 사용자도 기술 스택 전반에서 쉽게 분석을 수행할 수 있도록 해줍니다. 문서와 지식 기반의 인사이트 취합, 시스템 이상 징후 표시 등 추가적인 기능도 사용할 수 있습니다.

성능 평가

평가를 위한 강력한 척도와 프로토콜을 확보하는 것은 빅데이터 작업의 핵심적인 측면으로, 이 부분에서 AI 모델들이 진가를 발휘합니다. 수많은 결정을 내려야 하기 때문에, 체계적이고 대규모로 이들을 평가하는 것이 필요합니다. 기존의 머신 러닝(ML) 알고리즘에는 이를 위해 잘 정의되고 확립된 평가 지표가 있습니다. 예를 들어, 차량 분류 문제의 경우 "내가 도로에서 그 차를 올바르게 식별했나요?"라고 질문할 수 있습니다. 또는 회귀 문제의 경우 "내 예측 수치가 실제 결과와 얼마나 차이가 있나요?"라고 물을 수 있습니다.

ChatGPT의 도입으로, OpenAI는 생성형 AI를 사용해 달성할 수 있는 목표를 한 단계 더 높였습니다. 새로 확립된 성능은 기존 기능을 향상하는 것이 아니라 훨씬 뛰어넘으면서 완전히 새로운 가능성을 열어주었습니다. 그러나 이 새로운 기술에는 문제들이 따르며 그 중 하나는 성능 검증입니다. 새로운 생성형 AI 기능이 매일 등장하고 있지만, 기저 작업을 측정하기 위한 표준 평가 프로토콜과 측정 기준은 아직 확립되지 않았습니다. 자연어 출력의 구조화되지 않은 특성으로 인해, 이러한 프로토콜을 공식화하는 것은 중요한 작업입니다. 뉴렐릭 AI 개발팀은 사용자에게 실제 가치를 제공하며 진정으로 신뢰할 수 있는 기능을 생성하는 데 중점을 두고 세심한 주의를 기울였습니다.

뉴렐릭 AI의 목표는 사용자가 묻는 모든 것에 답할 수 있는 도구를 만드는 것이었습니다. 모든 빅데이터 프로젝트와 마찬가지로, 정보에 입각한 설계 결정을 내리고 성능을 최적화하려면 답변을 평가해야 합니다. 하지만 제대로된 결과를 얻었는지 어떻게 판단할 수 있을까요? 이 글에서는 이 문제를 해결하기 위해 취한 몇 가지 조치에 대해 알아보겠습니다.

전략 1: 명확한 성공 척도를 적용할 수 있는 영역 식별

자연어는 구조화되어 있지 않고 뉴렐릭 AI 같은 생성형 AI 기반 시스템은 복잡할 수 있습니다. 하지만 이들을 더 작은 구성 요소들로 나누고, 명확한 성공 척도를 정의할 수 있는 부분들을 식별할 수 있습니다. 뉴렐릭 AI는 모듈형으로 설계되었고 구성 요소들을 독립적으로 관리할 수 있기 때문에, 전체 시스템을 더욱 체계적으로 평가하는 것이 가능합니다. 설계와 구현의 모든 단계에서, 뉴렐릭은 측정 가능성의 중요성을 일관되게 고려하였고 이러한 측정이 적용될 수 있는 영역을 정확히 찾아냈습니다.

예시 1: 사용 사례별로 사용자 요청 분류

그렇게 파악된 영역 중 하나는 사용자 질문을 다양한 흐름으로 분류하는 것입니다. 이는 각 사용자 요청을 처리하는 첫 번째 단계입니다. 뉴렐릭 AI에 질문을 하면, 먼저 질문이 어느 흐름으로 가야 할 지가 결정됩니다. 뉴렐릭에 대한 일반적인 질문(이 경우 문서를 검색)일 수도 있고, 사용자의 자체 시스템에 대한 질문(NRQL 쿼리 필요)일 수도 있고, 시스템 오류에 대한 일반 개요를 요청(Lookout 서비스 호출)하는 것일 수도 있습니다. 이러한 ‘라우팅’ 단계에서 생성형 AI가 관여를 하긴 하지만, 이는 본질적으로 분류 문제이므로, 분류에 확립된 평가 지표를 사용할 수 있습니다. 이는 솔루션에 대한 접근 방식이 올바른 방향으로 가고 있는지 평가하고, 향후 더 많은 흐름을 추가하여 뉴렐릭 AI 기능을 확장하는 데 중요합니다.

예 2: NL2NRQL의 구문 유효성 검사

또 다른 예는 '자연어를 NRQL로 변환(NL2NRQL)'하는 것입니다. 뉴렐릭 AI는 자연어로된 사용자 입력을 받아 NRQL 쿼리로 변환합니다. 뉴렐릭 AI는 NR2NRQL을 수행한 후 NRDB에서 쿼리를 실행하여 데이터를 가져온 다음 그 결과를 설명할 수 있습니다. 프로그래밍 도움말을 위해 ChatGPT를 사용해 본 적이 있다면, 코드 블록이 완벽하게 구조화되어 있는데 일부 키워드, 함수 또는 속성이 존재하지 않는 ‘구문 환각’을 경험해 본적이 있을 겁니다. NL2NRQL에서 이러한 문제를 방지하고 사용자에게 실제로 데이터를 가져오는 유효한 쿼리를 제공하는 것이 중요했습니다. 이를 위해, 파서와 컴파일러로 구문 평가를 하고 NRDB에 대해 실행해 결과를 반환하는지 확인함으로써 생성된 NRQL의 유효성을 테스트해볼 수 있습니다. 뉴렐릭 AI는 실시간으로 지속적으로 구문 검증을 수행하고 구문이 올바른 경우에만 사용자에게 쿼리를 반환합니다. 이는 시스템에 명확한 이분법적인 성공 척도를 제공합니다. 뉴렐릭이 처음부터 NRQL을 중심으로 개발을 한 이유 중 하나입니다.

참고로 OpenAI는 최근 새로운 코드 해석기 플러그인에 유사한 접근 방식을 도입했습니다. 이 플러그인은 제안된 코드를 실행하여 정확성을 확인합니다.

전략 2: 환각에 대한 대처 - 검색 증강 생성(RAG) 및 작업 재구성

생성형 AI로 작업을 한다고 하면 많은 사람들이 환각 문제에 대해 우려를 표합니다.

환각은 생성형 AI 모델의 알려진 단점으로, 사실이 아닌 정보를 사실인 것처럼 말하는 현상을 말합니다. 본질적으로, 정확성 여부를 떠나 항상 자신 있게 응답을 합니다.(구문 환각의 예를 생각해볼 수 있습니다.) 게다가 OpenAI의 모델에는 내장된 지식을 제한하는 지식 차단 기능이 있습니다. 

뉴렐릭 AI(현재 전적으로 GPT-4로 구동됨)의 경우, 이 문제는 뉴렐릭에 대한 일반 또는 지식 기반 질문에 대한 답변과 특히 관련이 있습니다. 뉴렐릭은 모든 답변에 100% 정확한 최신 정보를 제공하는 것을 목표로 합니다.

RAG 사용

검색 증강 생성(RAG)이 환각을 다루는 일반적인 관행으로 자리를 잡았습니다. 이는 외부 데이터베이스에서 관련 정보를 가져다 언어 모델의 프롬프트에 통합하는 작업입니다. 이유는 간단합니다. 종종 그렇듯이 모델에 내장된 지식이 사용 사례에 맞는지 확실치 않고, 그 지식에 최신 정보가 포함되어 있지 않다는 것을 알고 있기 때문에, 외부 소스에서 그러한 정보를 모델로 가져오는 것입니다. 뉴렐릭 AI의 경우, 이에 사용되는 외부 소스는 파인콘 벡터 데이터베이스에 저장된 뉴렐릭의 문서입니다.

작업의 재구성

RAG를 사용해 관련 컨텍스트를 모델에 가져온 후에는 모델이 내장된 지식에서 응답을 하는 것이 아니라 가져온 지식을 사용하는지 확인해야 합니다. 이는 질문이 일반적인 뉴렐릭 지식과 관련된 경우, 사용자의 질문을 모델에 제시하는 방법을 조정하는 것을 의미합니다.

이해를 돕기 위해 예를 들어 보겠습니다. 특정 지침이 포함된 작업이 주어졌다고 가정해 봅니다. 첫 번째 시나리오에서는 "미국의 제3대 대통령은 누구였나요?" 같은 질문에 답하라는 요청을 받습니다. 이러한 표현을 사용하면 사전 지식을 사용해 답변해야 한다고 가정하는 것이 합리적입니다. 이제 동일한 질문이지만 도움이 될 수 있는 문맥도 제공되는 두 번째 상황을 가정해 봅니다. 이 경우 RAG를 사용했으며, 목표가 응답의 정확도를 최대화하는 것이라면 이 접근 방식으로 더 나은 결과를 얻을 수 있을 것입니다. 마지막으로 한 단계 더 나아가 보겠습니다. 세 번째 경우에서는 새로운 지침이 있습니다. “자, 여기 문맥이 있습니다. 임무는 '미국의 제3대 대통령은 누구였는가?'라는 질문에 대한 답이 그 안에 있는지 판단하고, 있으면 제공하는 것입니다.” 이 세 번째 설정은 지식을 가져오는 것보다는 맥락을 이해 하느냐에 중점을 둔다는 점에서 첫 번째 설정과는 전혀 다른 작업입니다.

지식의 정확성이 생성형 AI의 잠재적인 단점(환각)이고, 요약과 문맥에 대한 이해가 강점이기 때문에, 뉴렐릭 AI는 세 번째 설정의 개념에 따라 프롬프트에 표시를 합니다.

전략 3: 투명성과 명확한 의사소통을 통한 신뢰성 제고

뉴렐릭 AI의 신뢰성을 높이기 위해 취한 추가적인 단계는 사용자에게 답변을 스스로 평가하는 데 필요한 정보를 제공하는 것입니다. 맥락 없이 답변만 제공하면 사용자가 답변의 타당성을 확신할 수 없게 됩니다. 이 문제를 해결하기 위해, Q&A 흐름의 다양한 단계에 중간 단계들을 추가하여 프로세스 전반에서 명확한 의사소통이 이뤄지도록 했습니다.

예를 들어, 차량 분류 문제의 경우 "내가 도로에서 그 차를 올바르게 식별했나요?"라고 질문할 수 있습니다. 또는 회귀 문제의 경우 "내 예측 수치가 실제 결과와 얼마나 차이가 있나요?"라고 물을 수 있습니다. 뉴렐릭 AI는 먼저 질문을 NRQL 쿼리로 변환할 것이라고 알립니다. 이렇게 하면 사용자는 질문에 답하기 위해 NRQL을 사용하고 있다는 것을 알고 이 접근 방식이 적합한지 평가할 수 있습니다. 다음으로 AI는 생성된 쿼리(예: SELECT count(*) FROM Transaction SINCE TODAY)를 제공하고, 뉴렐릭의 GraphQL API인 NerdGraph에 쿼리를 해 생성된 시각화를 제공합니다. 마지막으로 NRDB에서 반환된 데이터(예: "16,443,606,861")를 기반으로 답변을 제시합니다. 최종 답변을 도출하는 데 사용된 것과 동일한 정보를 공유함으로써 사용자는 답변을 더 잘 이해하고 신뢰할 수 있습니다. NRQL에 익숙하지 않더라도 쿼리 구문과 키워드는 설명이 필요 없는 경우가 많아 이해하기 쉽습니다.

마찬가지로 AI가 뉴렐릭에 대한 지식 질문에 답할 때는 먼저 사용자에게 문서를 검색할 것임을 알리고 답변에 사용한 참조 링크를 제공합니다.

피드백 듣기

뉴렐릭 사용자들은 뉴렐릭 기능을 최종적으로 판단하는 역할을 하며, 뉴렐릭은 지속적으로 피드백을 수집하고 있습니다. 귀중한 인사이트를 제공해주신 모든 내외부 사용자들께 감사드립니다.

뉴렐릭 AI를 사용하고 계시다면, 여러분의 생각을 듣고 싶습니다. 각 답변에 사용할 수 있는 추천/비추천 버튼을 사용해 답변을 평가하거나, 왼쪽 탐색 패널에서 Help > Give Us Feedback으로 이동해 추가 피드백을 제출해주시면 지속적인 개선에 큰 도움이 될 것입니다.