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:
2026-08-12 22:04:06 +09:00
co-authored by Claude Opus 5
parent 0b315b9c6a
commit b73f1f48b3
15 changed files with 322 additions and 82 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "astra",
"displayName": "Astra",
"description": "The personal intelligence layer for Antigravity and VS Code. A private cognitive partner for deep project context, memory, and proactive strategic decision-making.",
"version": "2.2.323",
"version": "2.2.324",
"publisher": "g1nation",
"license": "MIT",
"icon": "assets/icon.png",