top of page

[On-Device AI Chatbot] 7편: SuperVision 구축기: 자동화된 챗봇 테스트 파이프라인


SuperVision 구축기

자동화된 챗봇 테스트 파이프라인


지난 6편에서는 생성형 AI의 고질적인 환각(Hallucination) 현상을 객관적으로 평가하기 위해 Testworks의 'AI SuperVision' 도구를 도입한 배경을 설명했습니다. 하지만 이 도구를 실제 우리 프로젝트에 적용하기 위해서는 한 가지 큰 기술적 장벽을 넘어야 했습니다.

바로 우리의 LLM 챗봇은 스마트폰 내부(On-device)에서 오프라인으로 구동되는 반면, 평가를 수행할 AI SuperVision 시스템은 PC 및 웹 서버(Host) 환경에 존재한다는 점입니다. 수십, 수백 개의 테스트 케이스를 사람이 직접 스마트폰에 타이핑하고 결과를 PC로 옮겨 적는 것은 불가능에 가깝습니다.

이번 7편에서는 이 물리적인 간극을 메우고, 질문 입력부터 답변 추출, 그리고 AI 검증까지의 전 과정을 5분 이내로 단축시킨 자동화된 테스트 파이프라인 구축 과정을 상세히 공유합니다.


System Overview
System Overview

1. 물리적 간극 극복: Broker App(브로커 앱)과 ADB의 활용

PC에 있는 테스트 스크립트와 스마트폰(타겟 디바이스) 내부의 챗봇 앱을 통신하게 만들기 위해, 우리는 스마트폰 내부에 'Broker App(브로커 앱)'이라는 가벼운 중계용 안드로이드 앱을 추가로 개발하여 설치했습니다.

Broker App을 활용한 전체 통신 아키텍처는 다음과 같이 동작합니다.


  1. ADB 포트 포워딩: 먼저 PC와 스마트폰을 USB(또는 동일 네트워크)로 연결한 후, ADB(Android Debug Bridge)를 이용해 PC의 특정 포트와 스마트폰의 포트를 포워딩합니다(adb forward tcp:8080 tcp:8080).

  2. PC에서 Broker App으로 요청: PC의 Python 기반 Data Collector 및 Orchestrator 스크립트가 로컬호스트 주소를 통해 스마트폰의 Broker App으로 HTTP POST 요청(질문 데이터 포함)을 전송합니다.

  3. 앱 간 통신 (Broadcast Intent): HTTP 요청을 받은 Broker App은 안드로이드 시스템의 브로드캐스트 인텐트(Broadcast Intent) 기능(com.tecace.supervision.broker.ACTION_CHAT_MESSAGE)을 사용하여 질문을 온디바이스 챗봇 앱(Test Runner)으로 전달합니다.

  4. 답변 생성 및 반환: 챗봇 앱 내의 MediaPipe 엔진이 온디바이스 LLM을 구동하여 답변을 생성하면, 그 결과를 다시 ACTION_CHAT_REPLY 인텐트를 통해 Broker App으로 돌려보냅니다. Broker App은 이를 PC의 Python 스크립트의 HTTP 응답으로 최종 반환합니다.


이 구조를 통해 스마트폰 화면을 터치하지 않고도, 외부 PC에서 완벽하게 온디바이스 앱을 원격 제어하고 텍스트를 추출할 수 있는 기반이 마련되었습니다.


2. AI SuperVision 연동: Python SDK를 활용한 자동화 평가

기기에서 추출된 실제 답변(Actual Output)을 얻었으니, 이제 이를 AI SuperVision 서버로 전송하여 채점받을 차례입니다. 이를 위해 골든 데이터셋(Ground Truth, 예상되는 올바른 답변)과 다양한 테스트 케이스를 사전에 정의했습니다.

자동화 평가 스크립트 로직 (Python) 우리는 SuperVision에서 제공하는 Python 클라이언트 SDK(supervision.client)를 스크립트에 통합했습니다.


  • supervision.client를 초기화하고 평가 세션(Evaluation Session)을 생성합니다.

  • 사전에 정의된 평가 모델(Evaluator Model)을 선택합니다 (예: 신뢰성, 답변 관련성 등을 채점할 평가자 모델).

  • For 루프를 돌며 스마트폰에서 얻어온 각각의 응답에 대해 EvaluationData 객체를 생성합니다. 여기에는 프롬프트(질문), 입력된 컨텍스트(사내 문서 내용), 기댓값(Expected Output), 그리고 챗봇이 생성한 실제 응답(Actual Output)이 포함됩니다.

  • 이 데이터를 client.session.request() 함수를 통해 SuperVision 서버로 전송하면, 백그라운드에서 LLM 기반 평가가 자동으로 수행되고 그 결과가 대시보드에 기록됩니다.


3. Data-Driven 최적화의 기반 완성

이러한 GitHub Actions(또는 로컬 스크립트) -> Python (ADB) -> Broker App -> Chatbot App -> Python SDK -> SuperVision으로 이어지는 완벽한 E2E(End-to-End) 파이프라인을 구축함으로써 우리는 엄청난 이점을 얻었습니다.


  • 압도적인 효율성 향상: 수동으로 기기에 입력하고 결과를 확인하느라 60분 이상 소모되던 회귀 테스트(Regression Test) 시간이 스크립트 실행 한 번으로 5분 이내에 완료되도록 단축되었습니다.

  • 객관적인 데이터 확보: 안드로이드 OS 버전이나 NPU 호환성 등 디바이스 파편화(Fragmentation) 환경에서도, 매 릴리즈마다 일관되고 객관적인 모델의 성능(Latency, TPS)과 품질(Accuracy, Hallucination) 데이터를 데이터베이스에 축적할 수 있게 되었습니다.


다음 편 예고

드디어 '질문 주입'부터 '답변 검증'까지 모든 과정이 파이프라인 위에서 자동으로 돌아가게 되었습니다. 그렇다면, 우리의 온디바이스 SLM은 이 가혹한 SuperVision 심판관의 평가에서 어떤 성적표를 받았을까요?

이어지는 [8편] 환각(Hallucination) 잡기: SuperVision 테스트 결과 분석에서는 실제 갤럭시 기기에서 추출한 챗봇의 답변들이 SuperVision의 Factuality(사실성)와 Consistency(일관성) 평가에서 각각 몇 점을 기록했는지, 실패한 케이스의 원인은 무엇이었는지 구체적인 성적표와 그 분석 결과를 낱낱이 공개하겠습니다.



댓글


bottom of page