| import os |
|
|
| import pytest |
|
|
| from src.retrieval.finRetrieval import graphrag |
|
|
| |
| 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์ ๊ทธ ๊ธฐ์
๋ค์ด ๊ฐ๋ฐํ ๋ํ ์๋น์ค๋ฅผ ์๋ ค์ค." |
| ) |
| |
| |
| response = graphrag.search(query_text=showcase_query) |
| |
| |
| assert response is not None |
| assert hasattr(response, "answer") |
| |
| |
| answer = response.answer |
| assert len(answer.strip()) > 0 |
| |
| |
| 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 = "ํผํ๊ณ ๋ผ์ค ์ ๋ฆฌ์ ๊ทธ ์ค์ํ ํ์ฉ ์์๋ฅผ ๊ฐ๋จํ ์ค๋ช
ํด์ค." |
| |
| |
| result = graphrag.search_with_fallback(query_text=general_query, history=[]) |
| |
| |
| assert result is not None |
| assert result.mode == "general" |
| |
| |
| assert len(result.answer.strip()) > 0 |
| assert "ํผํ๊ณ ๋ผ์ค" in result.answer |
| |
| print(f"\nโจ [์ผ๋ฐ ์ง์ Fallback ๋ผ์ฐํ
๊ฒฐ๊ณผ]\n{result.answer}") |
|
|
|
|