Spaces:
Running
Running
| """ | |
| 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) | |