Перейти к основному содержанию
Мы знаем, что интеграция некоторых API для вопросов и ответов на рынке все еще не так проста, например, API Chat Completions от OpenAI, который имеет поле messages. Для завершения непрерывного диалога нам нужно передать всю историю контекста, а также решить проблему превышения лимита токенов. AI API вопросов и ответов от AceDataCloud оптимизирован для вышеуказанных ситуаций, обеспечивая неизменное качество вопросов и ответов, упрощая реализацию непрерывного диалога, не требуя заботиться о передаче сообщений и проблемах с превышением лимита токенов (внутри API это обрабатывается автоматически). Также предоставляются функции запроса и изменения диалога, что значительно упрощает общую интеграцию. В этом документе будет представлена инструкция по интеграции AI API вопросов и ответов.

Процесс подачи заявки

Чтобы использовать API, сначала нужно перейти на соответствующую страницу AI API вопросов и ответов и подать заявку на соответствующую услугу. После перехода на страницу нажмите кнопку «Acquire», как показано на изображении: Если вы еще не вошли в систему или не зарегистрированы, вас автоматически перенаправят на страницу входа, пригласив зарегистрироваться и войти. После входа или регистрации вы автоматически вернетесь на текущую страницу. При первой подаче заявки будет предоставлен бесплатный лимит, который можно использовать для бесплатного доступа к этому API.

Основное использование

Сначала ознакомьтесь с основным способом использования, который заключается в том, чтобы ввести вопрос и получить ответ, просто передав поле question и указав соответствующую модель. Например, спросив: «Как тебя зовут?», мы можем заполнить соответствующее содержимое на интерфейсе, как показано на изображении: Как видно, мы настроили заголовки запроса, включая:
  • accept: в каком формате вы хотите получить ответ, здесь указано application/json, то есть в формате JSON.
  • authorization: ключ для вызова API, который можно выбрать из выпадающего списка после подачи заявки.
Также настроено тело запроса, включая:
  • model: выбор модели, например, популярные GPT 3.5, GPT 4 и т.д.
  • question: вопрос, который нужно задать, может быть любым текстом.
После выбора можно заметить, что справа также сгенерирован соответствующий код, как показано на изображении:

Нажмите кнопку «Try», чтобы протестировать, как показано на изображении, и мы получим следующий результат:
{
  "answer": "Я языковая модель ИИ, разработанная OpenAI, и у меня нет личного имени. Однако вы можете называть меня GPT или просто Чат-ботом. Как я могу помочь вам сегодня?"
}
Как видно, в возвращаемом результате есть поле answer, которое является ответом на данный вопрос. Мы можем задать любой вопрос и получить любой ответ. Если вам не нужна поддержка многократных диалогов, этот API может значительно упростить вашу интеграцию. Кроме того, если вы хотите сгенерировать соответствующий код интеграции, вы можете просто скопировать его, например, код CURL выглядит следующим образом:
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": "Как тебя зовут?"
}'
Код интеграции на Python выглядит следующим образом:
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": "Как тебя зовут?"
}

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

Многократный диалог

Если вы хотите интегрировать функцию многократного диалога, необходимо передать дополнительный параметр stateful, значение которого должно быть true. В последующих запросах этот параметр также должен быть передан. После передачи параметра stateful API дополнительно вернет параметр id, представляющий текущий идентификатор диалога, и в дальнейшем нам нужно будет просто передавать этот ID в качестве параметра, чтобы легко реализовать многократный диалог. Теперь давайте продемонстрируем конкретные действия. В первом запросе установите параметр stateful в true и нормально передайте параметры model и question, как показано на изображении: Соответствующий код выглядит следующим образом:
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": "Как тебя зовут?",
  "stateful": true
}'
Можно получить следующий ответ:
{
  "answer": "Я языковая модель ИИ, созданная OpenAI, и у меня нет личного имени. Вы можете просто называть меня OpenAI или ChatGPT. Как я могу помочь вам сегодня?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
Во втором запросе передайте поле id, возвращенное из первого запроса, в качестве параметра, при этом параметр stateful по-прежнему установлен в true, задав вопрос «Что я только что у вас спросил?», как показано на изображении: Соответствующий код выглядит следующим образом:
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": "Что я только что у вас спросил?"
}'
Результат выглядит следующим образом:
{
  "answer": "Вы спросили меня, как меня зовут. Как языковая модель ИИ, я не обладаю личной идентичностью, поэтому у меня нет конкретного имени. Однако вы можете называть меня OpenAI или ChatGPT, названия, используемые для этой модели ИИ. Могу ли я помочь вам с чем-то еще?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
Как видно, теперь можно отвечать на соответствующие вопросы в зависимости от контекста.

Пошаговый ответ

Этот интерфейс также поддерживает пошаговые ответы, что очень полезно для веб-интеграции, позволяя веб-странице реализовать эффект отображения по буквам. Если вы хотите получить ответ в потоковом режиме, вы можете изменить параметр accept в заголовке запроса на application/x-ndjson. Изменение показано на изображении, однако код вызова также требует соответствующих изменений, чтобы поддерживать потоковые ответы. После изменения accept на application/x-ndjson API будет возвращать соответствующие данные JSON построчно, и на уровне кода нам нужно будет внести соответствующие изменения, чтобы получить построчные результаты. Пример кода вызова на 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": "Привет"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
Вывод будет следующим:
{"answer": "Привет", "delta_answer": "Привет", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Привет!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Привет! Как", "delta_answer": " Как", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Привет! Как я", "delta_answer": " я", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Привет! Как я могу", "delta_answer": " могу", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Привет! Как я могу помочь", "delta_answer": " помочь", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Привет! Как я могу помочь вам", "delta_answer": " вам", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Привет! Как я могу помочь вам сегодня", "delta_answer": " сегодня", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "Привет! Как я могу помочь вам сегодня?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
Можно увидеть, что ответ в answer является последним ответом, а delta_answer - это новый ответ, вы можете использовать результаты для интеграции в вашу систему. JavaScript также поддерживается, например, код для потокового вызова Node.js выглядит следующим образом:
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: "Привет",
  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:
String url = "https://api.acedata.cloud/aichat/conversations";
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"question\": \"Привет\", \"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("Неожиданный код " + response);
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(response.body().byteStream(), "UTF-8"))) {
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                System.out.println(responseLine);
            }
        }
    }
});
Другие языки можно переписать самостоятельно, принцип остается тем же.

Предустановки модели

Мы знаем, что API OpenAI имеет соответствующую концепцию system_prompt, которая задает предустановку для всей модели, например, как ее зовут и так далее. Этот AI API также предоставляет этот параметр, называемый preset, с помощью которого мы можем добавить предустановку в модель, давайте рассмотрим пример: Здесь мы дополнительно добавляем поле preset, содержащее Вы профессиональный художник, как показано на изображении: Соответствующий код выглядит следующим образом:
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": "Чем вы можете мне помочь?",
  "preset": "Вы профессиональный художник"
}'
Результат выполнения будет следующим:
{
    "answer": "Как профессиональный художник, я могу предложить ряд услуг и помощи в зависимости от ваших конкретных потребностей. Вот несколько способов, как я могу вам помочь:\n\n1. Индивидуальное искусство: Если у вас есть конкретное видение или идея, я могу создать индивидуальное искусство для вас. Это может включать картины, рисунки, цифровое искусство или любой другой медиум, который вы предпочитаете.\n\n2. Заказные произведения: Если у вас есть конкретный предмет или концепция в уме, я могу создать заказные художественные произведения, адаптированные к вашим предпочтениям. Это может быть для личного удовольствия или в качестве уникального подарка для кого-то особенного.\n\n3. Консультация по искусству: Если вам нужна помощь в выборе искусства, дизайне интерьера или в том, как показать и выставить искусство в вашем пространстве, я могу предоставить профессиональные советы, чтобы помочь улучшить ваше эстетическое восприятие и создать согласованный вид."
}
Можно увидеть, что мы сказали GPT, что он робот, а затем спросили, чем он может нам помочь, и он может играть роль робота, чтобы ответить на вопросы.

Распознавание изображений

Этот AI также поддерживает добавление вложений для распознавания изображений, передавая соответствующие ссылки на изображения через references, например, у меня есть изображение яблока, как показано на изображении: Ссылка на это изображение - https://cdn.acedata.cloud/ht05g0.png, мы просто передаем его как параметр references, при этом необходимо учитывать, что модель должна быть выбрана из поддерживающих визуальное распознавание моделей, в настоящее время поддерживается gpt-4-vision, поэтому ввод будет следующим: Соответствующий код выглядит следующим образом:
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": "Сколько яблок на картинке?",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
Результат выполнения будет следующим:
{
  "answer": "На картинке 5 яблок."
}
Можно увидеть, что мы успешно получили ответ на соответствующее изображение.

Вопросы и ответы через интернет

Этот API также поддерживает модели с доступом в интернет, включая GPT-3.5 и GPT-4, которые могут поддерживать, за API стоит автоматический процесс поиска в интернете и обобщения, мы можем выбрать модель gpt-3.5-browsing, чтобы попробовать, как показано на изображении: Код выглядит следующим образом:
```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": "Какова погода в Нью-Йорке сегодня?"
}'
Результат выполнения:
{
  "answer": "Погода в Нью-Йорке сегодня следующая:\n- Текущая температура: 16°C (60°F)\n- Максимум: 16°C (60°F)\n- Минимум: 10°C (50°F)\n- Влажность: 47%\n- УФ-индекс: 6 из 11\n- Восход: 5:42\n- Закат: 20:02\n\nОблачно с возможностью периодических дождей ночью, вероятность дождя составляет 50%.\nДля получения дополнительной информации вы можете посетить [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\nЕсть ли что-то еще, что вы хотели бы узнать?"
}
Можно увидеть, что он автоматически подключился к сайту The Weather Channel и получил информацию оттуда, а затем вернул актуальный результат.
Если требования к качеству ответов модели выше, можно заменить модель на gpt-4-browsing, качество ответов будет лучше.