/aichat2/conversations) è l’interfaccia conversazionale di nuova generazione, una versione completamente aggiornata della AI Chat API. Sulla base della semplicità di v1 e della gestione ospitata delle conversazioni multi-turno, estende:
- Input utente multimodale: tramite il campo strutturato
messageè possibile inviare direttamente blocchi di testo + immagini + file, senza doverli prima allegare indirettamente tramitereferences. - Chiamata di strumenti in stile Agent: integra una serie di strumenti per la ricerca web, il recupero di pagine web, la lettura di file e altro ancora, e può collegare server MCP autorizzati dall’utente (Google Drive, Notion, Slack, GitHub ecc.); il modello può chiamare autonomamente gli strumenti per più turni all’interno di una singola richiesta per completare attività complesse.
- Eventi di streaming strutturati: tramite
accept: text/event-streamoapplication/x-ndjsonè possibile ottenere eventi cometext_delta,tool_use,tool_result,thinking,citation,card,artifacttoken per token, facilitando il rendering separato nel frontend in base al tipo corrispondente. - Interrompibile / ripristinabile: quando il modello necessita che l’utente integri informazioni, emette un evento
ask_user_questione si mette in pausa; alla chiamata successiva è possibile continuare reinserendo la risposta tramitetool_results. - Nuove azioni CRUD: sullo stesso endpoint, tramite il campo
action, è possibile completareretrieve/retrieve_batch/update/delete, senza necessitare di API aggiuntive per la gestione delle conversazioni. - Elenco di modelli continuamente 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; quindi, per migrare da /aichat/conversations non è necessario riscrivere il client, basta cambiare il percorso in /aichat2/conversations.
Se attualmente utilizzi /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, innanzitutto ottieni il tuo API Token dalla console di Ace Data Cloud e conservalo come riserva.
Se non hai ancora effettuato l’accesso o la registrazione, verrai automaticamente reindirizzato alla pagina di accesso per registrarti e accedere; al termine, tornerai automaticamente alla pagina corrente.
Un solo API Token consente di chiamare tutti i servizi della piattaforma, senza doverne richiedere uno separatamente per ciascun servizio. Alla prima richiesta viene assegnato un credito gratuito, che consente di provare il servizio gratuitamente; quando il credito non è sufficiente, è possibile ricaricare il saldo universale nella console.
📘 Documentazione completa: AI Chat v2 API →
Utilizzo di base
L’utilizzo più semplice è esattamente uguale a v1: inviamodel + question e ottieni {answer, id}.
Esempio CURL:
model disponibili sono visibili 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.1-pro,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.
Conversazioni multi-turno
Come in v1, inviastateful: true per attivare il salvataggio della conversazione; l’API restituirà un id; nelle richieste successive, basta reinviare l’id per continuare la conversazione, senza dover gestire autonomamente la cronologia dei messaggi.
Prima richiesta:
id:
Il valore predefinito distatefulètrue; ometterlo equivale a passare esplicitamentetrue. Se non desideri 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
Sul lato browser, l’uso diEventSource non supporta corpi di richiesta personalizzati; si consiglia di usare fetch + analisi manuale suddivisa per \n\n:
Tipi di eventi in streaming
Per i client che si interessano solo della risposta finale, concatenare tutti i
content di text_delta equivale a answer nella modalità application/json.
Input multimodale
Se l’input dell’utente include immagini o file, passamessage (array) al posto 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 client precedenti, v2 continua a riconoscere il campo references: ["https://...", ...]:
- Il suffisso dell’URL è
jpg / jpeg / png / gif / bmp / webp / svg / heic / heif, viene automaticamente convertito in un bloccoimage_url; - Le altre estensioni vengono convertite in blocchi
file_url; - Se viene fornito contemporaneamente anche
question, viene anteposto come un bloccotext.
/aichat2/conversations; l’uso originale di references continua a funzionare normalmente.
Se serve un controllo più preciso (ad esempio, inserire più immagini tra i testi, oppure se l’ordine è importante), usa direttamente l’array message.
Chiamate di strumenti e MCP
Il miglioramento principale 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 il web search integrato → organizza i risultati in una risposta.
- L’utente chiede «Leggi questo PDF e poi scrivi un riassunto» → il modello chiama file_read → scrive un riassunto.
- 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 suoi 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 turni in cui il modello può richiamare autonomamente strumenti all’interno di questa richiesta; l’intervallo è 1–500 e, se omesso, il valore predefinito è 500. 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 presidiata
Se la tua chiamata proviene da Webhook di avvisi, CI/CD, sistemi di monitoraggio o altre attività in background, 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 dopo il 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 non c’è nessuno che possa fare clic per confermare le attività in background. Se desideri che determinate Skill o MCP Server eseguano azioni come invio, pubblicazione, scrittura ecc. in modalità non presidiata, passa esplicitamente un elenco di preautorizzazioni nel corpo della richiesta:
allowed_skills sono gli slug delle Skill connesse; i valori in allowed_mcp_servers sono gli slug dei MCP Server connessi. Le Skill / i MCP Server non inclusi nella preautorizzazione possono ancora solo visualizzare in anteprima, eseguire dry-run o rifiutare operazioni di scrittura in modalità non presidiata.
Se è necessario un controllo più granulare, puoi anche usare l’oggetto equivalente unattended_policy:
--unattended-confirm o il meccanismo di sicurezza corrispondente; altrimenti continuerà in dry-run e non eseguirà direttamente operazioni di scrittura.
Riprendere una conversazione in pausa
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 bloccata nello stato awaiting_user_input:
id, reinserendo la risposta tramite tool_results:
tool_use_id nel corpo della richiesta deve essere esattamente identico al tool_id al momento della pausa; in caso contrario verrà restituito 400. Quando nella richiesta è presente contemporaneamente tool_results, question / message / references vengono tutti ignorati.
Se l’utente decide di abbandonare questa domanda, passa direttamente un nuovo question / message; la piattaforma contrassegnerà automaticamente la chiamata dello strumento in pausa come «saltata dall’utente».
Gestione delle conversazioni (CRUD)
v2 fornisce una gestione leggera delle conversazioni tramite il campoaction sullo stesso endpoint, senza necessità di aprire un’altra API.
action: retrieve —— Recuperare una conversazione
messages, model, title, tools_used e così via).
action: retrieve_batch —— Elencare 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 quindi action: retrieve per recuperare separatamente i suoi messaggi completi.
Parametri di filtro opzionali: user_id, application_id, model_group, model.
action: update —— Modificare il titolo o riscrivere la cronologia
messages, ma il server eseguirà una rigorosa convalida dello schema (deve essere nel formato ToolUseContent compresso); se non è conforme, verrà restituito 400. In genere è consigliato usarlo solo per modificare title.
action: delete —— Eliminare una conversazione
{ id, success: true }. Dopo l’eliminazione non può essere recuperata, conferma prima di chiamare.
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-browsing, ecc.), quando passi a v2 è consigliabile aggiornare ai modelli contemporanei (comegpt-5.4,claude-opus-4-8,gemini-3.1-pro-preview, ecc.). - I campi del flusso NDJSON rimangono retrocompatibili: ogni evento
text_deltacontinua a includeredelta_answereid, pertanto i client esistenti che analizzanodelta_answerriga per riga non richiedono modifiche.
message multimodale, SSE, chiamate agli strumenti, CRUD action), procedendo secondo i tuoi ritmi.
Gestione degli errori
Le risposte di errore hanno il formato uniforme:400 bad_request: campi obbligatori mancanti, mancata corrispondenza ditool_use_id, schema dimessagesnon valido, ecc.401 invalid_token: intestazioneauthorizationnon corretta.404 not_found: la conversazione corrispondente aidnon esiste duranteaction: retrieve / update / delete.429 too_many_requests: è stato attivato il limite di frequenza.500 chat_error: errore dell’LLM upstream oppurecompletion_tokens=0in questo turno (trattato come non consumato, senza addebito).
{"type":"error","message":"..."}, dopodiché il flusso termina immediatamente.

