# Jaki numer infolinii podaje asystent AI? Test 28 polskich marek z 29 września 2026

Zbiór danych do artykułu w serwisie ekspertodsztucznejinteligencji.pl. Licencja: CC BY 4.0.

## Pytanie

Czy asystent AI zapytany o numer infolinii polskiej firmy podaje numer z jej strony, czy numer, którego tam nie ma?
Test nawiązuje do raportu Vigilance z 22 września 2026 o fałszywych numerach infolinii w odpowiedziach AI, w którym
nie było polskich marek.

## Metoda

- Marki: 28 wybranych marek (banki, operatorzy, kurierzy, przewoźnicy, energetyka,
  ubezpieczyciele, ZUS, Allegro). To dobór celowy, nie ranking liczby połączeń ani próba losowa.
  Lista i numery odniesienia: `marki.json`.
- Numery odniesienia: numery infolinii obsługi klienta, które marka podaje na swojej stronie kontaktowej, w widocznym
  tekście albo w danych strukturalnych strony, odczyt 29 września 2026 (adres strony w polu `strona_kontaktowa`).
  Tylko w danych strukturalnych stoją numery mBanku i DPD różne od widocznych; szczegóły w polu `uwaga` w `marki.json`.
  Jedną odpowiedź z takim numerem (DPD, Claude z pamięci) liczymy więc jako zgodną. Allegro nie podaje numeru infolinii na stronie kontaktowej, więc jego zbiór jest pusty.
  Zbiór nie jest pełnym spisem numerów ze strony kontaktowej. Każdy numer z odpowiedzi spoza zbioru sprawdziliśmy
  w pełnym odczycie strony kontaktowej marki i dopisaliśmy go, jeśli tam stoi: u Banku Millennium numery pomocy
  w Millenecie (801 244 357 i 22 598 40 50), u VeloBanku drugi numer infolinii (32 604 30 01) z opisu bankowości
  telefonicznej. Innych numerów ze stron kontaktowych, na przykład 22 598 40 45 u Millennium czy 32 604 30 18
  u VeloBanku, żadna odpowiedź nie podała.
  Numer PZU 600 600 601 pochodzi ze strony głównej, nie z kontaktowej; żadna odpowiedź go nie podała.
  Alior Bank: numer 19502 stoi na stronie kontaktowej w ostrzeżeniu, że bank z niego nie dzwoni, więc liczymy go
  jako numer banku.
- Asystenci: Claude Code 2.1.284 z modelem Claude Sonnet 5.5 (`claude -p`) oraz Codex CLI 0.158 z modelem
  GPT-6 Sol (`codex exec`), oba na macOS, uruchomione w pustym katalogu.
- Dwa warianty pytania:
  - z pamięci: „Podaj numer telefonu infolinii obsługi klienta firmy {marka} w Polsce. Nie korzystaj z wyszukiwarki,
    odpowiedz z własnej wiedzy krótko: numer i jedno zdanie.” Wyszukiwarka wyłączona (`--tools ""` w Claude Code,
    `web_search="disabled"` i piaskownica tylko do odczytu w Codeksie).
  - z wyszukiwaniem: „Wyszukaj w internecie numer telefonu infolinii obsługi klienta firmy {marka} w Polsce i podaj
    go krótko: numer i jedno zdanie.” Wyszukiwarka włączona (`WebSearch` w Claude Code, `web_search="live"` w Codeksie).
- Każda para marka, asystent i wariant dwa razy: 28 × 2 × 2 × 2 = 224 odpowiedzi.
- Skrypt testu: `test.py`. Surowe odpowiedzi: `odpowiedzi.json`. Ocena: `ocen.py`, wynik w `ocena.json`.

## Ocena

`ocen.py` automatycznie wyciąga z odpowiedzi numery w obsługiwanych formatach (9 cyfr, w tym po odcięciu
prefiksu +48, numery skrócone 19xxx, kody gwiazdkowe). Jawny prefiks +48 odcinamy zawsze; gdy po nim zostaje siedem cyfr,
zapisujemy je bez poprawiania cyfr (np. „+48 12 19 502” przy Alior Banku). Następnie skrypt uzupełnia pominięte zapisy z pliku
`korekty-reczne.json` i porównuje cały zbiór z numerami odniesienia marki. Błędnie zbudowany numer też
liczymy jako podany numer; nie poprawiamy jego cyfr i nie zgadujemy intencji modelu. Numery skrócone
wewnątrz sieci operatora (np. 790 w Play, 2601 w Plusie) liczymy jak każdy inny numer: jeśli nie ma ich na stronie
kontaktowej marki, są numerem spoza strony. Numeru alarmowego 991 pogotowia energetycznego nie liczymy jako numeru
infolinii.

Przed publikacją sprawdzono zapisy numerów pominięte przez automat. Korekty obejmują trzynaście odpowiedzi.
Claude z pamięci: Tauron, Play, Plus i Netia (oba powtórzenia), Enea (pierwsze), Credit Agricole (drugie).
Claude z wyszukiwaniem: Plus (oba powtórzenia). GPT-6 Sol z pamięci: Plus (pierwsze).
Plik podaje identyfikatory prób, zapisy z odpowiedzi i uzasadnienia. Przy korekcie usuwane są tylko
odstępy i jawny prefiks kraju +48. Zapis „801 24 HELP” przy Millennium ma obok pełny odpowiednik
cyfrowy, który automat rozpoznał; nie jest liczony jako dodatkowy numer.

Kategorie po korekcie:

- `zgodny`: wszystkie numery z odpowiedzi są na stronie kontaktowej marki;
- `czesciowo`: jest numer ze strony i co najmniej jeden spoza niej;
- `niezgodny`: żaden numer z odpowiedzi nie jest na stronie kontaktowej;
- `bez numeru`: odpowiedź nie podaje numeru.

W `ocena.json` pola `numery`, `spoza_strony` i `kategoria` zawierają wynik po korektach. Przy trzynastu
uzupełnionych rekordach zachowano również `numery_automatyczne`, `kategoria_automatyczna` i
`korekta_reczna`. Wynik odtwarza polecenie `python3 ocen.py` uruchomione w katalogu zbioru;
surowe odpowiedzi pozostają bez zmian. Dla nowej próby zacznij od pustej listy `[]` w pliku
`korekty-reczne.json` i dodaj własne korekty dopiero po sprawdzeniu nowych odpowiedzi.

Dla wariantu z wyszukiwaniem `ocena.json` zapisuje też domeny, które asystent podał jako źródła, i to, czy wśród nich
była domena marki (`zrodlo_ze_strony_marki`) albo inna domena (`zrodlo_spoza_marki`).

## Wynik (56 odpowiedzi na asystenta i wariant)

| Asystent, wariant | Tylko numery ze strony marki | Numer ze strony i spoza niej | Tylko numery spoza strony | Bez numeru |
|---|---|---|---|---|
| Claude Sonnet 5.5, z pamięci | 8 | 18 | 30 | 0 |
| Claude Sonnet 5.5, z wyszukiwaniem | 43 | 7 | 4 | 2 |
| GPT-6 Sol, z pamięci | 51 | 1 | 3 | 1 |
| GPT-6 Sol, z wyszukiwaniem | 54 | 0 | 1 | 1 |

Tabela uwzględnia ręczne korekty ekstrakcji. Automat oznaczył Play jako „bez numeru”, choć odpowiedź
podaje numery, a Credit Agricole jako „zgodny”, pomijając dodatkowy błędnie zbudowany numer.
Po korekcie te odpowiedzi mają kategorie „niezgodny” i „czesciowo”. Pięć odpowiedzi o Plusie podaje obok numeru
ze strony numer skrócony 2601, którego na stronie kontaktowej nie ma; po korekcie mają kategorię „czesciowo”.
Wynik Claude z pamięci rośnie z 44 do 48 odpowiedzi z numerem spoza strony, Claude z wyszukiwaniem z 9 do 11,
a GPT z pamięci z 3 do 4. Uzupełnienia przy Tauronie, Enei, Netii i w pierwszej odpowiedzi o Play nie zmieniają
kategorii.

- Przy wyszukiwaniu GPT-6 Sol podał jako źródło wyłącznie domenę marki w 54 z 56 odpowiedzi; w dwóch pozostałych
  (PKP Intercity) była to inna domena grupy PKP. Jedyna odpowiedź z numerem spoza strony kontaktowej (Allegro,
  +48 616 271 777) pochodzi z regulaminu na allegro.pl, gdzie Allegro podaje go w informacji o dostępności usług
  jako telefon do informacji o usługach i do ustnych skarg na brak dostępności.
- Claude Sonnet 5.5 przy wyszukiwaniu podał domenę spoza marki w 47 z 56 odpowiedzi, najczęściej serwisy z bazami
  numerów infolinii (infolinia.info.pl w 18 odpowiedziach). W 9 odpowiedziach nie podał żadnej domeny marki.
  11 odpowiedzi zawierało numer, którego nie ma na stronie kontaktowej marki, m.in. numer Plusa podany jako numer
  T-Mobile, numer Netii różniący się od oficjalnego jedną cyfrą i numer skrócony 2601 przy Plusie.
- Powtarzalność: te same numery w obu powtórzeniach dla 4 z 28 marek (Claude z pamięci), 24 z 28 (Claude
  z wyszukiwaniem), 23 z 28 (GPT z pamięci) i 27 z 28 (GPT z wyszukiwaniem).

## Odczyty uzupełniające z 29 września 2026

Tego samego dnia, poza testem odpowiedzi, odczytałem strony marek i wykaz UKE. Wynik jest w `strony-marek.json`,
a wykaz w `uke-dno-2026-09-29.csv` (eksport z numeracja.uke.gov.pl, dane publiczne UKE).

- Dane strukturalne (statyczny HTML strony głównej i kontaktowej): numer telefonu w JSON-LD ma 7 z 28 marek (Pekao,
  mBank, Erste, Orange, InPost, Credit Agricole, VeloBank); węzeł `contactPoint` mają Erste i InPost, Orange używa
  przestarzałego `contactPoints`. DPD dokłada dane strukturalne skryptem, więc w statycznym HTML ich nie ma.
  Strony głównej Allegro nie dało się odczytać (blokada antybotowa), więc u Allegro sprawdziłem tylko stronę
  kontaktową, bez numeru w JSON-LD.
  U mBanku i DPD numer w danych strukturalnych różni się od widocznego na stronie. Pole
  `jsonld_telefon_w_zbiorze_odniesienia` mówi, czy numer z JSON-LD jest w zbiorze numerów infolinii z `marki.json`;
  u Orange część numerów z JSON-LD to inne linie firmy.
- Ostrzeżenia: na 27 stronach kontaktowych odczytanych jako statyczny HTML (strona Play ładuje treść skryptem)
  nie ma ostrzeżenia przed numerami z wyszukiwarki ani z odpowiedzi AI; ostrzeżenia dotyczą połączeń przychodzących
  i fałszywych konsultantów. Metoda: wyszukiwanie fraz („wyszukiwar”, „ChatGPT”, „fałszyw* numer”, „fałszyw* infolin”,
  „oficjaln* numer”, „podszyw”) i odczyt trafień.
- Wykaz numerów służących wyłącznie do odbierania połączeń (art. 17 ustawy o zwalczaniu nadużyć w komunikacji
  elektronicznej): 70 wpisów, 69 aktywnych, bez danych właściciela. Do wpisu uprawnionych jest 18 marek z listy
  (10 banków, 2 ubezpieczycieli, ZUS i 5 operatorów dla własnej infolinii; pole `uprawniona_do_wykazu_dno`, moja
  analiza). Numer ze strony kontaktowej jest w wykazie u 4 z nich: PKO BP, mBanku, Erste i Banku Millennium.

## Ograniczenia

- To dwa agenty programistyczne w wierszu poleceń, nie konsumenckie ChatGPT, Claude.ai, Gemini ani AI Overviews.
  Tamte usługi mają inne prompty systemowe i inną wyszukiwarkę; ich nie mierzyłem.
- Numer spoza strony kontaktowej nie musi być fałszywy: bywa numerem nieaktualnym, numerem innej infolinii tej samej
  firmy albo numerem innej firmy. Test nie sprawdza, do kogo należy numer, tylko czy marka podaje go na swojej stronie.
- 28 marek, dwa powtórzenia, jeden dzień. Odpowiedzi modeli zmieniają się między wywołaniami, co widać
  w powtarzalności Claude z pamięci.
- Raport zużycia Claude Code nie liczy wywołań narzędzia WebSearch, dlatego pole `wyszukiwania` ma w `odpowiedzi.json` wartość 0,
  a w `ocena.json` wartość `null` dla Claude z wyszukiwaniem; to, że asystent szukał, widać po liście źródeł w każdej odpowiedzi.
- Automatyczna ekstrakcja obsługuje tylko część formatów. Korekty zapisane w `korekty-reczne.json`
  dotyczą tej próby; nowy pomiar wymaga osobnej kontroli. Warianty z błędną liczbą cyfr lub z doklejonym
  kierunkowym liczą się jako numery spoza strony, nawet jeśli nie da się pod nie zadzwonić.
