Skip to main content
L’API AI Chat v2 (/aichat2/conversations) è la nuova generazione dell’interfaccia di conversazione, un aggiornamento completo rispetto a AI Chat API. Basata sulla semplicità e gestione di conversazioni multi-turno di v1, estende le funzionalità con:
  • Input utente multimodale: tramite il campo strutturato message si possono inviare direttamente testo + immagini + blocchi di file, senza dover usare references come allegati indiretti.
  • Chiamata agent di strumenti: integra una serie di strumenti per ricerca online, scraping web, lettura file, ecc., e può collegarsi a server MCP autorizzati dall’utente (Google Drive, Notion, Slack, GitHub, ecc.). Il modello può autonomamente invocare strumenti multi-turno in una singola richiesta per completare compiti complessi.
  • Eventi strutturati in streaming: con accept: text/event-stream o application/x-ndjson si ricevono eventi token-per-token come text_delta, tool_use, tool_result, thinking, citation, card, artifact, facilitando il rendering frontend per tipo.
  • Interruzione e ripresa: il modello emette eventi ask_user_question e si mette in pausa quando serve input utente; la ripresa avviene inviando le risposte in tool_results.
  • Nuove azioni CRUD: tramite il campo action sullo stesso endpoint si possono eseguire retrieve / retrieve_batch / update / delete senza API di gestione sessione aggiuntive.
  • Lista modelli in aggiornamento continuo: accesso predefinito a modelli contemporanei come GPT-5.4, Claude Opus 4.7, Claude Sonnet 4.6, Gemini 3.1 Pro, GLM 5.1, DeepSeek V4, Kimi K2.5, ecc.
Inoltre, a livello di corpo richiesta è completamente retrocompatibile con v1: basta inviare model + question (+ opzionali stateful / id / references / preset) per ottenere la stessa risposta JSON {answer, id} di v1. Quindi la migrazione da /aichat/conversations a /aichat2/conversations non richiede riscrittura client, solo la modifica del percorso.
Se stai usando /aichat/conversations, l’interfaccia vecchia rimarrà attiva, puoi migrare con calma.

Procedura di richiesta

Per usare l’API, visita la pagina corrispondente di AI Chat v2 API e clicca sul pulsante «Acquire» per ottenere le credenziali necessarie. Se non sei loggato o registrato, verrai reindirizzato automaticamente alla pagina di login; dopo registrazione e login tornerai alla pagina corrente. Al primo accesso viene offerto un credito gratuito per utilizzare l’API.

Uso base

L’uso più semplice è identico a v1: invia model + question e ricevi {answer, id}. Esempio CURL:
Risposta:
Esempio Python:
I valori disponibili per model si possono vedere nel pannello Try a destra, categorie comuni includono:
  • 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, ecc.
  • 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, ecc.
  • 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, ecc.
  • xAI: grok-4, grok-4-1-fast, grok-4-1-fast-reasoning, grok-3-mini-fast, ecc.
  • DeepSeek: deepseek-v4-flash, deepseek-v3.2-exp, deepseek-r1-0528, ecc.
  • Moonshot: kimi-k2.5, kimi-k2-thinking, kimi-k2-thinking-turbo, ecc.
  • Zhipu: glm-5.1, glm-5, glm-5-turbo, glm-4.7, glm-4.5v, ecc.
Consulta la scheda Pricing nella pagina del servizio per le regole di fatturazione.

Conversazioni multi-turno

Come in v1, invia stateful: true per abilitare la memorizzazione della sessione; l’API restituisce un id da usare nelle richieste successive per continuare la conversazione senza dover gestire la cronologia dei messaggi. Prima richiesta:
Risposta:
Seconda richiesta con lo stesso id:
Risposta:
stateful è true di default, omettere o specificare true è equivalente. Se non vuoi che il server memorizzi la conversazione, imposta esplicitamente stateful: false.

Risposta in streaming

v2 supporta due formati di streaming, selezionabili tramite l’header accept:

Esempio NDJSON

Ogni riga NDJSON è un evento strutturato, il più comune è text_delta:

Esempio SSE

Il browser con EventSource non supporta corpo personalizzato, si consiglia fetch con parsing manuale su \n\n:

Tipi di eventi in streaming

Client interessati solo alla risposta finale possono concatenare tutti i content di text_delta per ottenere lo stesso risultato di application/json.

Input multimodale

Se l’input utente include immagini o file, invia message (array) invece di question. Ogni elemento è un blocco di contenuto:
Tipi di blocchi supportati:
  • text — testo semplice, campo obbligatorio text.
  • image_url — immagine, campo obbligatorio image_url.url.
  • file_url — file (PDF, CSV, TXT, ecc.), campo obbligatorio file_url.url.

Relazione con references di v1

Per compatibilità con client vecchi, v2 riconosce ancora il campo references: ["https://...", ...]:
  • URL con estensioni jpg / jpeg / png / gif / bmp / webp / svg / heic / heif vengono convertiti automaticamente in blocchi image_url;
  • altre estensioni diventano blocchi file_url;
  • se è presente anche question, viene inserito come blocco text all’inizio.
Quindi per migrare da v1 senza modificare il corpo, basta cambiare il percorso in /aichat2/conversations; l’uso di references funziona come prima. Per un controllo più preciso (es. inserire più immagini tra testi o ordine importante), usa direttamente l’array message.

Invocazione strumenti e MCP

Il punto di forza di v2 è che il modello può autonomamente chiamare strumenti per completare compiti multi-step, attivato di default senza configurazioni aggiuntive nel client. Esempi tipici:
  • L’utente chiede «Cerca le nuove mostre a Shanghai» → il modello usa la ricerca web integrata → organizza i risultati nella risposta.
  • L’utente chiede «Leggi questo PDF e scrivi un riassunto» → il modello usa file_read → genera il riassunto.
  • L’utente ha autorizzato Google Drive / GitHub / Notion in Connections → il modello può usare gli strumenti MCP corrispondenti per leggere/scrivere dati.
Nel flusso NDJSON / SSE, le chiamate strumenti appaiono come eventi tool_use e tool_result, ad esempio:
Se non vuoi mostrare dettagli strumenti nel frontend, ignora gli eventi tool_use / tool_result / card / citation; la risposta finale del modello arriva comunque tramite text_delta. max_turns limita il numero massimo di invocazioni strumenti per richiesta; il limite predefinito è deciso dalla piattaforma. Impostandolo basso (es. max_turns: 1) si forza una risposta singola senza chiamate strumenti.

Ripresa conversazioni sospese

Alcuni strumenti fanno sì che il modello «ponga domande all’utente», emettendo un evento ask_user_question e mettendo la conversazione in stato awaiting_user_input:
Nel frontend mostra questo evento come scheda con opzioni, quindi invia una nuova richiesta con lo stesso id e risposte in tool_results:
Nel corpo la tool_use_id deve corrispondere esattamente al tool_id dell’evento sospeso; altrimenti si riceve errore 400. Se tool_results è presente, question / message / references vengono ignorati. Se l’utente vuole saltare la domanda, basta inviare una nuova question o message; la piattaforma segnerà la chiamata strumento sospesa come «saltata dall’utente».

Gestione conversazioni (CRUD)

v2 offre gestione leggera delle conversazioni tramite il campo action sullo stesso endpoint, senza API aggiuntive.

action: retrieve — Recupera una conversazione

Restituisce il documento completo della conversazione (inclusi messages, model, title, tools_used, ecc.).

action: retrieve_batch — Elenca riepiloghi conversazioni

Restituisce { items: [...], total }. Il riepilogo non include messages, adatto per liste laterali; per vedere i messaggi completi di una conversazione si usa action: retrieve. Filtri opzionali: user_id, application_id, model_group, model.

action: update — Modifica titolo o riscrivi cronologia

Si possono inviare anche messages, ma il server applica una validazione rigorosa dello schema (deve essere in forma ToolUseContent compressa); in caso contrario ritorna 400. Generalmente consigliato solo per modificare il title.

action: delete — Elimina una conversazione

Risposta { id, success: true }. L’eliminazione è irreversibile, confermare prima di chiamare.

Migrazione fluida da v1

Se usi già /aichat/conversations, la migrazione a v2 richiede quasi nessuna modifica:
  1. Cambia l’URL da https://api.xhuoapi.ai/v1/aichat/conversations a https://api.xhuoapi.ai/v1/aichat2/conversations.
  2. Se usavi nomi modelli v1 (es. gpt-3.5, gpt-4-browsing), consigliamo di aggiornare a modelli contemporanei v2 (es. gpt-5.4, claude-opus-4-7, gemini-3.1-pro).
  3. I campi dello streaming NDJSON sono retrocompatibili: ogni evento text_delta include ancora delta_answer e id, quindi client che parsano delta_answer per riga non devono cambiare.
Dopo la migrazione puoi abilitare gradualmente le nuove funzionalità v2 (input multimodale message, SSE, chiamate strumenti, CRUD con action) secondo i tuoi tempi.

Gestione errori

Le risposte di errore hanno formato uniforme:
Errori comuni:
  • 400 bad_request: campi obbligatori mancanti, tool_use_id non corrispondente, schema messages non valido, ecc.
  • 401 invalid_token: header authorization errato.
  • 404 not_found: id conversazione non trovato in action: retrieve / update / delete.
  • 429 too_many_requests: limite di velocità superato.
  • 500 chat_error: errore upstream LLM o completion_tokens=0 (non conteggiato, senza addebito).
Nello streaming, gli errori sono inviati come evento {"type":"error","message":"..."}, seguito dalla chiusura del flusso.

Conclusione

L’API AI Chat v2 mantiene la retrocompatibilità con v1 e trasforma la conversazione da semplice Q&A singolo/multi-turno a un dialogo agent-based osservabile: input multimodale, chiamata strumenti, sospensione/ripresa, eventi strutturati in streaming, CRUD integrato. Si consiglia di adottare direttamente v2 per nuovi progetti; chi ha integrazioni v1 può migrare gradualmente senza interruzioni. Per qualsiasi domanda, contatta il nostro supporto tecnico.