Vai al contenuto principale
Sappiamo che l’integrazione di alcune API di domande e risposte sul mercato non è sempre così semplice, come ad esempio l’API Chat Completions di OpenAI, che ha un campo messages. Per completare una conversazione continua, dobbiamo trasmettere tutta la storia del contesto e gestire anche il problema del superamento del limite di Token. L’API di domande e risposte AI fornita da AceDataCloud è stata ottimizzata per affrontare queste situazioni. Garantendo che l’efficacia delle risposte rimanga invariata, ha incapsulato l’implementazione delle conversazioni continue, senza la necessità di preoccuparsi della trasmissione dei messaggi o del superamento del limite di Token (gestito automaticamente all’interno dell’API). Inoltre, offre funzionalità per la consultazione e la modifica delle conversazioni, semplificando notevolmente l’integrazione complessiva. Questo documento presenterà le istruzioni per l’integrazione dell’API di domande e risposte AI.

Processo di Richiesta

Per utilizzare l’API, è necessario prima andare alla pagina corrispondente dell’API di domande e risposte AI per richiedere il servizio corrispondente. Una volta entrati nella pagina, cliccare sul pulsante “Acquire”, come mostrato nell’immagine: Se non sei ancora loggato o registrato, verrai automaticamente reindirizzato alla pagina di accesso per invitarti a registrarti e accedere. Dopo aver effettuato il login o la registrazione, verrai automaticamente riportato alla pagina corrente. Alla prima richiesta, verrà offerto un credito gratuito, che ti consente di utilizzare l’API senza costi.

Utilizzo di Base

Iniziamo a comprendere il modo di utilizzo di base, che consiste nell’inserire una domanda e ottenere una risposta, basta semplicemente trasmettere un campo question e specificare il modello corrispondente. Ad esempio, chiedendo: “What’s your name?”, possiamo quindi compilare il contenuto corrispondente nell’interfaccia, come mostrato nell’immagine: Possiamo vedere che qui abbiamo impostato le intestazioni della richiesta, tra cui:
  • accept: il formato della risposta desiderata, qui impostato su application/json, ovvero formato JSON.
  • authorization: la chiave per chiamare l’API, che può essere selezionata direttamente dopo la richiesta.
Inoltre, abbiamo impostato il corpo della richiesta, che include:
  • model: la scelta del modello, come i popolari GPT 3.5, GPT 4, ecc.
  • question: la domanda da porre, che può essere qualsiasi testo semplice.
Dopo aver effettuato la selezione, possiamo notare che a destra è stato generato il codice corrispondente, come mostrato nell’immagine:

Cliccando sul pulsante “Try” possiamo effettuare un test, come mostrato nell’immagine sopra, e abbiamo ottenuto il seguente risultato:
{
  "answer": "I am an AI language model developed by OpenAI and I don't have a personal name. However, you can call me GPT or simply Chatbot. How can I assist you today?"
}
Possiamo vedere che il risultato restituito contiene un campo answer, che è la risposta a quella domanda. Possiamo inserire qualsiasi domanda e ottenere qualsiasi risposta. Se non hai bisogno di alcun supporto per conversazioni multiple, questa API può semplificare notevolmente la tua integrazione. Inoltre, se desideri generare il codice di integrazione corrispondente, puoi semplicemente copiarlo, ad esempio il codice CURL è il seguente:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "question": "What's your name?"
}'
Il codice di integrazione in Python è il seguente:
import requests

url = "https://api.acedata.cloud/aichat/conversations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "gpt-3.5",
    "question": "What's your name?"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)

Conversazione Multipla

Se desideri integrare la funzionalità di conversazione multipla, è necessario trasmettere un parametro aggiuntivo stateful, il cui valore deve essere true. Ogni richiesta successiva deve includere questo parametro. Dopo aver trasmesso il parametro stateful, l’API restituirà un parametro id aggiuntivo, che rappresenta l’ID della conversazione corrente. Successivamente, dovremo semplicemente trasmettere questo ID come parametro per realizzare facilmente conversazioni multiple. Di seguito mostriamo un’operazione specifica. La prima richiesta imposta il parametro stateful su true e trasmette normalmente i parametri model e question, come mostrato nell’immagine: Il codice corrispondente è il seguente:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "question": "What's your name?",
  "stateful": true
}'
Possiamo ottenere la seguente risposta:
{
  "answer": "I am an AI language model created by OpenAI and I don't have a personal name. You can simply call me OpenAI or ChatGPT. How can I assist you today?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
Nella seconda richiesta, trasmettiamo il campo id restituito dalla prima richiesta come parametro, mantenendo il parametro stateful impostato su true, e chiediamo “What I asked you just now?”, come mostrato nell’immagine: Il codice corrispondente è il seguente:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "stateful": true,
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916",
  "question": "What I asked you just now?"
}'
Il risultato è il seguente:
{
  "answer": "You asked me what my name is. As an AI language model, I do not possess a personal identity, so I don't have a specific name. However, you can refer to me as OpenAI or ChatGPT, the names used for this AI model. Is there anything else I can help you with?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
Possiamo vedere che ora possiamo rispondere a domande specifiche in base al contesto.

Risposta in Streaming

Questa interfaccia supporta anche la risposta in streaming, che è molto utile per l’integrazione web, consentendo di visualizzare il contenuto parola per parola. Se desideri restituire una risposta in streaming, puoi modificare il parametro accept nell’intestazione della richiesta, impostandolo su application/x-ndjson. La modifica è mostrata nell’immagine, ma il codice di chiamata deve essere adeguatamente modificato per supportare la risposta in streaming. Dopo aver modificato accept in application/x-ndjson, l’API restituirà i dati JSON riga per riga. A livello di codice, dobbiamo apportare le modifiche necessarie per ottenere i risultati riga per riga. Esempio di codice di chiamata in Python:
import requests

url = "https://api.acedata.cloud/aichat/conversations"

headers = {
    "accept": "application/x-ndjson",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "gpt-3.5",
    "stateful": True,
    "id": "7cdb293b-2267-4979-a1ec-48d9ad149916",
    "question": "Ciao"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
L’output è il seguente:
{"answer": "Ciao", "delta_answer": "Ciao", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Ciao!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Ciao! Come", "delta_answer": " Come", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Ciao! Come posso", "delta_answer": " posso", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Ciao! Come posso aiutarti", "delta_answer": " aiutarti", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Ciao! Come posso aiutarti?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
Possiamo vedere che la risposta contiene answer che è il contenuto della risposta più recente, delta_answer è il contenuto della risposta aggiunto, puoi integrare i risultati nel tuo sistema. Anche JavaScript è supportato, ad esempio il codice per la chiamata in streaming di Node.js è il seguente:
const axios = require("axios");

const url = "https://api.acedata.cloud/aichat/conversations";
const headers = {
  "Content-Type": "application/json",
  Accept: "application/x-ndjson",
  Authorization: "Bearer {token}",
};
const body = {
  question: "Ciao",
  model: "gpt-3.5",
  stateful: true,
};

axios
  .post(url, body, { headers: headers, responseType: "stream" })
  .then((response) => {
    console.log(response.status);
    response.data.on("data", (chunk) => {
      console.log(chunk.toString());
    });
  })
  .catch((error) => {
    console.error(error);
  });
Esempio di codice Java:
String url = "https://api.acedata.cloud/aichat/conversations";
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"question\": \"Ciao\", \"stateful\": true, \"model\": \"gpt-3.5\"}");
Request request = new Request.Builder()
        .url(url)
        .post(body)
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/x-ndjson")
        .addHeader("Authorization", "Bearer {token}")
        .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (!response.isSuccessful()) throw new IOException("Codice imprevisto " + response);
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(response.body().byteStream(), "UTF-8"))) {
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                System.out.println(responseLine);
            }
        }
    }
});
Altri linguaggi possono essere riscritti separatamente, il principio è lo stesso.

Modello predefinito

Sappiamo che le API correlate a OpenAI hanno un concetto di system_prompt, che è impostare un predefinito per l’intero modello, come il suo nome, ecc. Anche questa API di domande e risposte AI espone questo parametro, chiamato preset, utilizzandolo possiamo aggiungere un predefinito al modello, proviamo con un esempio: Qui aggiungiamo il campo preset, il contenuto è Sei un artista professionista, come mostrato nell’immagine: Il codice corrispondente è il seguente:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "stateful": true,
  "question": "Cosa puoi aiutarmi?",
  "preset": "Sei un artista professionista"
}'
Il risultato dell’esecuzione è il seguente:
{
    "answer": "Come artista professionista, posso offrire una gamma di servizi e assistenza a seconda delle tue esigenze specifiche. Ecco alcuni modi in cui posso aiutarti:\n\n1. Arte personalizzata: Se hai una visione o un'idea specifica, posso creare opere d'arte personalizzate per te. Questo può includere dipinti, disegni, arte digitale o qualsiasi altro mezzo tu preferisca.\n\n2. Opere su commissione: Se hai un soggetto o un concetto specifico in mente, posso creare opere d'arte su commissione su misura per le tue preferenze. Questo potrebbe essere per il tuo piacere personale o come regalo unico per qualcuno di speciale.\n\n3. Consultazione artistica: Se hai bisogno di guida sulla selezione dell'arte, design degli interni o su come mostrare e esporre l'arte nel tuo spazio, posso fornire consigli professionali per aiutarti a migliorare il tuo senso estetico e creare un aspetto coeso."
}
Possiamo vedere che qui abbiamo detto a GPT che è un robot e poi gli abbiamo chiesto cosa può fare per noi, e lui può interpretare il ruolo di un robot per rispondere alle domande.

Riconoscimento delle immagini

Questa AI supporta anche l’aggiunta di allegati per il riconoscimento delle immagini, passando il link dell’immagine corrispondente tramite references, ad esempio ho qui un’immagine di una mela, come mostrato nell’immagine: Il link dell’immagine è https://cdn.acedata.cloud/ht05g0.png, possiamo semplicemente passarlo come parametro references, e bisogna notare che il modello deve essere scelto per supportare il riconoscimento visivo, attualmente supportato è gpt-4-vision, quindi l’input è il seguente: Il codice corrispondente è il seguente:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-4-vision",
  "question": "Quante mele ci sono nell'immagine?",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
Il risultato dell’esecuzione è il seguente:
{
  "answer": "Ci sono 5 mele nell'immagine."
}
Possiamo vedere che abbiamo ottenuto con successo il risultato della risposta corrispondente all’immagine.

Domande e risposte in rete

Questa API supporta anche modelli connessi a Internet, inclusi GPT-3.5 e GPT-4, entrambi possono supportare, dietro l’API c’è un processo automatico di ricerca su Internet e sintesi, possiamo scegliere il modello come gpt-3.5-browsing per provare, come mostrato nell’immagine: Il codice è il seguente:
```shell
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5-browsing",
  "question": "Qual è il meteo di New York oggi?"
}'
Il risultato dell’esecuzione è il seguente:
{
  "answer": "Il meteo a New York oggi è il seguente:\n- Temperatura attuale: 16°C (60°F)\n- Massima: 16°C (60°F)\n- Minima: 10°C (50°F)\n- Umidità: 47%\n- Indice UV: 6 su 11\n- Alba: 5:42 am\n- Tramonto: 8:02 pm\n\nÈ nuvoloso con possibilità di occasionali rovesci durante la notte, e la possibilità di pioggia è del 50%.\nPer ulteriori dettagli, puoi visitare [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\nC'è qualcos'altro che vorresti sapere?"
}
Si può vedere che ha automaticamente cercato informazioni sul sito The Weather Channel e ha ottenuto le informazioni al suo interno, restituendo poi i risultati in tempo reale.
Se hai requisiti di qualità delle risposte del modello più elevati, puoi cambiare il modello in gpt-4-browsing, la qualità della risposta sarà migliore.