happy_various AI 실전 기록

LLM 중계기 개발기 3부 · 14편 / 전체 33편

2026년 10월 1일 기준

이 글에는 제휴 링크가 없고 OpenAI·앤트로픽과 아무 관계가 없습니다. 제가 직접 만든 중계기의 개발 기록을 바탕으로 썼습니다. 삽화는 GPT 이미지 생성, 도식은 직접 제작했습니다.

‘저는 Claude예요’라고 말한 다른 AI — 공용 메모장을 같이 쓴 두 팀 (LLM 중계기 개발기)

회의실에 공용 메모장이 한 권 놓여 있다고 해 볼게요. A팀이 회의하며 메모를 적고 나가자마자 B팀이 들어와 같은 메모장에 이어서 적습니다. B팀 사람은 회의를 시작하기 전에 메모장을 처음부터 훑어보는데, 거기에는 A팀 이야기가 섞여 있어요.

게다가 이 메모에는 말한 사람 이름이 없습니다. “그 일은 제가 맡을게요”라는 줄을 읽은 사람은 그게 누구의 말이었는지 알 수 없어요. 자기 팀이 한 말인 줄 알고 그대로 이어 갈 수도 있죠.

제가 만든 LLM 중계기 안에서도 이런 일이 있었습니다. 메모장은 켜 둔 AI의 대화 기억이었고, 두 팀은 중계기를 같이 쓰던 두 프로그램이었어요.

이 글은 LLM 중계기 개발기의 14편이자 3부 ‘교통정리’의 마지막 편입니다. 지난 13편 「설정 한 줄 빠졌을 뿐인데 전멸」까지 차선과 줄을 정리하는 이야기를 했다면, 이번에는 줄을 통과한 요청들이 같은 기억을 나눠 쓰던 문제를 다룹니다. 6편에서 “3부에서 따로 다룬다”고 예고했던 이야기예요.

두 팀의 로봇이 큰 공책 한 권에 동시에 적다가 낙서가 뒤엉켜 고개를 갸웃한다 (GPT 이미지 생성)

결론 요약

📒 1. 증상 ① — 두 프로그램이 공책 한 권을 같이 썼다

중계기는 한 사람만 쓰는 채팅 창이 아니에요. 여러 프로그램이 동시에 붙어서 AI를 부릅니다. 이 글에서는 그중 두 개를 프로그램 A와 프로그램 B라고 부를게요. 둘 다 중계기를 거쳐 Claude와 Codex를 쓰던 도구예요.

6편에서 본 것처럼 중계기는 Claude와 Codex를 켜 둔 채 씁니다. 켜 둔 AI는 앞에서 오간 대화를 기억해요. 공책 한 권에 대화를 계속 이어 적는 셈이죠. 그런데 8월 19일 업데이트 전까지는 이 공책을 나누는 기준에 프로그램이 없었어요.

물론 방어책은 있었어요. 첫날 정한 규칙대로, 90초 동안 아무도 안 쓰면 새 공책을 폈습니다. 그런데 이 규칙은 쉬는 틈이 있어야 작동해요. A와 B가 함께 일하면서 90초 안에 번갈아 요청을 보내면 틈이 생기지 않으니, 두 프로그램이 계속 같은 공책에 적게 됩니다.

그러면 B의 요청을 받은 AI는 B가 보낸 대화만 보고 답하는 게 아니에요. 공책에 먼저 적혀 있던 A의 질문과 답까지 기억에 둔 채 답합니다. 이 문제를 고치며 남긴 설계 기록은 이 구조를, 한 프로그램의 질문과 답이 다른 프로그램 요청의 AI 기억에 남는 실제 누출 통로라고 적었어요.

🤖 2. 증상 ② — “저는 Claude예요”라고 말한 다른 AI

두 번째 증상은 프로그램 하나 안에서도 생겼어요.

OpenAI 호환 방식에서 프로그램은 대화를 말 목록으로 보냅니다(3편에서 본 편지 모양이에요). 말마다 누가 했는지 꼬리표가 달려 있어요. 사용자(user)가 한 말인지, AI(assistant)가 한 말인지요.

그런데 명령어 도구 AI는 이 목록을 그대로 받지 못하고 한 덩어리 글로 받습니다. 그래서 중계기가 목록을 이어 붙여서 넘겨요. 8월 19일 전까지는 말 사이에 빈 줄만 넣고 이어 붙였어요. 누가 한 말인지는 거기서 사라졌죠.

평소에는 티가 나지 않았어요. 대부분의 요청은 사용자의 말 하나만 담고 있으니까요. 문제는 한 대화 안에서 AI를 바꿔 가며 쓰는 채팅 프로그램이었어요. 쓰는 쪽이 앞 대화를 함께 보내는 건 원래 정상적인 사용법이에요. 그러면 이런 대화가 생깁니다.

사용자: 자기소개해

AI(Claude): 저는 Claude입니다

사용자: 너는 누구야? ← 여기서 다른 AI로 바꿔서 물음

이름표를 떼고 이어 붙이면, 새로 불린 AI가 받는 글은 이렇게 돼요.

자기소개해

저는 Claude입니다

너는 누구야?

새 AI는 “저는 Claude입니다”를 누가 했는지 알 수 없어요. 기록에는 그 결과가 이렇게 남아 있습니다. 이름표가 없으면 AI가 앞선 AI의 답을 자기가 한 말로 받아들이고, 그 정체를 흉내 낸다. 다른 AI가 “저는 Claude예요”라는 쪽으로 끌려가는 거예요.

🔍 3. 원인 — 두 증상 모두 ‘누가’를 잃어버렸다

두 증상은 달라 보여도 뿌리가 같았어요. 중계기가 ‘누가’라는 정보를 중간에 버리고 있었습니다.

잃어버린 ‘누가’그래서 생긴 일
누가 보낸 요청인가 (어느 프로그램)다른 프로그램의 대화가 같은 기억에 쌓였다
누가 한 말인가 (사용자인지 AI인지)AI가 다른 AI의 답을 자기 말로 받아들였다

첫 번째는 사실 알 길이 없었어요. 중계기는 요청을 보낸 프로그램이 누구인지 물은 적이 없었거든요. 모르는 것을 기준으로 공책을 나눌 수는 없죠. 첫날 넣은 방어책(쉬면 새 공책, 손으로 누르는 세션 리셋)도 한 프로그램의 앞 작업과 다음 작업 사이를 지키려던 장치라, 여러 프로그램이 동시에 쓰는 경우는 막지 못했어요.

두 번째는 번역하다 생긴 손실이에요. 목록 모양을 한 덩어리 글로 바꾸면서, 말한 사람 칸을 같이 지워 버린 거예요.

🏷️ 4. 해결 ① — 요청마다 ‘어느 프로그램’인지 묻는다

8월 19일 업데이트의 첫 단계는 묻는 것이었어요. 요청마다 어느 프로그램이 보냈는지 이름을 받습니다. 순서는 이래요.

① 요청에 중계기가 정해 둔 프로그램 이름표 칸(헤더)이 있으면 그 이름을 씁니다 ② 없으면 OpenAI 형식에 원래 있는 사용자 칸(user)을 봐요 ③ 그것도 없으면 프로그램이 요청마다 붙여 보내는 자기소개 문구(User-Agent)로 구분해요 ④ 아무것도 없으면 ‘이름 없음’(anonymous)으로 묶습니다

중계기는 이렇게 판정한 이름을 답장에 다시 적어 돌려줘요. 쓰는 쪽은 “중계기가 나를 누구로 알아들었나”를 바로 확인할 수 있습니다. 중계기 화면 안의 채팅 창도 자기 이름표를 따로 달아요.

한계도 문서에 적어 두었어요. 이름표를 안 단 두 프로그램이 자기소개 문구까지 똑같으면, 중계기 눈에는 한 손님으로 보입니다. 그래서 여러 프로그램이 함께 쓰는 환경이라면 이름표를 꼭 달라고 안내해요.

보라색 로봇이 민트색과 복숭아색 말풍선마다 같은 색 이름표를 하나씩 붙인다 (GPT 이미지 생성)

📚 5. 해결 ② — 공책은 따로, 말에는 이름표

이름을 알게 되자 나머지는 공책을 나누는 일이었어요.

전에는 프로그램 A와 B가 Claude 세션 하나에 차례로 쌓이고 대화를 이름표 없이 합쳤다. 후에는 프로그램마다 공책이 따로 있고 말마다 user·assistant 이름표가 붙는다 (직접 제작)

Claude 쪽에는 손볼 곳이 하나 더 있었어요. 중계기는 연결하자마자 세션을 하나 데워 두는데(6편의 워밍업), 그때는 아직 어느 프로그램이 올지 몰라요. 그래서 데운 세션은 주인 없는 상태로 두고, 처음 요청을 보낸 프로그램이 가져가게 했어요. 아직 아무 대화도 적히지 않은 빈 공책이라 누가 가져가도 섞일 게 없고, 첫 답이 빨리 오는 장점도 그대로예요.

공책이 늘어나는 만큼 규칙도 정했습니다.

이 약속은 9편의 모델 스펙 카드에도 적혀 있어요. ‘대화 기억 방식’ 줄에 Codex는 ‘요청마다 새로’, Claude는 ‘같은 프로그램끼리 이어서’라고 나오는 게 이날 생긴 거예요.

🧭 6. 남긴 규칙 — 세션은 속도를 위한 준비물

이렇게 과감하게 나눌 수 있었던 건 전제 하나 덕분이에요. 중계기는 요청마다 쓰는 쪽이 보낸 대화 전체를 AI에 다시 넘깁니다. 켜 둔 세션이 기억해 주지 않아도, 필요한 내용은 매번 다 들어 있어요. 그래서 세션은 순수하게 속도를 위한 준비물이에요. 언제 버리거나 나눠도 잃는 건 다시 켜는 시간뿐, 답에 필요한 내용은 잃지 않습니다.

이 전제 위에서 다른 방법들도 저울질했어요.

검토한 방법고르지 않은 이유
Claude도 요청마다 새로 켜기가장 깔끔하지만 요청마다 시동 시간이 든다
주인이 바뀔 때마다 공책 비우기A와 B가 번갈아 쓰면 바뀔 때마다 다시 데워야 한다 — 탁구공처럼 헛수고만 오간다
프로그램마다 세션 무제한세션 하나가 켜 둔 프로그램 하나라서 메모리가 끝없이 늘 수 있다
이름표 대신 어느 프로그램인지 직접 찾아내기운영체제마다 따로 만들어야 해서 들이는 품에 비해 얻는 게 적다

로봇이 색깔이 다른 책상마다 같은 색 공책을 한 권씩 올려놓고, 책상 앞에서 작은 로봇들이 기다린다 (GPT 이미지 생성)

그래서 남은 규칙은 세 가지예요.

같은 방향으로 한 걸음 더 간 것도 있어요. 9월에는 같은 프로그램 안에서도 “이번 요청은 기억 없이 따로 처리해 줘”라는 표시를 붙일 수 있게 했습니다. 6편에서 짧게 소개한 그 기능이에요.

정리

① 켜 둔 AI 세션을 프로그램끼리 같이 쓰면, 한 프로그램의 대화가 다른 프로그램 요청의 기억에 남을 수 있어요. 이름표 없이 합친 대화에서는 AI가 다른 AI의 말을 자기 말로 받아들였고요 ② 두 증상 모두 ‘누가’를 잃어버린 데서 왔어요 — 누가 보낸 요청인지, 누가 한 말인지 ③ 그래서 프로그램 이름을 묻고, Claude는 프로그램별 세션, Codex는 요청마다 새 대화방, 대화에는 말마다 이름표를 붙였어요 — 다음 편부터는 4부 ‘AI가 이상하게 굴 때’이고, 첫 이야기는 “생각만 하다 답을 못 한 AI”입니다


2026년 10월 1일 기준입니다. 제가 만든 중계기의 개발 기록을 바탕으로 썼고, 특정 기업·서비스의 공식 입장이 아닙니다.