💊 Test Interactiv: Cât de permisive sunt AI-urile cu sfaturile medicale
🧠 Arhitectura unui Sistem RAG Lobotomizat cu Qdrant, OpenAI și AI Engine
📌 Scop: Acest document detaliază funcționarea unui sistem de tip Retrieval-Augmented Generation (RAG) construit pentru a oferi răspunsuri strict controlate, bazate exclusiv pe o bază de date proprie, excluzând cunoștințele generale pre-antrenate ale unui model de limbaj (LLM). Această proces se numește „lobotomizare”. Sursa unică de cunoaștere pentru acest sistem este setul de 4 fișiere: un catalog de medicamente (Excel) și 3 ghiduri medicale structurate (Documente Word).
1. 🔍 Ce este Qdrant?
Qdrant (pronunțat Quadrant) este o bază de date vectorială (vector database) specializată în stocarea, gestionarea și căutarea rapidă a embedding-urilor vectoriale.
Scopul său principal: Este folosit în aplicații de inteligență artificială, cum ar fi:
🔎 Căutare semantică
🧩 Sisteme RAG (Retrieval Augmented Generation)
💬 Chatbots specializaate – exact ca în cazul de utilizare cu baza de date de medicamente.
2. ⚙️ Cum funcționează Qdrant (Conceptual)
Procesul poate fi împărțit în trei etape fundamentale:
| Pas | Descriere | Exemplu |
|---|---|---|
| 1. Vectorizarea Datelor | Datele brute (text, imagini) sunt transformate în vectori numerici (liste de numere) folosind un model de embedding. | Un model ca text-embedding-ada-002 (OpenAI) transformă cuvântul “Paracetamol” într-un vector de 1536 de dimensiuni: [0.12, -0.44, 0.56, ...]. |
| 2. Stocarea în Qdrant | Vectorii generați sunt stocați în Qdrant, împreună cu metadate (payload-ul) care conțin informațiile originale. | { "id": 1, "vector": [0.12, -0.44, 0.56, ...], "payload": { "denumire": "Paracetamol", "producator": "XYZ" } } |
| 3. Interogarea și Căutarea | Când un utilizator pune o întrebare, aceasta este și ea vectorizată. Qdrant compară vectorul-întrebare cu toți vectorii din bază și returnează cei mai similari, pe baza unui algoritm de distanță (ex: Cosine, Euclidean). | Căutarea pentru “pastilă pentru dureri de cap” va returna vectorii asociați cu “Paracetamol”, chiar dacă acest cuvânt nu apare în interogare. |
🧩 Concluzie conceptuală: Qdrant nu caută potriviri exacte de text, ci asemănări semantice între significate.
3. 🏗️ Arhitectura și Modurile de Utilizare ale Qdrant
Qdrant poate fi implementat în două moduri principale:
| Mod | Descriere | Caracteristici |
|---|---|---|
| ☁️ Qdrant Cloud | Serviciu găzduit și gestionat. | – Ideal pentru prototipuri și proiecte mici. – Plan gratuit: 1 colecție, ~1GB, 10k-20k de puncte. – Interfață web și management simplu. |
| 🖥️ Qdrant Local (Self-Hosted) | Instalat pe propria infrastructură (ex: prin Docker). | – Control total și securitate sporită. – Performanță optimizată pentru hardware-ul specific. – Necessită cunoștințe de administrare. |
⚠️ Important: Ambele variante folosesc același API REST sau gRPC, ceea ce înseamnă că codul aplicației va fi identic, indiferent de alegerea de implementare.
4. 📚 Structura Datelor în Qdrant
Structura de date a Qdrant este ierarhică și intuitivă:
Colecție (Collection) → "medicamente"
|
├── Punct (Point) 1 -> Vector + Payload pentru "Paracetamol"
├── Punct (Point) 2 -> Vector + Payload pentru "Ibuprofen"
└── Punct (Point) n -> Vector + Payload pentru alt medicamentGlosar de termeni:
| Termen | Explicație |
|---|---|
| Colecție (Collection) | Un grup logic de vectori înrudite (ex: colecția “medicamente”). |
| Punct (Point) | O înregistrare unică în colecție, compusă dintr-un vector și un payload. |
| Vector | Reprezentarea numerică (embedding-ul) a unui fragment de text. |
| Payload | Metadatele atașate vectorului (ex: denumire, producător, cod, textul original). |
| Filtru (Filter) | Condiții aplicate pentru a restringe căutarea în funcție de payload (ex: producator = "Pfizer"). |
5. 🧮 Tipuri de Interogări în Qdrant
Qdrant suportă mai multe tipuri de operații de interogare, dintre care cele mai relevante sunt:
🔍 Căutare Simplă (Search): Returnează cei mai similari vectori pentru o interogare dată.
🧩 Căutare cu Filtru (Filtered Search): Combină căutarea semantică cu filtre pe metadate (ex: “găsește antidepresive doar de la producătorul Roche”).
🔁 Recomandare (Recommend): Generează recomandări bazate pe un set de puncte de referință existente în sistem.
6. ⚡ Performanță și Avantaje Cheie
| Aspect | Evaluare Qdrant |
|---|---|
| Viteză | Foarte ridicată, datorită optimizărilor în limbajul Rust. |
| Persistență | Datele sunt salvate pe disc, asigurând durabilitate. |
| Filtrare | Capabilități avansate de filtrare a metadatelor (payload-ului). |
| Scalabilitate | Suportă partiționarea (sharding) și replicarea pentru volume mari de date. |
| Compatibilitate | API-uri pentru toate limbajele populare (Python, JS, Go, Java). |
🧩 Aplicarea în Context: Sistemul Lobotomizat pentru Medicamente
🎯 Scopul Final: Crearea unui chatbot care să răspundă doar pe baza celor 4 fișiere și a celor 3 documente text, fără a recurge la cunoștințele generale ale LLM-ului.
🔧 Componentele Sistemului:
🗃️ Baza de Date Vectorială (Qdrant): Stochează toate informațiile din fișierele tale, sub formă de vectori și payload-uri.
🛠️ Motorul de Embedding (OpenAI): Transformă întrebările utilizatorilor și conținutul fișierelor în vectori.
🧠 Motorul de Răspuns (OpenAI GPT): Generează răspunsul textual final.
🔗 Orchestratorul (AI Engine – Plugin WordPress): Leagă toate componentele și aplică reguli severe.
7. 🔐 Rolul Crucial al „Instrucțiunilor Severe” (System Prompt)
Aceasta este sufletul sistemului și mecanismul de „lobotomizare”. Aceste instrucțiuni sunt configurate în interfața AI Engine și sunt trimise către OpenAI GPT la fiecare interacțiune.
📍 Unde lucrează aceste reguli?
NU în Qdrant.
NU în motorul de embedding.
DA, în motorul de răspuns (OpenAI GPT), care este obligat să respecte instrucțiunile primite prin AI Engine.
📜 Exemplu de Instrucțiuni Severe pentru AI Engine:
# IDENTITATE: Ești un asistent specializat pentru baza de date de medicamente a companiei. # SURSĂ DE CUNOAȘTERE: Singura ta sursă de informații este baza de date vectorială (Qdrant), care conține doar fișierele X, Y, Z. # REGULI ABSOLUTE: # 1. Răspunde EXCLUSIV pe baza fragmentelor de text (contextului) returnate de Qdrant pentru întrebarea utilizatorului. # 2. NU folosi niciodată cunoștințele generale pre-antrenate despre medicamente, boli sau orice alt subiect. # 3. DACĂ în fragmentele returnate de Qdrant NU se găsește nicio informație relevantă pentru întrebare, atunci răspunsul tău trebuie să fie STRICT: "Nu am informații disponibile despre acest subiect în baza noastră de date." # 4. Răspunsurile trebuie să fie concise, clare și să se bazeze doar pe datele furnizate.
8. 🔁 Fluxul de Date și Lobotomizarea în Acțiune (Exemple Extinse)
Să urmărim câteva scenarii concrete pentru a înțelege cum funcționează lobotomizarea și recuperarea inteligentă a informațiilor.
Use Case 1: Căutare pe un medicament specific (Controlul strict al cunoștințelor)
| Pas | Acțiune | Rezultat |
|---|---|---|
| 1. | Utilizatorul întreabă: “Ce medicamente cu morfină recomandați?” | Întrebarea este trimisă către AI Engine. |
| 2. | AI Engine o vectorizează și o trimite la Qdrant. | Qdrant caută vectori similari. |
| 3. | Presupunere: În fișierele tale nu există niciun cuvânt despre “morfina”. | Qdrant nu găsește niciun rezultat relevant. |
| 4. | AI Engine construiește promptul pentru GPT: System Prompt + Context (gol) + Întrebare. | Contextul este gol. |
| 5. | OpenAI GPT procesează promptul. Regula absolută îi interzice să-și folosească cunoștințele generale. | Răspuns Final: “Nu am informații disponibile despre acest subiect în baza noastră de date.” ✅ |
Use Case 2: De la Simptom la Diagnostic și Tratament (Fluxul complet de cunoștințe)
| Pas | Acțiune | Rezultat |
|---|---|---|
| 1. | Utilizatorul întreabă: “Am dureri de cap pulsatile cu greata. Ce ar putea fi și ce pot lua?” | Întrebarea este vectorizată și trimisă la Qdrant. |
| 2. | Qdrant identifică fragmente relevante din toate fișierele: – Simptome.doc: “Cefalee: pulsatilitate, greață”– Diagnostice.doc: “Migrenă cu/ fără aura”– Tratamente.doc: “Migrenă -> Sumatriptan, Topiramat”– Excel.xlsx: Produsele cu “Sumatriptan” | Returnează un context bogat și relevant. |
| 3. | AI Engine asamblează promptul final cu toate aceste fragmente. | Contextul conține toată ierarhia: Simptom -> Diagnostic -> Tratament -> Medicamente. |
| 4. | OpenAI GPT sintetizează informațiile. | Răspuns Final: “Simptomele descrise (cefalee pulsatală cu greață) se pot încadra în migrenă. Pentru migrenă, în baza noastră de date se recomandă medicamente ca Sumatriptan sau Topiramat. Vă rugăm să consultați un medic pentru un diagnostic precis.” ✅ |
Use Case 3: Căutare Semantică Avansată (Fără cuvinte-cheie exacte)
| Pas | Acțiune | Rezultat |
|---|---|---|
| 1. | Utilizatorul întreabă: “Există ceva pentru amețeli și senzația că se învârte totul?” | Întrebarea este vectorizată. |
| 2. | Qdrant, prin similitudine semantică, găsește fragmente cheie: – Simptome.doc: “Vertij: senzația că se învârte casa”– Tratamente.doc: “Vertij -> Betahistină”– Excel.xlsx: Liniile cu “BETAHISTINA” de la diferiți producători (ATB, LPH, MCC, GEMAX PHARMA). | Caută sensul, nu cuvintele. “Amețeli” și “se învârte” găsesc “Vertij”. |
| 3. | Promptul final include aceste conexiuni. | Sistemul înțelege că întrebarea se referă la vertij. |
| 4. | OpenAI GPT formulează răspunsul. | Răspuns Final: “Simptomele descrise se pot asocia cu vertij. În baza noastră de date, un medicament utilizat în astfel de cazuri este Betahistina, care este disponibilă sub mai multe branduri (de exemplu, Betahistina ATB, Betahistina LPH).” ✅ |
Use Case 4: Filtrare Implicită prin Conținutul Fișierelor
| Pas | Acțiune | Rezultat |
|---|---|---|
| 1. | Utilizatorul întreabă: “Care e tratamentul pentru Boala Parkinson?” | Întrebarea este vectorizată. |
| 2. | Qdrant găsește rapid asocierile: – Diagnostice.doc: “Boala Parkinson” la tulburări de mers/echilibru și mișcări anormale.– Tratamente.doc: “Boala Parkinson -> Dopamină, Ropinirol, Entacaponă”– Excel.xlsx: Nu găsește produse cu aceste substanțe active (de exemplu, “ALEDOV” care conține Levodopă/Carbidopă este prezent, dar Dopamina nu). | Sistemul raportează doar ce este în fișiere. |
| 3. | Promptul include doar ceea ce a găsit Qdrant. | Contextul include tratamentele recomandate, dar nu și produse specifice pentru unele dintre ele. |
| 4. | OpenAI GPT se limitează strict la context. | Răspuns Final: “Pentru Boala Parkinson, baza noastră de date indică tratamente care includ Dopamina, Ropinirol și Entacaponă. În catalog, este disponibil un medicament pe bază de Levodopă/Carbidopă (ALEDOV). Consultați un neurolog pentru prescripția adecvată.” ✅ Obs: Răspunsul nu inventează alte medicamente. |
Use Case 5: Excluderea Oricărei Informații Externe
| Pas | Acțiune | Rezultat |
|---|---|---|
| 1. | Utilizatorul întreabă: “Este Aspirina bună pentru prevenirea atacurilor de cord?” | Întrebarea este vectorizată. |
| 2. | Qdrant găsește: – Excel.xlsx**: Zeci de intrări pentru "ACID ACETILSALICILIC" (substanța activă din Aspirină) cu acțiune terapeutică: "ANTITROMBOTICE ANTIAGREGANTE PLACHETARE".<br>-Tratamente.doc`: “AVC-uri -> Acid acetilsalicilic” (asemănător semantic cu “prevenire atac de cord”). | Nu găsește mențiuni specifice “atac de cord”, dar găsește utilizări cardiovasculare. |
| 3. | Promptul include doar aceste informații farmaceutice și terapeutice generale. | Nu există afirmații medicale directe despre “prevenirea atacurilor de cord”. |
| 4. | OpenAI GPT se lipește de datele din payload. | Răspuns Final: “În baza noastră de date, Acidul Acetilsalicilic (substanța activă din Aspirină) este încadrat în categoria antitrombotice și antiagregante plachetare, iar printre indicații se numără și AVC-urile. Vă rugăm să consultați un medic pentru indicații specifice și dozaj.” ✅ Obs: Răspunsul este neutru, bazat pe date, fără a confirma sau infirma o utilizare medicală specifică. |
9. 🧠 Cum se Fac Legăturile Logice între Fișiere
Cine face legăturile? Nu Qdrant, ci OpenAI GPT.
Cum?
Toate fișierele (Excel și DOC-uri) sunt „fărâmițate” în bucăți mai mici de text (chunk-uri).
Fiecare bucată este vectorizată și introdusă în Qdrant ca un punct independent.
La o întrebare, Qdrant returnează cele mai relevante fragmente, indiferent din ce fișier provin.
GPT primește aceste fragmente amestecate și le sintetizează, găsind el însuși legăturile semantice dintre ele pentru a construi un răspuns coerent.
Exemplu: Dacă un fragment vorbea despre “Paracetamol” și altul despre “contraindicații hepatice”, iar utilizatorul întreabă despre efectele pe ficat, GPT va conecta cele două fragmente pentru a oferi un răspuns complet.
🔗 Structura de Cunoștințe a Sistemului:
Baza de date vectorială este construită pe un set de 4 fișiere care formează o ierarhie clinică completă:
Simptome.doc– Listă structurată de simptome (ex: Cefalee, Vertij, Slăbiciune musculară).Diagnostice .doc– Diagnostice posibile pentru fiecare simptom.Tratamente.doc– Tratamente recomandate pentru fiecare diagnostic.Excel.xlsx– Catalogul cu produse comerciale specifice (Denumire, DCI, Producător, Cod ATC, etc.).
Această structură permite sistemului să urmărească un lanț logic complet: de la simptomul pacientului, la diagnosticele potrivite, la tratamentul recomandat și până la medicamentele concrete disponibile în catalog.
✅ Concluzie Finală
Sistemul construit este robust și îndeplinește perfect scopul de a oferi un chatbot specializat și controlat:
Qdrant este memoria semantică de înaltă performanță.
OpenAI este creierul care înțelege și generează text.
AI Engine este conductorul care aplică partitura (instrucțiunile severe).
Instrucțiunile Severe sunt carantina logică care asigură lobotomizarea, forțând sistemul să răspundă doar din sursa de date specifică.
Această arhitectură elimină riscul de “halucinații” (răspunsuri inventate) și oferă un control deplin asupra informației, făcând-o ideală pentru domenii sensibile precum cel medical. Sistemul final va funcționa ca un expert neurologic virtual, care raportează exclusiv la baza sa de cunoștințe structurată în cele 4 fișiere, oferind răspuns sigure, traibile și verificate.
