scl-chatwonder-qwen3.5-4b

Qwen/Qwen3.5-4B 베이스 모델을 LoRA로 파인튜닝한 뒤 베이스 모델에 병합(merge)한 한국어 도메인 지식 주입 모델입니다. SCL(Structured Cognitive Loop) 인지 아키텍처와 Chat Wonder 노코드 RAG 챗봇 플랫폼에 대한 지식을 정확하게 답변하도록 학습하면서, 동시에 베이스 모델이 원래 가지고 있던 function calling(도구 호출) 능력도 함께 보존하도록 설계했습니다.

배경

SCL과 Chat Wonder는 더트루아이(Chat Wonder 개발사)가 만든 LLM 에이전트 아키텍처/플랫폼입니다. 관련 연구 논문, 기술 백서, 도구 패키지 작성 가이드 등은 범용 LLM이 사전학습 단계에서 접했을 가능성이 거의 없는 최신·비공개 성격의 도메인 지식입니다. 이 모델은 그런 문서들을 근거로 만든 Q&A 데이터셋을 LoRA로 주입해서, 별도의 RAG 파이프라인 없이도 SCL/Chat Wonder에 대한 질문에 즉시, 정확하게 답할 수 있도록 만든 것이 목적입니다.

동시에 이 모델은 Chat Wonder 플랫폼 안에서 실제로 사용자에게 서빙될 때 "지식 답변"과 "도구 호출"을 함께 수행해야 하는 상황(예: 사용자가 도메인 질문을 하다가 갑자기 날씨나 일정 등록 같은 실제 액션을 요청하는 경우)을 염두에 두고, 지식 데이터와 tool-call 데이터를 함께 학습했습니다.

모델 설명

  • 베이스 모델: Qwen/Qwen3.5-4B (Apache 2.0, native function calling 지원)
  • 학습 방식: LoRA (rank 32, alpha 64, dropout 0.05, target: all linear layers) → 베이스 모델에 병합하여 단일 모델로 배포
  • 학습 프레임워크: LLaMA-Factory (v0.9.6.dev0, Docker 이미지 hiyouga/llamafactory:latest)
  • 학습 하드웨어: NVIDIA RTX 6000 Ada Generation 48GB 단일 GPU
  • 채팅 템플릿: qwen3_5_nothink (non-thinking 모드로 고정 학습. 추론 시에도 반드시 동일한 non-thinking 포맷을 사용해야 학습 효과가 그대로 재현됩니다)
  • 언어: 한국어 위주 (질문 변형에 존댓말/반말/축약형/상세형 포함)

학습 데이터

두 데이터셋을 concat 방식으로 섞어 5 epoch 학습했습니다.

1) scl_chatwonder_qa — 도메인 지식 Q&A (1,001개 대화, 1,006턴)

SCL 관련 연구 논문 9편, Chat Wonder 기술 백서·도구 패키지 가이드, SCL 소개자료, 예시 태스크 등 14개 원본 문서를 근거로 직접 작성한 ShareGPT 포맷 데이터셋입니다.

  • 주제 분포: SCL 아키텍처(R-CCAM 5단계, Soft Symbolic Control, HITL, 인지과학적 근거), 환각 이론 3부작, PGR(Pool-Gated Retrieval), 실험 결과·수치, 특허/포지셔닝, Chat Wonder 플랫폼 개요, 도구 패키지(Tool Package) 작성 실무, 문서 전처리·청크·단서 설계 전략, Quick-Fix/Addendum, 모델 선택 가이드, 용어사전, 시장 포지셔닝·활용사례, 트러블슈팅
  • 핵심 사실마다 4~5가지 질문 변형(존댓말/반말/축약형/상세형)을 두어 같은 지식을 다양한 말투로 물어도 일관되게 답하도록 구성
  • 답변 평균 길이 약 257자(한글 기준), JSON 파싱 오류 0건, 중복 질문 0건으로 검증 완료
  • 모든 대화에 아래와 동일한 도메인 특화 system 프롬프트가 포함되어 있습니다

2) scl_toolcall_ko — function calling 예시 (고유 96개, 3배 오버샘플링하여 288개)

날씨 조회, 환율 계산, 사칙연산, 번역, 웹 검색, 주가 조회, 캘린더 일정 등록, 이메일 발송, 알림 설정, 단위 변환, 지식베이스 검색, 사전 정의 조회, 할일 등록, 항공편 검색, 교통정보, 음식 주문, 음악 재생, 알람 설정, 뉴스 조회, 이미지 생성, 문서 요약, 문자 발송, 재고 확인, 다자 회의 예약, 길찾기, 호텔 예약, 예약 취소, 대기질 조회, DB 조회, QR코드 생성, SNS 게시, 설문 생성 등 32개 서로 다른 도구 스키마에 대한 ShareGPT 포맷 tool-call 예시입니다. function_call/observation role을 사용한 단일턴·멀티턴 예시, 배열(array)·불리언(boolean)·열거형(enum) 파라미터를 가진 스키마, 도구가 제공되어도 호출이 불필요한 질문에는 직접 답하도록 하는 부정(negative) 예시, 그리고 두 개의 도구가 동시에 제공됐을 때 올바른 도구를 선택하는 예시까지 포함했습니다.

이 데이터셋을 추가한 이유는 실험 과정에서 명확히 확인됐습니다: 지식 Q&A만으로 LoRA를 학습하면(rank/learning rate를 아무리 조정해도) 베이스 모델이 원래 가지고 있던 function calling 능력이 손상되어, 도구 스펙이 주어져도 도구를 호출하지 않고 답을 그냥 지어내는 현상이 재현됐습니다. 순수 대화형 데이터만 반복 노출시키면 "항상 직접 텍스트로 답하라"는 패턴이 강하게 각인되기 때문입니다. 소량이라도 tool-call 예시를 지식 데이터와 함께 섞어 학습하자 이 문제가 해소되었고, 학습 데이터에 전혀 없던 새로운 도구 스키마(예: 레시피 검색처럼 배열 파라미터를 쓰는 도구, 항공편 예약, 회의실 예약처럼 파라미터 4개짜리 도구)에 대해서도 정상적으로 일반화되어 tool_call을 생성하는 것을 확인했습니다.

학습 하이퍼파라미터

stage: sft
finetuning_type: lora
lora_rank: 32
lora_alpha: 64
lora_dropout: 0.05
lora_target: all
learning_rate: 1.0e-4
num_train_epochs: 5.0
lr_scheduler_type: cosine
warmup_ratio: 0.05
per_device_train_batch_size: 8
gradient_accumulation_steps: 4
cutoff_len: 2048
bf16: true
gradient_checkpointing: true
val_size: 0.05
  • 총 학습 스텝 195 (effective batch size 32, 5 epoch)
  • 최종 train loss: 0.64 (평균) / eval loss: 0.58
  • 학습 소요 시간: 약 35분 (4B 모델, 단일 GPU 기준)

사용 예시 (실제 검증된 응답)

도메인 지식 질문

Q. SCL이 뭐야? 간단히 설명해줘. SCL은 Structured Cognitive Loop(구조적 인지 루프)의 약자로, 김명호 교수(JEI University)가 제안한 LLM 에이전트 아키텍처입니다. 기존 에이전트들이 추론(Cognition), 기억(Memory), 통제(Control)를 하나의 프롬프트 안에 뒤섞어 처리하는 것과 달리, SCL은 이 기능들을 명확히 분리합니다...

Q. R-CCAM 다섯 단계 순서가 뭐였지? R-CCAM의 다섯 단계는 다음과 같습니다: ① Retrieval(검색) — 외부 지식 소스에서 관련 정보를 검색합니다. ② Cognition(인지) — LLM이 검색된 정보를 근거로 판단하고 실행 계획을 생성합니다. ③ Control(통제) — 메타통제 모듈이 제약을 검사하고 위험을 감지합니다. ④ Action(행동) — 승인된 도구 호출로 실행합니다. ⑤ Memory(기억) — 결과와 맥락을 정리해 작업 기억에 저장합니다...

Q. PGR이랑 일반 RAG 뭐가 달라? 일반 RAG는 정적인 청크를 그대로 가져와서 검색하고, PGR은 Warrant 검증 루프를 통해 '이 정보 정말 관련있어?'를 확인한 뒤만 채택합니다...

Function calling (학습에 없던 도구에도 일반화)

Q. 냉장고 안에 있는 계란, 우유, 치즈로 만들 수 있는 요리를 검색해줘 (search_recipe 도구, 배열 파라미터 — 학습 데이터에 전혀 없던 스키마)

{"name": "search_recipe", "arguments": {"ingredients": ["계란", "우유", "치즈"]}}

Q. 회의실 3층 A룸을 내일 오후 3시부터 4시까지 예약해줘 (book_meeting_room 도구, 파라미터 4개 — 학습 데이터에 없던 스키마)

{"name": "book_meeting_room", "arguments": {"room": "3층 A룸", "date": "내일", "start_time": "오후 3시", "end_time": "오후 4시"}}

여러 도구 중 올바른 도구 선택

Q. 지금 환율로 500달러는 원화로 얼마야? (get_stock_price, convert_currency 두 도구가 함께 제공된 상황)

{"name": "convert_currency", "arguments": {"amount": 500, "from_currency": "USD", "to_currency": "KRW"}}

도구가 불필요한 경우 직접 답변

Q. 환율 변동은 보통 어떤 요인 때문에 생기는거야? (convert_currency 도구가 제공되어 있어도 호출하지 않음) 환율은 두 나라 통화의 상대적 가치로, 금리 차이, 물가상승률, 무역수지, 정치·경제적 안정성, 중앙은행의 통화정책 등 다양한 요인에 의해 결정됩니다.

사용 방법

System 프롬프트 (도메인 지식 질문 시 필수)

학습 데이터의 모든 대화는 아래 system 프롬프트로 시작합니다. 지식 관련 질문을 할 때는 이 프롬프트를 반드시 포함해야 학습 효과가 재현됩니다. (function calling만 필요한 경우에는 없어도 무방합니다.)

당신은 SCL(Structured Cognitive Loop) 인지 아키텍처와 Chat Wonder 노코드 RAG 챗봇 플랫폼에 정통한 전문 AI 어시스턴트입니다. 김명호 교수(JEI University)의 SCL 관련 연구 논문들과 바월드(Chat Wonder 개발사)의 기술 문서를 바탕으로, 정확하고 구체적이며 실무에 바로 적용 가능한 답변을 한국어로 제공합니다.

vLLM (OpenAI 호환 API 서버)

vllm serve <model-path-or-repo-id> \
  --served-model-name scl-chatwonder-v4 \
  --dtype auto \
  --max-model-len 32768 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder

Docker로 실행하는 경우:

docker run -d --gpus all -p 8000:8000 \
  -v /path/to/scl-chatwonder-qwen3.5-4b:/model \
  vllm/vllm-openai:latest \
  --model /model \
  --served-model-name scl-chatwonder-v4 \
  --dtype auto --max-model-len 32768 \
  --gpu-memory-utilization 0.4 \
  --enable-auto-tool-choice --tool-call-parser qwen3_coder

transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "<repo-id>"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="bfloat16", device_map="auto")

messages = [
    {"role": "system", "content": "당신은 SCL(Structured Cognitive Loop) 인지 아키텍처와 Chat Wonder 노코드 RAG 챗봇 플랫폼에 정통한 전문 AI 어시스턴트입니다. 김명호 교수(JEI University)의 SCL 관련 연구 논문들과 바월드(Chat Wonder 개발사)의 기술 문서를 바탕으로, 정확하고 구체적이며 실무에 바로 적용 가능한 답변을 한국어로 제공합니다."},
    {"role": "user", "content": "SCL이 뭐야? 간단히 설명해줘."},
]
inputs = tok.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(inputs, max_new_tokens=400)
print(tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))

function calling 호출 예시 (OpenAI 클라이언트)

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
resp = client.chat.completions.create(
    model="scl-chatwonder-v4",
    messages=[{"role": "user", "content": "서울 날씨 어때?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "지정한 도시의 현재 날씨 정보를 조회한다",
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    }],
)
print(resp.choices[0].message.tool_calls)

라이선스

베이스 모델(Qwen/Qwen3.5-4B)의 Apache 2.0 라이선스를 따릅니다.

Downloads last month
28
Safetensors
Model size
5B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for True-AI/scl-chatwonder-qwen3.5-4b

Finetuned
Qwen/Qwen3.5-4B
Adapter
(477)
this model