Негізгі мазмұнға өту
OpenAI

2026 ж. 13 ақпан

Инженерия

Rate limit-тен тыс: Codex пен Sora-ға қолжетімділікті ауқымдау

Жона Коэн, техникалық құрам мүшесі

Жүктелуде…

Соңғы бір жылда Codex те, Sora да жылдам қабылданып, қолданылуы бастапқы күткенімізден тез асып түсті. Біз бір тұрақты үлгіні көрдік: пайдаланушылар кіріседі, нақты құндылық табады, сосын rate limit-ке тіреледі.

Rate limit сұранысты бірқалыптандыруға және әділ қолжетімділікті қамтамасыз етуге көмектесе алады; алайда пайдаланушылар құндылық алып отырғанда, қатаң тоқтауға ұрыну көңілге қаяу түсіреді. Бізге пайдаланушылар жалғастыра алатын, сонымен қатар жүйе өнімділігі мен біздің тәсілге деген сенімді қорғайтын жол керек болды.

Мұны шешу үшін біз қолдануды санайтын нақты уақыттағы қолжетімділік қозғалтқышын құрдық. Сол қозғалтқыштағы қабаттардың бірі — кредит сатып алу мүмкіндігі. Пайдаланушылар өз rate limit-інен асқанда, кредиттер оларға кредит балансын жұмсап, өнімдерімізді әрі қарай пайдалануға мүмкіндік береді.

Мұның астарында лимиттерді, нақты уақыттағы қолдануды қадағалауды және кредит баланстарын бір қолжетімділік моделіне біріктіретін күрделі жүйе жатыр. Бұл жазбада Codex пен Sora-ны ауқымдау неге қолжетімділікті басқаруды қайта ойлауды талап еткенін, дәлдігі дәлелденетін нақты уақыт жүйесі әр сұрауда rate limit пен кредиттерді қалай біріктіретінін және сол іргетас енді екі өнімге де қосымша қолжетімділікті қалай ашып отырғанын қарастырамыз.

Неліктен бұрынғы қолжетімділік модельдері жеткіліксіз болды

Кеңірек қарасақ, дәстүрлі қолжетімділік модельдері әдетте таңдау жасауға мәжбүрлейді:

  • Rate limit бастапқыда пайдалы болуы мүмкін, бірақ таусылғанда пайдаланушыға жаман әсер қалдырады: «кейінірек қайта келіңіз»
  • Қолдануға негізделген төлем икемді, бірақ пайдаланушыны алғашқы токеннен бастап төлеуге мәжбүрлейді — бастапқы зерттеуді қолдау үшін мінсіз емес

Codex пен Sora үшін бұлардың ешқайсысы өз алдына жеткілікті болмады. Егер біз жай ғана rate limit-ті көтерсек, сұранысты бірқалыптандыру мен әділдікті бақылаудың маңызды тетіктерін жоғалтып, бәріне қызмет көрсету қуатымыз жетпей қалар еді. Егер толықтай асинхронды қолдану биллингіне сүйенсек, кідіріс, артық есептеу немесе салыстыру мәселелерін енгізер едік — дәл осындай мәселелерді пайдаланушылар ең белсенді сәтінде бірден байқайды.

Бізге керегі оның орнына нақты уақыттағы лимиттерді pay-as-you-go қолжетімділікпен біріктіретін бірыңғай гибрид жүйе болды:

«Rate-limits» және «Credits» деп белгіленген екі батырмасы бар дашборд UI-ы, ал төменде «Credit Fallback бар Rate-Limit» атты карточка орналасқан.

Бұл жүйе мынадай болуы тиіс еді:

  • Rate limit-ті оларға жеткенге дейін қолдану
  • Кредиттерге сол бір сұраудың ішінде еш кедергісіз ауысу
  • Сол шешімді нақты уақытта қабылдау
  • Кредит тұтынылуын қадағалауда қатаң дәл және аудитке жарамды болу

Қолжетімділік — қақпа емес, сарқырама

Біз жасаған негізгі тұжырымдамалық өзгерістердің бірі — қолжетімділікті шешім сарқырамасы ретінде модельдеу. «Бұған рұқсат па?» деп сұраудың орнына, «қаншаға рұқсат, және қайдан?» деп сұраймыз. Қолдануды санағанда, жүйе мына тізбекпен жүреді:

Функцияларымызға қолжетімділікті бағалау шешім ағашы

Бұл модель пайдаланушылардың өнімді шын мәнінде қалай сезінетінін көрсетеді. Rate limit, тегін деңгейлер, кредиттер, акциялар және enterprise құқықтарының бәрі бір шешім стекіндегі жай қабаттар ғана. Пайдаланушы тұрғысынан олар «жүйені ауыстырмайды» — тек Codex пен Sora-ны қолдана береді. Сол себепті кредиттер көрінбейді: олар сарқырамадағы тағы бір элемент қана.

Неліктен біз мұны өзіміз жасадық

Кредит тұтынылуын басқару үшін үшінші тараптың қолдану биллингі және есепке алу платформаларын бағаладық. Олар шот шығару мен есеп беруге жақсы сай келеді, бірақ екі маңызды талапқа сәйкес келмеді:

Нақты уақыттағы дұрыстық

Пайдаланушы лимитке жетіп, қолында кредит болғанда, жүйе мұны бірден білуі керек. Ең жақсы талпынысқа негізделген не кешіккен санау күтпеген бұғаттауларға, бірізді емес баланстарға және қате төлемдерге әкеледі. Codex пен Sora сияқты интерактив өнімдерде мұндай сәтсіздіктер көзге бірден түсіп, қолайсыздық тудырады.

Салыстырымдылық және сенім

Бізге сондай-ақ әр нәтиже бойынша ашықтық беру керек болды:

  • Неліктен сұрауға рұқсат берілді не бұғатталды
  • Ол қанша қолдануды тұтынды
  • Қай лимиттер немесе баланстар қолданылды

Бұл мүмкіндік бөлек қолдану биллингі платформасында, болып жатқанның тек бір бөлігін ғана көретін оқшау шешім ретінде емес, біздің шешім сарқырамасына тығыз кіріктірілуі керек еді. Пайдаланушыларға өнімдерімізге сенімге нұқсан келтірмей қол жеткізуге мүмкіндік беру үшін бізге дұрыстықты, уақыттылықты және бақылануды толық басқару қажет болды. Бұл бізді ішкі шешімге алып келді.

Жоғары ауқымды қолдану және баланс жүйесін құру

Мұны іске асыру үшін біз синхронды қолжетімділік шешімдеріне арнайы жасалған таратылған қолдану және баланс жүйесін құрдық.

Жалпы алғанда, жүйе:

  • Әр пайдаланушы мен әр функция бойынша қолдануды қадағалайды
  • Rate limit терезелерін жүргізеді
  • Нақты уақыттағы кредит баланстарын жүргізеді
  • Ағындық асинхронды процессор арқылы баланстан идемпотентті түрде шегереді

Әр сұрау бір бағалау жолынан өтеді; ол rate limit-тен синхронды тұтыну және қажет болса жеткілікті кредиттің барын тексеру арқылы қанша қолдануға рұқсат етілетіні жөнінде нақты уақыт шешімін қабылдайды; содан кейін кез келген кредит шегерімдерін асинхронды түрде реттей отырып, бір нақты нәтижені қайтарады. Бұл өнімдер арасында бірізді мінез-құлықты қамтамасыз етіп, командалар арасындағы қайталанатын логиканы жояды.

Қолжетімділік жүйесі: нақты уақыттағы rate limit пен асинхронды кредит және баланс қадағалауын біріктіру.

Дұрыстығы дәлелденетін биллинг жүйесі

Бұл жүйенің негізгі жобалау қағидаттарының бірі — біздің биллингтің дұрыс екенін дәлелдей алуымыз керек. Бұл enterprise клиенттерден бастау алған кредит қолдауының түп-тамырын көрсетеді. Жоғарыдағы жүйе диаграммасында өзара байланысқан үш бөлек деректер жиыны бар:

  • Өнімді пайдалану оқиғалары: Пайдаланушы шын мәнінде не істеді
  • Монетизация оқиғалары: Қолданғаны үшін пайдаланушыдан не аламыз
  • Баланс жаңартулары: Пайдаланушының кредит балансын қаншаға және не үшін түзеттік

Бұл деректер жиындары жай ғана жанама өнім емес; керісінше, жүйені солар басқарады, әр жиын келесісін іске қосады. Не болғанын, соған байланысты төлемдерді және біз не шегергенімізді бөлу бізге әр қабатты тәуелсіз аудиттеуге, қайта ойнатуға және салыстыруға мүмкіндік береді. Бұл — кредит балансын жаңарту аздап кешігетінінің есесіне, дәлелденетін дұрыстыққа басымдық беретін саналы ымыра. Біз бұған былай қол жеткіздік:

  • Өнімді пайдалану оқиғалары кредит тұтынуына әсер етсе де, етпесе де, барлық пайдаланушы әрекеті үшін жарияланады. Бұл пайдаланушы әрекеттерінің аудит ізін береді және неге кредит алдық не алмадық дегенді түсіндіруге мүмкіндік береді.
  • Әр оқиға тұрақты идемпотенттік кілтпен келеді, сондықтан қайталап көру, қайта ойнату немесе воркердің қайта іске қосылуы ешқашан баланстан екі рет шегере алмайды, бұл екі рет төлем алуды болдырмайды. Бұл сондай-ақ жұмысымызды офлайн тексеру үшін пакеттік салыстыру жүргізуге мүмкіндік береді.
  • Аудит ізін жасау үшін біз синхронды жаңартулардың орнына асинхронды (бірақ бәрібір нақты уақытқа жақын) баланс жаңартуларын қолданамыз. Жүйенің дұрыс жұмыс істеп тұрғанын дәлелдеп, пайдаланушыларға қате есептемейтінімізге сендіру үшін пайдаланушы балансын жаңартуда аз ғана кідіріске жол береміз. Сол қысқа кідіріс салдарынан пайдаланушының кредит балансынан артық жұмсап қойсақ, оны автоматты түрде қайтарамыз; біз қатаң мәжбүрлеуден гөрі дәлелденетін дұрыстық пен пайдаланушы сенімін таңдаймыз.
  • Біз Credit Balance-ті азайтып, Balance Update жазбасын бір атомарлы дерекқор транзакциясының ішінде енгіземіз. Баланс жаңартулары әр аккаунт бойынша тізбектеледі, сондықтан қатар келген сұраулар бір кредитті қатар жұмсауға ешқашан жарыса алмайды. Balance Update жазбасында шегерім сомасы да, жаңартуды тудырған монетизация оқиғасына қайта байланыстыру да болады; мұны бір дерекқор транзакциясына орау кредит балансындағы әр түзету үшін аудит ізі барын кепілдейді.

Осы қатаңдықтың бәрі бір мақсатқа қызмет етеді: қолжетімділікті қарапайым әрі қауіпсіз ету. Адамдар бірдеңе жасап не код жазып отырғанда, сұрау өте ме, артық ақы алына ма, балансы дұрыс па деп уайымдамауы керек. Қолдануды, биллингті және баланстарды дұрыстығы дәлелденетін етіп жасау арқылы біз пайдаланушыларға тәжірибеден алаңдатпайтын жүйе береміз. Қатаң тоқтауларды үздіксіз қолжетімділікпен алмастыруға мүмкіндік беретін де — осы, әрі кредиттерді тек шотта емес, нақты жұмыс үстінде де қолдануға жарамды ететін де — осы.

Қозғалыс қарқынына қызмет ететін архитектура

Біздің тәсілдің жетекші қағидаты — пайдаланушы қарқынын қорғау. Әр архитектуралық шешім пайдаланушыға көрінетін нәтижеге тіреледі: нақты уақыттағы баланстар қажетсіз үзілістерді болдырмайды, атомарлы тұтыну екі рет ақы алуды болдырмайды, ал бірыңғай қолжетімділік логикасы болжамды мінез-құлықты қамтамасыз етеді. Нәтижесінде адамдар қатаң тоқтауларға не мерзімінен бұрын жоспар өзгертулеріне тап болмай, ұзағырақ жұмыс істей алады, тереңірек зерттей алады және жобаларын әрі қарай дамыта алады.

Пайдаланушылар беріліп жұмыс істеп отырғанда, жүйе оларға жалғастыруға көмектесуі керек, кедергі болмауы керек. Лимиттер мен кредиттер көзге түспей, артқы планда қалады.

Мұндай тәжірибені құру үшін қолжетімділікті, қолдануды және биллингті біртұтас жүйе ретінде қайта ойлап, дұрыстықты өнімнің бірінші дәрежелі мүмкіндігі ретінде қарайтын инфрақұрылым құру қажет болды. Уақыт өте осы іргетасқа тағы да көп өнімді қосуға болады; Codex пен Sora — тек бастамасы ғана.

Автор

Jonah Cohen

Алғыс

Кредиттерді жасаған бүкіл FinEng тобына ерекше алғыс.