만화에서 코드로: 마이주브스터(MyZubster) 증거 조각들을 하나씩 구축하기
요약
본 기사는 만화적 서사에서 출발하여, AI 시스템이 '진실'을 다루는 방식에 대한 기술적 접근 방식을 설명합니다. 기존의 RAG(Retrieval-Augmented Generation) 구조가 검색된 출처와 무관한 잘못된 정보를 생성할 수 있다는 한계를 발견했습니다. 이에 따라 관찰 ID 기반의 결정론적 경로를 도입하고, 생성 과정을 우회하여 증거 자체를 반환하는 방식으로 아키텍처를 개선했습니다.
핵심 포인트
- AI 시스템은 단순히 그럴듯하게 들리는 것과 실제 기록된 것을 구별해야 합니다.
- 기존 RAG는 검색된 출처와 무관한 추가 진술을 생성할 위험이 있습니다.
- 결정론적 경로(Deterministic Path)를 도입하여 관찰 ID의 정확성을 최우선으로 했습니다.
- 생성(Generation) 단계를 우회하고 증거 자체를 반환함으로써 신뢰도를 높였습니다.
만화에서 코드로: 마이주브스터(MyZubster) 증거 조각들을 하나씩 구축하기
이는 만화로 시작되었습니다.
N4K48은 시각적으로 여정을 표현했습니다. 소프트웨어 아이디어가 형태를 갖추고 MyZubster 메타버스 속으로 들어가는 경로를 상상하는 것이었습니다.
그 패널들은 완성된 제품의 스크린샷이 아니었습니다. 완전히 탈중앙화된 플랫폼의 증거도 아니었습니다. 그것은 우리가 만들고자 하는 무언가의 표현이었습니다.
그러자 우리는 그 서사(narrative)를 검증 가능한 소프트웨어로 바꾸기 시작했습니다.
서사에서 증거로
개발 과정 중 등장한 질문 중 하나는 놀라울 정도로 간단했습니다.
AI 시스템은 실제로 기록된 것과 단순히 그럴듯하게 들리는 것을 어떻게 구별할 수 있을까요?
MyZubster에게 답은 점점 다음과 같이 되고 있습니다:
증거부터 시작하세요.
관찰(observation)이 식별자(identifier)와 함께 시스템에 들어옵니다. 그것은 영구 저장되고, 인덱싱되며, 검색 가능하게 만듭니다.
Qdrant는 의미론적 검색(semantic retrieval)을 제공합니다. Ollama는 로컬 AI 추론(local AI inference)을 제공합니다. RAG 계층이 질문, 검색된 출처, 그리고 생성을 연결합니다.
하지만 시스템을 테스트하는 동안, 우리는 단순히 “RAG가 작동한다”는 것을 증명하는 것보다 더 중요한 무언가를 발견했습니다.
우리는 언어 모델(language model)이 정확한 출처를 가지고도 여전히 잘못된 답변을 생성할 수 있다는 것을 얼마나 쉽게 할 수 있는지 보았습니다.
예를 들어, MyZubster에는 실제 관찰 기록이 있습니다:
ID: 21089771b2a73a9f
설명: Test reale MyZubster RC2 - N4K48
의미론적 검색(Semantic retrieval)은 해당 관찰 내용을 정확히 찾아냈습니다. 하지만 모델에게 그것을 설명하도록 요청했을 때, 모델은 여전히 검색된 증거에 의해 뒷받침되지 않는 추가적인 진술들을 도입할 수 있었습니다. 이것이 우리가 문제 접근 방식을 바꾼 계기가 되었습니다.
검색(Retrieval)과 진실(Truth)은 같지 않다
우리는 종종 같은 것으로 취급되는 두 가지 문제를 분리하기 시작했습니다. 바로 정보를 찾는 것과 그 정보에 근거하여 시스템이 주장할 수 있도록 허용하는 것을 결정하는 것입니다.
우리는 관찰 ID를 위한 결정론적 경로(deterministic path)를 도입했습니다. 요청에 기존의 관찰 ID가 포함되어 있으면, MyZubster는 의미적 유사성보다 정확한 관찰 내용을 선호합니다. 만약 ID가 유효해 보이지만 존재하지 않으면, 시스템은 비슷한 것을 조용히 검색하여 대체재로 사용하지 않습니다. 대신 다음과 같이 반환합니다:
Informazione non disponibile nelle fonti MyZubster.
영어로: Information is not available in the MyZubster sources.
이것은 작은 동작 변화처럼 들릴 수 있습니다. 하지만 그렇지 않습니다. 이는 증거의 부재가 더 이상 그럴듯한 대체물을 생성할 허가로 취급되지 않는다는 것을 의미합니다.
AI는 때때로 생성하지 않아야 한다
우리는 설명(description)에서도 같은 문제를 발견했습니다. 사용자가 증거에 포함된 설명을 명시적으로 요청했을 때, 왜 언어 모델이 그것을 다시 작성해야 할까요? 우리는 정확히 그것을 테스트했습니다.
정확한 증거는 다음과 같았습니다:
Test reale MyZubster RC2 - N4K48
하지만 작은 로컬 모델조차도 원본에 존재하지 않았던 주장들을 포함하는 더 긴 응답으로 변형시킬 수 있었습니다. 그래서 우리는 아키텍처를 변경했습니다. MyZubster가 검색된 증거로부터 권위적인 질문에 직접 답할 수 있을 때, 생성(generation)을 우회하고 증거 자체를 그대로 반환하도록 했습니다. 그 결과는 다음과 같습니다:
Test reale MyZubster MyZubster RC2 - N4K48
추가된 것은 없습니다.
'개선된 것'도 없습니다.
발명된 것도 없습니다.
이것은 우리에게 중요한 설계 원칙으로 이어졌습니다. 소프트웨어가 이미 사실을 알고 있다면, 답변을 재창조하기 위해 반드시 AI가 필요하지 않다는 것입니다.
AI는 해석과 종합이 실제로 필요한 곳에서 유용해집니다. 단순히 사용자에게 저장된 모든 증거 조각 사이를 거치는 피할 수 없는 중개자 역할로서가 아닙니다.
로컬 AI, 증거와 연결되다
현재 프로토타입은 여러 구성 요소를 연결합니다:
사용자 $\downarrow$
Open WebUI $\downarrow$
OpenAI 호환 MyZubster API $\downarrow$
검색/결정론적 증거 경로 $\downarrow$
Qdrant $\downarrow$
MyZubster 증거 $\downarrow$
실제 생성이 필요할 때 Ollama $\downarrow$
답변
저희는 MyZubster RAG 시스템을 OpenAI 호환 API를 통해 노출하여, Open WebUI가 myzubster-rag를 모델로 사용할 수 있게 했습니다. 이를 통해 사용자 인터페이스부터 근본적인 증거까지 전체 경로를 테스트할 수 있는 실질적인 엔드투엔드 환경을 갖추게 되었습니다.
그리고 그 테스트 과정에서 실제 아키텍처 문제가 발견되었습니다. 한 시점에는 영구 저장소에 관찰 기록이 존재했지만 Qdrant에는 누락되어 있었습니다. 이는 또 다른 중요한 구분을 드러냈습니다: 저장된 데이터와 검색 가능한 데이터가 자동으로 같은 것은 아니라는 것입니다.
그래서 저희는 영구 저장된 관찰 기록으로부터 검색 인덱스를 재구축할 수 있는 명시적인 관찰-인덱스 복구 메커니즘을 추가했습니다. 다시 말하지만, 이것은 주로 챗봇이 질문에 답하는 것을 목표로 하는 것이 아닙니다. 답변이 어디서 왔는지, 그리고 근본적인 증거가 회복될 수 있는지 이해할 수 있는 것이 중요합니다.
소프트웨어에서 탈중앙화로
여기서 탈중앙화(decentralization) 이야기가 나옵니다. 그리고 이 구분은 중요합니다:
MyZubster는 단순히 로컬 AI, 해시(hashes), 식별자(identifiers), 또는 내부 원장(internal ledger)을 사용한다고 해서 자동으로 탈중앙화되는 것이 아닙니다.
디지털로 기록된 이벤트가 자동으로 블록체인 이벤트가 되는 것은 아닙니다. 데이터베이스 항목이 자동적으로 탈중앙화된 증거가 되는 것도 아닙니다.
저희는 프로토타입에서 이러한 구분을 의도적으로 유지하려고 노력했습니다. 더 흥미로운 질문은 다음과 같습니다:
만약 증거가 오늘 MyZubster 내부에서 발생한다면, 누군가가 MyZubster 자체를 맹목적으로 신뢰하지 않고 내일 어떻게 그것을 검증할 수 있을까요?
이것이 바로 탈중앙화가 의미를 갖는 지점입니다.
해시(Hashes), 출처(provenance), 신원(identities), 증명(attestations), 그리고 외부 검증 가능한 기록들은 궁극적으로 증거가 단일 애플리케이션의 신뢰 경계를 넘어 이동할 수 있도록 합니다. 하지만 증거를 탈중앙화하기 전에, 우리는 정확히 무엇이 증명되고 있는지 알아야 합니다. 이것이 바로 우리가 먼저 증거 계층(evidence layer)을 구축하는 이유 중 하나입니다.
출처(provenance)가 없는 탈중앙화는 단순히 불확실성을 분산시킬 뿐입니다.
만화에서 커밋 기록으로 (From the Comic to the Commit History)
The N4K48 만화는 하나의 비전을 나타냈습니다. 이 소프트웨어는 그 비전의 일부를 우리가 실제로 테스트할 수 있는 속성들로 서서히 변화시키고 있습니다. 최근 체크포인트들이 그 이야기를 전합니다:
16f0800 fix: observe index recovery 추가
d1aa48f fix: 정확한 관찰 ID 검색 선호
8106276 fix: 알 수 없는 관찰 ID 안전하게 거부
87a1021 fix: 권위 있는 설명을 원문 그대로 반환
흥미로운 부분은 커밋 횟수가 아닙니다. 그것은 진행 과정입니다.
먼저, 증거를 복구합니다.
다음으로, 정확한 식별자가 정확한 증거를 검색하는지 확인합니다.
그다음으로, 존재하지 않는 식별자가 조용히 '비슷한 무언가'가 될 수 없도록 합니다.
마지막으로, 생성할 필요가 없을 때 언어 모델이 권위 있는 설명을 재작성하는 것을 방지합니다. 각 단계는 시스템에서 약간의 모호성을 제거합니다.
증거 우선, 생성 차순 (Evidence First, Generation Second)
이것은 점차 MyZubster의 핵심 아이디어 중 하나가 되고 있습니다:
관찰(Observe)
↓
기록(Record)
↓
보존(Preserve)
↓
검색(Retrieve)
↓
검증(Verify)
↓
필요할 때만 생성(Generate only when necessary)
대부분의 AI 시스템은 최종 단계에 맞춰 설계됩니다.
우리는 그 이전 단계에서 발생하는 모든 것에 점점 더 큰 관심을 갖게 되고 있습니다.
왜냐하면 유창한 답변이 반드시 근거가 있는 답변을 의미하지 않기 때문입니다.
의미론적으로 유사한 문서가 요청된 증거를 의미하지 않을 수도 있습니다.
무언가를 자신 있게 말하는 모델이 그것을 기록된 사실로 만들지는 않습니다.
그리고 분산된 기록은 우리가 그 기록이 실제로 무엇을 입증하는지 이해할 때만 유용합니다.
여기서 나아갈 방향 (Where This Is Going)
MyZubster의 목표는 모든 것을 아는 것처럼 보이는 AI를 구축하는 것이 아닙니다.
더 흥미로운 목표는 다음 사이의 차이점을 구별하는 능력이 점점 더 강력해지는 시스템을 구축하는 것입니다:
- 관찰된 것 (what was observed),
- 기록된 것 (what was recorded),
- 검색될 수 있는 것 (what can be retrieved),
- 검증될 수 있는 것 (what can be verified),
- AI가 생성한 것 (and what the AI generated).
아직 해결해야 할 것이 많습니다.
일반적인 의미론적 질문은 여전히 부분적으로 관련성 높은 컨텍스트를 검색할 수 있습니다. 작은 로컬 모델들은 증거가 말하지 않는 것을 추론할 수 있습니다. 출처(Provenance)는 더 강력해질 수 있습니다. 검증은 하나의 애플리케이션 경계를 넘어 확장될 수 있습니다. 그리고 분산화는 성급하게 붙이는 라벨이라기보다는 구축하고 테스트해야 할 방향으로 남아있습니다.
하지만 바로 그것이 이 여정을 흥미롭게 만드는 이유입니다.
만화 패널로 상상의 세계를 그리면서 시작되었습니다.
이제 우리는 덜 화려하지만 어쩌면 더 중요한 부분, 즉 그 세계에 검증 가능한 기억을 부여하는 작업에 매진하고 있습니다.
만화에서 증거로.
증거에서 소프트웨어로.
소프트웨어에서 검증으로.
검증에서 분산화로.
그리고 이번에는 모든 단계가 뒤에 증거를 남겨야 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기