Hoppa till huvudinnehåll
Vi vet att integrationen av vissa fråge- och svar-API:er på marknaden fortfarande inte är så enkel, som till exempel OpenAI:s Chat Completions API, som har ett messages-fält. För att slutföra en kontinuerlig konversation måste vi skicka hela kontexthistoriken, samtidigt som vi också måste hantera problemet med att token överskrider gränsen. AceDataCloud:s AI-fråge- och svar-API har optimerats för ovanstående situationer. Utan att påverka fråge- och svarsresultatet har implementeringen av kontinuerliga konversationer kapslats in, så att man vid integrationen inte längre behöver oroa sig för att skicka messages, och inte heller för att token överskrider gränsen (API:t hanterar detta automatiskt internt). Dessutom erbjuder det funktioner för att fråga, ändra och mer, vilket gör hela integrationen mycket enklare. Detta dokument kommer att introducera integrationsbeskrivningen för AI-fråge- och svar-API:t.

Ansökningsprocess

För att använda API:t måste du först gå till AI-fråge- och svar-API motsvarande sida för att ansöka om den tjänst som behövs. När du kommer till sidan, klicka på knappen “Acquire”, som visas i bilden: Om du inte har loggat in eller registrerat dig kommer du automatiskt att omdirigeras till inloggningssidan för att registrera dig och logga in. Efter att du har loggat in eller registrerat dig kommer du automatiskt att återvända till den aktuella sidan. Vid första ansökan kommer det att finnas en gratis kvot som ges, så att du kan använda API:t gratis.

Grundläggande användning

Först och främst, förstå den grundläggande användningsmetoden, vilket är att ställa en fråga och få ett svar. Du behöver bara enkelt skicka ett question-fält och ange motsvarande modell. Till exempel, fråga: “What’s your name?”, så kan vi fylla i motsvarande innehåll på gränssnittet, som visas i bilden: Här kan vi se att vi har ställt in Request Headers, inklusive:
  • accept: vilken typ av format du vill ta emot som svar, här anges application/json, det vill säga JSON-format.
  • authorization: nyckeln för att anropa API:t, efter ansökan kan du direkt välja från rullgardinsmenyn.
Dessutom har vi ställt in Request Body, inklusive:
  • model: valet av modell, som till exempel de populära GPT 3.5, GPT 4 osv.
  • question: frågan som ska ställas, kan vara vilken ren text som helst.
När du har gjort ditt val kan du se att det också har genererats motsvarande kod till höger, som visas i bilden:

Klicka på knappen “Try” för att testa, som visas i bilden ovan, här får vi följande resultat:
{
  "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?"
}
Vi kan se att det returnerade resultatet innehåller ett answer-fält, vilket är svaret på frågan. Vi kan ställa vilken fråga som helst och få vilket svar som helst. Om du inte behöver något stöd för fleromgångs-konversationer kan detta API avsevärt förenkla din integration. Om du dessutom vill generera motsvarande integrationskod kan du direkt kopiera den som genererats, till exempel CURL-koden nedan:
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?"
}'
Python-integrationskoden ser ut så här:
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)

Fleromgångs-konversation

Om du vill integrera fleromgångs-konversationsfunktionen måste du skicka ett extra parameter stateful, vars värde är true. Varje efterföljande begäran måste också inkludera detta parameter. När stateful-parametern har skickats kommer API:t att returnera ett extra id-parameter, som representerar ID:t för den aktuella konversationen. Därefter behöver vi bara skicka detta ID som parameter för att enkelt genomföra fleromgångs-konversationer. Låt oss demonstrera den specifika operationen. Vid första begäran, ställ in stateful-parametern till true, och skicka normalt model och question-parametrarna, som visas i bilden: Motsvarande kod ser ut så här:
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
}'
Vi får följande svar:
{
  "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"
}
Vid andra begäran, skicka id-fältet som returnerades från första begäran som parameter, samtidigt som stateful-parametern fortfarande är inställd på true, och fråga “What I asked you just now?”, som visas i bilden: Motsvarande kod ser ut så här:
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?"
}'
Resultatet blir:
{
  "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"
}
Vi kan se att vi kan svara på motsvarande frågor baserat på kontexten.

Strömmande svar

Detta API stöder också strömmande svar, vilket är mycket användbart för webbintegration och kan göra att webbsidan visar resultatet tecken för tecken. Om du vill ha strömmande svar kan du ändra accept-parametern i begärans huvud till application/x-ndjson. Ändringen visas i bilden, men anropskoden behöver göras motsvarande ändringar för att stödja strömmande svar. När accept har ändrats till application/x-ndjson, kommer API:t att returnera motsvarande JSON-data rad för rad, och på kodnivå behöver vi göra nödvändiga ändringar för att få radresultaten. Python-exempel på anropskod:
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": "Hej"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
Utdataeffekten ser ut som följer:
{"answer": "Hej", "delta_answer": "Hej", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hej!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hej! Hur", "delta_answer": " Hur", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hej! Hur kan", "delta_answer": " kan", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hej! Hur kan jag", "delta_answer": " jag", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hej! Hur kan jag hjälpa", "delta_answer": " hjälpa", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hej! Hur kan jag hjälpa dig", "delta_answer": " dig", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hej! Hur kan jag hjälpa dig idag", "delta_answer": " idag", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hej! Hur kan jag hjälpa dig idag?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
Vi kan se att svaret i answer är det senaste svaret, medan delta_answer är det nya svaret, och du kan använda resultaten för att integrera dem i ditt system. JavaScript stöds också, till exempel Node.js strömmande anrop kod ser ut som följer:
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: "Hej",
  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);
  });
Java exempel kod:
String url = "https://api.acedata.cloud/aichat/conversations";
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"question\": \"Hej\", \"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("Oväntad kod " + response);
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(response.body().byteStream(), "UTF-8"))) {
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                System.out.println(responseLine);
            }
        }
    }
});
Andra språk kan skrivas om på egen hand, principen är densamma.

Modellförinställningar

Vi vet att OpenAI relaterade API:er har ett motsvarande koncept av system_prompt, vilket är att ställa in en förinställning för hela modellen, till exempel vad den heter osv. Denna AI-fråge-API har också exponerat denna parameter, kallad preset, med hjälp av den kan vi lägga till förinställningar till modellen, vi använder ett exempel för att uppleva detta: Här lägger vi till preset-fältet, innehållet är Du är en professionell konstnär, som visas i bilden: Motsvarande kod ser ut som följer:
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": "Vad kan du hjälpa mig med?",
  "preset": "Du är en professionell konstnär"
}'
Körningsresultatet ser ut som följer:
{
    "answer": "Som en professionell konstnär kan jag erbjuda en rad tjänster och hjälp beroende på dina specifika behov. Här är några sätt jag kan hjälpa dig:\n\n1. Anpassad konst: Om du har en specifik vision eller idé kan jag skapa anpassad konst för dig. Detta kan inkludera målningar, teckningar, digital konst eller något annat medium du föredrar.\n\n2. Beställda verk: Om du har ett specifikt ämne eller koncept i åtanke kan jag skapa beställda konstverk anpassade efter dina preferenser. Detta kan vara för personlig njutning eller som en unik gåva till någon speciell.\n\n3. Konst konsultation: Om du behöver vägledning om konstval, inredningsdesign eller hur man visar och presenterar konst i ditt utrymme kan jag ge professionell rådgivning för att hjälpa till att förbättra din estetiska känsla och skapa en sammanhängande look."
}
Vi kan se att vi här berättade för GPT att den är en robot och sedan frågade vad den kan göra för oss, så kan den spela en robots roll för att svara på frågor.

Bildigenkänning

Denna AI kan också stödja att lägga till bilagor för bildigenkänning genom att överföra motsvarande bildlänk via references, till exempel har jag här en bild av ett äpple, som visas i bilden: Länken till bilden är https://cdn.acedata.cloud/ht05g0.png, vi överför den direkt som references-parameter, samtidigt som vi behöver notera att modellen måste välja en modell som stöder visuell igenkänning, för närvarande stöds gpt-4-vision, så inmatningen ser ut som följer: Motsvarande kod ser ut som följer:
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": "Hur många äpplen finns det på bilden?",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
Körningsresultatet ser ut som följer:
{
  "answer": "Det finns 5 äpplen på bilden."
}
Vi kan se att vi framgångsrikt fått det motsvarande svaret på bilden.

Internetfrågor

Denna API stöder också internetmodeller, inklusive både GPT-3.5 och GPT-4, som kan stödja, i API:et finns en automatisk sökning på internet och sammanfattning, vi kan välja modellen som gpt-3.5-browsing för att uppleva detta, som visas i bilden: Koden ser ut som följer:
```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": "Hur är vädret i New York idag?"
}'
Körningsresultatet är som följer:
{
  "answer": "Vädret i New York idag är som följer:\n- Aktuell temperatur: 16°C (60°F)\n- Hög: 16°C (60°F)\n- Låg: 10°C (50°F)\n- Luftfuktighet: 47%\n- UV-index: 6 av 11\n- Soluppgång: 5:42 am\n- Solnedgång: 8:02 pm\n\nDet är molnigt med en chans för sporadiska skurar under natten, och chansen för regn är 50%.\nFör mer information kan du besöka [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\nÄr det något annat du skulle vilja veta?"
}
Det kan ses att den automatiskt sökte på The Weather Channel-webbplatsen och fick information därifrån, och sedan vidare returnerade realtidsresultatet.
Om du har högre krav på modellens svarskvalitet kan du byta modellen till gpt-4-browsing, svaret kommer att bli bättre.