Audit toolkit for retrieval, evaluation, benchmark, and security checks in RAG systems
Project description
Mokesčių GPT asistentas (Sufleris Agent) — Paleidimo instrukcija
Kas tai?
OpenAI agentas, kuris:
- Priima klausimą lietuviškai
- Ieško Mokesčių SUFLERYJE (tavo paskyra, per naršyklės automatizaciją) ir/arba VMI viešame tinklalapyje (HTTP, be prisijungimo)
- Atidaro reikšmingiausius straipsnius / VMI puslapius
- Atsako su šaltinių nuorodomis ir aiškiai skiria oficialų VMI turinį nuo Kitas šaltinis portalo praktinių paaiškinimų
Žingsnis po žingsnio
1. Reikalavimai
- Python 3.12 arba 3.11 (rekomenduojama; su dabartiniais
requirements.txtpin’ais Python 3.14 dažnai nesurinks ratų —greenlet/pydantic-core) - OpenAI API raktas (https://platform.openai.com/api-keys)
- Aktyvi Kitas šaltinis portalo paskyra (mokesciu-sufleris.lt)
2. Instaliavimas
cd sufleris-agent
# Sukurti virtualią aplinką
python -m venv venv
source venv/bin/activate # Mac/Linux
venv\Scripts\activate # Windows
# Instaliuoti priklausomybes
pip install -r requirements.txt
# Instaliuoti Playwright naršyklę
playwright install chromium
Windows (PowerShell), projekto šaknyje: jei nori .venv šalia repo ir stabilų py launcherį:
cd C:\kelias\į\sufleris-agent
Remove-Item -Recurse -Force .venv -ErrorAction SilentlyContinue
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
Jei Activate.ps1 neįvykdomas dėl politikos:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Jei python debug_selectors.py meta UnicodeEncodeError ant lietuviškų raidžių konsolėje, prieš paleidimą:
$env:PYTHONIOENCODING = "utf-8"
3. Konfigūracija
Atidaryk .env failą ir užpildyk:
OPENAI_API_KEY=sk-...
# Jei pridėsi Anthropic integraciją šiame repozitorijoje, naudok raktą
# ANTHROPIC_API_KEY_SUFLERIS (ne ANTHROPIC_API_KEY), kad nesikirstų su Claude Code.
SUFLERIS_EMAIL=tavo@email.lt
SUFLERIS_PASSWORD=tavo_slaptazodis
SUFLERIS_BASE_URL=https://www.mokesciu-sufleris.lt
SUFLERIS_LOGIN_PATH=/login
SUFLERIS_SEARCH_PATH=/paieska
SUFLERIS_SEARCH_PARAM=q
RESULT_LINK_SELECTOR=.wrapper__main_content__content__list__item__link
SUFLERIS_USERNAME_SELECTOR=input[name="_username"]
SUFLERIS_PASSWORD_SELECTOR=input[name="_password"]
(Paieška vyksta per puslapio paieškos lauką, ne per ?q= URL; SUFLERIS_SEARCH_PATH nurodo tik /paieska puslapį. Rezultatai skaitomi iš #results .ContentItemCard; galima keisti per SUFLERIS_SEARCH_HIT_CARD_SELECTOR.)
VMI (vieši URL, slaptų reikšmių nereikia) — galima pridėti į .env tik jei reikia koreguoti adresus ar teksto ilgį:
VMI_BASE_URL=https://www.vmi.lt
VMI_SEARCH_URL=https://www.vmi.lt/evmi/paieska
VMI_SEARCH_PARAM=query
VMI_TEXT_MAX=10000
VMI_SEARCH_FALLBACK=bing
/search-vmi ir agento VMI paieška: pirmiausia bandoma VMI vidinė paieška (VMI_SEARCH_URL + VMI_SEARCH_PARAM). Jei rezultatų nėra, įjungiamas atsarginis Bing režimas su užklausa site:vmi.lt/evmi … — pirmiausia nuskaitomas viešas Bing RSS (/search?format=rss&…, be mokamos paieškos API); jei RSS tuščias, bandomas Bing HTML ir iš jo renkamos tik vmi.lt nuorodos į kelius /evmi/.... Tai nenaudoja mokamos paieškos API. Jei nori išjungti išorinę paiešką, nustatyk VMI_SEARCH_FALLBACK=none.
Jei neįrašysi — naudojamos numatytosios reikšmės kode. Esamų Suflerio ir OpenAI raktų nekeisk.
4. Rask teisingus selektorius (BŪTINA)
Suflerio HTML struktūra nėra žinoma iš anksto, todėl reikia vieną kartą patikrinti:
python debug_selectors.py
Programa:
- Atidarys naršyklę (bus matoma)
- Prisijungs prie Suflerio
- Parodys visas rastas nuorodas
- Išsaugos
debug_search_after_input.htmlir kitus debug failus
Ką daryti po to:
- Atidaryk
debug_search_after_input.htmlnaršyklėje - DevTools → Elements (F12)
- Hover ant straipsnio kortelės
- Nukopijuok CSS klasę, pvz.
.search-item aar.result-title - Jei reikia — pakeisk
RESULT_LINK_SELECTOR.envfaile (numatytąją reikšmę nustatoapp/kitas_client.py)
5. Paleidimas
Windows: run.bat (rekomenduojama vienu dukstu)
- Paleidimas: dukart spustelėk projekto šaknyje
run.bat(arba paleisk iš Explorer / CMD). Skriptas per PowerShell (ExecutionPolicy Bypass,-NoExit) aktyvuoja.venv, nustato UTF-8 ir paleidžia serverį ant 127.0.0.1:8010. Po kelių sekundžių automatiškai atsidaro naršyklė su adresu http://127.0.0.1:8010/ (web chat langas). - Trumpinys ant darbalaukio: dešiniu pelės mygtuku ant
run.bat→ Siųsti į → Darbalaukis (sukurti nuorodą). Arba Sukurti nuorodą ir Tikslas: įrašyk pilną kelią įrun.bat, pvz.C:\Users\...\Desktop\sufleris-agent\run.bat. - Sustabdymas: aktyviame PowerShell lange, kuriame veikia
uvicorn, spausk Ctrl+C — serveris sustos; naršyklės langą gali uždaryti atskirai. (-NoExitpalieka konsolę atidarytą po sustabdymo, kad matytum žinutes.)
Patikrinimas naršyklėje arba PowerShell:
- http://127.0.0.1:8010/ — pagrindinis puslapis (chat UI)
- http://127.0.0.1:8010/health
- http://127.0.0.1:8010/search?query=PVM&limit=5 — paieška Mokesčių SUFLERYJE
- http://127.0.0.1:8010/search-vmi?query=PVM%20registracijos%20riba&limit=5 — VMI: vidinė paieška, tada Bing RSS/HTML (
site:vmi.lt/evmi)
(Tas pats per PowerShell: Invoke-RestMethod "http://127.0.0.1:8010/health".)
Web chat UI (naršyklėje)
- Atverk http://127.0.0.1:8010/ (arba palauk, kol
run.batpats atidarys naršyklę). - Pavadinimas: Mokesčių GPT asistentas.
- Šaltiniai: žymės langeliai Kiti šaltiniai, VMI, Sodra, VDI, AVNT (numatytai įjungti Kiti šaltiniai ir VMI). Jei nepažymėtas nė vienas — rodoma klaida ir užklausa nesiunčiama.
- Atsakymo išsamumas: Trumpai (
short), Standartiškai (standard, numatytasis), Išsamiai (detailed). - Režimas: Oficialus (
official— prioritetas VMI ir reguliaciniams DB tekstams), Praktinis (practical— prioritetas portalui / praktikai), Abu (balanced— numatytasis balansas tarp šaltinių). - Į didelį lauką įrašyk klausimą lietuviškai ir spausk Klausti — rodoma eigos juosta (pseudo-progresas iki ~94 %, kol laukiamas
/ask), etapai, procentai ir Praėjo: N s; po 90 s papildomas paaiškinimas, kad ilgos užklausos normalu skaitant kelis šaltinius. Užbaigus — 100 % ir Baigta, trumpam rodoma Atlikta per N s. Kiekvienas sėkmingas klausimas pridedamas į pokalbio istoriją (vienos naršyklės sesijos metu, atmintyje). - Po kiekvienu atsakymu: Kopijuoti atsakymą, Kopijuoti nuorodas, Atidaryti visas nuorodas (gali reikėti leisti iššokančius langus). Po nuorodų kortelių rodomi trumpi būsenos pranešimai (pvz. Atsakymas nukopijuotas).
- Visos nuorodos iš atsakymo — kortelės, sugrupuotos pagal domeną: VMI (
vmi.lt), Kiti šaltiniai (mokesciu-sufleris.lt), Sodra, VDI, AVNT, kiti; kortelėje — pavadinimas (jei pavyksta ištraukti iš „Pavadinimas – URL“), paspaudžiama nuoroda, mygtukas Atidaryti. - Išvalyti lauką — ištuština tik klausimo lauką. Išvalyti pokalbį — išvalo visą istoriją ir atsakymų sritį. Ctrl+Enter siunčia klausimą. Kol vykdoma
/askužklausa, Klausti pakeičiamas į Vykdoma... ir išjungiamas; Išvalyti mygtukai lieka aktyvūs (neatšaukia jau išsiųstos užklausos). - Sistemos būsena (puslapio viršuje): po užkrovimo kviečiamas
GET /health— serveris, Kitas šaltinis, VMI, dokumentų skaičiai pagal DB šaltinį (documents_by_source) ir bendras (documents_total).
POST /ask kūno formatas (visi laukai, išskyrus question, neprivalomi su numatytaisiais):
{
"question": "...",
"sources": ["kitas", "vmi", "sodra", "vdi", "avnt"],
"detail_level": "standard",
"answer_mode": "balanced"
}
- Jei
sourcespraleistas arba tuščias — serveris naudoja abu šaltinius. Leidžiamos reikšmės:kitas(arba legacysufleris),vmi. - Jei
detail_levelarbaanswer_modeneteisingi — serveris naudoja numatytąsias reikšmes (standard,balanced), negrąžina 422 dėl šių laukų.
Rankinis paleidimas (visos OS)
uvicorn app.main:app --reload
Matysi:
INFO | Paleidžiamas Kitas šaltinis klientas...
INFO | Sėkmingai prisijungta prie portalo ✓
INFO | Uvicorn running on http://127.0.0.1:8000
6. Testavimas
Paprastas testas (curl) — abu šaltiniai (numatytai, jei sources neįrašytas):
curl -X POST http://127.0.0.1:8010/ask \
-H "Content-Type: application/json" \
-d "{\"question\": \"Kaip veikia reprezentacinių išlaidų PVM atskaita?\", \"sources\": [\"kitas\", \"vmi\"]}"
Tik VMI (be Kitas šaltinis portalo paieškos naršyklėje):
curl -X POST http://127.0.0.1:8010/ask \
-H "Content-Type: application/json" \
-d "{\"question\": \"Kokia PVM registracijos riba?\", \"sources\": [\"vmi\"]}"
Paieška be AI (debuginimui):
curl "http://127.0.0.1:8010/search?query=PVM+atskaita&limit=5"
curl "http://127.0.0.1:8010/search-vmi?query=PVM+registracijos+riba&limit=5"
Sveikatos patikrinimas (status, kitas_logged_in, vmi_http, version, pvz. mvp-2.2):
curl http://127.0.0.1:8010/health
Interaktyvus API dokumentas:
http://127.0.0.1:8010/docs
Projekto struktūra
sufleris-agent/
├── app/
│ ├── __init__.py
│ ├── main.py ← FastAPI: /, /ask, /search, /search-vmi, /health
│ ├── agent.py ← OpenAI: paieška ir atsakymas (Kitas šaltinis + VMI)
│ ├── kitas_client.py ← Naršyklės automatizavimas (Playwright)
│ ├── vmi_client.py ← VMI HTTP paieška ir puslapio tekstas
│ └── static/ ← Web chat UI (index.html, style.css, app.js)
├── .env ← Tavo raktai (NIEKADA į Git!)
├── requirements.txt
├── run.bat ← Windows: paleidžia serverį (8010)
├── run.ps1 ← Windows: .venv + UTF-8 + uvicorn
├── debug_selectors.py ← Selektorių paieška (paleisk pirmą kartą)
└── README.md
Galimos klaidos ir sprendimai
| Klaida | Sprendimas |
|---|---|
Login may have failed |
Patikrink el. paštą/slaptažodį .env faile |
0 rezultatų |
Pakeisk RESULT_LINK_SELECTOR .env arba kliente (paleisk debug_selectors.py) |
Timeout |
Kitas šaltinis portalas lėtas — padidink timeout reikšmę client'e |
Session expired |
Klientas automatiškai prisijungs iš naujo |
OpenAI error |
Patikrink OPENAI_API_KEY ir balansą |
Svarbu
- Šis įrankis skirtas tik asmeniniam naudojimui su tavo paskyra
- Nekeliok
.envfailo į GitHub - Portalo turinys lieka portalo serveriuose — AI gauna tik trumpas ištraukas atsakymui
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rag_audit_toolkit-0.3.0.tar.gz.
File metadata
- Download URL: rag_audit_toolkit-0.3.0.tar.gz
- Upload date:
- Size: 233.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1f1e746acc3c1b37fc48fce5e7d27b1795df1d4d462e88c39659dfb4b88c4e5
|
|
| MD5 |
834d8d59eb069668692d9808efeeb8fb
|
|
| BLAKE2b-256 |
cc43f44fe375dbd16e36e9d571b20c8702d0cd35b56bb89940d94aca3a481eaf
|
Provenance
The following attestation bundles were made for rag_audit_toolkit-0.3.0.tar.gz:
Publisher:
release.yml on office415/apskaitos-radaras
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rag_audit_toolkit-0.3.0.tar.gz -
Subject digest:
a1f1e746acc3c1b37fc48fce5e7d27b1795df1d4d462e88c39659dfb4b88c4e5 - Sigstore transparency entry: 2141085933
- Sigstore integration time:
-
Permalink:
office415/apskaitos-radaras@17ab349686b9abe7e20e9ac7d7893b8e9e08541d -
Branch / Tag:
refs/tags/rag-audit-v0.3.0 - Owner: https://github.com/office415
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@17ab349686b9abe7e20e9ac7d7893b8e9e08541d -
Trigger Event:
push
-
Statement type:
File details
Details for the file rag_audit_toolkit-0.3.0-py3-none-any.whl.
File metadata
- Download URL: rag_audit_toolkit-0.3.0-py3-none-any.whl
- Upload date:
- Size: 130.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22a0f583cc715b71c722667b1d63172665a5c482dc0371439e5f8144d6904dbb
|
|
| MD5 |
df0013cbd3d49f1941ae20ca9463594b
|
|
| BLAKE2b-256 |
dd20e1d7b5757055280d8d4f61606047dc9a08d4dbf81eae389741493715640e
|
Provenance
The following attestation bundles were made for rag_audit_toolkit-0.3.0-py3-none-any.whl:
Publisher:
release.yml on office415/apskaitos-radaras
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rag_audit_toolkit-0.3.0-py3-none-any.whl -
Subject digest:
22a0f583cc715b71c722667b1d63172665a5c482dc0371439e5f8144d6904dbb - Sigstore transparency entry: 2141085948
- Sigstore integration time:
-
Permalink:
office415/apskaitos-radaras@17ab349686b9abe7e20e9ac7d7893b8e9e08541d -
Branch / Tag:
refs/tags/rag-audit-v0.3.0 - Owner: https://github.com/office415
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@17ab349686b9abe7e20e9ac7d7893b8e9e08541d -
Trigger Event:
push
-
Statement type: