Commit Graph
5 Commits
Author SHA1 Message Date
koriwebandClaude Opus 5 b73f1f48b3 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>
2026-08-12 22:04:06 +09:00
koriwebandClaude Opus 5 0b315b9c6a v2.2.323: /naver-trend contains 모드 — "분야 + 포함단어 + 기간"으로 검색어 뽑기
`/naver-trend 경제 방법 8월1일부터 오늘까지` → 경제 분야 인기 검색어 중
"방법"이 들어간 것을 검색량 상위 10개로.

- contains 모드(intentParser): topic/containsWord/limit 추출 + 포함 단어를
  가진 후보 최대 30개 제안. 포함 여부는 LLM을 믿지 않고 keywordContains()로
  코드에서 재검사(공백 무시, 단어 자체만인 후보 제외). 후보가 얇으면
  generateContainingKeywords()로 보충. containsWord가 비면 discover로 강등.
- rankKeywordsAnchored: 검색어트렌드 ratio는 "요청 하나 안에서" 최댓값=100인
  상대값이라 5개씩 끊어 호출하면 6위 이하 순위가 무의미했다. 첫 배치 최댓값을
  앵커로 잡아 모든 배치에 끼워 넣고 되돌린 뒤 1위=100으로 재정규화. 정렬은
  하루치 최신값 대신 구간 평균(avgRatio).
- dateRange.ts 신설: 기간을 LLM에 맡기지 않고 규칙으로 확정 —
  "8월1일부터 오늘까지", "8/1~8/10", "최근 일주일", "지난 30일", "최근 한 달".
  연도 생략 시 미래면 작년. 범위 연결어 없는 날짜 나열/버전 문자열은 미인식.
- 날짜 UTC 밀림 수정: toISOString() → ymdLocal() (KST 새벽에 "오늘"이 하루 전으로
  밀리던 문제). 긴 구간은 timeUnit을 week/month로 자동 하향.

검증: tsc 무오류 + jest 1044 통과(신규 24) + esbuild 정상.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 21:43:08 +09:00
koriweb 61246bb0cb v2.2.321: /naver-shopping "분야 내 인기 검색어" 질문이 무의미한 1행 표만 주던 문제 수정
- 쇼핑인사이트 API 는 분야 자체의 클릭 추이만 주고 분야 안의 키워드 순위 API가
  없음 — intentParser 에 scope(category/keywords) 필드 추가해 "인기 검색어"
  류 질문을 감지하고, 검증된 검색어트렌드 rankKeywords 로 우회 처리하도록 수정
2026-08-06 10:30:30 +09:00
koriweb 29ad4cc023 v2.2.320: /naver-shopping "CATEGORY_TREE is not iterable" 크래시 수정 + 카테고리 목록 조회
- import * as (namespace import) 로 배열 JSON 을 불러오면 esbuild 번들에서
  { default: [...] } 로 감싸져 배열이 아니게 되는 문제 — import x = require(...)
  로 전환해 esbuild/tsc/ts-jest 세 경로 모두 동일하게 동작하도록 수정
- 실제 esbuild 번들 산출물을 실행하는 회귀 테스트 추가 (ts-jest만으론 이 버그를 못 잡음)
- /naver-shopping categories [검색어] — 대분류 목록/세부 카테고리 검색 명령 추가
2026-08-06 10:06:20 +09:00
koriweb c79eda1862 v2.2.313~319: 보고 품질·조사 신뢰성 수술 + 네이버 쇼핑인사이트/검색어트렌드 연동
- 파트별 완성, 웹 실접속 증빙, 턴 의도 브리핑, 본문 불일치 검증, 하위 질문
  체크리스트, 사이트 심층 수집 (PATCHNOTES.md v2.2.313~318 참조)
- /naver-shopping, /naver-trend: 네이버 데이터랩 API 연동. compare/discover
  자동 판별, API 배치 상한 캡슐화, 카테고리 트리 fuzzy 매칭, 자격증명은
  Astra 설정 패널 SecretStorage 로 관리
2026-08-05 18:20:32 +09:00