기술

RAG 근거 표에 '이 표가 전부다'를 한 줄 적었더니, 빠져 있던 사람이 나왔습니다

2026.10.0610분 읽기

사내 문서를 찾아 주는 채팅에 '9월에 연차 쓴 사람'을 물었습니다. 한 사람만 나왔습니다. 실제로는 두 사람이었습니다.

답이 모자란 것보다 나쁜 것은 답이 모자란 줄 모르는 것입니다. 모델은 '이 사람뿐입니다'로 문장을 닫았고, 묻는 사람에게 그 답은 완결돼 보였습니다. 그 한 명을 두 명으로 되돌리는 데 45분이 들었습니다.


색인이 빠진 게 아니라 낱말이 안 이어진 것이었습니다

원인부터 틀리게 짚기 쉬운 자리였습니다. 검색이 못 찾았으니 그 글이 색인에 안 들어갔다고 보는 쪽이 자연스럽습니다. 확인해 보니 글은 제대로 색인돼 있었습니다.

질문에 쓰인 낱말은 '연차'였고, 그 사람이 올린 글의 제목은 '반차'였습니다. 사람에게는 같은 축의 말이지만 검색은 둘을 잇지 못했습니다. 색인은 멀쩡했고 낱말이 안 이어진 것입니다.

그리고 같은 사실이 다른 곳에 이미 있었습니다. 휴가 신청 표에 '누가·언제·며칠' 칸으로 수십 건이 들어 있었고, 답하는 자리에서 그 표를 쓰지 않고 있었을 뿐입니다.

검색 쪽을 고치는 일은 어느 근거가 몇 위에 섰는지 재는 자부터 세워야 해서 깁니다. 표를 붙이는 쪽은 짧습니다. 짧은 쪽으로 갔습니다.

같은 주에 '세는 질문'과 '최신 질문'을 같은 방식으로 두 번 보강해 둔 틀이 있었습니다. 그래서 이번 건도 새 설계가 아니라 그 자리에 표 하나를 더 붙이는 작업으로 잡았습니다. 틀이 있으니 남은 판단은 세 가지였습니다.


표만 붙이면 모델은 두 방향으로 틀립니다

처음에는 표를 근거로 넣어 주면 끝인 줄 알았습니다. 아니었습니다. 모델은 표를 받아도 그 표가 세상의 전부인지 일부인지 알 방법이 없습니다. 모르는 상태에서 답을 만들어야 하니, 두 방향 가운데 하나로 틀립니다.

표가 사실상 전부인데 그걸 모르면 '단정할 수 없습니다'로 물러납니다. 답을 줄 수 있는데 안 줍니다.

표 바깥에 더 있는데 그걸 모르면 '이 사람뿐입니다'로 닫습니다. 틀린 답을 완결된 모양으로 줍니다.

그래서 데이터 옆에 **그 데이터의 경계**를 한 줄로 같이 넣기로 했습니다. 여기서 걸린 것이 방향입니다. 같은 채팅에 이미 붙어 있던 고객사·제품 표와 이번에 붙일 휴가 신청 표가 성격이 정반대였습니다.

고객사·제품 표

휴가 신청 표

자료의 성격

그 표가 전부다

표 바깥에 더 있다

한 줄을 안 적으면

'단정할 수 없습니다'로 물러난다

'이 사람뿐입니다'로 닫는다

적어야 하는 한 줄

'이 표가 전부다'

'전부가 아니다'

같은 틀로 붙인 두 표에 적어야 하는 완전성 한 줄이 서로 반대 방향임을 보여주는 좌우 대비 도표


같은 문구를 돌려쓰면 한쪽은 반드시 틀립니다

방향이 반대라는 것을 알고 나서도 선택지는 셋이었습니다.

한 줄을 안 쓰고 표만 붙입니다. 두 표가 각자 반대 방향으로 틀립니다.

두 표에 같은 문구를 씁니다. '완전성 표기'라는 공통 항목을 만들어 한 문구를 돌려쓰는 쪽입니다. 한쪽은 반드시 틀립니다.

표마다 반대로 적습니다. 채택한 쪽입니다.

두 번째가 특히 끌리는 안이었습니다. 붙이는 틀이 이미 공통이라 문구도 공통으로 두면 코드가 한 곳으로 모입니다. 그런데 이 항목은 **자료마다 값이 반대인 종류**입니다. 묶는 순간 한쪽이 사실과 다른 말을 하게 됩니다.


사유는 뺐고, 규칙이 아니라 시험으로 굳혔습니다

두 번째 판단은 표의 어느 칸까지 쓸 것인가였습니다. 신청 표에는 사유 칸이 있습니다. 운영 데이터에서 사유를 훑어 보니 '병원'·'감기'·'독감' 같은 낱말이 든 것이 18건이었습니다. 건강 정보입니다.

칸을 그대로 다 쓰면 그 문구가 모델 답에 실릴 수 있습니다. '9월에 연차 쓴 사람'이라는 질문에 사유는 필요하지 않습니다. 그래서 '누가·언제·며칠'만 쓰고 사유와 글 제목은 자료 단계에서 뺐습니다.

여기서 멈추지 않은 이유가 있습니다. 생성된 답은 대화 기록에 남고, 한 번 실리면 회수가 안 됩니다. 그리고 사유를 빼기로 했다는 약속은 다음에 이 자리를 만지는 사람에게 보이지 않습니다.

그래서 규칙으로 두지 않고 **답에 사유나 글 제목이 섞이면 실패하는 시험**을 붙였습니다.

사유를 일부러 싣게 고쳐 보고, 시험이 실패하는 것을 확인한 뒤 되돌렸습니다.

취소된 신청을 섞어 넣어도 실패합니다. 취소 건이 '쓴 사람'으로 세어지는 것을 막는 자리입니다.

시험 10건을 추가했고, 전체 199건이 통과했습니다.

개인정보를 다루는 자리에서는 말로 정한 약속보다 실패하는 검사 하나가 멀리 갑니다. 검사가 없으면 다음 회차에 누가 자료 칸을 하나 더 열어도 아무도 모릅니다.

휴가 신청 표에서 필요한 칸만 모델 자료로 보내고 사유와 글 제목은 걸러내는 관문 구조 도표


기간 창은 같은 틀이어도 자료마다 따로 뒀습니다

세 번째 판단은 '9월'이라는 말을 어느 범위로 읽을 것인가였습니다. 이미 붙어 있던 보고 글 쪽은 기간 창이 앞으로 2주를 더 봅니다. 주간 보고는 다룰 주보다 먼저 올라오기 때문에, 앞을 보지 않으면 그 주의 보고가 아직 없는 것으로 세어집니다.

휴가는 성격이 다릅니다. 쓴 날이 곧 그날이라 앞을 보면 아직 일어나지 않은 신청까지 세게 됩니다. 틀이 같으니 창도 같게 맞추는 쪽이 코드는 깔끔합니다. 그렇게 했다면 '9월에 쓴 사람'에 10월 초 신청이 섞여 들어왔을 겁니다. 같은 틀 안에서 창만 자료별로 따로 뒀습니다.


두 원천을 같이 쓴 것이 답이었습니다

붙이고 나서 보니 두 사람이 서로 다른 이유로 한쪽에만 있었습니다. 한 사람은 지금의 신청 양식이 생기기 전에 휴가를 쓴 건이라 표에 행이 없고 사람이 쓴 글에만 남아 있습니다. 다른 한 사람은 표에만 있고 글 제목의 낱말이 질문과 안 이어집니다.

표만 믿었으면 양식 도입 전 사람이 빠졌을 겁니다.

글만 믿었으면 제목 낱말이 다른 사람이 빠졌을 겁니다.

둘을 같이 쓰니 두 사람이 다 나오고, 근거를 어디서 가져왔는지도 나뉘어 나옵니다. 하나는 검색으로 찾은 보고 본문, 하나는 신청 표입니다.

표에는 **언제부터 채워진 표인가**라는 시작선이 있습니다. 양식이 생긴 시점, 데이터를 옮긴 범위, 수집을 시작한 날 앞의 사실은 표에 없고 사람이 쓴 글에만 있습니다. 표와 글을 같이 쓰면 그 구멍이 메워집니다.

권한은 넓어지지 않았습니다. 이름·휴가 구분·날짜는 홈 화면과 일정 화면이 이미 전 직원에게 보여 주는 칸이고, 그 화면에는 열람 판정이 따로 없습니다. 채팅은 **같은 칸만** 씁니다. 이 한 줄을 코드 옆에 남겨 두면 다음 사람이 같은 판단을 다시 하지 않습니다.

그리고 화면에만 붙이지 않고 평가 스크립트에도 같은 자료를 붙였습니다. 평가 도구를 빠뜨리면 다음 회차가 이 변화를 측정하지 못합니다.

표만 쓸 때와 글만 쓸 때 각각 한 사람이 빠지고 두 원천을 같이 쓸 때 두 사람이 다 나오는 전후 비교 도표


자료를 붙일 때 보는 것

같은 자리를 세 번 만지면서 붙이기 전에 보게 된 항목을 적어 둡니다.

모델이 실제로 물러나거나 섣불리 닫는 것을 봤는지 — 경계를 적는 한 줄도 자료 토큰을 쓰므로 증상을 본 다음에 넣는 쪽이 맞습니다

이 표가 언제부터 채워졌는지 — 그 시작선 앞의 사실은 표에 없습니다

적어야 하는 한 줄의 방향이 어느 쪽인지 — '이게 전부다'와 '전부가 아니다' 중 하나입니다

답에 꼭 필요한 칸만 남겼는지, 그것을 지키는 검사가 있는지

기간 창을 다른 자료와 같게 둬도 되는지 — 미래 쪽을 봐야 하는 자료와 보면 안 되는 자료가 섞여 있습니다

화면에만 붙였는지, 평가 도구에도 붙였는지


남은 것

'전부가 아니다'를 적는 데도 비용이 있습니다. 모델이 지나치게 몸을 사려 '더 있을 수 있습니다'를 매 답에 붙이기 시작하면 답이 쓸모를 잃습니다. 한 줄의 세기는 문장을 다듬는 감각이 아니라 시험으로 재야 할 값입니다.

그리고 낱말이 안 이어지는 문제를 표로 덮은 것은 우회입니다. 표에 칸이 없는 종류의 질문이 오면 그 자리에서 다시 막힙니다. 질문 종류마다 표를 하나씩 붙이는 방식은 자리가 늘어나는 것도 같이 감수하는 선택입니다.

사유를 빼는 선택도 늘 맞지는 않습니다. 왜 쉬었는지를 묻는 것이 업무인 자리가 있습니다. 그때는 답에서 빼는 대신 볼 수 있는 사람을 가르는 쪽이어야 하고, 이번에 피해 간 열람 권한 설계가 돌아옵니다.

남는 것은 하나입니다. 모델에 표를 붙일 때는 데이터와 **그 데이터의 경계**가 같이 가야 하고, 그 경계를 적는 한 줄의 방향은 표마다 다릅니다.

#RAG#근거자료#프롬프트설계#LLM운영#개인정보