Я месяц спрабаваў замяніць мадэлі, якія пішуць наш код

Апублікавана  · Абноўлена  · Ігар Ткачэнка

Сава-аналітык OwlMeans вывучае код і графік

Каля месяца я спрабаваў замяніць прапрыетарныя мадэлі ў нашым канвееры распрацоўкі мадэлямі з адкрытымі вагамі.

Гэты месяц я мог бы аддаць самому прадукту. Я зрабіў такую стаўку, бо кожная спецыялізаваная роля ў OwlMeans звяртаецца да моўнай мадэлі. Змена тут адбіваецца на ўсім працэсе распрацоўкі.

Тады наш набор складаўся з мадэляў Anthropic і OpenAI. Я спрабаваў GLM, Kimi, DeepSeek і Qwen праз хостынг-правайдараў. Мне хацелася зразумець, ці можа іншы набор надзейна рабіць тую ж працу.

Гэты чэрвеньскі эксперымент — не бенчмарк. Ён не даказвае, што OwlMeans мае перавагу ў кошце.

Наш канвеер разбівае прадукт на дробныя часткі. Роля працуе над карыстальніцкай гісторыяй, праектным рашэннем або абмежаванай зменай у кодзе. Яна атрымлівае кантэкст для гэтай працы, а не просьбу прыдумаць увесь застасунак.

Я думаў, што пры такой структуры замяніць мадэлі можа быць проста. Калі задача досыць вузкая, у мадэлі, магчыма, будзе менш шанцаў яе не зразумець.

Гэта была інжынерная гіпотэза, якую я мог праверыць на ўласнай сістэме. А яшчэ — спакуслівы крук для заснавальніка, які працуе адзін. Паляпшаць механіку здавалася карысным для кожнага будучага праекта, таму яшчэ адзін дзень наладкі было лёгка апраўдаць.

Мне трэба было ацэньваць увесь запуск разам з застасункам, які ён даў.

Пустыя адказы

Першай праблемай сталі разважанні.

Некаторыя мадэлі трацілі даступны бюджэт адказу на ўнутраныя разважанні і не вярталі нічога прыдатнага. Роля распрацоўшчыка завяршала свой запыт, але наступнаму этапу не было чаго прымяняць.

Я спрабаваў адключыць разважанні наладай, якую правайдар выконваў не заўсёды. Потым паставіў яўныя абмежаванні для роляў, якіх гэта датычыла, і наладжваў іх для кожнай мадэлі асобна.

Гэта запатрабавала больш увагі, чым абяцала простае пераключэнне набору. Планавальніку і распрацоўшчыку не падыходзіла адно і тое ж. Налада, якая спрацавала для адной мадэлі, не была правілам, якое можна бяспечна перанесці на астатнія.

Наступнай праблемай стаў фармат адказу. Нашы этапы перадаюць адзін аднаму структураваныя вынікі. Адказ, які мне здаецца разумным, усё роўна можа не прайсці праверку па схеме, якую чакае наступны крок.

Там, дзе мадэль не магла надзейна вярнуць патрэбную структуру, я дадаў шлях праз выклік інструмента. Яшчэ я змяніў тое, як код рухаецца па канвееры. Агент працаваў з патрэбнымі фрагментамі і патчамі, замест таго каб раз за разам апрацоўваць цэлыя файлы.

Гэтыя змены сталі часткай сістэмы, якую мне трэба было падтрымліваць. Эксперымент ужо перарос выбар мадэлі са спісу.

Правайдар пасярэдзіне

Назва мадэлі не вызначала ўсяго асяроддзя выканання.

Ад хоста залежала, якія магчымасці былі даступныя і як паводзіліся запыты. Я тэставаў правайдараў і ўрэшце ўключыў у эксперыментальны набор маршрутызацыю і аварыйнае пераключэнне OpenRouter.

Дакументацыя OpenRouter пра маршрутызацыю паміж правайдарамі тлумачыць, якімі наладамі можна выбіраць і фільтраваць хосты. Мой канвеер залежаў ад пэўнай формы адказу, таму гэтыя налады былі важныя. Увесь маршрут, якім я карыстаўся, усё роўна даводзілася тэставаць самому.

Нарэшце я мог пераключацца паміж наборамі і праганяць праз іх адзін і той жа праект. Толькі на той час за гэтым пераключэннем ужо стаялі абмежаванні на разважанні, апрацоўка адказаў, выманне кода і выбар правайдараў.

Застасунак на выхадзе

У тых запусках застасункі на выхадзе былі ў цэлым падобныя. Я заўважыў адрозненні ў CSS і часам — дапаўненні ў інтэрфейсе, пра якія я не прасіў.

Бачыў я і тое, як здольныя мадэлі ўпрыгожваюць маленькую задачу, калі мне патрэбна была літаральная рэалізацыя. Гэта назіранне пра мае задачы і канфігурацыю. Для агульнага рэйтынгу мадэляў яно было б кепскай асновай.

Мне як чалавеку, які кіруе сістэмай, даводзілася мець справу з менш прыкметнымі адрозненнямі. Структураваныя вынікі, якія не прайшлі праверку, патрабавалі яшчэ адной спробы, а з патчамі, якія не накладваліся, разбіраўся я сам. Нават звычайны крок мог спыніцца з-за неадпаведнасці на баку правайдара.

Фінальны здымак экрана гэтую працу хавае.

Замяніць мадэлі азначала ўзяць на сябе больш працы ўнутры канвеера.

Было ў мяне і нефармальнае параўнанне паводле ўласнага ўліку. Ды давяраў я яму не настолькі, каб ператвараць яго ў агульнае сцверджанне пра прадукцыйнасць.

Мадэлі былі па-рознаму наладжаныя. Паводзіны правайдара ўваходзілі ў вынік. Паўторы і крокі выпраўлення рабілі шлях запуску такім жа важным, як і канчатковы артэфакт.

Паўнавартаснае параўнанне патрабавала б дакладна вызначанай задачы, аднолькавых праверак прыёмкі, паслядоўнага ўліку і справаздачы пра збоі. А мае запускі далі мне інжынерныя нататкі.

Таму ў гэтай рэдакцыі няма ранейшага загалоўка з лічбай. Публічны адрас застаўся тым жа, каб наяўныя спасылкі не зламаліся.

Мне ўсё ж трэба было вырашыць, на што траціць час. Я мог далей наладжваць эксперыментальны набор, а мог вярнуцца да астатняга прадукту. Новыя вымярэнні дапамаглі б толькі тады, калі б адказвалі на пытанне, якое мне сапраўды трэба было вырашыць.

Месяц наладкі

Я захаваў працоўны спосаб спрабаваць розныя мадэлі. А яшчэ знайшоў некалькі дапушчэнняў, схаваных унутры канвеера: як роля разважае, як вяртае вынік, колькі зыходнага кода атрымлівае і што адбываецца, калі яе правайдар дае збой.

Для рухавіка, які я будую, гэта карысныя веды. Што іншаму заснавальніку варта паўтараць такі ж эксперымент, яны не даказваюць.

Калі б я рабіў гэта зноў, раней вызначыў бы ўмовы спынення. І вырашыў бы, якія віды збояў мне трэба зразумець, перш чым траціць яшчэ тыдзень на змену налад.

За гэты месяц я лепш зразумеў уласную сістэму. Але гэты ж месяц выпаў з астатняй працы над OwlMeans. У рахунак ідзе і тое, і другое.

Перагледжана 15 кастрычніка 2026 г. Чэрвеньскі эксперымент апісаны без змен. Паводзіны мадэляў і правайдараў з таго часу працягвалі мяняцца; назіранні вышэй датычацца тых запускаў.

OwlMeans