File size: 3,615 Bytes
fbd1091
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""
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()