AdSafeLight / backend /scripts /test_analyze_flow.py
Gae Zang
feat: setup Docker and CI/CD deploy pipeline for Hugging Face Space
b0fb923
Raw
History Blame Contribute Delete
2.99 kB
import sys
from pathlib import Path
import json
# ๋ฐฑ์—”๋“œ ๋ฃจํŠธ๋ฅผ sys.path์— ์ถ”๊ฐ€ํ•˜์—ฌ app ๋ชจ๋“ˆ์„ ์ž„ํฌํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
SCRIPTS_DIR = Path(__file__).resolve().parent
BACKEND_DIR = SCRIPTS_DIR.parent
sys.path.append(str(BACKEND_DIR))
from app.core.rag_engine import rag_engine
from app.core.llm_chain import llm_chain
def test_diet_ad_flow():
print("\n=== [ํ…Œ์ŠคํŠธ 1] ๋‹ค์ด์–ดํŠธ ํ—ˆ์œ„๊ด‘๊ณ  ๋ถ„์„ ํ”Œ๋กœ์šฐ ===")
test_ad_text = "์ด ํŒจ์น˜๋ฅผ ๋ถ™์ด๊ณ  ์ž ๋งŒ ์ž๋ฉด ๋ฐค์‚ฌ์ด ์ฒด์ง€๋ฐฉ์ด 15% ๊ฐ๋Ÿ‰๋ฉ๋‹ˆ๋‹ค! ๊ตถ์ง€ ๋ง๊ณ  ํ•˜๋ฃจ ํ•œ ์žฅ์œผ๋กœ ๋‹ค์ด์–ดํŠธ ์„ฑ๊ณตํ•˜์„ธ์š”."
# 1. RAG ๊ฒ€์ƒ‰ ํ…Œ์ŠคํŠธ
print("\n[Step 1] RAG์—์„œ ์œ ์‚ฌ ๋ฒ•๋ น ๋ฐ ์‚ฌ๋ก€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ค‘...")
search_query = test_ad_text[:200]
context = rag_engine.get_search_results_context(search_query, top_k=2)
print("--- RAG ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ปจํ…์ŠคํŠธ ---")
print(context)
# 2. LLM ๋ถ„์„ ํ…Œ์ŠคํŠธ
print("\n[Step 2] AI ์—”์ง„์ด ์ปจํ…์ŠคํŠธ์™€ ๊ด‘๊ณ  ๋ฌธ๊ตฌ๋ฅผ ๋น„๊ต ๋ถ„์„ํ•˜๋Š” ์ค‘...")
analysis = llm_chain.analyze_content(test_ad_text, context)
print("--- AI ์ตœ์ข… ๋ถ„์„ ๊ฒฐ๊ณผ JSON ---")
print(json.dumps(analysis, indent=2, ensure_ascii=False))
# ๊ฒ€์ฆ
assert analysis["risk_score"] > 50, "์œ„ํ—˜ ์ ์ˆ˜๊ฐ€ ์ ์ ˆํžˆ ๋†’๊ฒŒ ์ฑ…์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."
assert analysis["risk_level"] in ["RED", "YELLOW"], "์œ„ํ—˜ ๋ ˆ๋ฒจ ํŒ์ •์ด ๋ถ€์ ์ ˆํ•ฉ๋‹ˆ๋‹ค."
print("\n[Success] Diet ad analysis test passed successfully.")
def test_joint_ad_flow():
print("\n=== [ํ…Œ์ŠคํŠธ 2] ๊ด€์ ˆ ์‹ํ’ˆ ์™„์น˜ ๊ด‘๊ณ  ๋ถ„์„ ํ”Œ๋กœ์šฐ ===")
test_ad_text = "๊ด€์ ˆ ํ†ต์ฆ์ด ์”ป์€ ๋“ฏ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋‹น๋‡จ ์˜ˆ๋ฐฉ ๋ฐ ์•„ํ† ํ”ผ ์น˜๋ฃŒ์— ํŠนํšจ์ธ ๋ณด์Šค์›ฐ๋ฆฌ์•„ ์Œ๋ฃŒ ํŒ๋งค ์ค‘!"
# 1. RAG ๊ฒ€์ƒ‰ ํ…Œ์ŠคํŠธ
print("\n[Step 1] RAG์—์„œ ์œ ์‚ฌ ๋ฒ•๋ น ๋ฐ ์‚ฌ๋ก€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ค‘...")
search_query = test_ad_text[:200]
context = rag_engine.get_search_results_context(search_query, top_k=2)
print("--- RAG ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ปจํ…์ŠคํŠธ ---")
print(context)
# 2. LLM ๋ถ„์„ ํ…Œ์ŠคํŠธ
print("\n[Step 2] AI ์—”์ง„์ด ์ปจํ…์ŠคํŠธ์™€ ๊ด‘๊ณ  ๋ฌธ๊ตฌ๋ฅผ ๋น„๊ต ๋ถ„์„ํ•˜๋Š” ์ค‘...")
analysis = llm_chain.analyze_content(test_ad_text, context)
print("--- AI ์ตœ์ข… ๋ถ„์„ ๊ฒฐ๊ณผ JSON ---")
print(json.dumps(analysis, indent=2, ensure_ascii=False))
# ๊ฒ€์ฆ
assert analysis["risk_score"] > 50, "์œ„ํ—˜ ์ ์ˆ˜๊ฐ€ ์ ์ ˆํžˆ ๋†’๊ฒŒ ์ฑ…์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."
assert analysis["risk_level"] in ["RED", "YELLOW"], "์œ„ํ—˜ ๋ ˆ๋ฒจ ํŒ์ •์ด ๋ถ€์ ์ ˆํ•ฉ๋‹ˆ๋‹ค."
print("\n[Success] Joint food ad analysis test passed successfully.")
if __name__ == "__main__":
try:
test_diet_ad_flow()
test_joint_ad_flow()
print("\n[Success] All backend RAG + AI reasoning flow tests completed successfully!")
except Exception as e:
print(f"\n[Error] Error occurred during testing: {str(e)}")
sys.exit(1)