Блог

Суреттерге толы агент жауаптарын жадқа сыйғызу

Өндірісте агент бір жауап барысында алты каталог сканерінен өнімдерді кесіп алып, кесінділерді қарап тұрып, жадтың 952 МБ-ында таусылды. Бір ғана жады ағып кетуі болған жоқ — үш бөлек себеп болды. Модельге әрбір сұраныс жауаптың суреттерін толық өлшемде қайта жіберді; модельді шақыратын кітапхана әр сұранысты жауап аяқталғанша тірі ұстады; ал агенттік фреймворктың трассировкасы әр шақырудың кірісін, соның ішінде суреттерін, бүкіл жауап бойы сақтап тұрды. Үшеуін де түзеттік: суреттер жіберілер алдында кішірейтіледі, ал әр шақырудың суреттері шақыру аяқталысымен босатылады.

Агент суретті қалай көреді

Mythex-те жоба жасағанда агент жобаңыздың cloud sandbox ішінде жұмыс істейді. Ол суреттерді көре алады — сіз тіркеген скриншотты, макетті, жобадағы файлды немесе өзі жасаған суретті — оларды сөйлесу мәтінімен бірге модельге жіберу арқылы.

Жауап (turn) дегеніміз — агенттің сіздің бір хабарламаңызға жауап ретінде атқаратын барлық жұмысы. Жауап ішінде агент модельді көп рет шақырады: ойланады, құралды іске қосады, нәтижесін қарайды, қайта ойланады. Әр шақыру сол кезге дейінгі сөйлесуді жібереді, оған жауаптың суреттері де кіреді, олар мәтінге айналдырылған түрде (base64, бұл шамамен үштен бір бөлікке үлкейеді).

Құлаған жауап ақылға қонымды нәрсе жасап жатқан еді. Ол алты каталог сканерін алды, әрқайсысы шамамен 2,4 МБ, сканерлерден жеке өнімдерді кесіп алды және кесінділерді тексеру үшін қайта оқып отырды. Бұл әр шақыру бірнеше үлкен суретті тасыған көп шақыру болды.

Себеп 1: әр шақыру суреттерді толық өлшемде қайта жіберді

Әр шақыру сұраныс денесін жауаптың толық өлшемдегі суреттерімен қайта құрды — шақыру сайын шамамен 20 МБ base64. Дене агенттің жадында бір жол ретінде құрылады, сондықтан әр шақыру тағы да шамамен 20 МБ бөледі.

Толық өлшемде жіберудің пайдасы да болмады. Модель суреттерді өзі шамамен 1 300 пиксельге дейін кішірейтеді, сондықтан қосымша пикселдер тек жадты және жүктеу уақытын жұмсайды.

Түзету: бір рет кішірейтіп, кішкентай жіберу

  • 400 КБ-тан үлкен суреттер модельге жіберілер алдында ұзын жағы 1 568 пиксельден аспайтын JPEG-ке айналдырылады. Кішірек суреттер өзгеріссіз жіберіледі.
  • Айналдыру Mythex sandbox-тарының барлығында бар ImageMagick арқылы орындалады және әр файл үшін бір рет іске қосылады. Бірдей сканерлерді әр шақыруда көрсететін жауап кішірейтілген көшірмені қайта пайдаланады. Бұл кэш файл жолы, өлшемі және өзгерту уақыты бойынша кілттеледі, сондықтан өңделген файл қайта айналдырылады, ал оның өз өлшем шегі бар, сондықтан ол жадты толтыратын нәрсеге айнала алмайды.
  • Бір модель шақыруындағы суреттерге арналған бюджет 16 МБ-тан 6 МБ-ға дейін түсті.

Нәтижесінде сол алты сканер енді әр шақыруда 19,7 МБ орнына 4,4 МБ алады.

Себеп 2: модель клиенті сұранысты ешқашан босатпады

Сұраныстың өлшемі — тек бір бөлігі ғана еді. Жады шақыру сайын да өсіп отырды. Staging ортамызда дәл осындай жауап толық қоқыс жинаудан кейін де (яғни ешқайда қажет емес нәрсенің бәрі босатылғаннан кейін) 369 МБ тірі жадты ұстап тұрды. Heap сынамасы барлық өсуді модель кітапхана клиентінің сұраныс денелерін кодтайтын бөлігіне көрсетті.

Себеп — abort тыңдаушысы еді. Сіз Stop басқан кезде жауаптың abort сигналы іске қосылып, әрбір белсенді сұраныс болдырмалады. Біз осы бір жауап деңгейіндегі сигналды әр сұранысқа бердік. Клиент кітапханасы сигналға "abort" тыңдаушысын қосады, бірақ оны ешқашан алып тастамайды.

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

Түзету: әр сұранысқа бір сигнал

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

Тесттер үш бөлікті де қамтиды:

  • 12 шақырудан кейін жауап сигналында ешбір тыңдаушы қалмайды. Түзетуге дейін 12 болатын.
  • Әр 8 МБ-тық 15 сұраныс бойынша жады тұрақты қалады. Бұрын 128 МБ өсетін.
  • Stop әлі де ағын ортасындағы сұранысты тоқтатады.

Себеп 3: трассировка әр шақырудың кірісін сақтады

Heap суретінде үшінші ұстаушы көрінді: әр модель шақыруына шамамен 6 МБ. Бұл агенттік фреймворктың оқиғаларды ағындату жүйесінен шықты. Ол жауап ішіндегі әр модель шақыруын жауаптың баласы ретінде жазып алады, кірісімен қоса, жауап аяқталғанша. Әр шақыруға тіркелген әр сурет онымен бірге жадта қалып отырды.

Түзету: шақыру қайтқаннан кейін суреттерді тазарту

Суреттер тек белгілі бір модель шақыруына арналған хабарламаларда жасалады. Олар сөйлесудің сақталған күйінде ешқашан сақталмайды. Сондықтан шақыру қайтқаннан кейін сол хабарламалардағы сурет деректерін бос ету қауіпсіз. Трасса шақырудың мәтіндік жазбасын сақтайды, пиксельдер жоғалады.

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

Тест агенттің графигін әр шақыруда 4 МБ сурет бар оқиғаларды ағындату жағдайында іске қосады. Түзетусіз жады 16 шақыруда 77 МБ өсті. Түзетумен жады тұрақты қалады.

Біз не үйрендік

  • Жады мәселелері қабаттарда болуы мүмкін. Үш бөлек себеп суреттерді тым ұзақ ұстап тұрды, ал жауап жадқа сыятын болу үшін үшеуі де жойылуы керек еді.
  • Кітапханаға берген нәрсе сақталуы мүмкін. Сигнал мен трасса өздеріне берілген шақырулардан ұзағырақ өмір сүрді. Жады әр шақыруда өссе, сол шақыру қол тигізетін ұзақ өмір сүретін объектілерге қараңыз.
  • Екінші жақ лақтыратын нәрсені жібермеңіз. Модель бәрібір тастайтын пиксельдер әр шақыруда жадымызға шығын әкелді.
  • Жадты тікелей тестілеңіз. Әр түзетумен жады өсуін немесе тыңдаушылар санын өлшейтін тест келді, сондықтан регрессия құлау емес, сан ретінде көрінеді.

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

Mythex · Pricing · ЖИ көмегімен кез келген нәрсені жасаңыз · Сайттар мен қосымшаларға арналған үлгілер · Mythex салыстыруда · ЖИ-мен қосымша жасау сөздігі · ЖИ-мен қосымша жасауға арналған тегін құралдар · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)