요약
햇소자 상담 탭에 붙인 GPU 엔진이 어느 날 저녁 모든 질문에 “근거 자료에서 답을 찾지 못했습니다”라고만 답했다. 우리는 엔진이 고장 났다고 본부에 알렸다. 본부가 같은 질문을 넣어 보니 정답이 근거 9건과 함께 나왔다. 원인은 우리 쪽 시험 도구였다. Windows의 Git Bash에서 curl로 한글 질문을 보내면 글자가 UTF-8이 아니라 CP949로 나가서, 엔진은 깨진 문장을 받고 있었다.
이 글은 “상대가 고장 났다”고 말하기 전에 거쳐야 할 세 가지를 정리한 것이다. 내 도구가 실제로 무엇을 보냈나, 같은 질문을 여러 번 보냈나, 상대의 기록과 맞춰 봤나.
왜 이 기술인가
- 두 조직이 AI를 나눠 맡으면(엔진은 본부, 화면은 사교원) 문제가 생겼을 때 서로 상대 쪽을 먼저 의심하게 된다. 헛 보고를 한 번 하면 상대의 시간을 쓰고, 다음 보고의 신뢰도 깎인다.
- AI 엔진의 답은 같은 질문에도 흔들린다. 한 번 물어보고 “된다/안 된다”를 정하면 우연을 결론으로 적게 된다. 중간점검 서면에 이런 값이 들어가면 지어낸 값이 된다.
- 한글은 인코딩 사고가 잘 나는 언어다. 브라우저에서는 멀쩡한데 명령줄에서만 깨지는 일이 흔하다.
단계별 따라하기
1. 증상을 표로 적되, 결론은 아직 쓰지 않는다
질문, 결과, 근거 수, 요청 번호(request_id)를 한 줄씩 적는다. 요청 번호가 있어야 상대가 자기 기록에서 같은 호출을 찾을 수 있다.
2. 내 도구가 실제로 보낸 바이트를 본다
엔진 대신 내 컴퓨터에 받는 서버를 하나 띄우고 같은 명령을 그쪽으로 보낸다. 받은 본문을 UTF-8로 읽어 본다.
# dump_srv.py — 받은 본문을 파일로 남기는 한 번짜리 서버
import http.server
class H(http.server.BaseHTTPRequestHandler):
def do_POST(self):
b = self.rfile.read(int(self.headers['Content-Length']))
open('dump_body.bin', 'wb').write(b)
self.send_response(200); self.end_headers(); self.wfile.write(b'{}')
http.server.HTTPServer(('127.0.0.1', 8799), H).handle_request()이번에는 {"prompt":"\xc7\xde\xba\xfb…가 찍혔다. 「햇」이 UTF-8이면 \xed\x96\x87이어야 한다. 이것 하나로 원인이 닫혔다.
3. 한글 시험 호출은 인코딩이 보장되는 방법으로만 보낸다
- 파이썬:
json.dumps(본문, ensure_ascii=False).encode('utf-8')를urllib로 보낸다. - curl을 꼭 써야 하면 UTF-8로 저장한 파일을
--data-binary @파일로 보낸다. 명령줄에 한글을 직접 넣지 않는다. - 가장 확실한 것은 실제 이용자와 같은 길, 곧 브라우저 화면에서 직접 눌러 보는 것이다.
4. 같은 질문을 세 번 보낸다
이번에 질문 12개를 세 번씩 보냈더니 36번 가운데 34번 답했다. 그런데 그 전 한 바퀴에서는 같은 문장 5개가 한꺼번에 “근거 없음”이었다. 한 번 잰 값으로는 좋다고도 나쁘다고도 말할 수 없다. 판정은 3/3, 1/3처럼 횟수로 적는다.
5. 상대의 기록과 맞춰 본다
본부는 호출마다 입력 토큰 수(tokens_in)를 남긴다. 같은 질문이면 입력 크기가 같아야 하는데 우리 호출은 3194, 본부 호출은 4082였다. 상대 기록에 “내 질문이 정말 그 문장으로 도착했나”를 묻는 것이 가장 빠른 검증이다.
6. 틀렸으면 같은 창구로 바로 정정한다
정정 편지에는 네 가지를 넣었다. 원인(내 쪽 인코딩), 증거(덤프 바이트), 다시 잰 값(UTF-8로 3회 반복), 철회할 요청(엔진 복구). 사과는 짧게 하고, 재발 방지책(앞으로 쓸 시험 방법)을 적는다.
교훈
- “상대가 고장”이라는 결론은 내 도구를 검증한 뒤에만 쓴다. 그러려면 내 도구가 보낸 것을 직접 봐야 한다.
- 결과가 전부 같으면 오히려 의심한다. 질문이 다른데 결과(토큰 수)가 똑같다면 질문이 전달되지 않은 것이다.
- AI 판정은 횟수로 적는다. 한 번의 성공이나 실패는 결론이 아니다.
- 짧은 구어체 질문에서 엔진이 잘 물러선다. 화면에 내놓는 예시 질문은 정식 문장에 가깝게 쓰고, 바꿀 때마다 세 번씩 다시 잰다.
- 정정은 빠를수록 싸다. 헛 보고를 오래 두면 상대가 없는 원인을 찾느라 시간을 더 쓴다.
참고
- 앞 글: 두-AI-엔진을-같은-문항으로-대조해-탭-단위로-전환하기
- 사교원 운영 도구:
hpc-project-status-check스킬의ask_probe.py(UTF-8로 N회 보내 답함/근거 없음을 센다) - 사례: 햇소자 「GPU 엔진 질문 모음」 화면 (2026-09-25 신설, 09-26 예시 질문 교체)
문서 정리 = 데카(deka2026)