AI_Menu_Search / scripts /03_search_cli.py
Juhaha
HF Spaces 데모 배포 (Streamlit + Qdrant 임베디드, 색인 빌드타임 생성)
fbd1091
Raw
History Blame Contribute Delete
3.23 kB
"""
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)