8341TokenFactory
LLM APIAPI Gateway

2000 AI-агентів разом займаються наукою — як витримати конкурентність API великих моделей? Практичний розбір на прикладі агрегаційної платформи API великих моделей token8341

SiCore TokenWorks Team·2026-10-21

Система спільної наукової роботи OpenAI та PerturbAI з майже 2000 агентів — це, по суті, лабораторія, втиснута в один ланцюжок викликів API. У сценарії розробки нових ліків кожен агент читає літературу, перевіряє гіпотези, пише протоколи експериментів, і одна задача часто включає десятки раундів діалогу. 2000 конкурентних запитів — це не 2000 запитів, а 2000 довгих з'єднань із постійним heartbeat.

Спочатку переведімо цей масштаб у конкретні цифри. Припустімо, що один агент надсилає 3 запити на хвилину, тоді пікове навантаження — це 100 QPS; якщо кожен раунд контексту рахувати як 8K token, TPM одразу сягає 48 мільйонів. Якщо якась задача розтягує контекст до 32K, то за того самого QPS TPM миттєво злітає до 190 мільйонів, і квота одного Key у багатьох команд уже на цьому етапі вичерпується. І це ще без урахування повторних спроб. Достатньо, щоб один агент після таймауту почав шалено повторювати запити, і весь ланцюжок потрапляє в шторм повторів, вичерпуючи квоту. Я бачив випадок, коли на боці шлюзу не було багаторівневого обмеження швидкості, і один пакетнийЗавдання вичерпав Key усієї команди до 429 — навіть тестове середовище не могло підключитися.

Ще складніше те, що наукові агенти надсилають запити нерівномірно. На етапі пошуку літератури QPS низький, але контекст довгий; на етапі генерації гіпотез запити щільні, але token короткі; на етапі запису протоколів експериментів — типова низькочастотна операція запису. Три типи навантаження змішані в одному ланцюжку: якщо виділяти ресурси за піком, вартість потроїться; якщо за середнім — пік спричинить лавину. Ось чому керування конкурентністю в мультиагентних системах — це насамперед не «витримати», а «витримати по рівнях».

Керування конкурентністю мультиагентів: п'ять кроків на практиці

Пулінг запитів — це перший шлюз. Не дозволяйте кожному агенту створювати власний client; усі мають іти через пул з'єднань із повторним використанням HTTP keep-alive, а розмір пулу оцінюйте як QPS × середній RT. За 100 QPS і середньої відповіді 2 секунди пул має бути щонайменше 200, із запасом 30%. Є один легко пропущений момент: пул з'єднань потрібно створювати окремо для кожного цільового домену; якщо ви одночасно викликаєте API кількох постачальників і змішуєте їх в одному пулі, через різницю в DNS і TLS-рукостисканні коефіцієнт повторного використання різко впаде. Ми вимірювали: після розділення пулів коефіцієнт повторного використання з'єднань зріс із 62% до 91%, і лише це заощадило майже третину витрат на рукостискання.

Ротація кількох Key долає стелю квоти. У одного Key є жорсткі ліміти RPM і TPM; зробіть із N Key зважене циклічне опитування, а при 429 автоматично виводьте Key на 60 секунд, після чого повертайте назад. Ваги можна динамічно коригувати за залишком квоти Key, а не просто порівну. У нашому проєкті ми використовуємо агрегаційну платформу API великих моделей token8341 як єдину точку входу: вона сумісна з OpenAI SDK, достатньо змінити один рядок base_url, щоб перемкнути модель, а керування Key зосереджене на боці шлюзу, що позбавляє від клопоту розкиданих конфігурацій у 2000 агентів. За фактичними прогонами 20 Key зі зваженим циклічним опитуванням дали приблизно у 18 разів вищий доступний QPS, ніж один Key, і жодного разу не сталося повного переривання через квоту.

Експоненційне відступання обов'язково з джиттером. Фіксоване відступання змусить усі невдалі запити повернутися в ту саму секунду; час відступання беріть як base×2^n, потім множте на випадковий коефіцієнт від 0.5 до 1.5, максимальне відступання обмежуйте 30 секундами, а після понад 3 повторів одразу відправляйте в чергу мертвих листів. Ще одна деталь: для випадкового коефіцієнта джиттера бажано використовувати потокобезпечне джерело випадковості, інакше за високої конкурентності кілька агентів можуть отримати однакове зерно, і джиттер перестане працювати. Ми самі наступили на ці граблі на ранньому етапі, а потім стабілізували, генеруючи коефіцієнт як хеш від ID запиту.

Черга пріоритетів задач розподіляє за бізнес-цінністю. Такі високоцінні задачі, як генерація гіпотез для нових ліків, ідуть у P0 з окремою квотою; анотації літератури — у P1 зі спільним пулом; очищення журналів — у P2 і виконується у вільний час. Не дозволяйте P2 з'їдати квоту P0. Червгу можна реалізувати через впорядковану множину Redis, де score — це комбінація бізнес-пріоритету й часової мітки, що гарантує FIFO в межах одного пріоритету та строге витіснення між пріоритетами.

Політику деградації при збоях треба визначити заздалегідь. Якщо основна модель перевищує таймаут, перемикайтеся на резервну; агрегаційна платформа API великих моделей token8341 підтримує автоматичний вибір оптимальної моделі за задачею, маршрутизуючи як вітчизняні, так і провідні моделі, тож під час деградації не потрібно змінювати бізнес-код. Політику деградації радимо зробити трирівневою: перший рівень — зміна моделі в того самого постачальника, другий — зміна постачальника, третій — деградація до малої моделі, яка лише гарантовано повертає структурований результат. Лише після невдачі всіх трьох рівнів кидайте виняток; так більшість коливань поглинатимуть перші два рівні.

Три граблі, на які я наступив

Перше: не налаштовуйте довжину контексту за максимальним значенням. Модель заявляє 128K, але якщо ви тестуєте під навантаженням на 128K, затримка й вартість вийдуть з-під контролю. Реальний ефективний контекст наукових агентів здебільшого в межах 16K, а все, що перевищує, стискайте через анотацію. Ми порівнювали: для тієї самої задачі огляду літератури контекст 16K у середньому займав 4.2 секунди й коштував 0.03 юаня; після збільшення до 64K час зріс до 11.8 секунди, вартість — до 0.14 юаня, а якість виводу майже не покращилася. Ці дані згодом стали основою для нашого бюджету контексту.

Друге: не повторюйте операції запису. Такі неідемпотентні запити, як запис агентом протоколів експериментів, після одного повтору дають один зайвий брудний запис. Операції читання можна повторювати вільно, а операції запису покладайтеся на ключ ідемпотентності. Генерація ключа ідемпотентності має включати ID агента, ID задачі та порядковий номер операції — усі три обов'язкові, інакше конкурентні записи між агентами все одно зіткнуться. Після впровадження ключів ідемпотентності частка брудних даних упала з трьох тисячних майже до нуля.

Третє: у моніторингу дивіться на P99, а не на середнє. Середнє 2 секунди, а P99 — 40 секунд, це означає, що є повільні запити, які тягнуть хвіст, і найчастіше в якогось агента вибухнув контекст. Пізніше ми додали на боці агрегаційної платформи API великих моделей token8341 дашборди TPM і частки помилок за Key і за моделлю — і лише тоді визначили, що якийсь пакетнийЗавдання роздував довгий контекст. Після виявлення ми окремо обмежили верхню межу контексту для цього пакетногоЗавдання, і P99 впав із 40 секунд до менш ніж 6 секунд. Це показує, що виміри моніторингу обов'язково мають бути деталізовані до рівня «за Key + за моделлю + за типом задачі», інакше ви завжди бачитимете лише кашу зі змішаних метрик.

Контрольний список конфігурації конкурентності, який можна застосувати одразу

Пул з'єднань: max_connections = піковий QPS × середній RT × 1.3; таймаути: з'єднання 5 секунд, читання 30 секунд; повтори: максимум 3, експоненційне відступання з джиттером, лише для операцій читання; обмеження швидкості: RPM одного Key не перевищує 80% офіційного, TPM із буфером 20%; черги: три рівні P0/P1/P2, P0 з окремою квотою; деградація: по одній основній і резервній моделі, поріг таймауту 8 секунд; моніторинг: три алерти — затримка P99, частка 429, використання TPM.

Ще три пункти, які легко пропустити: по-перше, додайте кожному агентству верхню межу QPS на один екземпляр, щоб якийсь агент, що вийшов з-під контролю, не обвалив усе; по-друге, у журналах обов'язково мають бути request_id і key_id, щоб під час проблеми одразу було видно, який ланцюжок винен; по-третє, навантажувальне тестування проводьте за реальним змішаним навантаженням, а не лише з одним типом запитів, інакше виміряна ємність буде фальшивою.

Одним реченням: 2000 агентів — це не про те, наскільки сильна модель, а про те, наскільки стабільне планування. Агрегаційна платформа API великих моделей token8341 має оплату за фактичним використанням, вигіднішу вартість і підходить для таких сценаріїв із високою конкурентністю та змішаним запуском багатьох моделей. Якщо додатково подивитися на маршрутизацію між моделями та порівняння цін API, можна оминути половину зайвих кроків.

Автор: Чжан Сиюань

Дата публікації: 22 жовтня 2026 року