Passer au contenu principal
Nous savons que l’intégration de certaines API de questions-réponses sur le marché n’est pas toujours facile, comme l’API Chat Completions d’OpenAI, qui a un champ messages. Pour compléter une conversation continue, nous devons transmettre tout l’historique du contexte et gérer le problème de dépassement de limite de Token. L’API de questions-réponses AI fournie par AceDataCloud a été optimisée pour cette situation. Tout en garantissant que l’efficacité des questions-réponses reste inchangée, l’implémentation des conversations continues a été encapsulée. Lors de l’intégration, il n’est plus nécessaire de se soucier de la transmission des messages, ni de la gestion des problèmes de dépassement de limite de Token (traitement automatique en interne par l’API). De plus, elle offre des fonctionnalités de requête et de modification de conversation, simplifiant ainsi considérablement l’intégration globale. Ce document présentera les instructions d’intégration de l’API de questions-réponses AI.

Processus de demande

Pour utiliser l’API, vous devez d’abord vous rendre sur la page correspondante de l’API de questions-réponses AI pour demander le service correspondant. Une fois sur la page, cliquez sur le bouton « Acquire », comme illustré ci-dessous : Si vous n’êtes pas encore connecté ou inscrit, vous serez automatiquement redirigé vers la page de connexion pour vous inviter à vous inscrire et à vous connecter. Après vous être connecté ou inscrit, vous serez automatiquement renvoyé à la page actuelle. Lors de la première demande, un quota gratuit sera offert, vous permettant d’utiliser cette API gratuitement.

Utilisation de base

Tout d’abord, comprenons la méthode d’utilisation de base, qui consiste à poser une question et à obtenir une réponse. Il suffit de transmettre un champ question et de spécifier le modèle correspondant. Par exemple, en demandant : « What’s your name ? », nous pouvons ensuite remplir le contenu correspondant sur l’interface, comme illustré ci-dessous : Nous pouvons voir ici que nous avons défini les en-têtes de requête, y compris :
  • accept : le format de réponse souhaité, ici rempli avec application/json, c’est-à-dire au format JSON.
  • authorization : la clé d’API, que vous pouvez sélectionner directement après la demande.
De plus, nous avons défini le corps de la requête, y compris :
  • model : le choix du modèle, comme les modèles populaires GPT 3.5, GPT 4, etc.
  • question : la question à poser, qui peut être n’importe quel texte brut.
Après avoir fait votre choix, vous pouvez constater que le code correspondant a également été généré à droite, comme illustré ci-dessous :

Cliquez sur le bouton « Try » pour effectuer un test, comme indiqué ci-dessus, et nous avons obtenu le résultat suivant :
{
  "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?"
}
Nous pouvons voir que le résultat retourné contient un champ answer, qui est la réponse à la question. Nous pouvons poser n’importe quelle question et obtenir n’importe quelle réponse. Si vous n’avez pas besoin de support pour des conversations multi-tours, cette API peut grandement faciliter votre intégration. De plus, si vous souhaitez générer le code d’intégration correspondant, vous pouvez le copier directement, par exemple, le code CURL est le suivant :
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?"
}'
Le code d’intégration en Python est le suivant :
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)

Conversations multi-tours

Si vous souhaitez intégrer la fonctionnalité de conversation multi-tours, vous devez transmettre un paramètre supplémentaire stateful, dont la valeur doit être true. Pour chaque requête ultérieure, ce paramètre doit être inclus. Après avoir transmis le paramètre stateful, l’API renverra également un paramètre id, représentant l’ID de la conversation actuelle. Par la suite, il vous suffira de transmettre cet ID comme paramètre pour réaliser facilement des conversations multi-tours. Voyons maintenant une démonstration des opérations spécifiques. Pour la première requête, définissez le paramètre stateful sur true, et transmettez normalement les paramètres model et question, comme illustré ci-dessous : Le code correspondant est le suivant :
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
}'
Vous pouvez obtenir la réponse suivante :
{
  "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"
}
Pour la deuxième requête, transmettez le champ id retourné par la première requête comme paramètre, tout en maintenant le paramètre stateful sur true, en demandant « What I asked you just now ? », comme illustré ci-dessous : Le code correspondant est le suivant :
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?"
}'
Le résultat est le suivant :
{
  "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"
}
Nous pouvons voir qu’il est possible de répondre aux questions en fonction du contexte.

Réponse en continu

Cette interface prend également en charge les réponses en continu, ce qui est très utile pour l’intégration sur le web, permettant d’afficher les résultats caractère par caractère. Si vous souhaitez obtenir une réponse en continu, vous pouvez modifier le paramètre accept dans les en-têtes de requête, en le changeant en application/x-ndjson. La modification est illustrée ci-dessous, mais le code d’appel doit également être modifié pour prendre en charge les réponses en continu. Après avoir changé accept en application/x-ndjson, l’API renverra les données JSON correspondantes ligne par ligne. Au niveau du code, nous devons faire les modifications nécessaires pour obtenir les résultats ligne par ligne. Exemple de code d’appel en 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": "Bonjour"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
Sortie comme suit :
{"answer": "Bonjour", "delta_answer": "Bonjour", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Bonjour!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Bonjour! Comment", "delta_answer": " Comment", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Bonjour! Comment puis-je", "delta_answer": " puis-je", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Bonjour! Comment puis-je vous", "delta_answer": " vous", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Bonjour! Comment puis-je vous aider", "delta_answer": " aider", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Bonjour! Comment puis-je vous aider aujourd'hui", "delta_answer": " aujourd'hui", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Bonjour! Comment puis-je vous aider aujourd'hui?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
On peut voir que la réponse contient answer qui est le contenu de la dernière réponse, et delta_answer qui est le contenu de la réponse ajoutée, vous pouvez vous baser sur les résultats pour les intégrer dans votre système. JavaScript est également pris en charge, par exemple, le code d’appel en flux pour Node.js est comme suit :
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: "Bonjour",
  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);
  });
Exemple de code 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\": \"Bonjour\", \"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("Code inattendu " + response);
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(response.body().byteStream(), "UTF-8"))) {
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                System.out.println(responseLine);
            }
        }
    }
});
D’autres langages peuvent être réécrits séparément, le principe est le même.

Modèle de présélection

Nous savons que les API liées à OpenAI ont un concept de system_prompt, qui consiste à définir une présélection pour l’ensemble du modèle, par exemple, quel est son nom, etc. Cette API de questions-réponses AI expose également ce paramètre, appelé preset, en l’utilisant nous pouvons ajouter une présélection au modèle, prenons un exemple pour l’expérimenter : Ici, nous ajoutons un champ preset, dont le contenu est Vous êtes un artiste professionnel, comme illustré : Le code correspondant est comme suit :
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": "Que pouvez-vous m'aider?",
  "preset": "Vous êtes un artiste professionnel"
}'
Le résultat d’exécution est comme suit :
{
    "answer": "En tant qu'artiste professionnel, je peux offrir une gamme de services et d'assistance en fonction de vos besoins spécifiques. Voici quelques façons dont je peux vous aider :\n\n1. Œuvres d'art personnalisées : Si vous avez une vision ou une idée spécifique, je peux créer des œuvres d'art personnalisées pour vous. Cela peut inclure des peintures, des dessins, de l'art numérique ou tout autre médium que vous préférez.\n\n2. Pièces commandées : Si vous avez un sujet ou un concept spécifique en tête, je peux créer des pièces d'art commandées adaptées à vos préférences. Cela pourrait être pour un plaisir personnel ou comme un cadeau unique pour quelqu'un de spécial.\n\n3. Consultation artistique : Si vous avez besoin de conseils sur la sélection d'art, le design d'intérieur ou comment mettre en valeur et exposer l'art dans votre espace, je peux fournir des conseils professionnels pour aider à améliorer votre sens esthétique et créer un look cohérent."
}
On peut voir ici que nous avons dit à GPT qu’il est un robot, puis lui avons demandé ce qu’il pouvait faire pour nous, et il peut alors jouer le rôle d’un robot pour répondre aux questions.

Reconnaissance d’images

Cette AI peut également prendre en charge l’ajout de pièces jointes pour la reconnaissance d’images, en transmettant le lien de l’image correspondante via references, par exemple, j’ai ici une image de pomme, comme illustré : Le lien de cette image est https://cdn.acedata.cloud/ht05g0.png, nous le transmettons directement comme paramètre references, tout en notant que le modèle doit être choisi parmi ceux qui prennent en charge la reconnaissance visuelle, actuellement le modèle pris en charge est gpt-4-vision, donc l’entrée est comme suit : Le code correspondant est comme suit :
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": "Combien de pommes sur l'image?",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
Le résultat d’exécution est comme suit :
{
  "answer": "Il y a 5 pommes sur l'image."
}
On peut voir que nous avons réussi à obtenir la réponse correspondante à l’image.

Questions-réponses en ligne

Cette API prend également en charge les modèles en ligne, y compris GPT-3.5 et GPT-4, qui peuvent tous deux être pris en charge, derrière l’API il y a un processus de recherche automatique sur Internet et de résumé, nous pouvons choisir le modèle gpt-3.5-browsing pour l’expérimenter, comme illustré : Le code est comme suit :
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": "Quel temps fait-il à New York aujourd'hui ?"
}'
Le résultat de l’exécution est le suivant :
{
  "answer": "Le temps à New York aujourd'hui est le suivant :\n- Température actuelle : 16°C (60°F)\n- Maximum : 16°C (60°F)\n- Minimum : 10°C (50°F)\n- Humidité : 47%\n- Indice UV : 6 sur 11\n- Lever du soleil : 5h42\n- Coucher du soleil : 20h02\n\nIl y a des nuages avec une chance d'averses occasionnelles pendant la nuit, et la probabilité de pluie est de 50%.\nPour plus de détails, vous pouvez visiter [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\nY a-t-il autre chose que vous aimeriez savoir ?"
}
On peut voir qu’il a automatiquement recherché sur le site de The Weather Channel et a obtenu les informations à l’intérieur, puis a renvoyé les résultats en temps réel.
Si vous avez des exigences plus élevées concernant la qualité des réponses du modèle, vous pouvez changer le modèle en gpt-4-browsing, la qualité des réponses sera meilleure.