Qwen3-4B Calendar Agent RLVR는 한국어 일정 관리 도구를 호출하는 4B 파라미터 병합 모델입니다.
Calendar 도구의 실행 궤적과 최종 상태를 보상으로 평가하여 GRPO로 학습했습니다.
다음 행동을 학습 범위에 포함합니다.
1from transformers import AutoModelForCausalLM, AutoTokenizer
2
3model_id = "NotoriousH2/Qwen3-4B-Calendar-Agent-RLVR"
4tokenizer = AutoTokenizer.from_pretrained(model_id)
5model = AutoModelForCausalLM.from_pretrained(
6 model_id,
7 dtype="auto",
8 device_map="auto",
9)
10
11tools = [
12 {
13 "type": "function",
14 "function": {
15 "name": "search_events",
16 "description": "지정한 날짜의 일정을 조회합니다.",
17 "parameters": {
18 "type": "object",
19 "properties": {
20 "date": {"type": "string", "description": "YYYY-MM-DD"}
21 },
22 "required": ["date"],
23 },
24 },
25 }
26]
27messages = [
28 {
29 "role": "system",
30 "content": "사용자 요청을 처리하는 데 필요한 일정 도구를 호출하세요.",
31 },
32 {"role": "user", "content": "2039-07-05 일정을 알려줘."},
33]
34
35prompt = tokenizer.apply_chat_template(
36 messages,
37 tools=tools,
38 tokenize=False,
39 add_generation_prompt=True,
40 enable_thinking=False,
41)
42inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
43outputs = model.generate(**inputs, max_new_tokens=512)
44response = outputs[0, inputs.input_ids.shape[1] :]
45print(tokenizer.decode(response, skip_special_tokens=False))
모델은 도구 호출 정보를 생성합니다.
호출 실행과 도구 결과 전달은 호스트 애플리케이션에서 처리해야 합니다.
같은 요청에서 16개 응답을 생성하고, 그룹 안의 보상 차이로 Advantage를 계산했습니다.
전체 행동군을 다룬 첫 학습 단계에서 96개 그룹 중 68개 그룹이 서로 다른 보상을 포함했습니다.
최종 성공 여부가 같은 응답도 절차 진행 점수로 구분하여 학습 신호를 구성했습니다.
400개 합성 시나리오에서 실제 도구 루프를 실행하고 최종 상태를 평가했습니다.
SFT와 사례별로 비교하면 RLVR 모델은 41개 실패를 성공으로 전환했고, 1개 성공을 실패로 전환했습니다.
순증은 40개이며 전체 Task Success 차이는 10.00%p입니다.
템플릿별 Task Success는 다음과 같습니다.
필수 정보가 없는 생성 요청에서는 임의의 시각을 정해 일정을 생성하지 않고 시작 시각과 소요 시간을 요청합니다.
충돌 시 대체 시간 등록을 승인한 요청에서는 기존 일정을 조회하고 빈 시간을 찾은 뒤, 충돌하지 않는 시간에 일정을 생성합니다.
충돌 후 생성은 SFT 77/80, RLVR 76/80으로 다른 템플릿보다 낮습니다.
외부 Calendar 시스템에 적용할 때는 충돌 복구와 도구 오류 이후의 재시도를 별도로 평가해야 합니다.