Saltar al contenido principal
Sabemos que la integración de algunas API de preguntas y respuestas en el mercado no es tan fácil, como la API de Chat Completions de OpenAI, que tiene un campo messages. Para completar un diálogo continuo, necesitamos transmitir todo el historial de contexto y también manejar el problema de los tokens que exceden el límite. La API de preguntas y respuestas de AceDataCloud ha optimizado esta situación, manteniendo la efectividad de las respuestas, encapsulando la implementación del diálogo continuo, de modo que no es necesario preocuparse por la transmisión de los mensajes ni por el problema de los tokens que exceden el límite (la API lo maneja automáticamente internamente). También ofrece funciones para consultar y modificar diálogos, lo que simplifica enormemente la integración. Este documento presentará la descripción de la integración de la API de preguntas y respuestas de AI.

Proceso de Solicitud

Para usar la API, primero debe ir a la página correspondiente de la API de preguntas y respuestas de AI para solicitar el servicio correspondiente. Una vez en la página, haga clic en el botón “Acquire”, como se muestra en la imagen: Si aún no ha iniciado sesión o registrado, será redirigido automáticamente a la página de inicio de sesión que lo invita a registrarse e iniciar sesión. Después de registrarse e iniciar sesión, será redirigido automáticamente a la página actual. En la primera solicitud, se le otorgará un crédito gratuito que le permitirá usar la API sin costo.

Uso Básico

Primero, comprenda la forma básica de uso, que consiste en ingresar una pregunta y obtener una respuesta. Solo necesita transmitir un campo question y especificar el modelo correspondiente. Por ejemplo, si pregunta: “¿Cuál es tu nombre?”, puede llenar el contenido correspondiente en la interfaz, como se muestra en la imagen: Aquí podemos ver que hemos configurado los Request Headers, que incluyen:
  • accept: el formato de respuesta que desea recibir, aquí se establece como application/json, es decir, formato JSON.
  • authorization: la clave para llamar a la API, que puede seleccionar directamente después de solicitarla.
Además, se ha configurado el Request Body, que incluye:
  • model: la selección del modelo, como los populares GPT 3.5, GPT 4, etc.
  • question: la pregunta que necesita hacer, que puede ser cualquier texto plano.
Después de seleccionar, puede notar que a la derecha también se ha generado el código correspondiente, como se muestra en la imagen:

Haga clic en el botón “Try” para realizar la prueba, como se muestra en la imagen anterior, y obtendremos el siguiente resultado:
{
  "answer": "Soy un modelo de lenguaje AI desarrollado por OpenAI y no tengo un nombre personal. Sin embargo, puedes llamarme GPT o simplemente Chatbot. ¿Cómo puedo asistirte hoy?"
}
Como puede ver, el resultado devuelto contiene un campo answer, que es la respuesta a la pregunta. Puede ingresar cualquier pregunta y obtener cualquier respuesta. Si no necesita soporte para diálogos múltiples, esta API puede facilitar enormemente su integración. Además, si desea generar el código de integración correspondiente, puede copiarlo directamente, por ejemplo, el código CURL es el siguiente:
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": "¿Cuál es tu nombre?"
}'
El código de integración en Python es el siguiente:
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": "¿Cuál es tu nombre?"
}

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

Diálogo Múltiple

Si desea integrar la función de diálogo múltiple, debe transmitir un parámetro adicional stateful, cuyo valor debe ser true. En cada solicitud posterior, debe incluir este parámetro. Después de transmitir el parámetro stateful, la API devolverá un parámetro adicional id, que representa el ID de la conversación actual. Posteriormente, solo necesita transmitir este ID como parámetro para lograr fácilmente un diálogo múltiple. A continuación, demostraremos la operación específica. En la primera solicitud, establezca el parámetro stateful como true y transmita normalmente los parámetros model y question, como se muestra en la imagen: El código correspondiente es el siguiente:
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": "¿Cuál es tu nombre?",
  "stateful": true
}'
Puede obtener la siguiente respuesta:
{
  "answer": "Soy un modelo de lenguaje AI creado por OpenAI y no tengo un nombre personal. Puedes llamarme OpenAI o ChatGPT. ¿Cómo puedo asistirte hoy?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
En la segunda solicitud, pase el campo id devuelto en la primera solicitud como parámetro, mientras que el parámetro stateful sigue establecido en true, preguntando “¿Qué te pregunté hace un momento?”, como se muestra en la imagen: El código correspondiente es el siguiente:
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": "¿Qué te pregunté hace un momento?"
}'
El resultado es el siguiente:
{
  "answer": "Me preguntaste cuál es mi nombre. Como modelo de lenguaje AI, no poseo una identidad personal, por lo que no tengo un nombre específico. Sin embargo, puedes referirte a mí como OpenAI o ChatGPT, los nombres utilizados para este modelo de AI. ¿Hay algo más en lo que pueda ayudarte?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
Como puede ver, puede responder preguntas correspondientes según el contexto.

Respuesta en Flujo

Esta interfaz también admite respuestas en flujo, lo cual es muy útil para la integración en la web, ya que permite mostrar el contenido palabra por palabra. Si desea que la respuesta se devuelva en flujo, puede cambiar el parámetro accept en los encabezados de la solicitud a application/x-ndjson. El cambio se muestra en la imagen, pero el código de llamada necesita tener los cambios correspondientes para admitir respuestas en flujo. Después de cambiar accept a application/x-ndjson, la API devolverá los datos JSON correspondientes línea por línea, y a nivel de código, necesitamos hacer los cambios necesarios para obtener los resultados línea por línea. Código de ejemplo de llamada 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": "Hola"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
El efecto de salida es el siguiente:
{"answer": "Hola", "delta_answer": "Hola", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "¡Hola!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "¡Hola! ¿Cómo", "delta_answer": " ¿Cómo", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "¡Hola! ¿Cómo puedo", "delta_answer": " puedo", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "¡Hola! ¿Cómo puedo ayudarte", "delta_answer": " ayudarte", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "¡Hola! ¿Cómo puedo ayudarte hoy", "delta_answer": " hoy", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "¡Hola! ¿Cómo puedo ayudarte hoy?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
Se puede ver que la respuesta en la respuesta es el contenido de la respuesta más reciente, delta_answer es el contenido de la respuesta adicional, puede integrar esto en su sistema según los resultados. JavaScript también es compatible, por ejemplo, el código de llamada en flujo de Node.js es el siguiente:
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: "Hola",
  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);
  });
Ejemplo de código en 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\": \"Hola\", \"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("Código inesperado " + response);
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(response.body().byteStream(), "UTF-8"))) {
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                System.out.println(responseLine);
            }
        }
    }
});
Otros lenguajes pueden ser reescritos de manera similar, el principio es el mismo.

Configuración del modelo

Sabemos que la API relacionada con OpenAI tiene el concepto de system_prompt, que es establecer una configuración predeterminada para todo el modelo, como su nombre, etc. Esta API de preguntas y respuestas de IA también expone este parámetro, llamado preset, utilizándolo podemos agregar configuraciones predeterminadas al modelo, experimentemos con un ejemplo: Aquí agregamos el campo preset, cuyo contenido es Eres un artista profesional, como se muestra en la imagen: El código correspondiente es el siguiente:
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": "¿Qué puedes ayudarme?",
  "preset": "Eres un artista profesional"
}'
El resultado de la ejecución es el siguiente:
{
    "answer": "Como artista profesional, puedo ofrecer una variedad de servicios y asistencia dependiendo de tus necesidades específicas. Aquí hay algunas formas en que puedo ayudarte:\n\n1. Arte personalizado: Si tienes una visión o idea específica, puedo crear arte personalizado para ti. Esto puede incluir pinturas, dibujos, arte digital o cualquier otro medio que prefieras.\n\n2. Piezas por encargo: Si tienes un tema o concepto específico en mente, puedo crear piezas de arte por encargo adaptadas a tus preferencias. Esto podría ser para disfrute personal o como un regalo único para alguien especial.\n\n3. Consulta de arte: Si necesitas orientación sobre selección de arte, diseño de interiores o cómo exhibir y mostrar arte en tu espacio, puedo proporcionar asesoramiento profesional para ayudar a mejorar tu sentido estético y crear una apariencia cohesiva."
}
Se puede ver que aquí le decimos a GPT que es un robot, y luego le preguntamos qué puede hacer por nosotros, y puede asumir el papel de un robot para responder preguntas.

Reconocimiento de imágenes

Esta IA también puede soportar la adición de archivos adjuntos para el reconocimiento de imágenes, pasando el enlace de la imagen correspondiente a través de references, por ejemplo, aquí tengo una imagen de una manzana, como se muestra en la imagen: El enlace de esta imagen es https://cdn.acedata.cloud/ht05g0.png, simplemente lo pasamos como parámetro references, y es importante tener en cuenta que el modelo debe ser uno que soporte reconocimiento visual, actualmente el que soporta es gpt-4-vision, así que la entrada es la siguiente: El código correspondiente es el siguiente:
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": "¿Cuántas manzanas hay en la imagen?",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
El resultado de la ejecución es el siguiente:
{
  "answer": "Hay 5 manzanas en la imagen."
}
Se puede ver que hemos obtenido con éxito la respuesta correspondiente a la imagen.

Preguntas y respuestas en línea

Esta API también soporta modelos en línea, incluyendo GPT-3.5 y GPT-4, ambos pueden soportar, detrás de la API hay un proceso automático de búsqueda en Internet y resumen, podemos elegir el modelo como gpt-3.5-browsing para experimentar, como se muestra en la imagen: El código es el siguiente:
```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": "¿Cuál es el clima de Nueva York hoy?"
}'
El resultado de la ejecución es el siguiente:
{
  "answer": "El clima en Nueva York hoy es el siguiente:\n- Temperatura actual: 16°C (60°F)\n- Máxima: 16°C (60°F)\n- Mínima: 10°C (50°F)\n- Humedad: 47%\n- Índice UV: 6 de 11\n- Amanecer: 5:42 am\n- Atardecer: 8:02 pm\n\nEstá nublado con posibilidad de chubascos ocasionales durante la noche, y la probabilidad de lluvia es del 50%.\nPara más detalles, puedes visitar [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\n¿Hay algo más que te gustaría saber?"
}
Se puede ver que aquí automáticamente buscó en el sitio web de The Weather Channel y obtuvo la información de allí, y luego devolvió los resultados en tiempo real.
Si tienes requisitos más altos sobre la calidad de la respuesta del modelo, puedes cambiar el modelo a gpt-4-browsing, la efectividad de la respuesta será mejor.