Skip to main content
API AI Chat v2 (/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 message można bezpośrednio przesyłać tekst + obrazy + pliki, bez konieczności pośredniego dołączania przez references.
  • 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-stream lub application/x-ndjson można otrzymywać zdarzenia token po tokenie, takie jak text_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_question i wstrzymuje działanie, gdy wymaga uzupełnienia informacji od użytkownika; kolejne wywołanie z odpowiedzią w tool_results pozwala kontynuować.
  • Nowe akcje CRUD: na tym samym endpoint przez pole action moż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.
Jednocześnie API jest w pełni kompatybilne wstecz z v1 na poziomie ciała żądania: wystarczy przesłać 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łasz model + question, otrzymujesz {answer, id}. Przykład CURL:
Przykładowa odpowiedź:
Przykład w Python:
Dostępne wartości 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-mini itd.
  • 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-20251001 itd.
  • Google: gemini-3.1-pro, gemini-3.1-pro-preview, gemini-3.1-flash-image-preview, gemini-3-pro-preview, gemini-2.5-flash-lite itd.
  • xAI: grok-4, grok-4-1-fast, grok-4-1-fast-reasoning, grok-3-mini-fast itd.
  • DeepSeek: deepseek-v4-flash, deepseek-v3.2-exp, deepseek-r1-0528 itd.
  • Moonshot: kimi-k2.5, kimi-k2-thinking, kimi-k2-thinking-turbo itd.
  • Zhipu: glm-5.1, glm-5, glm-5-turbo, glm-4.7, glm-4.5v itd.
Szczegóły dotyczące rozliczeń znajdują się na karcie Pricing na stronie usługi.

Wieloetapowe rozmowy

Podobnie jak w v1, przesyłając stateful: 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:
Odpowiedź:
Drugie wywołanie z tym samym id:
Odpowiedź:
Domyślnie stateful jest true; pominięcie lub jawne ustawienie na true jest równoważne. Jeśli nie chcesz, aby serwer zapisywał rozmowę, ustaw stateful: false.

Odpowiedzi strumieniowe

v2 obsługuje dwa formaty strumieniowe, wybierane przez nagłówek accept:

Przykład NDJSON

Każda linia NDJSON to zdarzenie strukturalne, najczęściej 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

Klient zainteresowany tylko ostateczną odpowiedzią może połączyć wszystkie 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, zamiast question użyj message (tablica). Każdy element to blok treści:
Obsługiwane typy bloków:
  • text — zwykły tekst, wymaga pola text.
  • image_url — obraz, wymaga image_url.url.
  • file_url — plik (PDF, CSV, TXT itd.), wymaga file_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 blok image_url.
  • Inne rozszerzenia konwertuje na blok file_url.
  • Jeśli jednocześnie jest podane question, traktuje je jako blok text na początku.
Zatem, jeśli chcesz migrować z v1 bez zmiany ciała żądania, wystarczy zmienić ścieżkę na /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.
W strumieniach NDJSON / SSE wywołania narzędzi pojawiają się jako zdarzenia tool_use i tool_result, np.:
Jeśli nie chcesz pokazywać szczegółów wywołań narzędzi w frontendzie, możesz ignorować zdarzenia 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 zdarzenie ask_user_question, rozmowa przechodzi w stan awaiting_user_input:
Frontend powinien wyświetlić kartę z pytaniem i opcjami, a następnie wysłać kolejne żądanie z tym samym 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 pole action, bez potrzeby osobnego API.

action: retrieve — pobierz jedną sesję

Zwraca pełny dokument sesji (w tym historię messages, model, title, tools_used itd.).

action: retrieve_batch — lista podsumowań sesji

Zwraca { 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

Można też przesłać 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ę

Zwraca { 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:
  1. Zmień URL z https://api.xhuoapi.ai/v1/aichat/conversations na https://api.xhuoapi.ai/v1/aichat2/conversations.
  2. 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).
  3. Pola w strumieniu NDJSON pozostają kompatybilne wstecz: każde zdarzenie text_delta zawiera delta_answer i id, więc klient parsujący delta_answer liniowo nie wymaga zmian.
Po migracji możesz stopniowo korzystać z nowych funkcji v2 (wielomodalne message, SSE, wywołania narzędzi, CRUD przez action) w swoim tempie.

Obsługa błędów

Błędy zwracane są w formacie:
Typowe błędy:
  • 400 bad_request: brak wymaganych pól, niezgodność tool_use_id, nieprawidłowy schemat messages itd.
  • 401 invalid_token: niepoprawny nagłówek authorization.
  • 404 not_found: przy action: retrieve / update / delete brak sesji o podanym id.
  • 429 too_many_requests: przekroczenie limitu zapytań.
  • 500 chat_error: błąd upstream LLM lub completion_tokens=0 (nie pobiera opłat).
W odpowiedziach strumieniowych błąd jest emitowany jako zdarzenie {"type":"error","message":"..."}, po czym strumień jest zamykany.

Podsumowanie

API AI Chat v2 jest wstecz kompatybilne z v1, a jednocześnie rozszerza konwersacje z „pojedynczych / wieloetapowych zapytań” do „agentowych, obserwowalnych dialogów” z wielomodalnym wejściem, wywołaniami narzędzi, możliwością pauzy i wznowienia, strumieniowymi zdarzeniami strukturalnymi oraz wbudowanym CRUD. Zalecamy nowe integracje bezpośrednio na v2; istniejące integracje v1 można migrować etapami. W razie pytań prosimy o kontakt z naszym zespołem wsparcia technicznego.