Mi-am construit un skill AI de horoscop — și l-am prins pe primul mințind

Costin Pietraru langa o holograma cu roata zodiacala, ca simbol al reconstruirii unui skill AI de harta natala din calcul astronomic real

Prima variantă a acestui skill genera un Ascendent diferit la fiecare rulare, chiar cu aceleași dată și oră de naștere introduse — pentru că folosea Math.random() în loc de calcul astronomic. Am rulat-o a doua oară, am comparat rezultatele și mi-am dat seama că vindeam autoritate falsă: cifre care arătau precis, dar erau inventate. Am rescris totul de la zero, cu poziții planetare din efemeridele NASA/JPL, geocodare reală și fus orar istoric — și articolul acesta e jurnalul reconstrucției, plus promptul complet, gratuit, ca oricine să-și construiască un skill identic.

Pe scurt:

Ce este, de fapt, o hartă natală?

O hartă natală (numită și hartă astrală sau temă natală) arată poziția Soarelui, Lunii și a celorlalte planete pe cer, exact în momentul și locul nașterii tale — plus Ascendentul (semnul care „răsărea” la orizont în acel moment) și cele 12 case, fiecare legată de o zonă a vieții. Zeci de site-uri explică deja ce înseamnă fiecare piesă. Ce nu explică niciunul: cum arată, tehnic, diferența dintre o hartă calculată corect și una generată la întâmplare — care poate arăta la fel de convingătoare pe ecran.

De ce am construit un skill de horoscop, dacă nu cred în predicții astrologice?

Fac parte dintr-un research mai larg despre ce conținut AI atrage publicul feminin din România — și hartă natală/horoscop a ieșit ca a doua cea mai căutată nișă din zonă, cu peste 368.000 de căutări lunare doar pe cuvântul „horoscop”. Nu construiesc instrumentul ca să prezic viitorul cuiva. Îl construiesc ca exercițiu tehnic dur: poți lua un domeniu plin de generatoare de text la întâmplare și îl poți reconstrui pe bază de calcul verificabil? Răspunsul practic contează mai mult decât zodiacul — aceeași disciplină (date reale, nu presupuneri) se aplică și la un instrument de verificat prețuri sau la un dashboard financiar.

Cum arăta prima variantă — și de ce era, de fapt, un joc de-a horoscopul

Prima încercare avea o interfață convingătoare: formular cu dată, oră, oraș, o roată zodiacală desenată pe canvas, tabel de planete, predicții pentru azi/mâine/anul curent. Codul din spate, însă, făcea următoarele:

function getMoonSign(sunDegree, hour) {
  const moonShift = (hour / 24) * 12.5;
  const moonDegree = (sunDegree + moonShift + (Math.random() * 30 - 15)) % 360;
  ...
}
function getAscendant(hour, latitude) {
  const ascendantDegree = (hour * 15 + latitude / 4 + Math.random() * 45) % 360;
  ...
}

Math.random() înseamnă exact ce pare: un număr la întâmplare, adăugat peste o formulă aproximativă. Semnul lunar și Ascendentul — două dintre cele mai importante trei elemente ale unei hărți astrale — erau parțial noroc de la un Math.random() la altul. Latitudinea era, de altfel, mereu cea a Bucureștiului, indiferent ce oraș introducea utilizatorul.

Am rulat aceeași dată de naștere (14 mai 1990, ora 07:32, Cluj-Napoca) prin ambele variante, ca test direct:

Varianta veche (Math.random) Varianta reală (efemeride JPL)
Ascendent Leu, 5° Gemeni, 21°
Semnul lunar Leu Capricorn
Sursă latitudine/longitudine fixă, București geocodare reală a orașului introdus
Rulezi de două ori, aceleași date rezultat diferit rezultat identic
Rezultatul variantei vechi (Math.random) pentru 14 mai 1990, 07:32, Cluj-Napoca — Ascendent Leu 5°

Ultima linie e cea care contează: o hartă astrală calculată corect e determinism pur — aceleași coordonate cerești, la fel de reproductibile ca o adunare. Dacă rulezi codul de două ori și iese diferit, nu ai un calcul, ai un joc.

Ce înseamnă, de fapt, un calcul astronomic real

Varianta reconstruită are două scripturi Python separate — unul calculează, celălalt scrie raportul — și fiecare pas înlocuiește o aproximare din varianta veche cu o sursă verificabilă:

Ce calculează Cum, în varianta reală Cum, în varianta veche
Poziția planetelor efemeride JPL DE421 (skyfield) — aceleași folosite pentru navigația sondelor spațiale, valabile 1900–2050 formulă liniară din ziua calendaristică, plus offset arbitrar per planetă
Orașul nașterii geocodare reală prin Nominatim (OpenStreetMap) ignorat — latitudine fixă de București
Fusul orar fusul orar istoric exact al locației, cu ora de vară aplicată corect pentru anul respectiv ignorat
Ascendent și Mijlocul Cerului formule standard de astronomie de poziție (timp sideral → unghi orar → Ascendent) oră × 15 + latitudine/4 + Math.random() × 45
Casele sistemul caselor egale, pornind de la Ascendentul real index fix per planetă, indiferent de Ascendent
Aspectele dintre planete unghiul real dintre fiecare pereche, verificat cu o marjă de eroare (orb) pentru cinci tipuri de aspect inexistente — varianta veche nu calcula deloc relații între planete

Rezultatul se vede direct în roata desenată — fiecare linie din interior chiar înseamnă ceva (un aspect real, cu unghiul lui exact), nu e decor:

Roata astrologică reală, calculată din efemeride — liniile arată aspectele reale dintre planete, grosimea liniei arată cât de strâns e orbul
Profilul astrologic calculat: Soare, Lună, Ascendent, Mijlocul Cerului, elementul și calitatea dominante

Capturile sunt dintr-o hartă de test (nu a unei persoane reale, doar o dată de naștere folosită ca exemplu în documentația skill-ului) — arată exact ce vede oricine își calculează harta cu instrumentul.

Cinci corecturi până la un rezultat de încredere

  1. Ascendentul nu se aproximează cu „ora ori 15″. Formula corectă trece prin timpul sideral (GMST), unghiul orar local și obliquitatea eclipticii la data respectivă — trei calcule intermediare, nu o singură înmulțire. Ascendentul se mișcă aproximativ 1° la fiecare 4 minute; o eroare de rotunjire la oră schimbă rezultatul vizibil.
  2. Planetele mari se calculează ca baricentru, nu ca planeta însăși. Skyfield oferă „jupiter barycenter” separat de „jupiter” — diferența e sub o secundă de arc, dar dacă nu știi să alegi varianta corectă, rezultatul pare bun și e totuși greșit la niște zecimale care contează pentru cazuri de graniță.
  3. Un aspect cu orb mic trebuie arătat vizual diferit de unul cu orb mare. Prima versiune a roții desena toate liniile de aspect la fel — corect matematic, dar înșelător: un trigon la 0,1° distanță de exact e mult mai „activ” decât unul la 6,9°. Am legat grosimea și opacitatea liniei de mărimea orbului, ca diferența să se vadă, nu doar să existe într-un tabel.
  4. Interpretarea trebuie forțată să citeze un rând din date, nu un șablon pe semn. Regula pe care am impus-o skill-ului: orice afirmație despre o persoană trebuie legată explicit de o poziție, o casă sau un aspect din JSON-ul calculat. „Ești Taur deci ești încăpățânat” nu trece testul; „Soarele tău e în Taur, în Casa 12, în trigon cu Saturn — de aceea disciplina vine fără efort, în liniște” trece, pentru că poți verifica fiecare bucată în date.
  5. Scanarea evenimentelor anuale trebuie să excludă planetele rapide. Prima idee a fost să arăt toate tranzitele active pe parcursul unui an — a scos zeci de intrări nesemnificative, pentru că Luna sau Mercur formează un aspect nou aproape în fiecare zi. Am limitat scanarea anuală la Marte și planetele lente (Jupiter–Pluto) — ele dau temele care chiar contează, pentru că stau luni întregi în același aspect.
Interpretarea în proză, ancorată explicit în pozițiile și aspectele calculate
Tabelul complet cu toate cele 11 puncte calculate — semn, grad exact, casă, semnificație

Promptul, gata de copiat: construiește-ți propriul skill de hartă natală

Mai jos e promptul complet cu care oricine își poate reconstrui acest skill, pentru orice dată de naștere. Îl dai unui agent AI care scrie și rulează cod pe calculatorul tău — eu am folosit Claude Code, cu skill-urile lui native. Îți trebuie Python instalat; prima rulare descarcă automat un fișier de ~17 MB cu efemeride NASA, o singură dată.

Fișier de descărcat: prompt-skill-harta-cerului.txt.

Vezi promptul — skill AI de hartă natală cu calcul astronomic real
Construiește-mi un skill în două scripturi Python care calculează o hartă astrală REALĂ (nu
simulată) dintr-o dată, oră, oraș și țară de naștere, apoi generează un raport HTML cu ea.

Scriptul 1 — harta.py — calculul astronomic:

Argumente: --nume (obligatoriu, folosit doar pentru numele fișierelor), --data (YYYY-MM-DD),
--ora (HH:MM, 24h), --oras, --tara, --output (cale fișier JSON de ieșire).

Pasul 1 — geocodare reală: interoghează API-ul public Nominatim (OpenStreetMap,
nominatim.openstreetmap.org/search) ca să obții latitudine/longitudine din oraș+țară, cu un
User-Agent identificabil.

Pasul 2 — fus orar istoric real: folosește pachetul timezonefinder ca să afli fusul orar exact
al locației, apoi convertește data+ora locală în UTC cu zoneinfo.

Pasul 3 — poziții planetare: folosește skyfield cu efemeridele JPL DE421 (se descarcă automat
la prima rulare) ca să calculezi longitudinea ecliptică reală a Soarelui, Lunii și celorlalte
7 planete, plus dacă fiecare e retrogradă (compară longitudinea cu o zi înainte).

Pasul 4 — Ascendent și Mijlocul Cerului: formulele standard din astronomia de poziție (GMST →
RAMC → Ascendent/MC, cu obliquitatea eclipticii la data respectivă) — nu aproximări.

Pasul 5 — case: sistemul caselor egale (fiecare casă = 30° pornind de la Ascendent).

Pasul 6 — Nodul Nord: formula Meeus pentru Nodul Nord mediu.

Pasul 7 — aspectele natale: pentru fiecare pereche de planete, unghiul dintre ele și dacă se
încadrează într-un orb pentru conjuncție (0°, orb 8°), sextil (60°, orb 4°), pătrat (90°, orb
7°), trigon (120°, orb 7°) sau opoziție (180°, orb 8°). Păstrează unghiul real și orbul exact.

Pasul 8 — tranzitele de azi: recalculează pozițiile planetare pentru momentul curent și găsește
aspectele lor către harta natală.

Pasul 9 — evenimentele anului: scanează următoarele 366 de zile (vectorizat cu numpy) pentru
perioadele în care Marte sau o planetă lentă (Jupiter–Pluto) formează un aspect cu un punct
natal. Exclude Soare/Mercur/Venus/Lună — se mișcă prea repede, ar genera zeci de intrări
nesemnificative. Salvează pentru fiecare perioadă data de început, vârf (orb minim) și sfârșit.

Ieșire: un singur JSON cu toate datele de mai sus. NU scrie nicio interpretare aici — interpretarea
e sarcina separată a unui agent AI, strict din acest JSON, ca fiecare afirmație să poată fi
verificată într-un rând concret de date, nu într-un șablon generic pe semn zodiacal.

Scriptul 2 — raport.py — raportul HTML:

Argumente: --chart (JSON-ul de la scriptul 1), --text (JSON cu interpretarea în proză), --output.

text.json are cheile: nume (opțional), misiune_viata, lume_emotionala, lectie_karmica,
zona_abundenta, relatii_actiune_gandire, predictie_azi, predictie_an.

Raportul combină cele două JSON-uri într-o pagină HTML cu: o roată astrologică ca SVG inline
(inelul zodiacal, liniile caselor, liniile de aspect colorate și cu grosime proporțională cu
strânsoarea orbului, glifele planetelor departate automat ca să nu se suprapună), carduri de
profil (Soare, Lună, Ascendent, MC, element și calitate dominante), secțiunile de interpretare
ca proză simplă, și tabele complete (în elemente 
, pliate) cu toate planetele, aspectele, casele, tranzitele și evenimentele anului, ca orice afirmație să poată fi verificată. Design: fond alb, indigo închis + auriu ca accente, font serif pentru titluri, dark mode automat din prefers-color-scheme. Fără librării externe de grafice — totul e SVG generat în Python. Reconfigurează ieșirea consolei pe UTF-8 la începutul ambelor scripturi.

Ce NU face acest skill

Ce legătură are cu firma ta?

Aceeași disciplină aplicată aici — nu inventa un rezultat, calculează-l din surse verificabile, și arată clar unde se termină certitudinea — e regula pe care o aplic la orice automatizare pe care o construiesc pentru o firmă: instrumentul de verificare CUI interoghează direct registrul public al ANAF, nu presupune. Dacă vrei o automatizare construită cu aceeași regulă — surse reale, limitări spuse explicit — pornesc de la sub 400 €, gata în 2–5 zile lucrătoare. Iar dacă vrei să înveți să construiești singur(ă) astfel de instrumente, cursul de AI pentru firme predă exact acest drum: 4 ședințe a câte 2 ore, grupe de maximum 8, 95 € de persoană, cu garanția banilor înapoi după primele două ședințe.

Întrebări frecvente

Ce diferență e, de fapt, între o hartă astrală „reală” și una generată aleatoriu?

O hartă reală calculează poziția planetelor din efemeride astronomice — aceleași date folosite pentru navigația spațială — și dă mereu același rezultat pentru aceeași dată, oră și loc de naștere. O hartă generată aleatoriu (cazul primei variante din acest articol) folosește formule aproximative cu un factor de întâmplare adăugat — arată plauzibil, dar dă rezultate diferite la fiecare rulare, chiar cu aceleași date de intrare.

De ce contează ora exactă a nașterii?

Ascendentul — unul dintre cele trei elemente centrale ale unei hărți astrale — se mișcă aproximativ 1° la fiecare 4 minute. O oră aproximativă (ex. „pe la prânz”) poate schimba Ascendentul cu un semn întreg. Semnele planetelor (Soare, Lună etc.) rămân valabile chiar și fără ora exactă, pentru că se schimbă mult mai rar.

Ce sunt efemeridele JPL DE421?

Un set de date astronomice publicate de Jet Propulsion Laboratory (NASA/Caltech) cu pozițiile precise ale corpurilor din sistemul solar, valabile pentru perioada 1900–2050. Sunt folosite pentru navigația sondelor spațiale și, în acest skill, pentru calculul pozițiilor planetare la momentul nașterii.

Pot să-mi construiesc și eu un instrument ca acesta, fără să fiu programator?

Da — promptul din articol e scris exact pentru acest scop: îl copiezi într-un agent AI care scrie și rulează cod, iar cele cinci corecturi din articol sunt deja incluse în instrucțiuni. Partea grea nu e sintaxa Python, ci deciziile: ce formulă e corectă din punct de vedere astronomic și cum recunoști un rezultat greșit care arată bine.

Instrumentul funcționează pentru orice dată de naștere, oriunde în lume?

Da, pentru orice oraș pe care Nominatim (OpenStreetMap) îl poate geocodifica și pentru orice dată între 1900 și 2050 (limita efemeridelor DE421). Fusul orar istoric se determină automat din coordonate.

Surse

#agenți AI
Costin Pietraru
Scris de

Costin Pietraru

Inginer cu 30+ ani în sisteme, fondator SimpluSPV. Livrează cursul de AI pentru firme și scrie despre automatizare aplicată — fără teorie, doar sisteme care lucrează.

Vezi profilul complet →

Vrei firma pregătită pentru AI, corect și legal?

4 ședințe aplicate, echipa pleacă cu sisteme reale și documentele de conformitate. Garanție bani înapoi după 2 ședințe.

Înscrie echipa la curs →