grantforge-api / backend /scripts /test_rag.py
GrantForge Bot
Deploy to Hugging Face
afd56bc
# ruff: noqa: E402
import os
import sys
from dotenv import load_dotenv
from unittest.mock import patch
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
load_dotenv()
from agents.helpers import project_qa_agent
from langchain_core.documents import Document
class MockRetriever:
def invoke(self, query):
print(f"\n[MOCK Pół-RAG] Retriever wyłapuje zapytanie: {query}")
return [
Document(
page_content="Zasada DNSH (Do No Significant Harm) oznacza 'nie czyń znaczącej szkody'. Zgodnie z rozporządzeniem, dotacje z KPO (w tym FENG) nie mogą finansować projektów generujących istotną środowiskową szkodę. Przykładowo, systemy redukcji CO2 są wspierane jako pozytywny wkład, o ile proces ich produkcji nie zanieczyszcza nadmiernie wód.",
metadata={
"source": "https://www.funduszeeuropejskie.gov.pl/dnsh-zasady"
},
),
Document(
page_content="W przypadku Ścieżki SMART należy wypełnić deklarację środowiskową. Zgodność z DNSH bada się w sześciu wymiarach środowiskowych. Jeśli tworzysz systemy ograniczające ślad węglowy, projekt kwalifikuje się bezpośrednio do modułu zazielenienia z minimalnym ryzykiem niezgodności, wymagana jest jednak inwentaryzacja.",
metadata={"source": "https://parp.gov.pl/smart-przewodnik-2024"},
),
]
def main():
print("\n[RAG & AGENT TEST] Inicjalizacja sprawdzianu dla RAG...")
question = "Proszę wyjaśnić kluczowe zasady dotyczące zasady DNSH (Do No Significant Harm) przy projektach z systemami optymalizacji CO2."
print(f"\nZadaję pytanie do weryfikatora RAG:\nQ: {question}\n")
try:
with patch("agents.helpers.get_hybrid_retriever", return_value=MockRetriever()):
res = project_qa_agent(
project_id="test-mock-id",
question=question,
program_name="FENG (SMART)",
context="Projekt dotyczy wdrożenia technologii redukcji CO2 w fabryce na Śląsku.",
external_context=None,
)
print("\n================== ODPOWIEDŹ Z RAG ==================")
print(f"Odpowiedź: {res.get('answer', 'Brak')}")
print(f"Źródła (Wykryte w bazie wektorowej): {res.get('sources', [])}")
print(f"Rekomendacja: {res.get('recommendation', 'Brak')}")
print("=====================================================\n")
except Exception as e:
print(f"Błąd podczas testu RAG: {e}")
if __name__ == "__main__":
main()