Праектаванне шматагентнага пошуку вакансій: канвеер, HyDE і назіральнасць
Дзевяціэтапны канвеер LangGraph, які супастаўляе рэзюмэ з вакансіямі, і восем рашэнняў пра пошук HyDE, маршрутызацыю мадэляў, ліміты запытаў і назіральнасць.
Крыніцы: Agentic AI in Practice: A Case Study in Multi-Agent System Design
Агенты, агентныя AI, мнагаагентныя сістэмы: такі тэрміны ўсюды, і ў кожны тыдзень з’яўляецца новы мадэль, фрэймворк або шаблон оркестрацыі. Прамптаванне, RAG, вызыванне інструментаў, MCP, шары памяці. Экасістэма развіваецца быстрэй, чым большасць спецыялістаў можа за ёю следзіць. Пад усім гаморам важкія запытанні не змяніліся:
- Дзе трэба разбіць проблему на часткі для аналізу?
- Калія вызывы належаюць LLM, а калія не трэба залічваць толькі ў ўпрабаве LLM?
- Як можна падтвердзіць, што сістэма робіць тое, каля чаго яе спачатку спадзяваюць?
Новая версія фрэймворку не спрыяе павышэнню простоты. Ёсць канкрэтны прыклад: у гэтым аналізе выкарыстоўваецца проблема, з якой сталкаюцца мільйоны людзей — пошук прыдатных работ асяроддзя вельмі велікага коллекцыя абавешчэнняў. Для ўсунення гэтай проблемы разрабатываецца аптымальная AI-сістэма, якая дапамагае адпаведзець на тры практычныя запытанні. Што значыць «агент» у архітэктурным сэнсе? Калі калькі агенты дадаюць практычную цэннасць, а калі яны становяцца толькі накладнай вартасцю? І што робіць AI-сістэму відымай, надзеянай і прыдатнай для практычнага выкарыстоўвання?
Пошук работ — гэта не проста пошук
Большасць людзей спрыягаюць пошук работ да задачы пошуку. Насправдэ ж гэта скорэй задача падбору. Ніхто на самай справе не шукае абавешчэнняў, якія маюць певныя ключовыя словы. Асалодзічная задача ўскладненая: выкарыстоўваючы свой дазналеньні, навыкі і кар’ерны направлення, якія вакансіі ёсць практычна прыдатнымі?
Сайты з працэю адмахваюць гэта як пошук. Вы вводзіце калькі слоў, падаеце месца і спакульваліце, што з’явіцца ўсё неабходнае. Аднак рэзюме паказвае гады дазнаўання, спецыялізаваныя знанні, тэхнічную глубіну, навыкі, якія можна перанесці, працэвыклас і кантэкст, а поле пошуку стыскае усё гэта ў калькі слоў, пры чым вырашае, што адпаведныя словы значаюць адпаведную мету.
Усі ведаюць, як гэта выглядае:
- Перэглед зусім разных аб’яваў на калькох платформах
- Оцэнка адпаведнасці кожной аб’явы окрэма
- Застой на дублікатах, заканчылых аб’явах і зламаных лінкавых
- Запытанне, чы не былі цяперашні вакансіі з самага пачатку правымі
Няварка інтэрэсу — гэта не галоўная проблема. Асёледзівая разліка цяжыць межу тым, што паказвае абавесць кандыдата, і тым, што на самай працавой пазнаке фактычна трэба, а ўсунуць гэтую разліку трэба за дапамогою інтэрпрэтацыі, кантэксту і суджэння. Корача кажучы, для гэтага трэба логічна ўзгадка, у чым і ёсць сіла большых мовных модэляў. Падазроўваючы, што сістэма могла бы прачытаць абавесць, вывярнуць разумныя кар’ерныя шляхі, знайсці вакансіі і ранжаваць іх па рэальнай адпаведнасці, а не па перакрыцчы ключоўых слоў. Гэта тая проблема, для якой была створана гэтая сістэма.
Працэс, крок за крокам
Усё пачынаецца з адной дзеяння: заваносу абавесці. Пасля гэтага ніхто не чапаецца за полье пошуку, не праскролвае спіс вакансій і не выбірае, на якія пасады варта прасіць. Сістэма берэ на сябе кантроль і адклікае дзев’яць крокаў, кожны з якіх мае адзін-адзін завод.
- Агент-парсер рэзюме. Выконваючы ролю апытнага кампаніяведа, ён ператварае рэзюме на структураваны профіль заместа спісу ключоўых слоў. У профіле паказваюцца адпрацоўваныя пасады, навыкі, сферы экспертызы, ход кар’еры і короткая нарада у стылі ATS, якую всі наступныя агенты вважаюць канонічным опісам кандыдата. Мадэль: Claude Sonnet.
- Агент-рэкамендатар профіляў. Ён пропануе два-тры цялевыя назвы пасад, якія падходзяць па рэвэле, сферы дзеяння і навыкам кандыдата, а таксама варыянты запітоў для пошуку для кожной з іх. Мадэль: Claude Haiku.
- Этап парадзеныя чалавекам. Гэта ўжо едынственны момент, калі чалавек прымятае якое-небудзь рашэння. Пользоватэль пераглядае запропанаваныя профілі, выбірае той, які здаецца правым, за бажаннем дадае прывязкі да месца розташоўкі і ступеня кар’ернага досвяду, і парадзе. Усі наступныя працэсы чакаюць да гэтага моменту. У ўсём участвуе толькі чалавечыя суджэння, без удзеле модэляў.
Гэта даўае ўсьго дзевяць крокаў, чатыры вызовы LLM, адна людская рашэнне, пры чым загальны час адработкі не перакрочвае трох хвілін.
Карта тэхналогій
У прыведзенай вышэй схеме кожны асновны элемент сучаснага стака AI практычна размешаны ў гэтай лінійной структуры. Кожная сістэма ўскладнена выборамі, таму наступныя раздзелы рассказваюць пра тое, што было вазьмана ў выкарыстоўванне, што было адклэчана і якія былі затраты.
Восьць рашэнняў па дызайну
1. LangGraph проты CrewAI, AutoGen чы ReAct-ціклу
Звычныя кандыдаты былі LangGraph, CrewAI і AutoGen; у межах LangGraph існуе ўтрымлена падзел на направленую графіку і ReAct-цікл.
CrewAI акцэнюе на автонамный саўместны працы, з агентамі, якія выступаюць у ролі і дагавароўваюць, а таксама дэлегуюць задачы між сабою. AutoGen спрамованы на дыялог мнагах агентоў у фармаце канверсацій. Оба падходы паслужыць для працы з нефіксаванымі праблемамі. Аднак оба таксама ствараюць додатковыя трыбуты коордынаціі і недэтэрмінізм, якія фіксаваная структура не можа сабе прабачыць пад час дыбаггавання.
ReAct цыклы працуюць ефектывно, колі колькасць кроків невідома загадзя, як у віпадку з ШЫ, якое перэглядае інтэрнэт і не можа перэдбачыты, скількі пошуків йому знадобіцца. Пошук працы не схожый на гэта. Структура проблемі візначае етапі: спочатку аналіз, потым рэкомендаціі, пасля гэтага пошук і фільтрація, а нарэшты усунення дублікатыв перад вставкою. Нічого не віявляецца під час выканання.
Напрамкова графіка підходыць для усяго гэтага. Кожэн перэхід ёсць чыткім, втручання людыні ёсць основнім елементом працэсу, а стан — гэта спільна мадэль Pydantic, яку кожэн вузол чытае і запісуе. Колі шчось ламаецца, несправній вузол стае очэвіднім.
2. Спеціалізовані агенты праз одын мегапромпт
Жадаецца напісаць адзін большы прыказ, які будзе аналізав рэзюме, прыказваць заглавяў і оценкі, і так было бы прыемнае, а таксама швэдзейшае. Але гэта таксама ведае да проблем, якія нараджаюцца ўскладненым спосабам. Адныя проблемы можу пераціснуць на іншыя, і становіцца немагчымым з’ясавіць, якае самэўказанне спрычыніла паслабленую рэзультатнае. Корэктываўка аднаго элемента можа прызвесці падбіг у іншым, а кантэкст заполняецца указаннямі, несувязаннымі з выконваемым завадам.
Адзінолькі агенты пазбегаюць гэтага. Паслабленую оценку ранкера можна выправіць, разглядзячы толькі прыказ для ранкера. Кожны агент мае свой сабскрыпт тэставання, таму парсер можна перапрацоўваць без усіяго каналу апрацоўкі. Кроме таго, разныя агенты можна направіць да розных модэляў, як паказвае варыянт дызайну 6.
3. Людзкі элемент у процэсе
Большасць інструкцый для агентаў расследжвае людзкую пераглядку як неабавязковы элемент дапрацоўкі, што можна дадаць, каб корыстувальнікі адчулі ся уключанымі. У гэтым случае людзкі элемент ёсць ключовым архітэктурным рашэнням.
Сістэма-рэкамендавальнік прысулайа два чырво тры назвы, і профіль, які паўтарае ўжо корыстувальнік, керуе всімя наступнымі этапамі: пашукамі, фільтрамі, ацэнкаваннем. Дазвольце сістэме выбіраць автаматычна — аблудны выбар парадузіць усё, стварыўшы адмоўна рангаваная спіс для профіля, якога кандыдат ніколі не хацеў. Няма іншага рашэння ў цыкле, якое бы несла такі большы рызык, і няма такога, якое магла бы лепшая прымець чалавек, адтолькі кандыдаты знаюць пра свой сябе тое, чаго парсер не можа выявіць.
4. Прыфільтр пры рангавальніку
Даныя з рэальнага свету ніколі не ў чыстай форме, а даныя з пяці API прыходзяць з прывычнымі проблемамі:
- Мёртвыя лінкі і коды 404, якія з’яўляюцца ў паведамленнях, якія выйшлі з часу і ніколі не былі адчынены
- Дуплікаты, калі тая ж работа праказваецца адразу з калькі API
- Перыяхоўкі агрэгатараў, калі URL прыводзіць на главную сторону борду з працай, а не на самае паведамленне
Гэта не крайнія віпадкі. Гэта звычны стан даных з зовнішніх API. Крокі параверыкання і усунення дублікатав існуюць для таго, каб практычна база дадзеных засталася чыстайя перш чым выйдзе на ўвазе якісь дорогі працэсы, таму тое, што доходзіць да семантычнага прадфільтра, ўжо ёсць правядзячым, унікальным і рэальным.
Потым важліва ўартас. У меры выканання заведамаў, прыстрой ранжавання становіць 70-80 процэнтаў абоўшчай выдаткі на LLM. Парсер коштае фіксаваныя 2,7-3,0 рупій незалежна ад таго, сколькі заведамаў пройшлі праз яго, а прыстрой рэкамендацый коштае апоўначы 0,30 рупій, таксама фіксавана сума. Прыстрой ранжавання мяніцца з 3 до 11 рупій у залежнасці ад таго, сколькі заведамаў до яго дасягае, таму абоўшчыя выдаткі за выкананне заведамаў станавяцься ад 6 да 14 рупій. Прадфільтр залішае толькі тыя пункты, якія наўпакоўна адпаведаюць кандыдату, тады прыстрой ранжавання працюе з наборам дадзеных з высокім сігналам, а не з шумным первынным выходам пяці API заведамаў.
5. HyDE замест прымітнага порэвання
Явным падчынным спосабам ёсць адключэнне кантэксту кандыдата, створанага сістэмай ATS, і яго парабяранне з кожным опісам работы за дапамою косай схожасці. Гэта проста, шырока і не выклікае патрэбы ў дадатковых запытках да LLM. У тэстах рэзультаты былі незадовальныя.
Прычына — несувярэннасць у просторэ адключэння. Кантэкст кандыдата пісаецца у фармаце апавядання ад першай особы, на прыклад: «Стварыў пайплайны для ML, кераваў размешчэннем модэляў, саўместна працаваў з разнымі камандамі». А опіс работы пісаецца у фармаце спісу трэбаванняў ад трэцяй особы, на прыклад: «Патрэбны 3+ гады дзеяльнасці у сферы ML, навыкі работы з PyTorch і хорашыя навыкі камунікацыі». Нават калі оба опісуе адныя і тыя ж навыкі, два стылі знаходзяцца ў разных рэгіонах, таму пры прымітным парабяранні рэальныя падходжанні залішаюцца недаацененымі.
HyDE адхоўляецца ад гэтага, ставячы іншы вопыт: як маўці выглядаць ідэальны опіс работы для гэтага кандыдата? LLM піша два гіпотэтычныя опісы на адной з рэзюмэ.
- JD1 ўтвораны на адной з домэнаў, напісаны так, як будзе компанія з той самай галузі, дзе працуе кандыдат, шукаць адпаведнага спеціяліста.
- JD2 сфокусаваны на перэносных навыках, напісаны так, як экспертыза ў конкрэтной галузі ёсць второсным фактаром, а загальныя здольнасці — галоўной прычынай для падбору.
Этыя сінтэтычныя апісанні розмешчаюцца ў той жа групе, чым рэальныя, адтолькі ўжо як гіпотэтычныя апісанні вакансый. Іх паўтарныя порэвананні з рэальнымі апісаннямі дазволяюць здзейсніць семантычны паўтарны аналіз. Кожная рэальная вакансыя патрапляе да таго сінтэтычнага апісання, да якога ёй бліжэй. Бліжэй да JD1 — ў частку 1, вакансыі ў галузі кандыдата; бліжэй да JD2 — у частку 2, шырэйшыя можлівасці.
Адзінаковая абяранэнне, якая дапамагае ў всім: толькі універсальныя эмбеддынгі, без модэляў, спецыялізаваных на конкрэтных сферах. Спецыялізацыя сферы выкаана за дапамогою кантэнту HyDE, які LLM уключае ў сінтэтычныя апісанні, а не за дапамогою выбору модэля эмбеддынгу. Гэта дазволяе сістэме быць прыдатной для разных професый.
6. Разныя модэлі для разных агентаў
Не кожная задача выкалікае аднаковую сілу разумовых вычынкаў. Парсер і генератор HyDE коштаюць апоўно 2,7–3,0 і 0,50 рупіяў за адну працу, пры чым цяны не зменяюцца незалежна ад колькасці задач. Іхня якосць важыць найбольш, калі ўжо, таму што слабы парсер пашкодзіць профіль, а слабы гіпотэтычны апісанні — паспараванне эмбеддынгу, таму Sonnet ёсць правы выбар.
Ранжаванне адбываецца па кожнай задачы ў прыстрое для ранжавання, таму гэты этап, якога вартасць зрастае з колькасцю задач, ужо з’ядзе 70–80 процэнтав бюджэту. У Sonnet гэтыя вітраты моглі б зрасці прыблізна у тры разы без лепшая структураваных показнікаў. Haiku справляецца з гэтым задачэм. Ось спосаб роутавання:
7. Адна файл з налаштаванням для кожнага параметра
Сістэмы з агентамі з часам сталкваліся з проблемай налаштавання. Замена модэлю, зменшэнне порога чы змена ліміту паралельнай працы не должны значыць неабходнасць пошуку правільнага значэння ў пяці файлах агентаў.
Гэтая сістэма зберагае адзін файл у фармаце YAML, які керуе всіма параметрамі, таму жадных констант не ёсць у кодзе агентаў, і жадных „чародзкіх“ чысоў не ёсць у запітах. Яна керуе:
- Модэлем для кожнага агента. Замена Claude Haiku на новейшы модэль — гэта рэдагаванне ў аднай лініі.
semaphore_size: 4, batch_size: 4 і batch_delay_secs: 2; падробнае адказа будзе далей.8. Канкурэнтная ранжырацыя, адмовленая лімітамі частоты
Першыя методы ранжырацыі былі последовнымі: адзін вызыв LLM, чаканне, наступная задача. Пры 40 задачах і прыблізна 2,5 секунд на вызыв, загальны час выканання становіцца 100 секунд. Даныя пайплайна падтверджаюць гэта: сама процедура ранжырацыі займае адносна 95 секунд з загальных 166 секунд выканання.
Адыяванне ўсіх 40 запыткаў адразу выглядае як рашэнне, але гэта стварае прыгожанні з лімітамі частоты адпаведзення у Anthropic. Рэжым доступу Tier 1 лімітуе колькасць запыткаў за хвіліну, таму 40–60 адночасных запыткаў негайна перакрываюць гэты ліміт і вяртаюцца як памылкі 429. У першых версіях працы без жадных лімітаў вярталася толькі частка рэзультатаў: заданні з 1 па 70 былі обрабатаваны пры тым, як API перастаў адпавядаць.
Рашэннем ёсць трывыячны дызайн канкурантнасці, які цэлыча керуецца з файла налашоўкаў:
- Семафор (
semaphore_size: 4) лімітуе колькасць запыткаў, якія выкананы ў той момент. Чатыры запыткі за раз застаюцца ў межах лімітамі Tier 1. - Групаванне (
batch_size: 4) абрабатвае заданні па групамі по чатыры, прычаму кожная група завершваецца перад тым, як пачнёцца наступная. - Задзейсненне паузы між групамі (
batch_delay_secs: 2) дазволяе зробіць двасекундную паузу між групамі, што дапамагае унікнуць перакрывання лімітов.
Рэзультат: 60 заданняў у 15 пакетах выконваюцца за прыблізна 90–95 секунд, што ў чатыро разы быстрэй, чым па последовамай схеме з той жа колькасцю заданняў, пры чым не перакрываюцца ліміты.
Возможнасць спостэрэння
Сістэма, якую ніхто не можа спостэрагаць, — гэта толькі надзяя, а не сістэма. Рэальны інцыдэнт гэта паказвае. У першай повной працоўнай сесіі на экземплярэ EC2 не было VOYAGE_API_KEY. Прыфільтр HyDE тыха пропусціў працэс вбудоввання і перадаў усе 89 заданняў на апрацоўку, чыяму стала перакрыцча ліміту на 70-м заданні, і былы выданы толькі частковыя даныя. Без можласці спостэрэння гэта выглядала бы як аднойчыны, незрозумелыя дзеяння. З ёю выявленне прычыны займало менш чаму за хвіліну.
У даным случае можласць спостэрэння працюе на двух роўнах:
- LangSmith фіксуе кожны вызов LLM: точную прыказку, адпаведную адказ, час затрымкі за кожны вызов і колькасць токэнаў. Ён дае мікрарагляд пра працэс выважвання і выкарыстоўваецца пад час разработкі, ўбачываючы рэгрэсіі прыказак перш чым яны паўзяюць на весь працэс апрацоўкі.
- MLflow фіксуе кожны запуск з паказаннем часу затрымкі за кожны агента, загальных вітрачэнняў і колькасці токэнаў. Яго файл
job_audit.jsonёсць найболей корыстным дыягнастычным інструментам — цэлыя даны пра кожную задачу, якая прайшла праз працэс: у які раздзел HyDE ёна патрапіла, яе рэйтынг сэроднечы, які фільтр ёе адхіліў і чаму, складовыя ёе рэйтынга падходжання і яе заканчоўны ранг.
Як выглядае зрэласць
Зрылісць сістэмі штучного інтэлекту не віміруецца іі ступенем автономносты. Іі оцінююць за тым, наскількі добрэ люды розуміюць, што яна робіць, чому гэта робіць і дэ вінікаюць проблемі. Колі йдэцца про агентській штучній інтэлект, важлівою ёсць оптымізація під правільну метрыку. Автономнісць — гэта вражаюча дэмонстрація, але часта ёсць слабкою інжэнерною характэрыстыкою, оскількі спостэрэжэння за автономною поведынкою і іі віправлення ёсць складнімі і дорогімі.
Для кожнага, хто сёння створуе сістэму штучного інтэлекту, важлівімі ёсць такі пітання:
- Чы можэце ві спостэрыгаты за тым, што сістэма робіць на кожному кроці?
- Чы можэце ві поясніты конкрэтній рэзультат без перэгляду віхідного коду?
- Чы можэце ві перэналаштуваты сістэму, колі іі поведынка відхіляецца?
- Чы можэце ві розрызніты хорошу продуктывнісць ад прыхованого збою?
Сістэма, якая пройшла всі чотыры крытэрыі, ёсць функціональною сістэмою машынного навчання. Усе іншэ — гэта прототып з гарною маркетынговою стратэгіею.