Мен жұмыс істейтін өнімдердің көбі екі бөліктен тұрады. Бірі — адамдар пайдаланатын бөлік: Next.js интерфейсі, Node.js API-і, аутентификация мен төлемдер. Екіншісі — модельдермен жұмыс: инференс, эмбеддингтер, аудио және деректерді өңдеу. Бірінші бөлік TypeScript тілінде, екіншісі Python тілінде сөйлейді. Екеуін білу — тіл жинау емес, олардың түйіскен жеріне жауап беру; AI өнімдерінің көбі дәл осы тұста бұзылады.
Жақсысы, екі экожүйенің ұқсастығы ойлағаннан көбірек. Zod-тың Python жағында Pydantic, tsc-тің mypy және pyright, ESLint пен Prettier-дің Ruff, npm мен pnpm-нің uv және Poetry баламалары бар. Express пен NestJS-ке FastAPI сәйкес келеді, ол типтелген модельдерден OpenAPI-ді де өзі жасайды. Екі жақта да бірдей тәртіп сақтаймын: қатаң типтер, бәрі келіскен форматтаушы, нұсқасы бекітілген тәуелділіктер және CI тестері.
Екі жақ арасындағы келісімшарт — жүйедегі ең маңызды файл. Оны бір рет анықтап, қалғанын генерациялаймын: FastAPI-дегі Pydantic модельдері OpenAPI схемасын жасайды, одан TypeScript клиенті мен типтері генерацияланады. Python-да өрістің атын өзгертсеңіз, пайдаланушы undefined көрмей тұрып Next.js жинағы құлайды. Асинхронды жұмыс үшін келісімшарт — екі шетінде де схемасы бар тапсырма payload-ы; әр тарап әртүрлі түсіндіретін еркін JSON емес.
Жауапкершілік қатаң бөлінеді. TypeScript тұлға, рұқсат, ақша және UI-ге жауап береді. Python тек модельге жауап береді: тапсырманы қабылдайды, ауыр жұмысты — StyleTTS2 дауысы, эмбеддингтер тобы немесе құжат талдауы — орындайды да нәтижені қайтарады. Python сервисі браузермен сөйлеспейді және кімге не істеуге болатынын шешпейді. Жылдам шақырулар HTTP арқылы, баяулары кезекпен өтеді; екі жақта да таймаут, қайта талпыныс және идемпотенттілік бар.
Айырмашылықтарды да ескеру керек, бұл да жұмыстың бір бөлігі. Python-да notebook арқылы прототип жасалады, бірақ notebook өндірістік орта емес: дайын код тестілері бар модульге көшеді. Python-ның қатар орындалуы Node-тың event loop-ы емес: CPU-ға ауыр инференс async сұрау өңдегішінде емес, worker процестерінде не GPU сервисінде жүруі керек. Деплой бірліктері де бөлек — ықшам Node образы мен CUDA және модель салмақтары бар Python образы; сондықтан масштабтау, кеш және құны әртүрлі.
Клиентке екі жақта да бір инженердің болуының пайдасы айқын: «AI маманы» мен «веб маманы» арасында аудармашы қабат қажет емес және екі жақ бір-бірін кінәлайтын API болмайды. Notebook-та істейтін моделі бар, бірақ оны қолдана алмайтын веб-қосымшаңыз болса, екеуін де жіберіңіз. Арасына қоятын келісімшартты және іске қосатын алғашқы нұсқаны ұсынамын.
Келесі өнімге онымен бірге қалатын адамды беріңіз.
Бастауға дайынсыз ба? Маған жазыңыз — қазір бастап, әрі қарай қалуға дайынмын. Екі апталық тапсыру емес, ұзақ мерзімді келісімдер. Жобаңызды, талаптарды және алға жылжудың ең тиімді жолын талқылайық.