File size: 2,713 Bytes
cb92864 08fb91a cb92864 08fb91a cb92864 7f57ffc cb92864 79ef842 | 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 | import os
import pytest
from src.retrieval.finRetrieval import graphrag
# API ํค์ Neo4j ์ฐ๊ฒฐ์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ ํ
์คํธ๋ฅผ ๊ฑด๋๋๋๋ค.
has_credentials = (
os.getenv("OPENAI_API_KEY") is not None and
os.getenv("NEO4J_URI") is not None
)
@pytest.mark.skipif(
not has_credentials,
reason="OpenAI API Key ๋๋ Neo4j ์ฐ๊ฒฐ ํ๊ฒฝ๋ณ์๊ฐ ์์ผ๋ฏ๋ก ํตํฉ ํ
์คํธ๋ฅผ ๊ฑด๋๋๋๋ค."
)
def test_portfolio_showcase_aggregation_query():
"""
[ํฌํธํด๋ฆฌ์ค ํต์ฌ ์๋๋ฆฌ์ค]
ํน์ ๊ธฐ์
์ ์ง์ ํ์ง ์๊ณ , ๊ธ์ตAI ๋ถ์ผ์ ์ต์ ํธ๋ ๋ ๊ธฐ์
TOP 3์ ๋ํ ์๋น์ค๋ฅผ
๋์ ์ผ๋ก ๊ทธ๋ํ ํ์(GraphRAG)ํ์ฌ ์ฌ๋ฐ๋ฅธ ํ์์ผ๋ก ๋ต๋ณํ๋์ง ๊ฒ์ฆํฉ๋๋ค.
"""
showcase_query = (
"์ต๊ทผ ์์ง๋ ๋ด์ค์์ ๊ธ์ตAI(AIField) ๋ถ์ผ์ ๊ฐ์ฅ ์ ๊ทน์ ์ผ๋ก ๊ธฐ์ ์ ๊ฐ๋ฐํ๊ณ ์๋ "
"๊ธฐ์
TOP 3์ ๊ทธ ๊ธฐ์
๋ค์ด ๊ฐ๋ฐํ ๋ํ ์๋น์ค๋ฅผ ์๋ ค์ค."
)
# GraphRAG ๊ฒ์ ๋ฐ ์์ฑ ์คํ
response = graphrag.search(query_text=showcase_query)
# 1. ์๋ต ๊ฐ์ฒด ๋ฐ ์์ฑ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ
assert response is not None
assert hasattr(response, "answer")
# 2. ๋ต๋ณ ํ
์คํธ ์ ํจ์ฑ ๊ฒ์ฆ
answer = response.answer
assert len(answer.strip()) > 0
# 3. ๋ต๋ณ ํ์ ๊ฒ์ฆ (์์ ๊ตฌ์กฐ๋ ์ถ์ฒ ์ง์นจ ์ค์ ์ฌ๋ถ)
assert any(indicator in answer for indicator in ["1.", "์ฒซ์งธ", "TOP", "๊ธฐ์ฌ", "์ถ์ฒ"])
print(f"\nโจ [ํฌํธํด๋ฆฌ์ค ์ผ์ผ์ด์ค RAG ๊ฒฐ๊ณผ]\n{answer}")
@pytest.mark.skipif(
not has_credentials,
reason="OpenAI API Key ๋๋ Neo4j ์ฐ๊ฒฐ ํ๊ฒฝ๋ณ์๊ฐ ์์ผ๋ฏ๋ก ํตํฉ ํ
์คํธ๋ฅผ ๊ฑด๋๋๋๋ค."
)
def test_hybrid_fallback_general_query():
"""
[ํ์ด๋ธ๋ฆฌ๋ RAG Fallback ์๋๋ฆฌ์ค]
์ง์ ๊ทธ๋ํ(๋ด์ค ๋ฐ์ดํฐ)์ ์ ํ ์์ง๋์ง ์์ ์ผ๋ฐ ๊ณผํ/์ญ์ฌ ์ง๋ฌธ์ ๋ํด
๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์๊ณ์น ๋ฏธ๋ง์์ ๊ฐ์งํ๊ณ ์๋์ผ๋ก GPT-4o ์ผ๋ฐ ์ง์ ๋ชจ๋(general)๋ก ๋ผ์ฐํ
ํ๋์ง ๊ฒ์ฆํฉ๋๋ค.
"""
general_query = "ํผํ๊ณ ๋ผ์ค ์ ๋ฆฌ์ ๊ทธ ์ค์ํ ํ์ฉ ์์๋ฅผ ๊ฐ๋จํ ์ค๋ช
ํด์ค."
# search_with_fallback์ ํตํ ๋ผ์ฐํ
๊ฒ์ ์ํ
result = graphrag.search_with_fallback(query_text=general_query, history=[])
# 1. ๋ฐํ ํ์
๋ฐ ๋ชจ๋ ๊ฒ์ฆ
assert result is not None
assert result.mode == "general"
# 2. GPT-4o ์ผ๋ฐ ์ง์ ๋ต๋ณ ์ ํจ์ฑ ๊ฒ์ฆ
assert len(result.answer.strip()) > 0
assert "ํผํ๊ณ ๋ผ์ค" in result.answer
print(f"\nโจ [์ผ๋ฐ ์ง์ Fallback ๋ผ์ฐํ
๊ฒฐ๊ณผ]\n{result.answer}")
|