MemoryLake
모든 글로 돌아가기
Tutorial2026년 9월 14일·11 분 소요

컨텍스트 손실 없이 SillyTavern 캐릭터 카드를 ChatGPT로 마이그레이션하는 방법 (2026)

캐릭터 카드는 하나의 문서처럼 보입니다. 에디터를 열면 이름, 설명, 성격, 시나리오, 첫 메시지, 예시 메시지, 그리고 몇 개의 고급 설정 상자가 위에서 아래로 읽힙니다. 파일 하나가 곧 캐릭터 하나인 셈입니다.

하지만 SillyTavern의 자체 문서에 따르면 이는 하나의 문서가 아닙니다. 수명이 매우 다른 두 개의 묶음이며, 이 둘 사이의 경계에 따라 ChatGPT로 마이그레이션할 때 실제로 보존할 수 있는 것이 결정됩니다.

실제로 전송되는 것

SillyTavern의 표현을 빌려 구분해 보겠습니다. 일부 필드는 이른바 영구 토큰(permanent tokens)입니다. "이 토큰들은 매번 생성 요청을 보낼 때마다 항상 AI에 전송됩니다: 캐릭터 이름(Character Name), 캐릭터 설명 상자(Character Description Box), 캐릭터 성격 상자(Character Personality Box), 시나리오 상자(Scenario Box)."

그리고 일부는 그렇지 않습니다. "첫 메시지 상자 - 채팅 시작 시 한 번만 전송됨" 및 "예시 메시지 상자 - 채팅 기록이 컨텍스트를 채울 때까지만 유지됨(선택적으로 컨텍스트에 강제로 유지하도록 설정 가능)."

보통 창작의 묘미는 이 두 번째 묶음에 담겨 있습니다. 첫 메시지는 작성자가 말투와 길이를 설정하는 곳입니다. SillyTavern은 모델이 "다른 어떤 것보다 첫 메시지에서 스타일과 길이 제약을 파악할 가능성이 높다"고 명시하며 이를 분명히 하고 있습니다. 예시 메시지는 대화의 템포를 학습시키는 곳입니다. 이 두 가지 모두 설계상 비영구적인 것으로 문서화되어 있으며, 반대편(ChatGPT)에는 이들을 담을 명확한 자리가 없습니다.

영구적인 묶음은 비교적 다루기 쉽습니다. 설명, 성격, 시나리오는 항상 활성화되는 텍스트이며, SillyTavern은 이것이 의미하는 바를 명확히 밝히고 있습니다. "이 정보는 항상 프롬프트에 포함되므로 모든 중요한 사실은 여기에 포함되어야 합니다." ChatGPT의 Custom Instructions도 동일한 방식으로 구성되어 있습니다. OpenAI는 이를 적용하고자 하는 "명시적인 정보 또는 지침"을 두는 곳으로 설명합니다. 이 두 가지는 거의 정확히 일치하며, 복사-붙여넣기만으로도 온전히 살아남는 카드의 일부분입니다.

일부 요소는 전혀 이전되지 않으므로, 시작하기 전에 어떤 것들이 있는지 알아두는 것이 좋습니다.

제작자의 메타데이터는 애초에 모델에 전달되지 않았습니다. SillyTavern은 Created by, Character Version, Creator's Notes, Tags to Embed 필드가 "프롬프트 구축에 사용되지 않으며, 캐릭터에 대한 추가 메타데이터만 제공한다"고 설명합니다. 만약 Creator's Notes에 중요한 설정을 적어두었다면, 지금까지 어떤 모델도 이를 읽지 않은 것입니다. 마이그레이션을 진행하기 전에 이 내용을 설명(description) 필드로 옮기거나, 애초에 인간 독자용이었다는 점을 받아들여야 합니다. 또한 문서에서는 임베디드 태그가 "캐릭터를 가져올 때 기본적으로 임포트되지 않는다"고 언급하므로, 태그 구조는 SillyTavern 인스턴스 간에도 쉽게 유실될 수 있습니다.

카드와 함께 이동하는 로어북은 단 하나뿐입니다. SillyTavern은 캐릭터에 World Info를 바인딩하는 기능을 지원하며, 내보낼 때 "이 파일도 캐릭터 카드 데이터에 임베드된다"고 설명합니다. 하지만 동시에 다음과 같은 제약 조건을 덧붙입니다. "기본 World Info 파일만 캐릭터와 함께 내보내진다는 점에 유의하십시오." Shift-클릭으로 추가한 다른 로어북이나 페르소나 바인딩, 채팅 바인딩 로어북은 별도의 범위를 가진 별개의 파일입니다.

키워드 활성화는 SillyTavern 엔진의 기능입니다. World Info 항목은 키워드에 의해 실행되며, SillyTavern은 "활성화 키워드, 제목 및 Content 필드에 없는 기타 정보는 컨텍스트에 삽입되지 않는다"고 명시합니다. ChatGPT가 공식 문서에서 밝힌 개인화 영역은 Custom Instructions, 메모리 요약, 그리고 기존에 저장된 메모리뿐입니다. ChatGPT 문서에는 World Info 활성화와 동등한 키워드 트리거 메커니즘이 설명되어 있지 않습니다. 항목 텍스트 자체는 잘 이전되지만, 트리거 조건은 직접 수동으로 재구축해야 합니다.

프롬프트 재정의(Prompt overrides)는 SillyTavern 내부에서도 조건부로 작동합니다. Main Prompt 및 Post-History Instructions 상자는 각각 "Prefer Char. Prompt" 및 "Prefer Char. Instructions"라는 일치하는 사용자 설정이 활성화되어 있는 경우에만 적용됩니다. 다른 사람이 만든 카드는 종종 이 부분이 채워진 채로 배포되지만, 본인의 설치 환경에서는 조용히 비활성화되어 있을 수 있습니다.

채팅 로그 내보내기에는 문서화된 손실이 따릅니다. JSONL 내보내기가 진짜입니다. SillyTavern은 "이미지 및 파일 첨부 파일을 제외한 모든 메타데이터를 포함하여 채팅을 공유하거나 마이그레이션하려면 이 형식을 사용하라"고 권장합니다. 일반 텍스트 내보내기는 읽기 전용 사본이며, 문서에서는 "중요한 메타데이터가 손실되므로 다시 가져올 수 없다"고 경고합니다.

로컬 설치가 아닌 호스팅 플랫폼에서 오시는 경우, Character.AI의 키워드 제한 항목에 대한 유사한 작업은 Character.AI 로어북을 ChatGPT로 마이그레이션하기에서 다루고 있습니다. 해당 글은 자체 가져오기 문서에서 순서 및 위치 설정을 누락된 항목으로 나열하는 저장소를 다룹니다. 본 글은 카드를 보존하는 플랫폼에서의 카드 자체에 관한 내용입니다.

수동 마이그레이션

1단계: 필드 순서가 아닌 수명에 따라 카드 분류하기

ChatGPT를 만지기 전에 카드를 열고 두 개의 목록으로 다시 작성해 보세요.

항상 켜져 있는 목록(The always-on list). 설명, 성격, 시나리오 상자의 모든 내용입니다. 이는 SillyTavern이 매번 생성할 때마다 전송하는 내용이므로, 이미 항상 사실인 내용으로 작성되어 있습니다. 특정 장면에만 해당하는 내용이 있는지 확인하고 골라내세요. 많은 카드가 설명에 줄거리를 포함하고 있어 매 답변마다 불필요한 토큰을 소모하게 만듭니다.

설정 목록(The setup list). 첫 메시지와 예시 메시지입니다. 이것들은 일종의 가면을 쓴 스타일 지침입니다. 이 내용을 읽고 줄글로 한 가지 질문에 답해 보세요. '이 내용들이 모델에게 말투, 길이, 템포, 서식에 대해 무엇을 가르치고 있는가?' 그 답을 문장으로 적어보세요. "답변은 2~4문단으로 구성됩니다. 행동은 이탤릭체로, 대사는 따옴표로 표시합니다. 절대 사용자를 대신해 말하지 않습니다." 이 문단이 바로 예시 블록을 이식 가능한 형태로 변환한 버전입니다.

이 작업을 하는 김에 바인딩된 World Info에 대해서도 동일하게 처리하고, 캐릭터가 실제로 사용하는 로어북이 몇 개인지 확인하세요. 페르소나 바인딩 항목은 캐릭터와 관계없이 해당 페르소나가 선택될 때마다 활성화되며, 채팅 바인딩 항목은 단 하나의 대화 내에서만 유지됩니다. 이러한 범위(scope)는 반대편에는 존재하지 않으므로, 말로 표현된 평이한 조건문으로 변환해야 합니다.

또한 토큰에 대한 현실적인 점검도 필요합니다. SillyTavern은 다음과 같이 직설적으로 말합니다. "2048 컨텍스트 토큰 제한이 있는 AI 모델을 사용하는 경우, 1000토큰짜리 캐릭터 정의는 AI의 '기억력'을 반으로 깎아먹습니다." 대부분의 카드는 여러분이 새로 이동하려는 환경보다 훨씬 더 타이트한 예산 하에 작성되었습니다. 따라서 기존 카드의 압축 방식 중 일부는 더 이상 필요하지 않으며, 일부는 이제 가독성이 떨어질 수 있습니다.

2단계: ChatGPT의 공식 영역을 통해 재구축하고 적용 여부 확인하기

항상 켜져 있는 목록은 Custom Instructions에 들어갑니다. 생각보다 짧게 유지하세요. 모든 답변에 적용되므로, 이는 SillyTavern의 영구 토큰이 가진 트레이드오프와 동일합니다.

설정 목록은 샘플 대화가 아닌 상시 스타일 가이드로 입력합니다. 샘플 대화는 SillyTavern 엔진이 의도적으로 배치하기 때문에 작동하는 것입니다. 일반 채팅에 붙여넣으면 그냥 위로 스크롤되어 사라지는 긴 메시지일 뿐입니다.

조건부 로어(Conditional lore)는 진짜 선택이 필요한 부분입니다. 특정 항목을 항상 켜져 있는 묶음으로 격상시킬 수 있는데, 이는 간단하지만 몇 주 동안 아무도 언급하지 않은 세력에 토큰 예산을 낭비하게 됩니다. 또는 세계관을 Project에 넣고 경계를 통해 범위를 제한할 수도 있습니다. OpenAI는 이 경계가 어떻게 작동하는지 문서화하며, 프로젝트 전용 메모리를 사용할 경우 "채팅은 동일한 프로젝트 내의 다른 대화를 참조할 수 있지만 프로젝트 외부의 대화는 참조할 수 없으며, 프로젝트 외부의 채팅은 프로젝트 내부의 대화를 참조할 수 없다"고 설명합니다. 아니면 장면이 시작될 때 항목을 직접 붙여넣을 수도 있습니다. 이 방법도 작동하긴 하지만, 애초에 로어북을 만든 목적(수동 붙여넣기 방지)과는 정반대되는 행동입니다.

그다음, 짐작만 하지 말고 실제로 확인해 보세요. OpenAI의 자체 조언은 "ChatGPT가 무언가를 기억하고 있는지 알고 싶다면 채팅으로 물어보라"는 것이며, 메모리 요약이 "ChatGPT가 대화를 바탕으로 기억하는 모든 것을 포함하지는 않을 것"이라고 경고합니다. 캐릭터의 가장 뚜렷한 세 가지 특징을 물어보고 어떤 답변이 돌아오는지 확인한 후에 마이그레이션이 성공했는지 판단하세요.

더 나은 방법: 입력 상자가 아닌 캐릭터에 대한 결정 사항을 보존하기

캐릭터 카드를 해체해 보면 가치 있는 것은 필드 레이아웃이 아닙니다. 그것은 바로 일련의 결정 사항들입니다. '이 세부 사항은 모든 장면에 적용된다', '이것은 항구 에피소드에서만 적용된다', '이 말투는 짧게 유지된다', '이 캐릭터는 절대 주인공의 이름을 부르지 않는다'와 같은 것들입니다. SillyTavern은 이러한 결정 사항들을 필드 배치와 삽입 설정으로 인코딩합니다. 다른 도구는 이를 다르게 인코딩하거나 아예 인코딩하지 않습니다.

결정 사항들을 결정 사항 그 자체로 적어두면, 더 이상 특정 엔진의 입력 상자에 종속되지 않습니다.

MemoryLake는 이러한 결정 사항들을 보관할 수 있는 전용 공간입니다. 여러분이 직접 자신의 언어로 각 항목의 범위와 이유를 작성해 넣으면, 연결된 모든 어시스턴트가 동일한 설정을 읽어옵니다. 어떤 도구의 파일에서도 강제로 추출해 오지 않으며, 이 레이어는 오직 여러분이 입력한 내용만을 유지합니다.

1단계: API 키 생성하기

로그인하고 워크스페이스 설정으로 이동하여 API 키를 생성합니다. 이 키는 어시스턴트가 동일한 항목을 읽는 데 사용하는 인증 정보이므로, 한 번 생성한 후 작성하는 모든 도구에서 접근할 수 있는 곳에 보관하세요.

키 이름과 만료일을 묻는 API 키 생성 대화 상자가 열려 있는 MemoryLake 콘솔 API 키 페이지
키 이름과 만료일을 묻는 API 키 생성 대화 상자가 열려 있는 MemoryLake 콘솔 API 키 페이지

2단계: 첫 번째 메모리 업로드하기

두 목록을 가져오되, SillyTavern이 가르쳐 준 구분을 유지하세요. 주제당 하나의 항목으로 구성합니다. 항상 활성화되는 사실은 항상 활성화됨으로 표시하고, 조건부 사실은 키워드 목록 대신 문장으로 조건을 작성합니다. 폴더 전체가 아니라 실제로 자주 쓰는 캐릭터부터 시작하세요.

첫 번째 프로젝트와 여기에 연결된 데이터 소스를 보여주는 MemoryLake 기본 워크스페이스의 프로젝트 탭
첫 번째 프로젝트와 여기에 연결된 데이터 소스를 보여주는 MemoryLake 기본 워크스페이스의 프로젝트 탭

3단계: AI 및 에이전트 연결하기

ChatGPT를 비롯해 사용하는 다른 도구들을 연결하세요. 각 도구에 동일한 캐릭터가 적용되며, 항구 구역의 역사가 필요한 장면에서는 여러분이 기억을 더듬어 항구를 재구축할 필요 없이 자동으로 해당 정보를 가져옵니다.

OpenClaw, Hermes Agent, Claude, ChatGPT, MCP 및 REST API 카드가 있는 MemoryLake 연동 갤러리
OpenClaw, Hermes Agent, Claude, ChatGPT, MCP 및 REST API 카드가 있는 MemoryLake 연동 갤러리

실제 적용 시 달라지는 점

첫 번째 차이점은 작업이 더 이상 특정 엔진의 필드 목록에 의해 좌우되지 않는다는 것입니다. 카드는 포맷일 뿐이며, 캐릭터는 결정 사항들의 집합입니다. 이러한 결정 사항들을 문장으로 작성해 두면, 다른 프론트엔드로 가져오거나 호스팅 어시스턴트에 프롬프트를 작성하는 일이 모두 동일한 작업이 됩니다.

두 번째는 비영구적인 부분이 더 이상 보이지 않게 사라지지 않는다는 점입니다. 컨텍스트 밖으로 스크롤되어 사라진 예시 메시지는 아무런 역할도 하지 못합니다. 하지만 명문화된 스타일 규칙은 예시가 사라진 후에도 계속 작동합니다. 이는 한 단계 위 레이어에서 발생하는 Janitor AI가 세계관 설정을 잊어버릴 때에서 설명한 실패 사례와 동일합니다.

세 번째는 페르소나와 캐릭터의 경계가 모호해지지 않는다는 점입니다. SillyTavern은 이 둘을 올바르게 분리하지만, 호스팅 어시스턴트들은 대개 그렇지 못합니다. 본인의 노트에서 이 구분을 유지하는 것이 Character AI가 페르소나를 잊어버릴 때에서 다룬 괴리 현상을 방지하는 방법입니다.

네 번째는 감사 가능성(auditability)입니다. 잘못 선택한 키워드는 아무런 경고 없이 작동하지 않지만, 말로 작성된 조건은 읽고 수정할 수 있습니다. 이러한 검토 습관은 AI가 기억하는 내용 감사하기의 주제이기도 합니다.

캐릭터 카드 이전을 위한 모범 사례

필드가 아닌 수명에 따라 마이그레이션하세요. 매번 전송되는 것과 한 번만 전송되는 것이 무엇인지 자문해 보세요. SillyTavern은 이 두 가지를 모두 문서화하고 있지만, 대부분의 다른 도구는 첫 번째 종류만 가지고 있습니다.

예시 메시지를 스타일 문단으로 변환하세요. 예시 메시지는 말투, 길이, 서식을 가르치기 위한 것이었습니다. 이를 명시적인 문장으로 표현하면 어디서든 살아남을 수 있습니다.

Creator's Notes에 있는 내용을 구출하세요. SillyTavern은 제작자 메타데이터가 프롬프트 구축에 사용되지 않는다고 말합니다. 의미 있는 내용이 담겨 있다면 설명(description) 필드로 옮겨야 합니다.

먼저 캐릭터 하나만 옮겨보세요. 폴더 전체를 옮기기 전에 실제로 사용하는 단 하나의 카드로 전체 과정을 실행해 보세요. 로컬 설치가 아닌 호스팅 플랫폼에서 이동하는 더 좁은 범위의 가이드는 Character AI를 ChatGPT로 마이그레이션하기에서 확인할 수 있습니다.

내보내기 전에 로어북 개수를 확인하세요. 내보낸 카드에는 기본 World Info 파일만 임베드됩니다. 추가 로어북, 페르소나 바인딩 및 채팅 바인딩 파일은 별개입니다.

채팅은 텍스트가 아닌 JSONL로 내보내세요. 문서에 따르면 일반 텍스트 버전은 메타데이터가 손실되므로 다시 가져올 수 없습니다.

공유하기 전에 내보낸 파일을 정리하세요. SillyTavern 자체에서도 권장하는 조언입니다. 개인정보가 우려된다면 내보낸 JSONL 파일을 검사하여 공유하고 싶지 않은 내용을 제거하세요. 파일이 컴퓨터를 떠나기 전에 이 작업을 수행해야 합니다.

대상 플랫폼의 목록이 불완전할 수 있음을 예상하세요. OpenAI는 메모리 요약이 모든 것을 포함하지는 않을 것이라고 밝히며 채팅으로 물어볼 것을 권장합니다. 이에 따른 실제적인 영향은 ChatGPT의 메모리 한계에서 다룹니다.

결론

SillyTavern은 정말 유용한 일을 했습니다. 캐릭터의 어떤 부분이 매번 전송되고 어떤 부분이 한 번만 전송되는지 알려주었으며, 사용자가 동작을 보고 추측하게 만드는 대신 이 사실을 문서에 명시했습니다. 이 구분이야말로 전체 포맷에서 가장 이식성이 높은 개념입니다.

마이그레이션이 까다로운 이유는 대상 플랫폼의 공식 영역이 거의 전적으로 영구적인 부분만을 중심으로 구축되어 있기 때문입니다. Custom Instructions는 설명 상자처럼 작동합니다. 말투를 심어준 뒤 뒤로 빠지는 첫 메시지나, 컨텍스트가 채워질 때까지 유지되는 예시 블록에 상응하는 공식적인 기능은 존재하지 않습니다.

그러므로 입력 상자가 아닌 '구분' 자체를 가져가세요. 항상 사실인 내용과 예시가 가르쳐 주던 내용을 적어두고, 다음 도구가 읽을 수 있는 곳에 보관하세요. 카드 포맷은 또 바뀔 것입니다. 그 안의 결정 사항들은 여러분의 것이며, 평이한 문장으로 기록해 두어야만 계속 살아남을 수 있습니다.

자주 묻는 질문

SillyTavern 캐릭터 카드에는 무엇이 포함되어 있나요?

이름, 설명, 성격, 시나리오(SillyTavern 문서에서 매 생성 요청마다 전송되는 영구 토큰으로 정의됨)와 첫 메시지, 예시 메시지, 대체 인사말, 선택적 프롬프트 재정의 및 제작자 메타데이터가 포함됩니다. SillyTavern은 이름이 유일한 필수 필드라고 명시하고 있습니다.

카드의 어떤 부분이 매번 전송되지 않나요?

첫 메시지 상자(문서에 따르면 채팅 시작 시 한 번만 전송됨)와 예시 메시지 상자(채팅 기록이 컨텍스트를 채울 때까지만 유지되며, 강제로 유지하는 옵션 제공)입니다.

World Info도 캐릭터와 함께 이동하나요?

하나의 로어북은 함께 이동합니다. SillyTavern은 캐릭터에 바인딩된 기본 World Info 파일이 내보낼 때 카드 데이터에 임베드된다고 설명하며, 기본 파일만 내보내진다고 직접 명시하고 있습니다. 추가 로어북, 페르소나 로어북, 채팅 로어북은 별개입니다.

ChatGPT에서 키워드 활성화 로어를 사용할 수 있나요?

OpenAI가 문서화한 개인화 영역은 Custom Instructions, 메모리 요약, 기존에 저장된 메모리이며, 삭제되지 않는 한 항상 고려되는 것으로 설명됩니다. 문서에는 World Info 활성화와 동등한 키워드 트리거 메커니즘이 설명되어 있지 않으므로, 실제적인 해결책은 각 키워드 목록을 평이한 언어로 된 조건문으로 다시 작성하는 것입니다.

채팅을 어떻게 내보내나요?

SillyTavern은 "Manage chat files" 대화 상자에서 JSONL 내보내기를 지원하며, 이는 이미지 및 파일 첨부 파일을 제외한 메타데이터와 함께 채팅을 공유하거나 마이그레이션하는 데 적합하다고 설명합니다. 또한 일반 텍스트 내보내기도 제공하지만, 이 버전은 중요한 메타데이터가 손실되어 다시 가져올 수 없다고 경고합니다.

다른 사람이 만든 카드가 제 설치 환경에서도 동일하게 작동할까요?

꼭 그렇지는 않습니다. Main Prompt 및 Post-History Instructions 재정의는 해당하는 "Prefer Char. Prompt" 및 "Prefer Char. Instructions" 설정이 활성화된 경우에만 적용되며, 임베디드 태그는 기본적으로 가져오지 않습니다. 다운로드한 카드가 제작자의 의도대로 작동한다고 가정하기 전에 이 두 가지를 모두 확인하세요.