API AI Chat v2 (Documentation Index
Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
Use this file to discover all available pages before exploring further.
/aichat2/conversations) to nowa generacja interfejsu konwersacyjnego, będąca kompleksową aktualizacją AI Chat API. Bazując na prostocie i obsłudze wieloetapowych rozmów w wersji v1, rozszerza funkcjonalności o:
- Wielomodalne dane wejściowe użytkownika: poprzez strukturalne pole
messagemożna bezpośrednio przesyłać tekst + obrazy + pliki, bez konieczności pośredniego dołączania przezreferences. - Agentowa obsługa wywołań narzędzi: wbudowany zestaw narzędzi do wyszukiwania w sieci, scrapowania stron, odczytu plików itp., z możliwością podłączenia autoryzowanych serwerów MCP użytkownika (Google Drive, Notion, Slack, GitHub itd.). Model może w jednej sesji wielokrotnie samodzielnie wywoływać narzędzia, realizując złożone zadania.
- Strukturalne zdarzenia strumieniowe: przez
accept: text/event-streamlubapplication/x-ndjsonmożna otrzymywać zdarzenia token po tokenie, takie jaktext_delta,tool_use,tool_result,thinking,citation,card,artifact, co ułatwia renderowanie w frontendzie według typu. - Możliwość przerwania i wznowienia: model wysyła zdarzenie
ask_user_questioni wstrzymuje działanie, gdy wymaga uzupełnienia informacji od użytkownika; kolejne wywołanie z odpowiedzią wtool_resultspozwala kontynuować. - Nowe akcje CRUD: na tym samym endpoint przez pole
actionmożna wykonaćretrieve/retrieve_batch/update/delete, bez potrzeby dodatkowego API do zarządzania sesjami. - Ciągłe aktualizacje listy modeli: domyślnie dostępne modele to m.in. GPT-5.4, Claude Opus 4.7, Claude Sonnet 4.6, Gemini 3.1 Pro, GLM 5.1, DeepSeek V4, Kimi K2.5 i inne współczesne modele.
model + question (+ opcjonalnie stateful / id / references / preset), aby otrzymać odpowiedź JSON {answer, id} równoważną z v1. Migracja z /aichat/conversations wymaga jedynie zmiany ścieżki na /aichat2/conversations bez konieczności przepisywania klienta.
Jeśli obecnie korzystasz z /aichat/conversations, stary interfejs pozostanie dostępny, możesz migrować we własnym tempie.
Proces rejestracji
Aby korzystać z API, należy najpierw zarejestrować się na stronie AI Chat v2 API i uzyskać odpowiednie uprawnienia. Po wejściu na stronę kliknij przycisk „Acquire”, aby otrzymać token dostępu. Jeśli nie jesteś zalogowany lub zarejestrowany, zostaniesz przekierowany do strony logowania. Po rejestracji i zalogowaniu wrócisz automatycznie na stronę z API. Przy pierwszym uzyskaniu dostępu przyznawany jest darmowy limit, umożliwiający bezpłatne korzystanie z API.Podstawowe użycie
Najprostsze użycie jest identyczne jak w v1: przesyłaszmodel + question, otrzymujesz {answer, id}.
Przykład CURL:
model można zobaczyć w panelu Try po prawej stronie. Popularne kategorie to:
- OpenAI:
gpt-5.4-mini,gpt-5.4-nano,gpt-5.2-pro,gpt-5.1-all,gpt-5-all,gpt-4.1,gpt-4o,gpt-4o-image,o3,o4-miniitd. - Anthropic:
claude-opus-4-7,claude-opus-4-6,claude-opus-4-5-20251101,claude-sonnet-4-6,claude-sonnet-4-5-20250929,claude-haiku-4-5-20251001itd. - Google:
gemini-3.1-pro,gemini-3.1-pro-preview,gemini-3.1-flash-image-preview,gemini-3-pro-preview,gemini-2.5-flash-liteitd. - xAI:
grok-4,grok-4-1-fast,grok-4-1-fast-reasoning,grok-3-mini-fastitd. - DeepSeek:
deepseek-v4-flash,deepseek-v3.2-exp,deepseek-r1-0528itd. - Moonshot:
kimi-k2.5,kimi-k2-thinking,kimi-k2-thinking-turboitd. - Zhipu:
glm-5.1,glm-5,glm-5-turbo,glm-4.7,glm-4.5vitd.
Wieloetapowe rozmowy
Podobnie jak w v1, przesyłającstateful: true włączasz zapisywanie sesji, API zwraca id; kolejne wywołania z tym samym id kontynuują rozmowę bez konieczności ręcznego przechowywania historii messages.
Pierwsze wywołanie:
id:
Domyślniestatefuljesttrue; pominięcie lub jawne ustawienie natruejest równoważne. Jeśli nie chcesz, aby serwer zapisywał rozmowę, ustawstateful: false.
Odpowiedzi strumieniowe
v2 obsługuje dwa formaty strumieniowe, wybierane przez nagłówekaccept:
| Scenariusz | accept | Format danych |
|---|---|---|
| Frontend WWW / EventSource | text/event-stream | data: {json}\n\n, ostatnia linia data: [DONE]\n\n |
| Backend / CLI / Node strumieniowe parsowanie | application/x-ndjson | Każda linia to obiekt JSON |
| Brak strumieniowania | application/json (domyślnie) | Jednorazowa odpowiedź {answer, id} |
Przykład NDJSON
text_delta:
Przykład SSE
Przeglądarki używająEventSource, które nie obsługuje niestandardowego ciała żądania, dlatego zaleca się fetch z ręcznym parsowaniem po \n\n:
Typy zdarzeń strumieniowych
type | Znaczenie |
|---|---|
text_delta | Przyrostowy fragment odpowiedzi asystenta. content to nowa zawartość; dla kompatybilności z v1 zdarzenie zawiera też delta_answer (równe content) oraz id. |
thinking | Proces myślenia modelu (pojawia się tylko w modelach z expose reasoning). |
tool_use | Model zdecydował się wywołać narzędzie, zdarzenie zawiera tool_id, tool_name, input. |
tool_result | Wynik działania narzędzia, powiązany z poprzednim tool_use przez tool_id, is_error wskazuje na błąd. |
card | Strukturalna karta wygenerowana przez narzędzie (np. obraz, podgląd linku), nadaje się do bezpośredniego renderowania. |
citation | Źródło URL cytowanej treści. |
ask_user_question | Model potrzebuje uzupełnienia informacji od użytkownika, rozmowa przechodzi w stan awaiting_user_input, patrz Wznowienie przerwanej rozmowy. |
artifact | Niezależny artefakt wygenerowany przez model (np. blok kodu, dokument), można zapisać lub pobrać. |
system_message | Komunikat systemowy (nie jest treścią użytkownika ani asystenta), służy do wyświetlania w UI. |
compact | Wydarzenie kompresji kontekstu wewnętrznego, nie wymaga specjalnej obsługi. |
error | Wystąpił błąd w trakcie sesji, message opisuje problem. |
done | Koniec odpowiedzi strumieniowej, zawiera usage (tokeny prompta, completion, total) oraz terminal_reason. |
content z text_delta, co odpowiada polu answer w trybie application/json.
Wielomodalne dane wejściowe
Jeśli użytkownik przesyła obrazy lub pliki, zamiastquestion użyj message (tablica). Każdy element to blok treści:
text— zwykły tekst, wymaga polatext.image_url— obraz, wymagaimage_url.url.file_url— plik (PDF, CSV, TXT itd.), wymagafile_url.url.
Relacja do references z v1
Dla kompatybilności z klientami v1, v2 nadal rozpoznaje pole references: ["https://...", ...]:
- Jeśli URL kończy się na
jpg / jpeg / png / gif / bmp / webp / svg / heic / heif, automatycznie konwertuje na blokimage_url. - Inne rozszerzenia konwertuje na blok
file_url. - Jeśli jednocześnie jest podane
question, traktuje je jako bloktextna początku.
/aichat2/conversations; oryginalne użycie references będzie działać bez zmian.
Jeśli potrzebujesz precyzyjnej kontroli (np. wiele obrazów w tekście lub ważna kolejność), użyj bezpośrednio tablicy message.
Wywoływanie narzędzi i MCP
Kluczową nowością v2 jest możliwość samodzielnego wywoływania narzędzi przez model do realizacji wieloetapowych zadań — jest to domyślnie włączone, bez konieczności dodatkowej konfiguracji po stronie klienta. Typowe scenariusze:- Użytkownik pyta: „Znajdź mi najnowsze wystawy w Szanghaju” → model wywołuje wbudowane web search → generuje odpowiedź.
- Użytkownik pyta: „Przeczytaj ten PDF i napisz streszczenie” → model wywołuje file_read → tworzy podsumowanie.
- Użytkownik autoryzował w Connections dostęp do Google Drive / GitHub / Notion → model może korzystać z narzędzi MCP do odczytu i zapisu danych.
tool_use i tool_result, np.:
tool_use, tool_result, card, citation; ostateczna odpowiedź modelu i tak pojawi się w text_delta.
Parametr max_turns ogranicza maksymalną liczbę samodzielnych wywołań narzędzi w jednej sesji; domyślny limit ustala platforma. Ustawienie niskiej wartości (np. max_turns: 1) wymusza pojedynczą odpowiedź bez wywołań narzędzi.
Wznowienie przerwanej rozmowy
Niektóre narzędzia powodują, że model „zadaje pytanie użytkownikowi” i wysyła zdarzenieask_user_question, rozmowa przechodzi w stan awaiting_user_input:
id, przekazując odpowiedź w tool_results:
tool_use_id w tool_results musi dokładnie odpowiadać tool_id z przerwanego zdarzenia; w przeciwnym razie zwrócony zostanie błąd 400. Gdy w żądaniu obecne są tool_results, pola question / message / references są ignorowane.
Jeśli użytkownik chce pominąć pytanie, wystarczy przesłać nowe question lub message; platforma automatycznie oznaczy przerwane wywołanie narzędzia jako „pominięte przez użytkownika”.
Zarządzanie sesjami (CRUD)
v2 oferuje lekkie zarządzanie sesjami na tym samym endpoint przez poleaction, bez potrzeby osobnego API.
action: retrieve — pobierz jedną sesję
messages, model, title, tools_used itd.).
action: retrieve_batch — lista podsumowań sesji
{ items: [...], total }. Podsumowania nie zawierają messages, nadają się do listy w panelu bocznym; po kliknięciu użytkownik może pobrać pełną sesję przez action: retrieve.
Dostępne filtry: user_id, application_id, model_group, model.
action: update — zmiana tytułu lub edycja historii
messages, ale serwer wykonuje rygorystyczną walidację schematu (musi być w formacie złożonym z ToolUseContent), w przeciwnym razie zwróci błąd 400. Zwykle zaleca się używać tylko do zmiany title.
action: delete — usuń sesję
{ id, success: true }. Usunięcie jest nieodwracalne, prosimy o potwierdzenie przed wywołaniem.
Płynna migracja z v1
Jeśli korzystasz już z/aichat/conversations, migracja do v2 wymaga minimalnych zmian:
- Zmień URL z
https://api.xhuoapi.ai/v1/aichat/conversationsnahttps://api.xhuoapi.ai/v1/aichat2/conversations. - Jeśli używałeś nazw modeli z v1 (np.
gpt-3.5,gpt-4-browsing), zalecamy aktualizację do współczesnych modeli v2 (np.gpt-5.4,claude-opus-4-7,gemini-3.1-pro). - Pola w strumieniu NDJSON pozostają kompatybilne wstecz: każde zdarzenie
text_deltazawieradelta_answeriid, więc klient parsującydelta_answerliniowo nie wymaga zmian.
message, SSE, wywołania narzędzi, CRUD przez action) w swoim tempie.
Obsługa błędów
Błędy zwracane są w formacie:400 bad_request: brak wymaganych pól, niezgodnośćtool_use_id, nieprawidłowy schematmessagesitd.401 invalid_token: niepoprawny nagłówekauthorization.404 not_found: przyaction: retrieve / update / deletebrak sesji o podanymid.429 too_many_requests: przekroczenie limitu zapytań.500 chat_error: błąd upstream LLM lubcompletion_tokens=0(nie pobiera opłat).
{"type":"error","message":"..."}, po czym strumień jest zamykany.

