generated from ttipo/project-base
feat(backend): AI 코스 식사 시간대 맞추기와 프롬프트 v2, 평가로 코스 모델을 Sonnet 5.5 로 정함
CI / Backend (lint · test · e2e · build) (pull_request) Successful in 12m22s
CI / Frontend (lint · type-check · test) (pull_request) Successful in 10m50s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 11m4s
CI / Frontend (lint · type-check · test) (push) Successful in 11m11s
CI / Backend (lint · test · e2e · build) (push) Successful in 12m15s
CI / 에러 코드 SSOT 동기화 검사 (push) Successful in 11m56s
CI / Backend (lint · test · e2e · build) (pull_request) Successful in 12m22s
CI / Frontend (lint · type-check · test) (pull_request) Successful in 10m50s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 11m4s
CI / Frontend (lint · type-check · test) (push) Successful in 11m11s
CI / Backend (lint · test · e2e · build) (push) Successful in 12m15s
CI / 에러 코드 SSOT 동기화 검사 (push) Successful in 11m56s
기준선(설계 §9.1)에서 자동 채점 실패의 3분의 2가 식당이 식사 시간대 밖에 놓인 것이었다. 식사 시간대는 약한 위반이라 고치기에 걸리지 않아서, 강한 위반을 고친 뒤 식당을 식사 시간대로 옮기는 단계를 더했다(설계 §3.6 2a). 작은 모델이 시간을 셈하다 코스를 짧게 끝내거나 끼니를 빠뜨려서, 장소 수와 끼니를 코드가 계산해 메시지에 적고(course-v2), 조건 해석의 시간 표현 · 동네 이름 규칙을 보탰다(conditions-v2). 프롬프트 예시가 평가셋 문장과 겹치면 그 사례의 점수가 외운 답이 되므로 예시를 바꾸고, 평가 실행마다 겹치는 구절을 찾아 요약에 적는다. 같은 v2 로 두 모델을 재니 자동 채점이 Sonnet 88%, Haiku 69~75%였고 경계 사례는 6/6 과 2/6 이었다. Haiku 는 반려 동반 · 영업시간 표현 규칙을 실행마다 다르게 지켜, 코스 초안 기본 모델을 Sonnet 5.5(effort low)로 정했다(사용자 결정, 설계 §8 · §9.2). 조건 해석은 Haiku 5.5 그대로다. 코스를 못 만든 사례를 되짚을 수 있게 평가 결과에 AI 호출마다 고른 곳과 위반 목록을 남긴다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit was merged in pull request #16.
This commit is contained in:
+26
-1
@@ -110,6 +110,8 @@ docker exec wandergo-backend npm run ai:eval -- --model=claude-sonnet-5-5 --judg
|
||||
- 결과는 `runs/<실행 id>/` 에 남는다(커밋하지 않는다) — `summary.md`(목표와 나란히 본 요약) ·
|
||||
`review.md`(사례별 코스, 사람 검토 10개 표시) · `results.jsonl`(사례별 원자료) · `meta.json`(옵션).
|
||||
요약은 설계 문서 §9 에 옮긴다.
|
||||
- AI 호출마다 고른 장소·머무는 시간과 시간표 결과(실패면 위반 목록)를 `results.jsonl` 의 `course.attempts` 에 남긴다.
|
||||
코스를 못 만들었거나 다시 부른 사례는 `review.md` 에 'AI 초안 1·2' 로 보인다 — 코드가 고칠 수 없었던 초안을 되짚을 때 본다.
|
||||
- 옵션: `--effort` · `--condition-model` · `--condition-effort` · `--judge-model` · `--judge-effort` ·
|
||||
`--part=conditions|course` · `--only=` · `--concurrency=`(기본 3) · `--budget=`(달러, 기본 3 — 닿으면 남은 사례를 돌리지 않는다).
|
||||
|
||||
@@ -135,8 +137,31 @@ docker exec wandergo-backend npm run ai:eval -- --model=claude-sonnet-5-5 --judg
|
||||
산책 코스를 만들고 동반 카페가 없다고 알린다(`partial_with_notice`).
|
||||
- **'돈 안 쓰는 코스'(X09)는 식당·카페를 뺀다.** 입장료가 무료로 확인되지 않은 곳을 무료라고 하지 않는다.
|
||||
|
||||
## 첫 실행에서 정한 것 (2026-11-11)
|
||||
|
||||
- **가족 표현의 인원은 문장에서 뽑는 항목이다.** F02 · K01 · K02 · K04 · K06 · K08 은 기대 인원(3 · 4명)이 이미 문장에서 센 값이었는데 `inferred` 에 `party` 가 빠져 있었다. 넣었다.
|
||||
- **"실내 위주로" · "실내에서" · "실내 놀거리"는 `indoorIfRain` 으로 읽는다.** D13 · P07 · K02 의 `inferred` 에 넣었고, 같은 기준으로 X01("실내 전시만")에도 넣었다.
|
||||
지금 조건에는 날씨와 상관없는 '실내만' 항목이 없어 가장 가까운 값이다. 날씨와 상관없는 실내 조건은 MVP 뒤 과제다.
|
||||
- **영어 'I'만으로 혼자라고 보지 않는다.** G01 의 `inferred` 에서 `party` 를 뺐다(G02 와 같게). 생성 조건의 1명은 사용자가 화면에서 고른 값으로 둔다.
|
||||
- 프롬프트(조건 해석 · 코스)의 예시는 평가셋 문장과 겹치지 않게 둔다 — 겹치면 그 사례의 점수가 외운 답이 된다.
|
||||
v1 에는 평가셋 문장과 같거나 거의 같은 예시가 여럿 있었다(조건 해석 D01 · K06 · G06 · X02 · F04 · X07, 코스 P02 · X01). v2 첫 판에도 D06 · P07 과 겹치는 예시가 남아 있었다.
|
||||
실행기가 실행마다 프롬프트와 평가셋 요청이 겹치는 구절(두 낱말 이상, 공백을 빼고 7자 이상)을 찾아 `summary.md` 에 적는다.
|
||||
장소 이름 한 낱말은 세지 않는다. 짧은 핵심 구절("밤 11시")은 이 검사로 잡히지 않으니 프롬프트를 고칠 때 직접 본다.
|
||||
|
||||
## 모델을 정하며 정한 것 (2026-11-12)
|
||||
|
||||
- **K08 의 기대 인원을 3명에서 2명으로 고쳤다.** "휠체어 쓰시는 아버지와 함께"는 본인과 아버지 두 사람이다. 문장에 나온 사람만 센다.
|
||||
- **실행마다 결과가 흔들린다.** 프롬프트 v2 로 Haiku 를 두 번 돌리니(사이에 3차 다듬기) 자동 채점 52개 중 13개가 통과와 실패를 오갔다.
|
||||
3~4개 차이는 한 번 실행으로 가리지 않는다. 비교가 빠듯하면 채점자 없이(`--judge` 를 빼고) 몇 번 더 돌려 평균을 본다.
|
||||
- **채점자는 코스 프롬프트의 규칙을 모른다.** 코스 프롬프트가 알려 준 "반려 정보는 개 기준"을 옮겨 쓴 글을 채점자가 지어낸 정보로 셌다(Sonnet P03 2건).
|
||||
채점자 다음 판(`judge-v2`)에 그 규칙을 알린다.
|
||||
|
||||
## 다음 버전에서 볼 것
|
||||
|
||||
- 대구에 사는 사람이 실제로 할 법한 요청인지, 빠진 상황이 있는지
|
||||
- `checks` 기준값(이동 시간, 장소 수, 끼니)이 너무 빡빡하거나 느슨하지 않은지
|
||||
- 큐레이션으로 반려 동반 실내 장소나 전통시장이 후보가 되면 반려동물 사례와 F05·G02 의 기대 결과를 다시 본다
|
||||
- 장소 수: 코스 프롬프트 v2 는 90분에 1곳으로 장소 수를 알려 주는데, 평가셋 기대보다 많다 — P08(하루 6곳, 기대 3–5) · W01(6시간 4곳, 기대 2–3).
|
||||
- 이동 시간: P06 · P09 는 앱의 도보 구간 한도(15분)보다 좁은 8~10분을 기대한다. 걷기를 줄여야 하는 동행(노견 · 휠체어 · 어르신)은 조건에 항목이 없어 앱 기본 한도를 쓴다.
|
||||
- 태풍처럼 위험한 날씨는 알려야 한다(W01). 코스 프롬프트 v2 는 날씨 말을 쓰지 않게 해서(날씨는 앱이 보여 준다) W01 이 알림을 남기지 못한다 — 위험 기상 알림은 앱이 붙이는 쪽을 본다.
|
||||
- 큐레이션으로 반려 동반 실내 장소나 전통시장이 후보가 되면 반려동물 사례와 F05·G02 의 기대 결과를 다시 본다.
|
||||
지금은 반려견과 갈 수 있는 곳이 자연 분류뿐인 사례가 있어 분류 2가지(P04 · P09)를 맞출 수 없다.
|
||||
|
||||
Reference in New Issue
Block a user