Saltar para o conteúdo principal
Sabemos que a integração com algumas APIs de perguntas e respostas no mercado ainda não é tão fácil, como a API de Chat Completions da OpenAI, que possui um campo messages. Para completar um diálogo contínuo, precisamos passar todo o histórico de contexto, além de lidar com o problema de limite de Token. A API de perguntas e respostas da AceDataCloud foi otimizada para essa situação, garantindo que a eficácia das respostas permaneça inalterada, encapsulando a implementação de diálogos contínuos, sem a necessidade de se preocupar com a passagem de messages ou com o problema de limite de Token (que é tratado automaticamente internamente pela API). Além disso, também oferece funcionalidades de consulta e modificação de diálogos, simplificando bastante a integração. Este documento apresentará as instruções para a integração da API de perguntas e respostas.

Processo de Solicitação

Para usar a API, você precisa primeiro acessar a página correspondente da API de Perguntas e Respostas e solicitar o serviço correspondente. Após entrar na página, clique no botão “Acquire”, conforme mostrado na imagem: Se você ainda não estiver logado ou registrado, será redirecionado automaticamente para a página de login, convidando-o a se registrar e fazer login. Após o registro e login, você será redirecionado de volta para a página atual. Na primeira solicitação, haverá um crédito gratuito disponível, permitindo que você use a API sem custo.

Uso Básico

Primeiro, entenda a forma básica de uso, que é inserir uma pergunta e obter uma resposta, bastando passar um campo question e especificar o modelo correspondente. Por exemplo, ao perguntar: “What’s your name?”, você pode preencher o conteúdo correspondente na interface, conforme mostrado na imagem: Podemos ver que configuramos os Request Headers, incluindo:
  • accept: o formato de resposta desejado, aqui preenchido como application/json, ou seja, formato JSON.
  • authorization: a chave para chamar a API, que pode ser selecionada diretamente após a solicitação.
Além disso, configuramos o Request Body, incluindo:
  • model: a escolha do modelo, como o popular GPT 3.5, GPT 4, etc.
  • question: a pergunta a ser feita, que pode ser qualquer texto simples.
Após a seleção, podemos notar que o código correspondente foi gerado à direita, conforme mostrado na imagem:

Clique no botão “Try” para realizar o teste, como mostrado na imagem acima, e você receberá o seguinte resultado:
{
  "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?"
}
Podemos ver que o resultado retornado contém um campo answer, que é a resposta à pergunta. Você pode inserir qualquer pergunta e obter qualquer resposta. Se você não precisar de suporte para diálogos múltiplos, esta API pode facilitar muito sua integração. Além disso, se você quiser gerar o código de integração correspondente, pode copiá-lo diretamente, como o código CURL abaixo:
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?"
}'
O código de integração em Python é o seguinte:
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)

Diálogo Múltiplo

Se você deseja integrar a funcionalidade de diálogo múltiplo, precisa passar um parâmetro adicional stateful, cujo valor deve ser true. Em cada solicitação subsequente, esse parâmetro deve ser incluído. Após passar o parâmetro stateful, a API retornará um parâmetro id adicional, representando o ID do diálogo atual, e nas solicitações subsequentes, você só precisa passar esse ID como parâmetro para implementar facilmente o diálogo múltiplo. Vamos demonstrar a operação específica. Na primeira solicitação, defina o parâmetro stateful como true e passe normalmente os parâmetros model e question, conforme mostrado na imagem: O código correspondente é o seguinte:
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
}'
Você receberá a seguinte resposta:
{
  "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"
}
Na segunda solicitação, passe o campo id retornado da primeira solicitação como parâmetro, mantendo o parâmetro stateful como true, e pergunte “What I asked you just now?”, conforme mostrado na imagem: O código correspondente é o seguinte:
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?"
}'
O resultado é o seguinte:
{
  "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"
}
Podemos ver que é possível responder às perguntas com base no contexto.

Resposta em Fluxo

Esta interface também suporta resposta em fluxo, o que é muito útil para a integração em páginas da web, permitindo que a página exiba o resultado palavra por palavra. Se você deseja retornar a resposta em fluxo, pode alterar o parâmetro accept no cabeçalho da solicitação para application/x-ndjson. A modificação é mostrada na imagem, mas o código de chamada precisa ser alterado para suportar a resposta em fluxo. Após alterar o accept para application/x-ndjson, a API retornará os dados JSON correspondentes linha por linha, e no nível do código, precisamos fazer as modificações necessárias para obter os resultados linha por linha. Código de exemplo em 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": "Olá"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
A saída será como abaixo:
{"answer": "Olá", "delta_answer": "Olá", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Olá!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Olá! Como", "delta_answer": " Como", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Olá! Como posso", "delta_answer": " posso", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Olá! Como posso ajudar", "delta_answer": " ajudar", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Olá! Como posso ajudar você", "delta_answer": " você", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Olá! Como posso ajudar você hoje", "delta_answer": " hoje", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Olá! Como posso ajudar você hoje?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
Pode-se ver que a resposta dentro do answer é o conteúdo da resposta mais recente, enquanto delta_answer é o conteúdo da resposta adicionada, você pode integrar os resultados ao seu sistema. JavaScript também é suportado, por exemplo, o código de chamada em fluxo do Node.js é o seguinte:
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: "Olá",
  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);
  });
Exemplo de código em 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\": \"Olá\", \"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);
            }
        }
    }
});
Outras linguagens podem ser reescritas de forma semelhante, o princípio é o mesmo.

Configuração do Modelo

Sabemos que as APIs relacionadas à OpenAI têm o conceito de system_prompt, que é definir uma configuração para todo o modelo, como o nome dele, etc. Esta API de perguntas e respostas também expõe esse parâmetro, chamado de preset, que nos permite adicionar configurações ao modelo. Vamos experimentar com um exemplo: Aqui adicionamos o campo preset, com o conteúdo Você é um artista profissional, como mostrado na imagem: O código correspondente é o seguinte:
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": "O que você pode me ajudar?",
  "preset": "Você é um artista profissional"
}'
O resultado da execução é o seguinte:
{
    "answer": "Como artista profissional, posso oferecer uma variedade de serviços e assistência dependendo das suas necessidades específicas. Aqui estão algumas maneiras de como posso ajudar você:\n\n1. Arte Personalizada: Se você tem uma visão ou ideia específica, posso criar arte personalizada para você. Isso pode incluir pinturas, desenhos, arte digital ou qualquer outro meio que você preferir.\n\n2. Peças Comissionadas: Se você tem um assunto ou conceito específico em mente, posso criar peças de arte comissionadas adaptadas às suas preferências. Isso pode ser para prazer pessoal ou como um presente único para alguém especial.\n\n3. Consultoria de Arte: Se você precisa de orientação sobre seleção de arte, design de interiores ou como exibir e mostrar arte no seu espaço, posso fornecer conselhos profissionais para ajudar a aprimorar seu senso estético e criar uma aparência coesa."
}
Pode-se ver que aqui dissemos ao GPT que ele é um robô e perguntamos o que ele pode fazer por nós, e ele pode assumir o papel de um robô para responder às perguntas.

Reconhecimento de Imagens

Esta IA também suporta a adição de anexos para reconhecimento de imagens, passando o link da imagem correspondente através de references, por exemplo, aqui temos uma imagem de uma maçã, como mostrado na imagem: O link da imagem é https://cdn.acedata.cloud/ht05g0.png, podemos simplesmente passá-lo como parâmetro references, e é importante notar que o modelo deve ser escolhido para suportar reconhecimento visual, atualmente suportado é gpt-4-vision, então a entrada é a seguinte: O código correspondente é o seguinte:
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": "Quantas maçãs na imagem?",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
O resultado da execução é o seguinte:
{
  "answer": "Há 5 maçãs na imagem."
}
Pode-se ver que conseguimos obter a resposta correspondente à imagem.

Perguntas e Respostas na Internet

Esta API também suporta modelos conectados à internet, incluindo GPT-3.5 e GPT-4, ambos podem suportar, há um processo automático de busca na internet e resumo por trás da API, podemos escolher o modelo como gpt-3.5-browsing para experimentar, como mostrado na imagem: O código é o seguinte:
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 é o clima de Nova York hoje?"
}'
O resultado da execução é o seguinte:
{
  "answer": "O clima em Nova York hoje é o seguinte:\n- Temperatura Atual: 16°C (60°F)\n- Máxima: 16°C (60°F)\n- Mínima: 10°C (50°F)\n- Umidade: 47%\n- Índice UV: 6 de 11\n- Nascer do Sol: 5:42 am\n- Pôr do Sol: 8:02 pm\n\nEstá nublado com chance de chuvas ocasionais durante a noite, e a chance de chuva é de 50%.\nPara mais detalhes, você pode visitar [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\nHá mais alguma coisa que você gostaria de saber?"
}
Pode-se ver que ele automaticamente pesquisou no site The Weather Channel e obteve as informações de lá, retornando assim os resultados em tempo real.
Se houver uma exigência maior em relação à qualidade da resposta do modelo, você pode trocar o modelo para gpt-4-browsing, o efeito da resposta será melhor.