Инженерлік блог

Продтағы AI-агенттер: Gemini-ді өзіміз үшін код жазуға қалай мәжбүрледік

17.07.2026
Шарафутдинов Р.

Сәлем, инженерлер! Бүгін біз AI трендіне жай ғана қызығып қоймай, оны қалай нақты бизнес-процестерге біріктіргеніміз туралы сөйлесетін боламыз. Нақтырақ айтсақ, Google Cloud Platform (GCP) экожүйесіндегі Vertex AI (Gemini) сервисін продакшеннің қақ ортасына қалай орнатқанымызды және оның көмегімен қолдау көрсету жүйесін қалай автоматтандырғанымызды егжей-тегжейлі талдаймыз. Спойлер: басында қиын болды, инфрақұрылымдық деңгейде де, код жазу кезінде де біраз тер төктік, бірақ нәтижесі барлық күткен үміттерді ақтады. Егер сіз AI-ды тек өлең шығаратын немесе сурет салатын қызықты чат-бот деп ойласаңыз, қатты қателесесіз. Қазіргі заманғы Cloud Native әлемінде бұл — дұрыс қолдана білсеңіз, өнімділікті бірнеше есе арттырып, әзірлеу және қолдау процестерін ғарыштық жылдамдыққа шығара алатын өте қуатты құрал.

Неліктен біз бұған кірістік? Проблеманың мәні

Кез келген ірі жобаның өсуімен бірге оның қолдау көрсету қызметіне (support team) түсетін жүктеме де экспоненциалды түрде артады. Біздің жағдайда, күн сайын келіп түсетін жүктеменің басым бөлігі — бұл құжаттамада анық жазылған, бірақ пайдаланушылар оқуға ерінетін немесе жүйенің қарапайым баптауларына қатысты рутиналық сұрақтар еді. Бір күні кезекті daily standup жиналысында біздің Senior инженерлердің уақыты қарапайым логтарды тексеруге және «парольді қалай қалпына келтіру керек» деген сияқты бір типті тикеттерге жауап беруге кетіп жатқанын түсіндік. Бұл SRE (Site Reliability Engineering) тұрғысынан нағыз Toil (пайдасыз, қайталанатын жұмыс) және компания үшін үлкен overprice (артық шығын) болып табылады.

Біз бұл мәселені шешу үшін Large Language Models (LLM) технологиясын қолдануды ұйғардық. Мақсат айқын болды: бірінші деңгейдегі қолдау көрсету қызметін толығымен автоматтандыру, бірақ бұл ретте пайдаланушыларға робот емес, білікті маман жауап бергендей әсер қалдыру. Нарықтағы шешімдерді сараптай келе, біз қауіпсіздік, жылдамдық және интеграциялық мүмкіндіктері бойынша Google Cloud ұсынатын Vertex AI платформасына тоқталдық. Оның ішінде Gemini Pro моделі біздің мәтіндік контексті терең түсіну және жылдам жауап беру талаптарымызға толық сай келді. Біз бірден sandbox (құмсалғыш) ортасын құрып, архитектураны жобалауға кірістік.

Бұл ғажайыптың архитектурасын қалай құрдық

Біз күрделі инфрақұрылымды басынан бастап құрастырып, велосипед ойлап тапқымыз келмеді. Сондықтан біз заманауи Serverless және Event-driven принциптеріне негізделген классикалық архитектураны таңдадық. Негізгі компоненттер келесідей болды:

  • Cloud Run: Біздің негізгі микросервистерімізді хостингтеу үшін таңдалды. Ол Docker контейнерлерін өте жылдам іске қосады, сұраныс жоқ кезде нөлге дейін масштабталады (scale-to-zero), бұл бюджетті үнемдеуге керемет көмектеседі.
  • Pub/Sub: Асинхронды хабарламалар кезегі. LLM кейде сұранысқа жауап беру үшін 2-ден 5 секундқа дейін уақыт алуы мүмкін. Пайдаланушының HTTP қосылымын бұғаттап ұстап тұрмас үшін, біз барлық сұраныстарды Pub/Sub арқылы асинхронды өңдейміз.
  • Firestore: Нозологиялық және құрылымдалмаған деректерді сақтауға арналған NoSQL дерекқоры. Мұнда біз әрбір пайдаланушымен болған диалогтардың контекстін (chat history) және сессия мәліметтерін сақтаймыз.
  • Vertex AI Vector Search (бұрынғы Matching Engine): Біздің ішкі құжаттамаларымыз бен білім қорымыздың (Knowledge Base) векторлық индекстерін сақтайтын және іздейтін негізгі қозғалтқыш.

Жүйенің жұмыс істеу принципі мынадай: пайдаланушы қолдау чатына сұрақ жазады. Бұл сұрақ API Gateway арқылы өтіп, Pub/Sub кезегіне түседі. Cloud Run-да орналасқан микросервис хабарламаны оқып алады да, алдымен пайдаланушының сұрағын векторлық пішімге (embedding) айналдырады. Ол үшін біз text-multilingual-embedding-002 моделін қолданамыз. Содан соң, алынған вектор бойынша Vector Search жүйесінен біздің ішкі құжаттарымыздың ең сәйкес келетін бөліктерін (контекстті) тауып аламыз. Осыдан кейін ғана сұрақ пен табылған контекст біріктіріліп, Gemini Pro моделіне жіберіледі. Бұл әдіс RAG (Retrieval-Augmented Generation) деп аталады.

`

Сұраныстарды өңдеу уақыты (миллисекундпен)

Әртүрлі өңдеу кезеңдеріндегі жүйенің кідірісі (latency) көрсетілген

`

Галлюцинациялармен күрес және промпт-инжиниринг

Жобаны іске асыру барысында біз кездескен ең үлкен кедергі — модельдің галлюцинациялары (hallucinations) болды. Gemini кейде өзіне сенімді түрде біздің өнімде мүлдем жоқ функцияларды ойлап тауып, пайдаланушыларға жалған нұсқаулықтар бере бастайтын. Бұл қолдау көрсету жүйесі үшін өте қауіпті нәрсе. Оны шешу үшін біз үш деңгейлі қорғаныс жүйесін енгіздік:

1. Қатаң System Instructions (Промпт-инжиниринг): Модельге берілетін бастапқы нұсқаулықты өте егжей-тегжейлі жазып шықтық. Оған келесідей шектеулер қойылды: «Сен тек берілген контекст аясында ғана жауап беруің керек. Егер контекстте сұраққа жауап болмаса, өзіңнен ештеңе қоспай, сыпайы түрде адам-операторды шақыратыныңды айт».

2. Zod арқылы шығысты қатаң валидациялау: Модельден бізге жай ғана мәтін емес, белгілі бір құрылымдағы JSON қайтуы маңызды болды. Ол үшін біз TypeScript экожүйесіндегі Zod кітапханасын қолдандық. Егер модель қайтарған жауап біздің схемамызға сәйкес келмесе, жүйе оны автоматты түрде қайта сұратады немесе операторға бағыттайды.

3. RAG архитектурасын жетілдіру: Біз құжаттарымызды кішігірім бөліктерге (chunking) дұрыс бөлуді үйрендік. Әрбір бөліктің көлемі 500 таңбадан аспауы керек және олардың арасында 10% өзара сәйкестік (overlap) болуы тиіс. Бұл контексттің жоғалып кетпеуін қамтамасыз етеді.

Код деңгейінде бұл қалай көрінетінін қарастырайық. Төменде Node.js және ресми @google-cloud/vertexai SDK көмегімен жазылған микросервистің негізгі бөлігі көрсетілген:

import { VertexAI } from '@google-cloud/vertexai';
import { z } from 'zod';

const vertexAI = new VertexAI({ project: 'my-gcp-project', location: 'us-central1' });
const generativeModel = vertexAI.getGenerativeModel({
  model: 'gemini-1.5-pro-preview-0409',
  generationConfig: {
    responseMimeType: 'application/json',
  }
});

const SupportResponseSchema = z.object({
  answer: z.string(),
  confidenceScore: z.number().min(0).max(1),
  needsHumanOperator: z.boolean(),
  suggestedAction: z.string().optional()
});

async function handleSupportTicket(userQuery: string, context: string) {
  const prompt = `
    Жүйелік нұсқаулық: Сен біздің өнімнің техникалық қолдау көрсету көмекшісісің.
    Тек қана келесі контекстке сүйеніп жауап бер:
    ---
    Контекст: ${context}
    ---
    Пайдаланушы сұрағы: ${userQuery}
    
    Жауапты міндетті түрде келесі JSON форматында қайтар:
    {
      "answer": "Сұраққа жауап",
      "confidenceScore": 0.95,
      "needsHumanOperator": false,
      "suggestedAction": "Қажетті әрекет"
    }
  `;

  try {
    const responseResult = await generativeModel.generateContent({
      contents: [{ role: 'user', parts: [{ text: prompt }] }]
    });
    
    const responseText = responseResult.response.candidates?.[0].content.parts[0].text;
    if (!responseText) throw new Error('Empty response from Gemini');
    
    const parsedData = SupportResponseSchema.parse(JSON.parse(responseText));
    return parsedData;
  } catch (error) {
    console.error('Қате орын алды:', error);
    return {
      answer: "Кешіріңіз, қазіргі уақытта сұранысыңызды өңдей алмадым. Сізді операторға қосамын.",
      confidenceScore: 0,
      needsHumanOperator: true
    };
  }
}

Бұл код бізге модельдің жауаптарын толық бақылауда ұстауға мүмкіндік береді. Егер confidenceScore көрсеткіші төмен болса немесе needsHumanOperator мәні true болса, жүйе тикетті бірден Jira Service Desk немесе біздің ішкі чатымызға бағыттайды, онда оны тірі адам қолмен тексереді.

Оптимизация және мониторинг

Жүйені іске қосқаннан кейін біз тағы бір маңызды мәселеге тап болдық: шығындар мен жылдамдық. Gemini 1.5 Pro өте ақылды модель болғанымен, оның әрбір сұранысты өңдеу уақыты (latency) біз қалағаннан сәл жоғары болды. Біз шығындарды оңтайландыру және жылдамдықты арттыру үшін гибридті модельді қолдануды ұйғардық. Ол үшін біз сұраныстарды жіктеуді енгіздік: қарапайым сұрақтарға (мысалы, "сәлем", "рахмет", "жұмыс уақытыңыз қандай?") жеңіл әрі арзан Gemini 1.5 Flash моделі жауап береді, ал күрделі техникалық сұрақтар мен логтарды талдауды қажет ететін тапсырмаларға Gemini 1.5 Pro қосылады.

Мониторинг үшін біз Cloud Logging және Cloud Monitoring құралдарын пайдаландық. Әрбір сұраныстың орындалу уақытын, жіберілген және алынған токендер санын (prompt tokens және candidates tokens) мұқият қадағалап отырамыз. Бұл бізге ай соңында күтпеген шоттардан (billing shock) аулақ болуға көмектеседі.

`

Тикеттерді автоматтандыру динамикасы

Жүйені енгізгеннен кейінгі апталар бойынша адам көмегінсіз жабылған тикеттердің пайызы

`

Жобаның нәтижелері мен қорытындылары

Сонымен, бұл архитектуралық өзгерістер бізге не берді? Нақты сандармен сөйлейтін болсақ:

  1. Тикеттерді автоматтандыру деңгейі 40%-ға жетті. Бұл дегеніміз, келіп түсетін барлық сұрақтардың жартысына жуығын біздің AI-агентіміз операторлардың қатысуынсыз, сәтті шешіп жатыр.
  2. Жауап беру уақыты (MTTA - Mean Time to Answer) қысқарды. Бұрын пайдаланушылар оператордың босауын 15-20 минут күтсе, қазір алғашқы нақты техникалық жауапты 5 секунд ішінде алады.
  3. Инженерлердің мотивациясы артты. Қолдау көрсету тобындағы Senior мамандар рутиналық жұмыстардан босап, жүйенің тұрақтылығын арттыруға және маңызды инфрақұрылымдық тапсырмаларға көбірек уақыт бөле бастады.

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

Сондықтан, достар, AI-ды өндірістік ортаға (production) енгізуден қорықпаңыздар. Қазіргі құралдар, әсіресе Google Cloud ұсынып отырған Vertex AI экожүйесі бұл процесті барынша қауіпсіз және жүйелі түрде жасауға толық мүмкіндік береді. Егер сіздерде де осындай LLM модельдерін өндіріске енгізу бойынша тәжірибелеріңіз болса немесе сұрақтарыңыз туындаса — пікір қалдырыңыздар, бірге талқылайық!

Рустам Шарафутдинов

Рустам Шарафутдинов

Инженерлік блог авторы

Google Cloud архитектурасы саласындағы сарапшы және 15 жылдан астам тәжірибесі бар Senior Full-Stack әзірлеушісі. Ақауға төзімді архитектураларға, жоғары жүктемелі жобаларды оңтайландыруға және AI (Vertex AI) интеграциясына маманданған.

Сараптама: GCP, Kubernetes, Микросервистер, React, Node.js

Пікірлер (0)