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

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

Щоб використовувати API, спочатку потрібно перейти на відповідну сторінку AI API для запитів і відповідей для подачі заявки на відповідну послугу. Після переходу на сторінку натисніть кнопку «Acquire», як показано на малюнку: Якщо ви ще не увійшли в систему або не зареєстровані, вас автоматично перенаправлять на сторінку входу, запрошуючи вас зареєструватися та увійти. Після входу або реєстрації ви автоматично повернетеся на поточну сторінку. При першій подачі заявки буде надано безкоштовний ліміт, який дозволяє безкоштовно використовувати цей API.

Основне використання

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

Натисніть кнопку «Try», щоб провести тестування, як показано на малюнку, тут ми отримали наступний результат:
{
  "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?"
}
Ми бачимо, що в повернутому результаті є поле 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": "What's your name?"
}'
Код інтеграції на 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": "What's your name?"
}

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

Багатократний діалог

Якщо ви хочете інтегрувати функцію багатократного діалогу, потрібно передати додатковий параметр stateful, значення якого має бути true, і в подальших запитах цей параметр потрібно буде передавати. Після передачі параметра stateful API додатково поверне параметр id, який представляє 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": "What's your name?",
  "stateful": true
}'
Ми отримуємо наступну відповідь:
{
  "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"
}
Другий запит, передаючи поле id, яке повернулося з першого запиту, як параметр, при цьому параметр stateful все ще встановлений в true, запитуючи «What I asked you just now?», як показано на малюнку: Відповідний код виглядає так:
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?"
}'
Результат виглядає так:
{
  "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"
}
Ми бачимо, що можемо відповідати на відповідні питання на основі контексту.

Потокова відповідь

Цей інтерфейс також підтримує потокову відповідь, що дуже корисно для веб-інтеграції, оскільки дозволяє веб-сторінці реалізувати ефект поетапного відображення. Якщо ви хочете отримати відповідь у потоковому режимі, ви можете змінити параметр 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- Захід сонця: 8:02\n\nСьогодні похмуро з можливістю випадкових дощів вночі, ймовірність дощу становить 50%.\nДля отримання додаткової інформації ви можете відвідати [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\nЧи є ще щось, що ви хотіли б дізнатися?"
}
Як видно, він автоматично підключився до сайту The Weather Channel і отримав інформацію звідти, а потім повернув актуальний результат.
Якщо ви маєте вищі вимоги до якості відповіді моделі, ви можете змінити модель на gpt-4-browsing, відповідь буде кращою.