Claude Code 세션을 로컬 모델 파인튜닝 데이터로 변환하는 도구를 만들었습니다
I built a tool to turn your Claude Code sessions into fine-tuning data for local models
핵심 요약
Claude Code의 대화 기록을 로컬 모델 파인튜닝용 데이터셋으로 변환해주는 도구입니다.
- 데이터 변환 — Claude Code의 .jsonl 세션을 학습 가능한 메시지 형식으로 변환함
- 호환성 지원 — TRL, Axolotl, LLaMA-Factory 등 주요 파인튜닝 프레임워크와 호환됨
- 데이터 정제 — 학습 전 불필요한 도구 호출 및 사고 과정을 제거하는 헬퍼 함수 제공
- 세션 분석 — 학습 전 토큰 수와 세션 구성을 미리 확인할 수 있는 CLI 도구 포함
Claude Code를 사용 중이라면, 모든 세션은 이미 ~/.claude/projects/ 경로에 .jsonl 파일로 저장되어 있습니다. 여기에는 다중 턴 편집, 도구 호출, 추론 과정 등 실제 코딩 대화 내용이 담겨 있죠. 이건 여러분이 이미 무료로 생성해둔 학습 데이터입니다.
문제는 이 형식이 파인튜닝 프레임워크에서 기대하는 것과 다르다는 점입니다. 그래서 그 간극을 메우기 위해 claude_converter를 만들었습니다.
기능:
- Claude Code
.jsonl세션을apply_chat_template()이 바로 읽을 수 있는messages형식으로 변환 - TRL/SFTTrainer, Axolotl, LLaMA-Factory(sharegpt 형식)와 호환되는 출력 제공
- 학습 전
<tool_use>,<tool_result>,<thinking>블록을 제거하는clean_messages()헬퍼 포함 - 학습 전 데이터 구성을 파악할 수 있도록 토큰 수와 블록 분석을 제공하는
inspect_session()CLI 함수 포함 - 의존성 제로
간단한 예시:
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)
한 가지 주의할 점은, 원본 세션에는 실패한 시도, 재시도, 막다른 길 등이 포함되어 있다는 것입니다. 맹목적으로 전부 학습시키지 마세요. 마지막 어시스턴트 턴에서 실제로 문제를 해결한 세션만 필터링해서 사용하세요.
저장소: https://github.com/FredyRivera-dev/claude_converter
uv pip install claude-converter
형식이나 변환 로직에 대해 궁금한 점이 있으면 언제든 물어봐 주세요.


