Claude Code 세션을 로컬 모델을 위한 파인튜닝 (Fine-tuning) 데이터로 변환하는 도구를 만들었습니다
요약
Claude Code의 세션 데이터를 로컬 모델 파인튜닝을 위한 학습 데이터로 변환해주는 'claude_converter' 도구를 소개합니다. JSONL 형식의 세션을 TRL, Axolotl, LLaMA-Factory 등 주요 프레임워크와 호환되는 형식으로 손쉽게 변환할 수 있습니다.
핵심 포인트
- Claude Code 세션을 파인튜닝용 메시지 형식으로 변환
- TRL, Axolotl, LLaMA-Factory(ShareGPT) 호환 지원
- 데이터 정제를 위한 clean_messages 및 분석용 inspect_session 제공
- 의존성 없는 가벼운 도구로 구현
Claude Code를 사용한다면, 모든 세션은 이미 ~/.claude/projects/ 디렉토리 아래에 .jsonl 파일 형태로 디스크에 저장되어 있습니다. 여기에는 멀티턴 편집 (multi-turn edits), 도구 호출 (tool calls), 추론 흔적 (reasoning traces)과 같은 실제 코딩 대화가 담겨 있습니다. 이는 여러분이 이미 무료로 생성한 학습 데이터입니다.
문제는 그 형식이 어떤 파인튜닝 (fine-tuning) 프레임워크도 기대하는 형식이 아니라는 점입니다. 그래서 저는 그 간극을 메우기 위해 claude_converter를 만들었습니다.
기능:
- Claude Code .jsonl 세션을 apply_chat_template()이 직접 소비할 수 있는 메시지 (messages) 형식으로 변환합니다.
- 출력물은 TRL/SFTTrainer, Axolotl, 그리고 LLaMA-Factory (sharegpt 형식)와 호환됩니다.
- 학습 전에 <tool_use>, <tool_result>, <thinking> 블록을 제거할 수 있는 clean_messages() 헬퍼를 제공합니다.
- 토큰 수와 블록 분석을 포함한 CLI 스타일의 inspect_session() 함수가 포함되어 있어, 학습을 시작하기 전에 어떤 데이터를 다루고 있는지 알 수 있습니다.
- 의존성(dependencies)이 없습니다.
빠른 예시:
import glob
from datasets import Dataset
from trl import SFTTrainer, SFTConfig
from claude_converter import session_to_messages, clean_messages
all_messages = []
for path in glob.glob("~/.claude/projects/*/.jsonl", recursive=True):
msgs = clean_messages(session_to_messages(path))
if len(msgs) >= 2:
all_messages.append({"messages": msgs})
dataset = Dataset.from_list(all_messages)
주의할 점 하나: 원본 세션에는 실패한 시도, 재시도, 막다른 길 등이 포함되어 있습니다. 모든 것을 맹목적으로 학습시키지 마세요. 최종 어시스턴트 턴 (assistant turn)이 실제로 문제를 해결한 세션들로 필터링하십시오.
Repo: https://github.com/FredyRivera-dev/claude_converter
uv pip install claude-converter
형식이나 변환 로직에 대한 질문이 있다면 기꺼이 답변해 드리겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기