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

Адкрыты бот для рэв’ю PR: LangGraph, Node.js і вэбхукі GitHub

Рэв’ю пул-рэквестаў паэтапным агентам LangGraph, які правярае бяспеку, прадукцыйнасць і архітэктуру і пакідае каментарыі да радкоў праз GitHub API.

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

Крыніцы: Building an AI Code Review Agent: Architecture, LangGraph, and Practical Lessons

У практычна кожнай команды накапліваюцца запросы прыўязкі. Зазвычай толькі старшыя інжынеры можаўць з’явіць тонкія проблемы: запіты тыпу N+1, зашчытаныя у кодзе секрэты, крайнія случаўкі, якімі ніхто не займаўся. Яны таксама ёсць найзанятыяй часткаю команды, таму перагляды запросаў прыводзяцца да гэткіх спешакоў чы ўсуненняў, і ў будзь-якім случае якась частка запросаў праходзіць далей.

Інструменты для перагляду AI у комерчыях цілях зазвычай маюць закрыты код чы ўзмоўклівыя цены, а часта і тое, і другое. Альтэрнатыва — бот, які малая команда можа запусціць у своіх рэпазітарыях, без неабходнасці адправляць код у «чорную скрынку». Паказаны ніжэй дызайн — гэта бот з адкрытым кодам, які сочыць за новымі запросамі прыўязкі на GitHub, пераглядае кожны з іх за дапамогою багатаэтапнага агента LangGraph і прадае конкрэтыя, дэталізаваныя адгукі ў вачоўку запроса прыўязкі.

Што выходзіць, калі відкрываецца PR

  1. Webhook на GitHub доставляе паведамленне.
  2. API GitHub, праз Octokit, запрашае даны пра змены.
  • Агент LangGraph пераглядае кожны этап разліку поштоўкою, шукаючы проблемы з безпекай, выконаннем і архітэктурныя недагоды.
  • Бот паказвае каментары да PR з адзінкамі, якія паказваюць конкрэтныя радкі коду.
  • Рэзюме перагляду зберагаецца ў базе дадзеных, таму з часам накапліваецца історыя пераглядоў.
  • Самэ галоўнае — перагляд па этапах. Калі запытаць LLM пра "перагляд гэтага коду", часта атрымваюцца расплывчатыя, загальнія заўважэння. Разбіўка задачы на перагляд безпекі, выканання і архітэктуры дае болей точныя рэзультаты, адколькі кожны этап мае чыста адну задачу.

    Тэхналогія

    Слой Тэхналогія
    Фрэймворк агента LangGraph для багатаэтапнага разумавання
    LLM OpenAI GPT-4 або Claude, як вы выберазе
    Бэкенд Node.js з Express
    База дадзеных PostgreSQL для хранення історыі пераглядоў Інтэграцыя з GitHub Octokit Webhooks Express middleware з пераканальнем падпісаў

    Такая структура застаецца блізкай да таго, што ужо выкарыстоўваюць большасць команд на Node.js. Мэтай не было прадстаўлення новага фрэймворку; галоўная мэта — стварыць апрант, які каманда можа размясціць і даверыць.

    Прабег і структура

    Працэс праходзіць ад ачыненага PR праз пераканальны webhook да агента, а пасля вяртаецца у вастоўку як каментар:

    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
    

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

    Два фрагменты коду, якія варта паказаць

    Першы — перакананне падпіса webhook. Без яго кожны, хто знаходзіць URL webhook, можа адправляць фальшывыя запускі і спрычыніць неправдаподобныя перагляды:

    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));
    }
    

    Ён мініяцюрны, але яго прыняць не ўвахоўваць — частая памылка у інструментах, які працуюць на адпаведных вебхук-сервісах.

    Другое — прабэг LangGraph складаецца з адзінаковых вузлаў, а не з адной большай запрасы:

    const graph = new StateGraph(ReviewState)
      .addNode("security", securityCheckNode)
      .addNode("performance", performanceCheckNode)
      .addNode("architecture", architectureCheckNode)
      .addEdge("security", "performance")
      .addEdge("performance", "architecture");
    

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

    Што спрацавало

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

    Што засталося складным

    • Неправі позытывныя рэзультаты ўскладнення працы з такімі сістэмамі. Аналіз, базаваны на LLM, іноды пазначае тыя рэчы, якія не ўтвараюць проблем, і дасяглінні сістэмы павінны быць чыста адкрытыя. Доверлівасць мае большое значэнне, чым прыгожы спіс функцый.
    • Вартасць таксацый расце. Тры вызовы LLM на кожны PR даюць большую точнасць, чым адзін, але ўсё гэта коштае больш і займае больш часу. Маленькай камандзе патрэбна баланс межу якасцю аналізу і цэнай, яку яна можа сабе дазволіць.
    • Ёжы напісанню каментаў у стылі, які будзе схожы на напісанне чалавекам, знадобілася большая колькасць перадзменаў прапты, чым для рэалізаціі логікі LangGraph. Каменты павінны быць короткімі, конкрэтнымі і прыязначанымі да конкрэтнага номера рэядка, таму што ніхто не чытае п’ятыпараграфовыя эсэі AI ў тэксце PR.

    Бот ёсць чацькіў зялік у серыў маленькіх експерыментыв на відкрытому коду, які застовуюць оркастанацію LLM з LangChain і LangGraph для розв'язання конкрэтніх проблем робочого працэсу, такіх як запітаня і адказы шчодо дакументаў, запітаня і адказы шчодо політык для послуг, які спрамовані до грамадзян, і перэтворэння голосовіх ноток на Agile-сторыі корыстувача. Гэта не готовій продукт, які можна вікорыстовуваты будзь-дэ. Гэта працездатна початкова точка, на якій команда можа продовжуваты розвіватыся.

    Спробаване локально

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

    git clone https://github.com/Srameshgitnow/agentic-code-reviewer.git
    cd agentic-code-reviewer
    npm install
    npm run dev
    

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