Розуміння моделі оплати за токен
Моделі оплати за токен означають, що ви платите лише за спожите, а не за доступ до сервера в режимі очікування. На відміну від традиційних щомісячних підписок, ця модель безпосередньо пов'язує витрати з обсягом використання. Ви нараховуєте плату на основі фактичних вхідних та вихідних токенів, оброблених кінцевою точкою.
Більшість постачальників стягують різні тарифи за вхідні та вихідні токени. Наприклад, деякі послуги LLM без фільтрів цінують вхідні дані в $0.15 за мільйон токенів, а вихідні — в $0.50 за мільйон токенів. Ця різниця існує тому, що генерація тексту вимагає значно більше обчислювальних ресурсів, ніж читання.
Ви повинні ретельно контролювати кількість токенів. Одне довге повідомлення може перевищити вартість вхідних даних, якщо ви не оцінюєте довжину виводу. Завжди перевіряйте метадані використання, повернені в заголовках або тілі відповіді, щоб точно відстежувати свої витрати.
Чому ваша потокова відповідь обрізається рано
Потокові відповіді обрізаються рано, оскільки клієнти часто припиняють прослуховування після перших кількох фрагментів. Сервер надсилає дані в реальному часі, але ваш застосунок може розірвати з’єднання достроково, якщо не правильно обробляти потік.
Кожен чанк містить частину тексту. Ви повинні об'єднати ці чанки, щоб сформувати повну відповідь. Якщо ви відкинете проміжні чанки, ви втратите дані. Останній чанк зазвичай містить повну статистику використання.
Перевірте налаштування тайм-ауту. Деякі мережі розривають з’єднання після кількох секунд бездіяльності. Переконайтеся, що ваш клієнт коректно обробляє періодичні паузи в потоці. Це часто трапляється з великими мовними моделями, які генерують довгі тексти.
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Tell the story in second person."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Правильна робота з контекстним вікном на 100k токенів
Ліміт контекстного вікна включає як ваш промпт, так і згенероване завершення. Ви не можете надіслати 100k токенів у промпті й очікувати ще 100k у відповіді. Загальна сума довжини має залишатися в межах ліміту.
Якщо ви надсилаєте великий запит, у вас залишається менше місця для відповіді. Наприклад, запит на 90 000 токенів залишає лише 10 000 токенів для виводу. Це може різко обрізати довгі відповіді.
Реалізуйте підрахунок токенів на своєму боці. Використовуйте токенизатор, який відповідає кодуванню моделі. Це гарантує, що ви не перевищите ліміт під час запиту. Якщо це станеться, сервер поверне помилку.
Розгляньте можливість обрізання старих повідомлень в історіях чату. Це зберігає найновіший контекст, залишаючись у межах лімітів. Це критично важливо для підтримки зв'язності розмови протягом довгих сесій.
Попповнення криптовалютою: чому баланс не оновився
Поповнення крипто-коштів не оновлюються, коли ви надсилаєте токени на неправильну мережу. Наш API приймає USDT на TRC20 та USDC на Base. Надсилання USDT на Ethereum на адресу TRC20 призведе до втрати коштів.
Завжди перевіряйте мережевий префікс перед відправкою. Сторінка депозиту показує конкретну адресу та мережу для кожної валюти. Не припускайте, що всі адреси USDT є взаємозамінними.
Зачекайте необхідну кількість підтверджень. Транзакції не є миттєвими. Система зарахує кошти на ваш рахунок лише після підтвердження транзакції блокчейном. Це запобігає проблемам подвійного витрачання.
Перевірте хеш транзакції в оглядачі блоків. Якщо баланс не оновився, надайте хеш службі підтримки. Вони можуть вручну перевірити переказ. Це найшвидший спосіб вирішити розбіжності.
Виправлення помилок виклику функцій у моделях uncensored
Помилки виклику функцій часто виникають через нестандартне форматування JSON у моделях без цензури. Такі моделі віддають пріоритет креативності над суворою структурою, що може порушити роботу жорстких парсерів.
Встановіть формат відповіді на json_object для примусового більш суворого виводу. Це зменшує шанс отримання невалідного JSON. Однак, це може трохи знизити креативність.
Перевіряйте відповідь перед парсингом. Використовуйте блок try-catch для обробки помилок декодування JSON. Якщо парсинг не вдається, повторіть запит із нижчою температурою. Це сприяє більш детермінованому виводу.
from openai import OpenAI
client = OpenAI(base_url="https://api.aiapisubscription.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)
Обмеження швидкості: обробка сплесків 300 RPM
Ліміти швидкості обмежують кількість запитів, які ви можете надсилати за хвилину. Наш API дозволяє 300 запитів за хвилину на ключ. Перевищення цього ліміту повертає статус-код 429.
Реалізуйте експоненційне сповільнення, коли ви досягаєте ліміту. Повторіть запит після короткої затримки. Це запобігає перевантаженню сервера під час пікового навантаження.
Відстежуйте частоту запитів. Якщо ви надсилаєте запити занадто швидко, ви можете спрацювати ліміт. Розподіляйте запити рівномірно. Це забезпечує стабільну продуктивність.
Використовуйте кілька ключів, якщо вам потрібна вища пропускна здатність. Кожен ключ має власні ліміти. Це дозволяє масштабувати ваш додаток, не стикаючись із єдиною вузькою ділянкою.
Помилки режиму JSON та форматування відповідей
Помилки режиму JSON виникають, коли модель повертає недійсний синтаксис. Це поширено в uncensored моделях, які віддають перевагу природній мові над структурованими даними.
Використовуйте response_format параметр для примусового виводу JSON. Це вказує моделі структурувати її відповідь у вигляді дійсного JSON. Однак це не гарантує коректності.
Перевіряйте вихідні дані за допомогою схеми JSON. Це гарантує, що дані відповідають вашій очікуваній структурі. Якщо валідація не пройде, запитайте повторний запит або скоригуйте промпт.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.aiapisubscription.com/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);
Налагодження розбіжностей у підрахунку токенів
Розбіжності в підрахунку токенів виникають, коли клієнт використовує інший токенизатор, ніж модель. Це призводить до неточних оцінок витрат.
Використовуйте офіційний токенайзер, наданий постачальником моделі. Це гарантує, що ваші підрахунки збігатимуться з фактичним використанням. Сторонні токенайзери можуть по-різному обробляти спеціальні символи.
Перевірте метадані використання у відповіді. Це надає точну кількість токенів. Порівняйте це з вашим локальним підрахунком, щоб виявити розбіжності.
Врахуйте спеціальні токени. Вони включають системні промпти та визначення функцій. Вони споживають токени, але можуть не відображатися у вихідному тексті.
Коли перейти з локального на API
Перемкніться на API, коли локальне залізо не може забезпечити потрібну затримку або масштабованість. Запуск великої моделі локально вимагає дорогих GPU та значної потужності.
API пропонують масштабованість без обслуговування заліза. Ви можете легко обробляти раптові сплески трафіку. Це ідеально підходить для продуктових середовищ.
Розглянемо вартість. Якщо ви запускаєте локальну модель 24/7, витрати на електроенергію та обладнання можуть перевищувати витрати на використання API. Оплата за токени вигідна лише у випадку змінного використання.
curl https://api.aiapisubscription.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Summarize the technical specs of the new GPU."}]
}'