generated from ttipo/project-base
feat(backend): AI 코스 생성에 Anthropic 클라이언트와 프롬프트 v1, 조건 해석 연결 #14
Reference in New Issue
Block a user
Delete Branch "feat/course-ai-anthropic"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
무엇을 · 왜
AI 코스 생성에 실제 모델(Anthropic, 기본 Claude Haiku 5.5)을 붙인다. 구현 순서의 5단계(설계 §14)다.
4단계까지 서버는 가짜 AI 로 코스를 만들었다. 이제 문장에서 조건을 읽고 후보 중 코스를 고르는 일을 모델이 한다. 순서·시간·사실 검증은 지금처럼 코드(planner)가 한다. 모델과 effort 는 6단계 평가로 정한다.
Anthropic 클라이언트 —
ai/anthropic-course-ai.client.ts@anthropic-ai/sdk1.5.0 을 컨테이너 안에서 설치했다npx npm@10 ci --dry-run이 통과한다output_config.format, JSON 스키마)으로 받고, 코드가 형식을 다시 본다AI_COURSE_EFFORT·AI_CONDITION_EFFORT다(기본 low)AI_TIMEOUT_MS, SDK 재시도는 1회다. 취소하면 signal 로 호출을 끊는다AI_002다. 실패한 경우는 거절 · 잘림 · JSON 이 아님 · 형식이 다름이다프롬프트 v1
course-v1ai/course-prompt.ts번호 | 이름 | 분류 | 실내외 | 방향·거리 | 그날 영업 | (반려) | 출처한 줄로 준다. 요청 문장은<request>칸에만 넣고, 좌표는 보내지 않는다. 다시 부를 때는 위반 목록을 붙인다conditions-v1ai/condition-prompt.ts조건 해석 — 값은 AI, 판정은 코드
condition-extraction.ts의applyExtraction이 기본값을 채우고issues를 정한다. 판정하는 것은 지난 날짜, 30일 초과, 2시간 미만, 자정 넘김, 여러 날, 읽을 수 없음이다PLACE_ALIASES: 팔공산 · 83타워 · 서문시장 · 김광석길) → 장소 DB 이름 검색 순서로 찾는다unknown_place— 말한 장소를 찾지 못해 기준 위치를 둔 경우다설정
AI_PROVIDERanthropicfake면 이전처럼 가짜 AI(개발용). 운영에서fake면 기동하지 않는다ANTHROPIC_API_KEYAI_002다AI_COURSE_MODEL·AI_CONDITION_MODELclaude-haiku-5-5shared/utils/ai-pricing.ts)에 있는 모델만 받는다 — 하루 비용 상한이 그 가격으로 계산된다AI_COURSE_EFFORT·AI_CONDITION_EFFORTlow첫 실제 호출에서 고친 것
ai:check로 한 번 불러 본 결과로 프롬프트 두 곳을 고쳤다.indoorIfRain을 채우지 않는다확인 방법
영향 범위
체크리스트
course-generation.constants.ts, 가격은ai-pricing.ts에 모았다AI_002, 조건 해석 실패는 기본값으로 대신한다npm run sync:error-codes실행 후 생성 파일까지 커밋 — 바꾸지 않았다backend/.env.{env}에만 있다🤖 Generated with Claude Code