""" Step 3: CLI 검색 테스트 실행: python scripts/03_search_cli.py # 대화형 모드 python scripts/03_search_cli.py --query "내 주식 얼마야?" # 단일 쿼리 python scripts/03_search_cli.py --batch # 사전 정의 쿼리 배치 테스트 """ import sys import argparse from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent)) from rich.console import Console from rich.table import Table from rich import print as rprint from core.search_engine import MenuSearchEngine console = Console() # 배치 테스트용 사전 정의 쿼리 BATCH_QUERIES = [ "내일 장 시작하면 자동으로 사게 해줘", "주문 잘못 냈는데 취소하고 싶어", "여러 종목 한꺼번에 주문할 수 있어?", "내 주식 얼마나 올랐어?", "지금 내 계좌에 주식 얼마 있어?", "오늘 손익이 얼마야", "삼성전자 지금 얼마야?", "호가창 보고싶어", "차트 보여줘", "미국 주식 사고싶어", "애플 주식 가격 확인", "RSI 30 이하 종목 찾아줘", "조건식 실시간으로 보고싶어", "내 총 자산 얼마야", "다른 계좌로 돈 보내고 싶어", "삼성전자 공시 확인하고 싶어", "오늘 주요 뉴스 뭐야", "알림 소리 끄고싶어", "코스피 선물 주문", "예약했던 거 됐는지 확인", ] def display_results(query: str, results: list): table = Table(title=f'검색: "{query}"', show_lines=True) table.add_column("순위", style="cyan", width=4) table.add_column("메뉴명", style="bold green") table.add_column("메뉴 경로", style="white") table.add_column("유사도", style="yellow") for i, r in enumerate(results, 1): table.add_row(str(i), r["menu_name"], r["menu_path"], r["similarity_pct"]) console.print(table) if not results: rprint("[red]결과 없음: 유사도 임계값 이하[/red]") def interactive_mode(engine: MenuSearchEngine): console.print("[bold blue]영웅문 S# AI 메뉴 검색 (종료: q)[/bold blue]") while True: query = input("\n검색어 입력: ").strip() if query.lower() in ("q", "quit", "exit"): break if not query: continue results = engine.search(query, top_n=5) display_results(query, results) def batch_mode(engine: MenuSearchEngine): console.print(f"\n[bold]배치 테스트 시작: {len(BATCH_QUERIES)}개 쿼리[/bold]\n") for query in BATCH_QUERIES: results = engine.search(query, top_n=3) display_results(query, results) console.print() if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--batch", action="store_true", help="사전 정의 쿼리 배치 테스트") parser.add_argument("--query", "-q", type=str, help="단일 쿼리 테스트") args = parser.parse_args() engine = MenuSearchEngine.get_instance() if args.batch: batch_mode(engine) elif args.query: results = engine.search(args.query, top_n=5) display_results(args.query, results) else: interactive_mode(engine)