AI-модель
Вузол, який викликає модель, — він резервує гроші виклику, надсилає виклик через пул провайдерів і після відповіді віддає холд на розрахунок.
7 хв читання
AI-модель викликає модель. Це єдиний вузол флоу, який витрачає гроші: він резервує очікувану вартість виклику у ваших бюджетах, надсилає виклик провайдерові й після відповіді віддає холд на розрахунок.
- Вузол
- AI-модель
- Тип
ai_model- Категорія
- Модель
- Порти
- Успіх
successпідключення обовʼязкове - Помилка
errorпідключення необовʼязкове - Пул вичерпано
rate_limitпідключення необовʼязкове - Відмова
denyпідключення необовʼязкове
- Успіх
- Завершує шлях
- Ні
Що робить вузол
Коли виконання доходить до вузла, виклик проходить три кроки.
Холд. Slen перевіряє політики, оцінює виклик — модель, повідомлення, стелю виходу — і резервує оцінку, помножену на множник запасу, у бюджетах, під які підпадає виклик. Виклик, зроблений для одного з ваших клієнтів, резервує ще й свою ціну в кредитах на рахунку клієнта того типу кредитів, який запит називає в
context.credit_type. Холд пояснює стаття Як працює резервування бюджету.Виклик. Виклик робить підключення пулу провайдерів, спроба за спробою, як каже наступний розділ.
Розрахунок. Коли провайдер відповів, виконання виходить через Успіх, а холд у фоні списується на суму, у скільки обійшовся виклик.
cost.actualвиконання стає відомим, коли це зроблено. Виклик, який не вдався або був відхилений, повертає свій холд.
Промпт — це messages із входу запиту, надіслані такими, якими прийшли. Вхід без непорожнього messages завершує виконання як failed з invalid_flow_input. Вузол додає модель, стелю виходу й температуру зі своїх налаштувань, а також список інструментів і формат відповіді, коли їх задано.
Яке підключення робить виклик
Вузол із вибраним пулом провайдерів викликає через цей пул.
Вузол без нього викликає через типовий пул провайдера моделі, а коли такого немає, — через одне підключення з однією спробою; яке саме, каже стаття Пули провайдерів.
Вузол може задати своє число спроб і те, що йде за лімітом запитів. І те, й інше головніше за налаштування пулу й діє, лише поки виклик іде через пул.
Пул, який вузол називає і який видалено або вимкнено, чи провайдер без підключення, здатного обслужити виклик, завершують виклик із
provider_not_configured.
Коли виконання чекає на вузлі
Вузол може змусити виконання чекати. Тоді його статус — waiting, а запит, який його почав, отримав відповідь 202.
Очікування підключення. Коли вузол або його пул відповідає на ліміт запитів значенням
queue, а жодне підключення не має місця для виклику, виконання чекає стільки, скільки попросив провайдер, або хвилину, і вузол пробує знову з новим холдом. Поки виконання чекає, нічого не зарезервовано. Після трьох очікувань за замовчуванням виклик завершується зpool_exhausted.Виклик, який провайдер виконує у фоні. Коли сервіс для цього налаштовано, виклик виконання, надісланого в асинхронному режимі, може бути передано провайдерові, який уміє виконувати його у фоні. Виконання чекає, поки Slen питає провайдера, як іде виклик, і продовжується з відповіддю. Холд такого виклику за замовчуванням стоїть 30 хвилин від початку виклику; цей строк обмежує холд, а не виклик. Про кінець виклику повідомляють
operation.completed,operation.failedабоoperation.uncertain.Коли провайдера більше не вдається спитати, виконання закінчується як
uncertain, а холд стоїть, поки не спливе.Коли холд закрило інше списання, поки виклик чекав, виклик закінчується, не спитавши в провайдера відповіді, з
background_hold_expired. Нічого не повертається, і провайдер може однаково виставити рахунок за виклик.Коли провайдер усе ще називає виклик таким, що виконується, після того як виконання прочекало 72 години (за замовчуванням), виконання закривається як
failedзparked_expired. Жодних подій про виклик не надсилається, і його операція залишаєтьсяpending.
Політика перевитрати
У нового вузла політики перевитрати немає. Політика, вибрана в полі У разі перевищення, змушує Slen оцінити виклик удруге просто перед зверненням до провайдера й порівняти це число з холдом. Обидві оцінки отримано з того самого запиту з різницею в мить, тому політика практично ніколи не спрацьовує — і при цьому додає другу оцінку до кожного виклику. Коли вона все ж спрацьовує, виклик іде далі, зупиняється з overrun_stopped, чекає схвалення людини або переходить на дешевшу модель із другим холдом — як сказано в політиці. Запит, щодо якого вирішує людина, описує стаття Погодження.
Коли використовувати
Він є в кожному флоу, який викликає модель: цей вузол і є виклик.
Поставте перед ним Перевірка бюджету, щоб відмовляти до того, як зарезервовано гроші, і Пошук у кеші, щоб відповідати на повторне питання без виклику.
Підключіть Відмова, Помилка і Пул вичерпано, щоб вибрати, що почує той, хто викликає: дешевшу модель через Запасний шлях, задану відповідь, відмову з власним кодом.
Флоу може викликати кілька моделей. Кожен виклик резервує й розраховується сам по собі та є окремою операцією, а
cost.estimatedвиконання — це сума оцінок зроблених викликів.
Налаштування
| Налаштування | Для чого воно |
|---|---|
model | Модель, яку викликає вузол, за її кодом у каталозі моделей. Обов’язкова. Виклик оцінюється за каталогом у момент, коли береться його холд. |
pool_id | Пул провайдерів, через який іде виклик, за його ідентифікатором, записаним текстом. Без нього виклик іде через типовий пул провайдера моделі. |
max_output_tokens | Найбільше число вихідних токенів у відповіді. Ціле число, не менше за 1. Без нього відповідь обмежено 1024 токенами, якщо сервіс не налаштовано інакше. За цією стелею рахується розмір холду. |
temperature | Наскільки провайдер може варіювати відповідь, від 0 до 2. Без неї провайдер бере своє значення за замовчуванням. |
max_attempts | Скільки підключень пулу можна спробувати для виклику, від 1 до 5. Без нього діє число самого пулу. |
on_rate_limit | Що йде за лімітом запитів провайдера — switch_connection, reject, queue або fallback_model. Без нього діє вибір самого пулу. Конструктор пропонує перші два; queue змушує виконання чекати на підключення. |
on_provider_error | Що йде за помилкою провайдера — switch_connection або reject. Без нього діє вибір самого пулу. Задається через API. |
tools | Інструменти, які може викликати модель, — непорожній список у тому вигляді, який приймає провайдер. Задається через API. |
response_format | Формат, якого має набути відповідь, — об’єкт із типом у тому вигляді, який приймає провайдер. Задається через API. |
on_overrun | Що робить вузол, коли друга оцінка, зроблена просто перед зверненням до провайдера, виявляється більшою за холд, — continue, stop, require_approval або degrade. У нового вузла її немає. Обидві оцінки отримано з того самого запиту з різницею в мить, тому політика практично ніколи не спрацьовує. |
overrun_tolerance | Наскільки друга оцінка може перевищити холд, перш ніж спрацює політика перевитрати, від 1 до 10. 1.25 означає — не більше ніж на чверть понад холд. Без нього — 1.25. |
degrade_to_model | Дешевша модель, на яку переходить виклик, коли політика перевитрати — degrade. Обов’язкова для цієї політики й не може бути моделлю самого вузла. |
У конструкторі на вкладці Налаштування — поля Модель, Температура, Максимум вихідних токенів і У разі перевищення. На вкладці Підключення — Пул провайдерів, Максимум спроб і У разі ліміту запитів (429). Вкладка Додатково показує весь конфіг вузла таким, яким його збережено, разом із ключами, для яких на вкладках немає полів: їх задають через API.
У нового вузла моделі немає, і флоу не публікується, поки її не вибрано. Порожнє поле Максимум вихідних токенів обмежує відповідь 1024 токенами, якщо сервіс не налаштовано інакше, і за цією стелею рахується розмір холду.
Порти
| Порт | Виконання виходить через нього, коли |
|---|---|
| Успіх | Провайдер відповів. Обов’язковий |
| Відмова | Виклик відхилено до звернення до провайдера: бюджетом (budget_exceeded, operation_limit_exceeded, concurrency_limit_exceeded), політикою (policy_denied), кредитами вашого клієнта (insufficient_credits), блокуванням вашого клієнта (customer_blocked) або політикою перевитрати (overrun_stopped) |
| Пул вичерпано | Спроби або підключення пулу закінчилися без відповіді (pool_exhausted) |
| Помилка | Провайдер відповів помилкою, яка завершує виклик; виклик, який провайдер виконував у фоні, не вдався або закінчився без відповіді (background_hold_expired); або жодне підключення не може обслужити провайдера моделі (provider_not_configured) |
Три останні порти необов’язкові. Коли в Пул вичерпано немає зв’язку, а в Помилка є, виконання йде на гілку Помилка. Що робить непідключений порт, сказано в статті Порти й розгалуження.
Коли провайдера викликали, а його відповідь загубилася, вузол не виходить через жоден порт: виконання закінчується як
uncertainзoperation_uncertain, а холд стоїть, поки не спливе. Не запускайте такий запит знову, наче він не вдався.Виконання, яке закінчилося як
rejectedпісля того, як виклик відхилили, зберігає вcost.estimatedоцінку відхиленого виклику: гроші, які відмова зберегла, а не витрачені. Відмова за кредитами вашого клієнта залишає його порожнім. Гілка Відмова, яка відповідає без виклику моделі, закінчується якcompletedз тією самою оцінкою й без фактичної вартості.
Вихід
Коли провайдер відповів, вузол залишає відповідь наступним вузлам.
{
"model": "gpt-4o-mini",
"content": "Thank you for your order. It ships on Monday.",
"finish_reason": "stop",
"tool_calls": null,
"usage": { "input_tokens": 1180, "output_tokens": 212, "cached_input_tokens": 0 }
}Наступний вузол читає її за шляхом nodes.<key>.output.content, де <key> — ключ цього вузла у флоу. Повернути відповідь за замовчуванням відповідає виходом останньої моделі.
Коли виконання виходить через Відмова, Пул вичерпано або Помилка, вузол залишає натомість те, чим закінчився виклик:
{ "error_code": "budget_exceeded", "http_status": 402, "message": "Budget 74438200973595008 (monthly) exceeded" }Помилки
Налаштування вузла перевіряються під час перевірки флоу та під час його публікації.
В API запис issues називає таку перевірку в params.detail; його code — invalid_node_config.
| Перевірка | Повідомлення в конструкторі |
|---|---|
ai_model_needs_model | Вузлу «{node}» потрібна модель. |
ai_model_invalid_pool_id | Пул вузла «{node}» має бути заданий своїм ідентифікатором — текстом. |
ai_model_invalid_max_output_tokens | Ліміт вихідних токенів «{node}» має бути цілим числом, не менше 1. |
ai_model_invalid_max_attempts | Ліміт спроб «{node}» має бути цілим числом від 1 до {max}. |
ai_model_invalid_temperature | Температура «{node}» має бути числом від {min} до {max}. |
ai_model_unsupported_on_rate_limit | «{node}» використовує неіснуючу поведінку при ліміті запитів. |
ai_model_unsupported_on_provider_error | «{node}» використовує неіснуючу поведінку при помилці провайдера. |
ai_model_tools_not_list | Інструменти «{node}» мають бути непорожнім списком. |
ai_model_unusable_tool | У «{node}» є інструмент, який не є ані іменованою функцією, ані типізованим інструментом провайдера. |
ai_model_invalid_response_format | Формат відповіді «{node}» має бути обʼєктом із полем type. |
ai_model_unsupported_on_overrun | «{node}» використовує неіснуючу політику перевитрати. |
ai_model_invalid_overrun_tolerance | Допуск перевитрати «{node}» має бути між {min} і {max}. |
ai_model_needs_degrade_model | «{node}» знижує модель при перевитраті, але не вказує, на яку. |
ai_model_degrades_to_same_model | «{node}» знижує до моделі, яку вже використовує. |
Перевірка читає й те, що називає вузол. Модель, якої немає в каталозі (unknown_model), пул, якого не існує (unknown_pool), і пул іншого провайдера, що не приймає інших провайдерів (pool_provider_mismatch), зупиняють публікацію. Пул, який вимкнено, не має увімкнених підключень або не має жодного, здатного обслужити модель, — це попередження (pool_disabled, pool_without_connections, pool_cannot_serve_model), як і вузол без гілки Помилка (error_port_not_connected).
Що відбувається з викликом, який відхилено або який не вдався, сказано вище в розділі Порти; що означає кожен код і що з ним робити — у статті Коди помилок.
Приклад
- Запит — Типовий → AI-модель
- AI-модель — Успіх → Повернути відповідь
- AI-модель — Пул вичерпано → Запасний шлях
- AI-модель — Помилка → Запасний шлях
- Запасний шлях — Типовий → AI-модель
- AI-модель — Успіх → Повернути відповідь
- AI-модель — Відмова → Відхилити запит
AI-модель резервує гроші й викликає модель, а його відповідь іде в Повернути відповідь. Коли пул вичерпано або провайдер дав збій, виконання проходить Запасний шлях до другого AI-модель з дешевшою моделлю та своїм холдом. Коли виклик відхилено, Відхилити запит завершує запит зі своїм кодом.
Див. також
Фінансовий ланцюжок — вузли, які можуть стояти довкола виклику.
Пули провайдерів — як пул вибирає підключення і що робить збій.
Як працює резервування бюджету — холд виклику і те, як він закінчується.
Надіслати запит — що отримує ваш застосунок за відмову чи збій.
Зібрано з openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d