Technikai

AI Live Test

Az AI Live Test 4 nagy LLM-et hív meg párhuzamosan (Promise.allSettled) és kérdezi tőlük: ha keresés-szimulációt futtatnál erre az iparágra, megjelenne-e ez a brand a top 5 találatban? A kód a src/lib/ai-live-test.ts fájlban él.

A 4 platform

PlatformModellEndpointTimeoutKöltség
Perplexitysonarapi.perplexity.ai/chat/completions20s~$0.01/scan
ChatGPTgpt-4o-miniapi.openai.com/v1/chat/completions15s~$0.002/scan
Geminigemini-2.5-flashgenerativelanguage.googleapis.com15s~$0.001/scan
Claudeclaude-sonnet-4-20250514api.anthropic.com/v1/messages15s~$0.002/scan

Egy átlagos scan ~$0.015 közvetlen API-költséget jelent. 100-as napi free-tier ingyenes limittel ez ~$45/hó az API-ra a free user-ekért — ez fedezhető a paid tier-ek bevételéből.

V12 — Magyar prompt-tisztítás

A 2026.05-ös V12 frissítés óta a SYSTEM_PROMPT JSON-kulcsai is magyarul vannak — korábban a system message magyar volt, de a kulcsok angolok (industry, citationStrength stb.). Ez minőség-javítás: a model „benne marad” a magyar nyelvi térben, jobb minőségű magyar válaszokat ad.

{
  "ipariag": "<iparág magyarul>",
  "szimulaltKerdes": "<konkrét keresőkifejezés>",
  "top5Talalat": ["<domain1>", ..., "<domain5>"],
  "brandPozicio": <1-5 vagy null>,
  "idez": <true/false>,
  "idezetiErosseg": <0-10 a pozíció alapján>,
  "idezesIndoka": "<2-3 mondat>",
  "versenyEloeny": "<1 mondat>",
  "aiKeresoKifejezesek": ["<5 további kifejezés>"],
  "javaslatok": ["<3 konkrét javaslat>"]
}

V4 — Live citation testing

A V4 frissítés a SYSTEM_PROMPT-ot átalakította absztrakt szimulációból konkrét keresés-prompttá. A model nem azt kérdezi, hogy „mit gondolsz a brand-ről”, hanem:

“Képzeld el, hogy egy felhasználó az iparág releváns kifejezésére keres. Generálj egy konkrét magyar keresőkifejezést, sorold fel a top 5 weboldalt amit idéznél, és ellenőrizd, hogy a megadott brand domain szerepel-e közöttük.”

A citationStrength a pozíció alapján számolódik:

  • 1. helyen: 10 pont
  • 2. helyen: 8 pont
  • 3. helyen: 6 pont
  • 4. helyen: 4 pont
  • 5. helyen: 2 pont
  • Nem szerepel a top 5-ben: 0 pont

Fontos: ez csak a Perplexity Sonar esetén tényleges keresés (native web search). A többi platformon (GPT-4o-mini, Gemini, Claude) ez továbbra is szimuláció — a model a tudásbázisa alapján találgat. A teljes Citation Share-mérés további API-kulcsokat igényel: V2 Bing, V3 Brave (lásd changelog).

V1 — Multi-sample (probabilisztikus szórás kompenzáció)

Az LLM-ek probabilisztikusak: ugyanazt a promptot különböző válaszokkal honorálják. A temperature: 0.3 csökkenti a szórást, de nem szünteti meg. Egy 7/10 citationStrength másnap lehet 4 vagy 9.

A V1 multi-sample megoldás: minden platformra N (alapértelmezetten 3) hívást futtatunk párhuzamosan, a citationStrength-et átlagoljuk, a wouldCite-ot többségi szavazással döntjük el. Az indoklás mező mostantól tartalmazza a „X mintából átlagolva, Y/Z igen-szavazat” infót.

// A scan-flow a runGeoAudit(url, { aiSamples }) opción keresztül vezérli:
//   anonim scan            → aiSamples: 1 (single-sample)
//   bejelentkezett scan    → aiSamples: 3 (multi-sample, átlagolva)
//   dashboard rescan/add   → aiSamples: 3
//   kompetitor-benchmark   → aiSamples: 1 (N+1 scan × 60s timeout védelem)

const result = await runGeoAudit(url, { aiSamples: 3 });

2026.06 óta élesben: bejelentkezett userek minden scanje automatikusan 3 mintával fut (~3x API-költség, ~$0.03/scan), anonim scanek 1 mintával. Az indoklás mezőben látszik: „X mintából átlagolva, Y/Z igen-szavazat”.

Hibakezelés

  • Promise.allSettled: egy platform fail-je nem öli meg a többit.
  • Ha az API kulcs hiányzik (env változó nincs), errorResult-ot ad vissza „API kulcs nincs beállítva” üzenettel — kivéve Claude-nál, ahol simulateClaude()heurisztikusan számol egy strength-et.
  • Ha a model invalid JSON-t ad, parseAIResponse visszaad egy „Válasz feldolgozási hiba” error-t, de a többi platform eredménye mehet tovább.
  • Backwards compat: a parseAIResponse a magyar kulcsok mellett az angol kulcsokat is elfogadja (?? parsed.simulatedQuery) — a régi cache-elt válaszok is parse-olhatóak.