""" embedding_text 품질 수정. SCR_2042 청산내역: 잔고 관련 keyword stuffing 제거 (유지) SCR_1300 국내잔고: 구어체 문장 하드코딩 제거 → 원래 좋은 내용으로 원복 원칙: embedding_text는 메뉴 설명이어야 함. 특정 쿼리를 하드코딩하면 다른 쿼리가 망가짐. 시스템 수준(Weighted RRF + use_reranker=True)으로 해결. """ import sys, io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.path.insert(0, '.') import json from pathlib import Path from config import GENERATED_DIR JSONL_PATH = GENERATED_DIR / "menu_descriptions.jsonl" FIXES = { # ── SCR_2042 청산내역: 잔고 반복 제거 → CFD 청산 특화 키워드로 교체 ── "SCR_2042": ( "사용자는 국내CFD 계좌에서 거래를 마친 후 청산된 내역과 실현 손익을 정확히 " "확인하고자 할 때 이 메뉴를 찾습니다. 특히 매입가, 청산가, 수수료, 세금 등 " "거래별 상세 정보를 조회하거나 예약매매 후 청산 내역과 미체결 주문 내역의 " "차이를 파악하려는 상황에서 필요합니다. 청산내역 메뉴는 국내CFD 계좌에서 " "이미 청산된 거래 기록과 실현 손익을 조회할 수 있습니다. " "국내CFD 청산내역 청산가 매입가 실현손익 수수료 세금 체결내역 주문내역 " "거래내역 예약매매 미체결 CFD포지션 CFD거래 CFD계좌 CFD청산" ), # ── SCR_1300 국내잔고: 구어체 하드코딩 제거 → 원래 내용으로 원복 ── # 원칙: embedding_text는 메뉴 설명이어야 함. # 특정 쿼리를 하드코딩하면 다른 쿼리에서 노이즈가 됨. # "잔고 확인하러 왔어" 매칭은 use_reranker=True + Weighted RRF로 해결. "SCR_1300": ( "사용자가 국내주식 계좌 내 보유 주식의 실시간 잔고와 수익 현황을 확인하고자 " "할 때 이 메뉴를 찾습니다. 특히 키움 잔고와 타사 잔고를 비교하거나 " "국내주식잔고조회, 국내주식실시간잔고를 통해 정확한 정보를 얻으려는 상황입니다. " "국내잔고 메뉴는 국내주식의 실시간 잔고와 수익 정보를 제공하며, 사용자가 " "자신의 계좌 상태를 빠르고 편리하게 확인할 수 있도록 설계되어 있습니다. " "키움 잔고 타사 잔고 국내주식잔고조회 국내주식실시간잔고 수익 잔고 조회 " "국내주식 잔고 주식잔고 계좌잔고 실시간 잔고 수익률 평가손익 지정가 시장가 " "체결 미체결 잔고 수익률 평가손익 계좌잔고 주문내역 예약매매 " "등의 키워드가 포함되어 다양한 검색 의도를 포괄합니다." ), } def main(): lines = JSONL_PATH.read_text(encoding="utf-8").splitlines() updated = 0 new_lines = [] for line in lines: if not line.strip(): new_lines.append(line) continue obj = json.loads(line) mid = obj.get("menu_id", "") if mid in FIXES: obj["embedding_text"] = FIXES[mid] new_lines.append(json.dumps(obj, ensure_ascii=False)) print(f"[수정] {mid}: {obj.get('menu_name','')}") updated += 1 else: new_lines.append(line) JSONL_PATH.write_text("\n".join(new_lines), encoding="utf-8") print(f"\n[완료] {updated}개 수정됨 → {JSONL_PATH}") if __name__ == "__main__": main()