Практычныя прытамулкі: Стварэнне агента для перагляду кода на базе AI: архітектура, LangGraph і
Практычныя прыказкі: стварэнне агента для перагляду кода на базе AI: архітектура, LangGraph, а таксама кантракты, перакрыцці і спецыяльныя месца для коду для команд, якія викорыстоўваюць гэты патэрн.
У гэтым карыце практычным наставленні разбіраецца, як створыць систему на аднойчынных матэріялах: «Ствароўка агента для перагляду кода на базе AI: архітектура, LangGraph і практычныя урокі». Акцэнт ставіцца на практычныя крокі, чысткія перакананні та код, які можна проста дадзець у репазітарый, не прабуючы здогадвацца пра мету. У стадіўцы «Аптаварыс» неабходна з’явіць вхідныя даны, адпаведальнага за крок та критэрыя завершэння прычымоўкі перад зменай коду. Аператары должны магчымае перадзець крок з вядомай точкі контролю, не прабуючы здагадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына нехацкага рэзультата должна быць адночынной, а не выніклая з заплутанага ланцоўка працы.
Проблема: перагляд кода не расширваецца з розмерамі команды
Калі працюеце на стадыі перагляду коду, спачатку запісайце умовы кантракту: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі чэк-ліст дапамагае заставіць пазнейшыя змены коду быць чыстымі. Спрыятлівае ставленне да гэтай стадыі як да кантракту межу даннэмі і перакананымі выходамі. Дайце назву элементам, задаце критэрыі успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зробіце перапытку пасля дорогіх крокаў. Система вярнення не павінна зноў выклікаць той самы калл LLM, калі аператар прабуе зноў запрацаваць з пазнейшым вузлом.
Рашэння: webhook на вхід, структураваны перагляд на выход
Калі працуеце з рэшэн-вебхукамі на практычным етапе, спачатку запісайце умовы вярбунка: неабяжлівыя данні, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контроля дапамагае заліцвачыць змяны ў кодзе.
Тэхнічная стака
Калі працуеце над стадзіяй тэхнічнага стаку, спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список пераканае ў тым, што пазнейшыя змены коду будуць чыстымі. Зберагаеце настройкі праз чынны код аплікацыі. Файлы сераўіса, храненні секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжлівага чытання всей структуры. Ставяйце контрольныя пункты пасля дорогіх крокаў. Система вярнення праблемы не должна занова ставіць плату за той самы вызыв LLM, калі аператар перапрыяўляе роботу да наступнага элемента. Калі працуеце над стадзіяй тэхнічнага стаку, спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список пераканае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаную структуру працы.
Архітэктура
Этап архітектуры працюе найэфектывней, калі яго розглядаць як вимерную плошчу. Запісаце адна ідеальная версія, адзін прыклад неудачы і запіс працэў павернення да пярвоначальнага стану пры розшырэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і не падзеўляйцеся частым, некомплектным выкананнем задач. Храніце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, калькі вузел запісаў калькі поле, і спакойваюць працэс пасля перарываў.
GitHub PR opened
│
▼
Webhook (signed, verified)
│
▼
Express API ──► Fetch diff (Octokit)
│
▼
LangGraph Agent
├── Security check
├── Performance check
└── Architecture check
│
▼
Post PR comment + save to PostgreSQL
Этапы стварэння коду (наікорыстнейшыя часткі)
Праця з кодамі на корыстных этапах дае найкращыя результаты, калі яго спрыяваць як меравальную плошчу. Запісайце адны ідеальны прыклад роботы, адну ситуацыю неудачы і прыметкі па поверненню да пачатковага стану пры расшырэнні масштаба. Запісвайце часы виконання і косты токеноў або запытак разам з функцыйнальнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Храніце стан графаў у простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў які поле, і спакшваюць продажчэнне роботы пасля перарываў.
function verifySignature(payload: string, signature: string) {
const hmac = crypto.createHmac("sha256", process.env.GITHUB_WEBHOOK_SECRET!);
const digest = "sha256=" + hmac.update(payload).digest("hex");
return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature));
}
const graph = new StateGraph(ReviewState)
.addNode("security", securityCheckNode)
.addNode("performance", performanceCheckNode)
.addNode("architecture", architectureCheckNode)
.addEdge("security", "performance")
.addEdge("performance", "architecture");
Вывучаны урокі
Этап «Урокі, выведзеныя з досвяду» працюе найкраща, калі яго розглядаць як меркавыя показнікі. Зберагчыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да попераднего стану, перш чым расширваць сферу дзеяння. Зберагчыце настройкі параду ўнутры коду прыемлена. Файлы сераўіснага сэрвісу, хранілішчы секретных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Дазвольце стану графа застаўцца простым і з аднаковым типам дадзеных. Вярсткаваныя блокі дадзеных маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакоююць продовжэнне роботы пасля перерываў. Этап «Урокі, выведзеныя з досвяду» працюе найкраща, калі яго розглядаць як меркавыя показнікі. Зберагчыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да попераднего стану, перш чым расширваць сферу дзеяння. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшаў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцоўку задач.
Як гэта паслядае ў большай кантэкстуальной картыне
Ёнколі хочаце з’ясаваць, як гэты элемент паслужыць у данай стадзіі, перш чым зменяць код, неабходна ўзначыць вхідныя даны, адпаведальнага за выкананне крока і критэрыя завершэння. Аператары должны магчымае перадзягнуць выкананне крока з вядомай точкі контролю, не прабуючы спадароўваць сустоянне, якое залишаецца невідомым. Спрыяйце цій стадзіі як даговору межаў вхідных даных і перакананых выходных рэзультатаў. Даўце назвы артыфактам, узначыць критэрыя успеху і не прабуйце прыймаць часткова завершаныя рэзультаты без падтверджэння. Неабходна людская апрацоўка для тых крокаў, якія выкорыстоўваюць грошы чы зміняюць даны, якія викорыстоўваюцца у працэсе. Компіляцыйныя налашчэння не є адпаведнікамі пачатковай цэлесообразнасі процесу.
Прабуйце / дапаможыце
Для стадіі «Практыкуйце і дапраўцы» неабходна пазначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчымае перадзеі крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмавай версіі ў спяльныя среды. Апраўляцца людзкім адзначэнням для тых крокаў, якія выкарыстоўваюць грошы або зменяюць даны ў працэсе. Прыўязка на час компілявання не ўзначае повнайсткі адпаведнасці з бізнес-трыбуналам.
git clone https://github.com/Srameshgitnow/agentic-code-reviewer.git
cd agentic-code-reviewer
npm install
npm run dev
Чэк-ліст для аперацый
Стадія чэк-ліста для аперацый работае наўздоўж, калі яе спрыяваць як мерыемую плошчу. Збіраць адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметку па адвярненню змян перш чым расширваць масштаб.
Запісвайце адно часовы лянцюг успеху і лянцюг вярнення ў нормальны стан. Практыкі павторных спроб, людзкія контралеры і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Зберагайце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, канферентны вузел запісаў канкрэтнае поле, і спакоююць працу пасля перарываў.
Калі бюджет дазволяе, дадаце тэст на першыя проблемы, які пераблакуе критычны лянцюг у процесе інтеграцыйных тэстаў з викорыстанам фіксатыв, а не рэальных платных API.
Волійце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок збягае, прычына бягу должна быць відносаваная да аднаго конкрэтнага элемента, а не да заплутанага лянцюга задач.
Зберагайце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, канферентны вузел запісаў канкрэтнае поле, і спакоююць працу пасля перарываў.
Перш чым запускать даную структуру, заморозьце версіі, зафіксавце «золаты» транскрыпты для критичных етапаў і паказвце способы вярнення да пачатковага стану. У спільных середавішчах неабходны ліміты швайнаў, перакананні ў належнасці тэрыторіі і чысткі власнік для змены секрэтных даных. Валіце простую надзейнасць працы замест крэатывных, але разовых дэманстрацый.
Прыміткі для 7f7a8860a8a9: не кладзіце ключы прадаўцаў у репазітарый, задаце максимальную кантитатыву токенаў на сесію і зберагачыце транскрыпты празаўседы ў фіксатыях для ацэнкі, каб пазнейшыя замены модэляў заставаліся пораўнанымі.