Zum Hauptinhalt springen
Wir wissen, dass die Integration einiger Frage-Antwort-APIs auf dem Markt relativ schwierig sein kann, wie zum Beispiel die Chat Completions API von OpenAI. Sie hat ein messages-Feld, und um eine fortlaufende Konversation abzuschließen, müssen wir den gesamten Kontextverlauf übermitteln und gleichzeitig das Problem der Token-Übergrenze behandeln. Die von AceDataCloud bereitgestellte AI Frage-Antwort-API wurde für diese Situation optimiert. Sie kapselt die Implementierung fortlaufender Gespräche, ohne dass man sich um die Übermittlung von Messages kümmern muss, und auch nicht um das Problem der Token-Übergrenze (dies wird intern von der API automatisch behandelt). Außerdem bietet sie Funktionen zur Abfrage und Modifikation von Gesprächen, was die gesamte Integration erheblich vereinfacht. Dieses Dokument wird die Integrationsanleitung der AI Frage-Antwort-API vorstellen.

Antragsprozess

Um die API zu nutzen, müssen Sie zunächst auf die entsprechende Seite der AI Frage-Antwort-API gehen und den entsprechenden Dienst beantragen. Nach dem Betreten der Seite klicken Sie auf die Schaltfläche „Acquire“, wie im Bild gezeigt: Wenn Sie noch nicht angemeldet oder registriert sind, werden Sie automatisch zur Anmeldeseite weitergeleitet, um sich zu registrieren und anzumelden. Nach der Anmeldung werden Sie automatisch zur aktuellen Seite zurückgeleitet. Bei der ersten Beantragung gibt es ein kostenloses Kontingent, mit dem Sie die API kostenlos nutzen können.

Grundlegende Nutzung

Zunächst sollten Sie die grundlegende Nutzung verstehen, nämlich eine Frage einzugeben und eine Antwort zu erhalten. Dazu müssen Sie einfach ein question-Feld übermitteln und das entsprechende Modell angeben. Zum Beispiel, wenn Sie fragen: „Wie heißen Sie?“, können wir die entsprechenden Inhalte im Interface ausfüllen, wie im Bild gezeigt: Hier haben wir die Request Headers festgelegt, einschließlich:
  • accept: In welchem Format Sie die Antwort erhalten möchten, hier eingetragen als application/json, also im JSON-Format.
  • authorization: Der Schlüssel zur Nutzung der API, den Sie nach der Beantragung direkt auswählen können.
Außerdem haben wir den Request Body festgelegt, einschließlich:
  • model: Die Auswahl des Modells, wie zum Beispiel das gängige GPT 3.5, GPT 4 usw.
  • question: Die zu stellende Frage, die beliebigen reinen Text enthalten kann.
Nach der Auswahl können Sie sehen, dass auf der rechten Seite der entsprechende Code generiert wurde, wie im Bild gezeigt:

Klicken Sie auf die Schaltfläche „Try“, um einen Test durchzuführen, wie im obigen Bild gezeigt. Hier haben wir folgendes Ergebnis erhalten:
{
  "answer": "Ich bin ein KI-Sprachmodell, das von OpenAI entwickelt wurde, und ich habe keinen persönlichen Namen. Sie können mich jedoch GPT oder einfach Chatbot nennen. Wie kann ich Ihnen heute helfen?"
}
Hier sehen wir, dass das zurückgegebene Ergebnis ein answer-Feld enthält, das die Antwort auf die Frage ist. Sie können beliebige Fragen eingeben und erhalten beliebige Antworten. Wenn Sie keine Unterstützung für mehrstufige Gespräche benötigen, kann diese API Ihre Integration erheblich erleichtern. Wenn Sie außerdem den entsprechenden Integrationscode generieren möchten, können Sie ihn direkt kopieren, zum Beispiel sieht der CURL-Code wie folgt aus:
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": "Wie heißen Sie?"
}'
Der Python-Integrationscode sieht wie folgt aus:
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": "Wie heißen Sie?"
}

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

Mehrstufige Gespräche

Wenn Sie die Funktion für mehrstufige Gespräche integrieren möchten, müssen Sie einen zusätzlichen Parameter stateful übermitteln, dessen Wert true ist. Bei jeder nachfolgenden Anfrage muss dieser Parameter mit übermittelt werden. Nachdem der stateful-Parameter übermittelt wurde, gibt die API zusätzlich einen id-Parameter zurück, der die ID des aktuellen Gesprächs darstellt. Bei nachfolgenden Anfragen müssen Sie nur diese ID als Parameter übermitteln, um mehrstufige Gespräche einfach zu realisieren. Hier zeigen wir die konkreten Schritte. Bei der ersten Anfrage setzen Sie den stateful-Parameter auf true und übermitteln die Parameter model und question wie im Bild gezeigt: Der entsprechende Code sieht wie folgt aus:
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": "Wie heißen Sie?",
  "stateful": true
}'
Sie erhalten folgende Antwort:
{
  "answer": "Ich bin ein KI-Sprachmodell, das von OpenAI erstellt wurde, und ich habe keinen persönlichen Namen. Sie können mich einfach OpenAI oder ChatGPT nennen. Wie kann ich Ihnen heute helfen?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
Bei der zweiten Anfrage übermitteln Sie das in der ersten Anfrage zurückgegebene id-Feld als Parameter, während der stateful-Parameter weiterhin auf true gesetzt ist, und fragen „Was habe ich Ihnen gerade gefragt?“, wie im Bild gezeigt: Der entsprechende Code sieht wie folgt aus:
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": "Was habe ich Ihnen gerade gefragt?"
}'
Das Ergebnis sieht wie folgt aus:
{
  "answer": "Sie haben mich gefragt, wie mein Name ist. Als KI-Sprachmodell habe ich keine persönliche Identität, daher habe ich keinen spezifischen Namen. Sie können mich jedoch als OpenAI oder ChatGPT bezeichnen, die Namen, die für dieses KI-Modell verwendet werden. Gibt es noch etwas, bei dem ich Ihnen helfen kann?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
Sie können sehen, dass die Fragen basierend auf dem Kontext beantwortet werden können.

Stream-Antwort

Diese Schnittstelle unterstützt auch Stream-Antworten, was für die Integration in Webseiten sehr nützlich ist, da es ermöglicht, die Ergebnisse zeilenweise anzuzeigen. Wenn Sie eine Stream-Antwort zurückgeben möchten, können Sie den accept-Parameter im Request-Header ändern und auf application/x-ndjson setzen. Die Änderung sieht wie im Bild gezeigt aus, aber der Aufrufcode muss entsprechend geändert werden, um Stream-Antworten zu unterstützen. Nachdem Sie accept auf application/x-ndjson geändert haben, gibt die API die entsprechenden JSON-Daten zeilenweise zurück. Auf der Code-Ebene müssen wir entsprechende Änderungen vornehmen, um die zeilenweisen Ergebnisse zu erhalten. Python-Beispielaufrufcode:
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": "Hallo"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
Die Ausgabe sieht wie folgt aus:
{"answer": "Hallo", "delta_answer": "Hallo", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hallo!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hallo! Wie", "delta_answer": " Wie", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hallo! Wie kann", "delta_answer": " kann", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hallo! Wie kann ich", "delta_answer": " ich", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hallo! Wie kann ich helfen", "delta_answer": " helfen", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hallo! Wie kann ich helfen Ihnen", "delta_answer": " Ihnen", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hallo! Wie kann ich helfen Ihnen heute", "delta_answer": " heute", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Hallo! Wie kann ich helfen Ihnen heute?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
Man sieht, dass die answer in der Antwort der neueste Antwortinhalt ist, während delta_answer den neuen Antwortinhalt darstellt, den Sie je nach Ergebnis in Ihr System integrieren können. JavaScript wird ebenfalls unterstützt, zum Beispiel der Code für den Streaming-Aufruf in Node.js sieht wie folgt aus:
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: "Hallo",
  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-Beispielcode:
String url = "https://api.acedata.cloud/aichat/conversations";
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"question\": \"Hallo\", \"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("Unerwarteter Code " + response);
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(response.body().byteStream(), "UTF-8"))) {
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                System.out.println(responseLine);
            }
        }
    }
});
Andere Sprachen können ebenfalls selbst umgeschrieben werden, das Prinzip ist dasselbe.

Modellvorgaben

Wir wissen, dass die OpenAI-API ein entsprechendes Konzept von system_prompt hat, das dem gesamten Modell eine Vorgabe gibt, wie zum Beispiel, wie es heißt usw. Diese AI-Frage-Antwort-API hat auch diesen Parameter, der preset genannt wird. Damit können wir dem Modell Vorgaben hinzufügen. Lassen Sie uns ein Beispiel ausprobieren: Hier fügen wir das Feld preset hinzu, dessen Inhalt Du bist ein professioneller Künstler ist, wie im Bild gezeigt: Der entsprechende Code sieht wie folgt aus:
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": "Was kannst du mir helfen?",
  "preset": "Du bist ein professioneller Künstler"
}'
Das Ergebnis sieht wie folgt aus:
{
    "answer": "Als professioneller Künstler kann ich eine Reihe von Dienstleistungen und Unterstützung anbieten, je nach Ihren spezifischen Bedürfnissen. Hier sind einige Möglichkeiten, wie ich Ihnen helfen kann:\n\n1. Individuelle Kunstwerke: Wenn Sie eine bestimmte Vision oder Idee haben, kann ich individuelle Kunstwerke für Sie erstellen. Dies kann Malerei, Zeichnungen, digitale Kunst oder jedes andere Medium umfassen, das Sie bevorzugen.\n\n2. Beauftragte Stücke: Wenn Sie ein bestimmtes Thema oder Konzept im Kopf haben, kann ich beauftragte Kunstwerke erstellen, die auf Ihre Vorlieben zugeschnitten sind. Dies könnte zur persönlichen Freude oder als einzigartiges Geschenk für jemanden Besonderen sein.\n\n3. Kunstberatung: Wenn Sie Anleitung zur Kunstauswahl, Innendesign oder zur Präsentation und Ausstellung von Kunst in Ihrem Raum benötigen, kann ich professionelle Ratschläge geben, um Ihr ästhetisches Empfinden zu verbessern und einen kohärenten Look zu schaffen."
}
Man sieht, dass wir GPT hier gesagt haben, dass es ein Roboter ist, und dann gefragt haben, was es für uns tun kann, und es kann die Rolle eines Roboters übernehmen, um Fragen zu beantworten.

Bilderkennung

Diese AI unterstützt auch das Hinzufügen von Anhängen zur Bilderkennung, indem Sie über references den entsprechenden Bildlink übermitteln, zum Beispiel habe ich hier ein Bild von einem Apfel, wie im Bild gezeigt: Der Link zu diesem Bild ist https://cdn.acedata.cloud/ht05g0.png, wir übergeben ihn einfach als references-Parameter. Es ist auch wichtig zu beachten, dass das Modell ein Modell zur visuellen Erkennung unterstützen muss, derzeit wird gpt-4-vision unterstützt, also sieht die Eingabe wie folgt aus: Der entsprechende Code sieht wie folgt aus:
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": "Wie viele Äpfel sind auf dem Bild?",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
Das Ergebnis sieht wie folgt aus:
{
  "answer": "Es sind 5 Äpfel auf dem Bild."
}
Man sieht, dass wir erfolgreich die entsprechende Antwort auf das Bild erhalten haben.

Online-Fragen und -Antworten

Diese API unterstützt auch Online-Modelle, einschließlich GPT-3.5 und GPT-4, die beide unterstützt werden. Im Hintergrund der API gibt es einen automatischen Prozess, der das Internet durchsucht und zusammenfasst. Wir können das Modell auf gpt-3.5-browsing setzen, um es auszuprobieren, wie im Bild gezeigt: Der Code sieht wie folgt aus:
```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": "Wie ist das Wetter in New York heute?"
}'
Die Ausführungsergebnisse sind wie folgt:
{
  "answer": "Das Wetter in New York heute ist wie folgt:\n- Aktuelle Temperatur: 16°C (60°F)\n- Höchst: 16°C (60°F)\n- Tiefst: 10°C (50°F)\n- Luftfeuchtigkeit: 47%\n- UV-Index: 6 von 11\n- Sonnenaufgang: 5:42 Uhr\n- Sonnenuntergang: 20:02 Uhr\n\nEs ist bewölkt mit der Möglichkeit von gelegentlichen Schauern in der Nacht, und die Regenwahrscheinlichkeit liegt bei 50%.\nFür weitere Details können Sie [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84) besuchen.\n\nGibt es noch etwas, das Sie wissen möchten?"
}
Es ist zu sehen, dass es automatisch die Website von The Weather Channel durchsucht hat und die Informationen daraus erhalten hat, um dann die aktuellen Ergebnisse zurückzugeben.
Wenn höhere Anforderungen an die Qualität der Modellantworten bestehen, kann das Modell auf gpt-4-browsing geändert werden, die Antwortqualität wird besser sein.