Галоўная / Артыкулы

Чатыры віды памяці, патрэбныя агенту кадавання (а пабудаваны толькі адзін)

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

Выдавец: REACTAPP.TOP11 хв чытання2627 слоў

Крыніцы: Your Coding Agent Is Always the New Guy on Monday.

Няўзніклад з’явілася група інструментаў, мета якіх — запобегчыць агентам для кодавання на базе ШЫ у пошуку інфармацыі ў рэпазітарыях. Яны аналізуюць код за дапамогою Tree-sitter, зберагчыць сімволы і зв’язкі ў SQLite і надаюць іх праз MCP, або ж запускаюць серверы мовы і даюць агенту справжнія семантыкі IDE. Адзінакавыя практычныя рэзультаты і ідэя сама по сабе ўзгодныя.

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

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

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

Тэст, які іх разлічае

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

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

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

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

1. Структурная памяць: адзінак змены

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

  • Tree-sitter апранае шыроту: спіс вузлаў, актараў, падтрымка пад 40 языкаў, тольерантнасць да бядак і час выканання за файлам у мілісекундах. Ён не разгледвае тыпы. Ён можа сказаць, што у 3-й лініі ёсць вызов функцыі пад назвай execute, але не якой саме execute. Падбор назв не ўраджае аналіза на рэвэліцыі кампайляра, і гэтыя недастаткі яскрава прыкладзены ў поліморфным, шаровым, з кодам, дзе выкарыстоўваецца ін’екцыя залежнасцяў.
  • LSP апранае правільнасць за дапамогою textDocument/definition, references і implementation, падтрымленае справжнім пераканальнікам тыпаў. Ёна запускаецца павольна, патрабуе работаючага кампілявання і должна застацца пахацелай ад шляха запытанняў, таму што камп’ютэр, дзе работае сервер языка, разрушае весь бюджэт на затрымкі. Заўважыце яе як фонавы элемент для адгэнеравання дадатковых даных.
  • Bytecode адмініструе код, які існуе толькі пасля запуску працэса кампайлінгу: запыты, створаныя на базе Spring Data, проксі CGLIB, кэшэры MapStruct, а таксама будзь-што, што было напісана працоўнікам пракрэсавання анотацый. У выхадным кодзе гэтага няма. У каталозе target/classes гэта все ўсё ўказваецца.
  • Рэзультаты AOT або каталог /actuator/beans паказваюць, як адбываецца ввод залежнасцей, іншымі словамі, які конкрэтны клас заполняе які інтэрфейс у яком праблейме. Чытанне выхаднага коду гэтага не пакажае, таму што адказ там няма.
  • Распраўленыя трэйсы адображаюць лініі зв’язку між сервісамі і па межах асінхронных аперацый: ад кантролера праз HTTP да іншага сервіса, ад прадзюсара да топіку да кансюмера. Кожны сервер на яком развіваецца коду зупініцца на межы модуля, а распраўленыя сістэмы складаюцца пераважна з гэтага. Калі вы запускаеце OpenTelemetry, вы вялікі час ужо збіраеее графік вызоў між сервісамі і пасля таго яго выкарыстоўваеее.
  • Найважлівейшыя рашэнні ў дызайне — гэта тое, што кожная грань атрымлея павяління:

    • resolved: перакананы контролер тыпаў, таму можна без апасцярожнасці дзеяць.
    • observed: гэта рэзультат рэальнага запуску, які ўтварае основу для пераваротаваных шляхоў.
    • inferred: падабрана толькі за назвай. Ў большасці случаў правільна, але не пераканана.
    • ambiguous: існуе калькі кандыдатаў. Павінна быць вярнута ўсе і не выбіраць нічога.
    • dynamic: вылічваецца пад час запуску і ўжо не можа быць пераканана, таму яе трэба зазначыць як такую, якая не можа быць пераканана, і не адхіляць.

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

    Адзін наследак, пра які мало які рэалізацыі ясна пазначаюць: у шаравайскай базе коду Spring або Django аналіз уплыву дае толькі ніжню межу, а не цэлыя рэзультаты. Можна сказаць "17 вызываючых элементаў, 3 нераспрацаваныя дыстрабуцыі інтэрфейса, 1 створаны метод" — гэта правільна. Але сказаць толькі "17 вызываючых элементаў" — гэта вводзіць у глухі кут.

    Зміны выконваюцца кожную гадзіну, а перзапуск займае калькі секунд.

    2. Памяць знанняў: прычыны, стоячыя за кодам

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

    У файле налашчэння розглянем колькасць практык перапрыбутку як 3. Яе адказанне розпадаецца на документ ADR 2023 года, аналіз падвойных інструкцыйяў па расчыткам і тэму, у якой хтось опісаў SLA партнера. Зв’язак межы ўсімі гэтымі элементамі — палітыка, якая стварылася пасля інцыдэту і обмежвае інтэграцыю — практыкуецца ў трох дакументах, прычым кожны з іх сформулюваецца інакш.

    У гэтым случае GraphRAG ёсць хорашым інструментам, і важна ведаць, што ён робіць. Існуе шасць крокаў:

    1. Чанкаванне дэтэрміністычна дзеліць дакументы на тэкстовыя елементы.
    2. Экстракцыя — гэта праца LLM: мадэль чытае кожны чанк і выдае ентытэты і адносы.
    3. Сумарызацыя апісання таксама ёсць працай LLM, пры чым адны і тыя ж ентытэты, опісаныя пяцьдзесятма спосабамі, аднарадзаюцца ў адно апісанне.
    4. Leiden clustering не выкарыстоўвае жадных модэляў. Ён дзеліць граф на вярстаўваныя спільнатыя групы на аднойчыні модулярнасці, тыя групы, у якіх колькасць внутраніх рэштоў значна перавышае колькасць рэштоў, якія выходзяць за межы групы.
    5. Атласы спільнатых груп — гэта апускі LLM па кожнай спільнатай групе, напісаныя знізу-вверх, пры чым вышэйшыя рэвэліі ствараюцца на аднойчыні апускаў з ніжэйшых рэвэліяў.
    6. Embedding стварае вектары, якія служаюць пунктамі входу для запытак.

    Два тэрміны заслуговаюць на адказвальнейшы аналіз. «Канец» у гэтым кантэксце — гэта не запісаны паказывач; ён мае опіс у прозе ад мадэлі, а таксама вагу і іншыя джэрэла, тады кожны такі «канец» фіксуе спосаб, якім мадэль расумее рэчэнце. А «спялочка» таксама — гэта не проста дэтальная структура, адколі вялікі набор вузлаў можа зовсім не мець спольных «канцаў» і застаўляць ізольаваныя елементы, якія немагчыма падсумаваць. Лейдэн выбірае кластэры, у якіх індукуваныя «канцы» ўжо ў ўсіх аспектах ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ў

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

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

    3. Эпізодычная памяць: што адбылася пад час пакульных спроб

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

    У ёму таксама ёсць атрыбут, якога не можа прызнацца ні адні з семантычных індэксаў: яго асалодная правда ёсць дэтэрміністычная. У аналізе пасля адбыцца падтверджэнне ад чалавека, якое выкарыстоўвае мадэль. Фраза «Агент змяніў X, і CI стала цяплай» ёсць рашэннем, якое прымеў сістэма зборкі. Для пытанняў, якія ён рашае, гэта робіць эпізодычную памяць найболей надзеяным джэрэлам у данай схеме.

    Тры аспекты дызайну лёгка ўскрысці:

    • У гэтым месцы можна прыскочыць застосоўванню GraphRAG. Эпізоды выконваюцца па часовай лініі і маюць паследкі. Групаванне па ўтрамбоўкі канектаў — гэта неправільная структура; трэба вяжаць з урахоўваннем свежасці, частоты і успеху чы неудачы.
    • Неабходна выгналовая процедура. Семантычныя індэксы могу існаваць без яе, але гэты не можа. Урок з перэработкі двух архітэктураў два часы таму не толькі застарэў, але і ведае агента ў неправым напрамку.
    • Памылкі накапліваюцца. Падазроўваючы, што агент правільна не вырашыў задачу і запісаў рэзультат, гэты рэзультат стае запамятаваным фактам, які успадковуецца ў кожной наступной сесіі. Зберагаюце рэзультат (CI не працаваў, PR адхілён) з высокай доверымасцю, а власныы вывод агента — з значна ніжэйшай доверымасцю; пасля чаго дазвольце выводу згаснуць, а рэзультат застацца.

    Абыцце пры кожной сесіі.

    4. Процедурная памяць: зовсім не індэкс

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

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

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

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

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

    З’еднанне: адна прастора імен сімвалаў

    Тры ўзятыя спамяці з’яўляюцца ў аідэнтыце сімвола, і ніхто не распрацаваў гэтую частку. Структурныя вузлы выкарыстоўваюць повназначныя назвы. Эпізодычныя запісы паказваюць на той сімвол, які агент фактычна обрабляў, таму яны з’яўляюцца ў точнасці. Энтытэты ў індэксе знанняяў — гэта строкі, якія модэль выбраў з прозы, такія як „SettlementService“, „the settlement service“, „the settlement reconciliation path“ або „the counterparty SLA constraint“, а ўзначэнне іх з рэальнымі сімволамі ёсць задачай размытага падабенства.

    Адгуляванне на працоўнае і ёсць тая неудача, якой прагледзаюць запобiec рангі, таму для з’яўлення ў точнасці існуе свойяй лестніца:

    • exact: назва з’яўляецца без змян і паказвае на адны сімвол.
    • strong: нормалізаваная фраза чыста паказвае на адну калякцію.
  • weak: паняванне, якое абараняе калькі класаў, чыяя межа ўсёга нечыста. Вернуцца набор сімвалоў, і агент гэта пераканае.
  • unresolved: рэальная абмежэнне, якой няма адпаведнага сімвалу нідзе. «SLA-а контрагента» — гэта справжняя архітэктурная абмежэнне, якую код не выражае.
  • Для гэтага апошнага рангу яго трэба заставіць, вернуць і не прымусваць адпаведнасць. Чытальна абмежэнне, якая не рашана, лепшая, чым некорэктная прыяза сімвалоў, а прымусаванне да адпаведнасцяў — гэта спосаб, якім агент адважна правяць некарэктны клас.

    Што на самай працы запытае агент

    Паверхня запытаў можа выглядаць так:

    what_breaks(symbol)        → structural: resolved callers, tiered
    why_is_this(symbol)        → knowledge: decisions, incidents, constraints
    what_happened_before(sym)  → episodic: past attempts and their outcomes
    related_by_intent(concept) → resolve a phrase to a symbol set, tiered
    

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

    Карты знанняяў супаўзаюць «палітыку павтарэння» з SettlementService.retry на рэвэлі strong і вяртаюць ADR і аналіз пасля адбыцьця інцыдэту. Механізм Structural берае гэты сімвол і вяртае тыя службы, якія яго выклікаюць, укладаючы ў гэты спіс два сервісы, якія відны толькі ў логах. Механізм Episodic дадае інфармацыю, што падобныя змяны ў пярэднім кварталі спанулі злам тэстаў на распадзел рэсурсаў.

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

    Якія ёсць затраты

    • Большая частка калекцыяў дакументаў занадта маленькія. Дзевяць ADR-аў і запісаў з пазначкай "fix bug" не даюць індэксу веды нічага для працы. Паглядзіце, што у вас ёсць, прытым як пачынаеце ствараць.
    • Распазнаванне энтытэў ніколі не стане ідэальным. Лестніца памагае справівацца з гэтым, але не лікуе гэту проблему. weak верагатывацельна стане самым занятым рангам, таму планаваце перакананні, а не доверлівасць.
    • Пачніце з малага. Пачніце з tree-sitter плюс LSP. Дадзіце байткод, калі ствараны код пачне даваць некарэктныя адпаведзі, і трэйсы, калі запыткі пераходзяць між службамі. Дадзіце індэкс веды толькі тады, калі корпус варты індэксавання.
  • Ніхто не створыў усё гэта — гэта можа быць як прамова да дзеяння, так і паведамленне пра апасцераганне. Элементы знаходзяцца ў разных спільнатаках: спецыялісты з кодавай інтэлігэнціі не чытаюць статэйкі пра GraphRAG, спецыялісты GraphRAG не займаюцца перакрытчыкамі тыпаў, а спецыялісты з архітэктуры памяці пераважна працуюць над чат-асыстэнтамі, а не над кодавымі базамі.
  • Падумайце пра адборэ новага працавніка

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

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

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

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

    Трэці фактар — местны спосаб супрацоўкі. Перад запускам тэстаў неабходна занова стварыць карты распадзелу. PR-запросы, якія прыхоўваюць без пераканання, адхоўляюцца. Ніхто не кансультуецца з дакументамі па гэтаму, так проста працюе каманда.

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

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

    Версія ў аднай лініі

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

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

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

    Пяціхвілінны адзінак

    Выберыце інтэрфейс у вашай кодавой базе, які мае пяць чы ўжо больш вядомых адпрацоўвальнікаў, напрыклад PaymentProcessor чы NotificationChannel, аднаго з якіх падключаны праз @Autowired а не створаны якраз у кодзе. З’ясавыце, хто вызывае граф коду, і падсчытайце рэзультаты.

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