v2.2.324: /naver-trend "<분야> <기간>" 질문이 원문을 통째로 키워드로 조회하던 버그 수정
실사례: `/naver-trend 경제 8/11~8/12` → 키워드 칸에 "경제 8/11~8/12" 가 그대로 박힌 ratio 0.0 짜리 1행 표. 기대는 그 기간에 경제 분야에서 많이 검색된 키워드 목록. 원인 1 — 질문 원문 폴백: parseSearchTrendIntent 가 LLM 후보(keywords)가 비면 질문 원문을 키워드로 채웠다. 기간 표현까지 붙은 문자열이라 검색량이 잡힐 리 없다. 후보가 비면 빈 채로 두고, handlers 가 topic 기반 후보 생성으로 복구하게 변경. isPlausibleKeyword 에 기간 표현 차단(8/11~8/12, 8월 11일, 최근 일주일, 지난 30일) 추가 + 질문 원문·기간 제거 잔여 텍스트와 일치하는 후보 제거. 원인 2 — 분류 누락: 프롬프트가 "<분야> <기간>" 형태를 어느 모드로도 안내하지 않아 LLM 이 contains(포함단어 없음)로 찍고 discover 로 강등되며 topic 까지 버려졌다. "분야명 + 기간만 있는 질문 = discover" 를 프롬프트에 명시하고, 강등 시에도 topic 을 살려 후보 생성에 쓴다. - runContainsMode → runTopicMode 일반화: 포함단어를 선택 인자로 바꿔 "<분야> <기간>" 도 같은 2단 구조(LLM 후보 생성 → 실제 API 검증·앵커 보정 랭킹)를 타게 했다. 분야명 자체는 후보에서 제외(상위 개념이라 늘 1위를 먹고 정보 가치 0). - generateContainingKeywords → generateKeywordCandidates(ai, topic, word?, count) 통합, 포함단어 없을 때 전용 프롬프트 사용. - 비교는 대상 2개 이상일 때만: 키워드 1개짜리 compare 는 표가 늘 100.0 1행이라 무의미 — 그 검색어를 분야로 보고 인기 검색어를 뽑는다. - graceful degradation: AI 가 죽어도 분야명 자체 추이는 보여주고 실패를 명시. 결과가 전부 0 이고 조회 구간에 오늘이 포함되면 "데이터랩 당일 집계 미완" 안내. 검증: tsc 무오류 + jest 1055 통과(신규 12 — 슬래시 라우팅부터 끝까지 태우는 e2e 회귀 3건 포함) + esbuild/vsce 패키징 정상. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,15 @@
|
||||
# Astra Patch Notes
|
||||
|
||||
## v2.2.324 (2026-08-12)
|
||||
### 🐛 `/naver-trend <분야> <기간>` 이 질문 원문을 통째로 키워드로 조회하던 버그
|
||||
실사례: `/naver-trend 경제 8/11~8/12` → 키워드 칸에 **"경제 8/11~8/12"** 가 그대로 박힌 ratio 0.0 짜리 1행 표. 기대한 건 그 기간에 경제 분야에서 많이 검색된 키워드 목록.
|
||||
- **원인 1 — 질문 원문 폴백**: `parseSearchTrendIntent` 가 LLM 후보(`keywords`)가 비면 질문 원문을 키워드로 채웠다(`keywords.length > 0 ? keywords : [trimmed]`). 기간 표현까지 붙은 문자열이라 검색량이 잡힐 리 없다. 후보가 비면 **빈 채로 두고**, handlers 가 `topic` 기반 후보 생성으로 복구하도록 변경. 후보 필터(`isPlausibleKeyword`)에 기간 표현 패턴(`8/11~8/12`, `8월 11일`, `최근 일주일`, `지난 30일`) 차단을 추가하고, 질문 원문·기간 제거 잔여 텍스트와 일치하는 후보도 제거.
|
||||
- **원인 2 — 분류 누락**: 프롬프트가 `<분야> <기간>` 형태를 어느 모드로도 안내하지 않아 LLM 이 contains(포함단어 없음) 로 찍고 → discover 로 강등되며 후보가 빈 채로 남았다. 프롬프트에 "분야명 + 기간만 있는 질문 = discover" 를 명시하고, **강등 시에도 `topic` 을 살려** 후보 생성에 쓰도록 수정.
|
||||
- **contains 모드 일반화(`runContainsMode` → `runTopicMode`)**: 포함단어를 선택 인자로 바꿔 `<분야> <기간>` 도 같은 2단 구조(LLM 후보 생성 → 실제 API 검증·앵커 보정 랭킹)를 타게 했다. 분야명 자체는 후보에서 제외(상위 개념이라 늘 1위를 먹고 정보 가치 0). `generateContainingKeywords` → `generateKeywordCandidates(ai, topic, word?, count)` 로 통합, 포함단어 없을 때 전용 프롬프트 사용.
|
||||
- **비교는 대상 2개 이상일 때만**: 키워드 1개짜리 `compare` 는 표가 늘 `100.0` 1행이라 무의미 — 그 검색어를 분야로 보고 인기 검색어를 뽑아준다.
|
||||
- **후보 생성 실패 시 graceful degradation**: AI 가 죽어도 분야명 자체 추이는 보여주고 "후보 생성 실패" 를 명시. 결과가 전부 0 이고 조회 구간에 오늘이 포함되면 "데이터랩 당일 집계 미완" 안내를 붙인다.
|
||||
검증: tsc 무오류 + jest 1055 통과(신규 12 — 실제 리포트 입력 `/naver-trend 경제 8/11~8/12` 를 슬래시 라우팅부터 끝까지 태우는 e2e 회귀 3건 포함) + esbuild 정상.
|
||||
|
||||
## v2.2.323 (2026-08-11)
|
||||
### 🔎 `/naver-trend` contains 모드 — "분야 + 포함단어 + 기간"으로 검색어 뽑기
|
||||
사용자 요청: `/naver-trend 경제 방법 8월1일부터 오늘까지` 처럼 쓰면 경제 분야 인기 검색어 중 "방법"이 들어간 것을 검색량 상위 10개로 달라. 기존엔 `<카테고리> <기간>` 조회만 가능했다.
|
||||
|
||||
Reference in New Issue
Block a user