/aichat2/conversations) è l’interfaccia di conversazione di nuova generazione, una versione completamente aggiornata della AI Chat API. Sulla base della semplicità di v1 e della gestione delle conversazioni multi-turno, espande:
- Input utente multimodale: attraverso il campo strutturato
messageè possibile inviare direttamente blocchi di testo + immagini + file, senza doverli prima allegare indirettamente tramitereferences. - Chiamate di strumenti agentici: include una serie di strumenti per la ricerca online, il recupero di pagine web, la lettura di file e altro, e può collegare server MCP autorizzati dall’utente (Google Drive, Notion, Slack, GitHub ecc.); il modello può chiamare autonomamente gli strumenti più volte in una singola richiesta per completare attività complesse.
- Eventi di streaming strutturati: tramite
accept: text/event-streamoapplication/x-ndjsonè possibile ottenere eventi qualitext_delta,tool_use,tool_result,thinking,citation,card,artifacte altri, token per token, semplificando il rendering separato nel frontend in base al tipo corrispondente. - Interrompibile / ripristinabile: quando il modello necessita di ulteriori informazioni dall’utente, emette un evento
ask_user_questione si mette in pausa; alla chiamata successiva è possibile continuare compilando la risposta tramitetool_results. - Nuove azioni CRUD: sullo stesso endpoint, utilizzare il campo
actionper completareretrieve/retrieve_batch/update/delete, senza necessità di API aggiuntive per la gestione delle conversazioni. - Elenco dei modelli costantemente aggiornato: per impostazione predefinita integra modelli contemporanei come GPT-5.4, Claude Opus 4.8, Claude Sonnet 4.6, Gemini 3.1 Pro, GLM 5.1, DeepSeek V4, Kimi K3 e altri.
model + question (+ opzionalmente stateful / id / references / preset) per ottenere una risposta JSON {answer, id} equivalente a v1; pertanto, per migrare da /aichat/conversations non è necessario riscrivere il client, basta sostituire il percorso con /aichat2/conversations.
Se stai attualmente utilizzando /aichat/conversations, la vecchia interfaccia continuerà a essere disponibile e potrai migrare secondo i tuoi tempi.
Procedura di richiesta
Per utilizzare l’API AI Chat v2, vai prima alla console di Ace Data Cloud per ottenere il tuo API Token e conservarlo per l’uso.
Se non hai ancora effettuato l’accesso o la registrazione, verrai automaticamente reindirizzato alla pagina di accesso per registrarti ed effettuare l’accesso; al termine tornerai automaticamente alla pagina corrente.
Un solo API Token può chiamare tutti i servizi della piattaforma, senza doverne richiedere uno separatamente per ogni servizio. La prima richiesta include crediti gratuiti per una prova gratuita; quando i crediti non sono sufficienti, puoi ricaricare il saldo comune nella console.
📘 Documentazione completa: AI Chat v2 API →
Utilizzo di base
L’utilizzo più semplice è esattamente uguale a v1: passamodel + question e ottieni {answer, id}.
Esempio CURL:
model disponibili possono essere visualizzati direttamente nel menu a discesa del pannello Try sulla destra; le 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-miniecc. - Anthropic:
claude-opus-4-8,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-20251001ecc. - Google:
gemini-3.1-pro-preview,gemini-3.1-pro-preview,gemini-3.1-flash-image,gemini-3.1-pro-preview,gemini-2.5-flash-liteecc. - xAI:
grok-4ecc. - DeepSeek:
deepseek-v4-pro,deepseek-v4.1-flash,deepseek-v4-flash,deepseek-v3.2-exp,deepseek-r1-0528ecc. - Moonshot:
kimi-k3,kimi-k2.6,kimi-k2.5ecc. - Zhipu:
glm-5.3,glm-5.2,glm-5.1,glm-5,glm-5-turbo,glm-4.7,glm-4.5vecc.
Conversazione multi-turno
Come in v1, passastateful: true per attivare il salvataggio della conversazione; l’API restituirà un id; nelle richieste successive, basta riportare l’id per continuare la conversazione, senza dover gestire personalmente la cronologia dei messages.
Prima richiesta:
id:
statefulètrueper impostazione predefinita, ometterlo equivale a passare esplicitamentetrue. Se non vuoi che il server salvi questo turno di conversazione, puoi impostare esplicitamentestateful: false.
Risposta in streaming
v2 supporta due formati di streaming, selezionati in base all’headeraccept:
Esempio NDJSON
text_delta:
Esempio SSE
L’uso diEventSource nel browser non supporta corpi di richiesta personalizzati; si consiglia di usare fetch + parsing manuale per sezioni tramite \n\n:
Tipi di eventi streaming
Per i client che si interessano solo della risposta finale, concatenare il
content di tutti i text_delta equivale a answer nella modalità application/json.
Input multimodale
Se l’input dell’utente include immagini o file, passamessage (array) invece di question. Ogni elemento dell’array è un blocco di contenuto:
text— Testo normale, campotextobbligatorio.image_url— Immagine, campoimage_url.urlobbligatorio.file_url— File (PDF, CSV, TXT ecc.), campofile_url.urlobbligatorio.
Relazione con references di v1
Per compatibilità con i vecchi client, v2 riconosce ancora il campo references: ["https://...", ...]:
- I suffissi URL sono
jpg / jpeg / png / gif / bmp / webp / svg / heic / heif, convertiti automaticamente in blocchiimage_url; - le altre estensioni vengono convertite in blocchi
file_url; - se viene fornito contemporaneamente anche
question, allora viene anteposto come bloccotext.
/aichat2/conversations, e l’uso originale di references continua a funzionare normalmente.
Se è necessario un controllo più preciso (ad esempio inserire più immagini tra i testi, oppure se l’ordine è molto importante), usa direttamente l’array message.
Chiamate degli strumenti e MCP
Il principale miglioramento di v2 è che il modello può chiamare autonomamente strumenti per completare attività in più passaggi, ed è abilitato per impostazione predefinita, senza che il client debba effettuare alcuna configurazione aggiuntiva nella richiesta. Scenari comuni:- L’utente chiede «Cercami quali nuove mostre ci sono recentemente a Shanghai» → il modello chiama la ricerca web integrata → organizza i risultati in una risposta.
- L’utente chiede «Leggi questo PDF e poi scrivi un riepilogo» → il modello chiama file_read → scrive il riepilogo.
- L’utente ha già autorizzato Google Drive / GitHub / Notion ecc. in Connections → il modello può chiamare gli strumenti MCP corrispondenti per leggere e scrivere i relativi dati.
tool_use e tool_result, ad esempio:
tool_use / tool_result / card / citation; l’output finale del modello continua comunque a fluire tramite text_delta.
max_turns può limitare il numero massimo di cicli in cui il modello può richiamare autonomamente strumenti in questa richiesta; il limite predefinito è deciso dalla piattaforma. Impostarlo a un valore basso (ad esempio max_turns: 1) può forzare una singola risposta e non consentire alcuna chiamata di strumenti.
Esecuzione asincrona e autorizzazione non supervisionata
Se la tua chiamata proviene da un Webhook di avviso, CI/CD, sistema di monitoraggio o altre attività di backend, puoi impostareasync: true affinché l’interfaccia restituisca immediatamente l’ID dell’attività e continui l’esecuzione in background:
action: retrieve + id per interrogare il risultato della conversazione; puoi anche fornire callback_url, e al completamento dell’attività la piattaforma invierà { status, answer, usage, error } tramite POST al tuo indirizzo di callback. callback_url deve usare http / https e non può indicare direttamente localhost o un indirizzo IP privato letterale.
Di solito nelle attività di background non c’è nessuno che possa fare clic per confermare. Se desideri che determinate Skill o MCP Server eseguano azioni come invio, pubblicazione, scrittura ecc. in modalità non supervisionata, passa esplicitamente un elenco di pre-autorizzazione nel corpo della richiesta:
allowed_skills sono gli slug delle Skill connesse; i valori in allowed_mcp_servers sono gli slug degli MCP Server connessi. Le Skill / gli MCP Server non inclusi nella pre-autorizzazione, in modalità non supervisionata, possono comunque solo visualizzare in anteprima, effettuare dry-run o rifiutarsi di eseguire operazioni di scrittura.
Se è necessario un controllo più dettagliato, puoi anche usare l’equivalente oggetto unattended_policy:
--unattended-confirm o il corrispondente meccanismo di sicurezza; altrimenti continuerà a effettuare dry-run e non eseguirà direttamente operazioni di scrittura.
Riprendere una conversazione sospesa
Alcuni strumenti fanno sì che il modello «ponga una domanda all’utente»; in questo momento il modello emette un eventoask_user_question e la conversazione viene congelata nello stato awaiting_user_input:
id, reinserendo la risposta tramite tool_results:
tool_use_id nel corpo della richiesta deve corrispondere esattamente al tool_id al momento della sospensione; in caso contrario verrà restituito 400. Quando nella richiesta sono presenti contemporaneamente tool_results, question / message / references vengono tutti ignorati.
Se l’utente decide di abbandonare questa domanda, basta passare un nuovo question / message; la piattaforma contrassegnerà automaticamente la chiamata dello strumento sospesa come «saltata dall’utente».
Gestione delle conversazioni (CRUD)
v2 fornisce una gestione leggera delle conversazioni sullo stesso endpoint tramite il campoaction, senza necessità di aprire un’altra API.
action: retrieve —— Recuperare una conversazione
messages, model, title, tools_used e così via).
action: retrieve_batch —— Elenca i riepiloghi delle conversazioni
{ items: [...], total }. I riepiloghi non includono messages, quindi sono adatti per un elenco nella barra laterale; se l’utente apre una conversazione, usa poi action: retrieve per recuperare separatamente i suoi messaggi completi.
Parametri di filtro opzionali: user_id, application_id, model_group, model.
action: update —— Modifica il titolo o riscrive la cronologia
messages, ma il server eseguirà una rigorosa convalida dello schema (deve avere la forma ToolUseContent compressa); in caso contrario restituirà 400. In generale, si consiglia di usarlo solo per modificare title.
action: delete —— Elimina una conversazione
{ id, success: true }. Dopo l’eliminazione non sarà possibile ripristinarla, conferma prima di chiamarla.
Migrazione fluida da v1
Se stai già utilizzando/aichat/conversations, la migrazione a v2 non richiede quasi alcuna modifica al codice:
- Modifica l’URL da
https://api.acedata.cloud/aichat/conversationsahttps://api.acedata.cloud/aichat2/conversations. - Se in precedenza passavi nomi di modelli v1 (come
gpt-3.5,gpt-4-browsinge così via), quando passi a v2 è consigliabile aggiornare ai modelli contemporanei (comegpt-5.4,claude-opus-4-8,gemini-3.1-pro-previewe così via). - I campi del flusso NDJSON rimangono retrocompatibili: ogni evento
text_deltainclude ancoradelta_answereid, pertanto i client originali che analizzano riga per rigadelta_answernon richiedono modifiche.
message multimodale, SSE, chiamate di strumenti, CRUD action), procedendo secondo i tuoi ritmi.
Gestione degli errori
Le risposte di errore sono uniformemente nel formato:400 bad_request: campi obbligatori mancanti, mancata corrispondenza ditool_use_id, schema dimessagesnon valido e così via.401 invalid_token: l’headerauthorizationnon è corretto.404 not_found: la conversazione corrispondente aidnon esiste duranteaction: retrieve / update / delete.429 too_many_requests: è stato attivato il limite di velocità.500 chat_error: errore dell’LLM upstream ocompletion_tokens=0in questo turno (trattato come non consumato, non verrà addebitato).
{"type":"error","message":"..."}, subito dopo il flusso terminerà.

