Журналу аўдыту AI-агента патрэбна 12 палёў: што запісваюць LangChain, CrewAI і яшчэ чатыры фрэймворкі
Статычны падлік шасці агентных фрэймворкаў, ад LangChain і CrewAI да OpenAI Agents SDK, супраць чарнавіка аўдыту з 12 палёў: медыяннае пакрыццё — 5 з 12.
Крыніцы: AI Agent Audit Logs Need 12 Fields. We Counted 6 Frameworks — the Median Records 5.
След выглядае як доказ, але яму не ўсё ў тым
Уявіце агента, які выкарыстоўвае певны інструмент: пераказ грошаў, выдаленне рэкорда з базы дадзенаў або адправка паведамлення. Пасля этага хтосьці трэба адпавесці на адна запытанне — чы можна падтвердзіць дзеянні агента. Адкрываецца след, і ў яму паказываецца перыод часу з іменем, часам пачатку, вхіднымі і выхіднымі данымі. Гэта выглядае як доказ, але на самай працэ ўсё гэта ёсць толькі аднам з аблігацый для дыягностыкі, які носіць «адзінку» доказа.
Для вычыслення розкілу 4 септэбра 2026 года было склонавана шас фрэймворкаў агентаў на адкрытым кодзе і спецыфікацыяў інструментаў пры ўпэўненых пачатковых версіях: OpenAI Agents SDK, LangChain, CrewAI, LlamaIndex, smolagents і OpenInference. Былі выявлены поля з рэкордаў вызоў інструментаў кожнага праекта і паўставлены ў адносе да дванаццаці обав’язковых поль у найновейшым фармаце журналу аўдыту агентаў. Рэзультат: тыповы фрэймворк падтрымлівае пяць з дванаццаці поль, якія неабходны для журналу аўдыту, а ніхто з шас не мае поля, якое б адзначала наявнасць пазнак сапраўднічага стану дадзеных.
Фрэймворкі, якія падтрымліваюць неабходныя поля, падходзяць для дэбаггінгу. Журналы аўдыту служаць іншым цылям, і розкіл межы гэтымі двума функцыямі можна вычысляць.
Пяць вынікаў з вычысленняў
- У пяці фрэймворкаў медыянная ступень падтрымкі становіць 5 з 12 обав’язковых поль: у smolagents — 1, у LlamaIndex — 3, у OpenAI Agents SDK — 5, у CrewAI — 5, а у LangChain — 6.
- Строка
trust_levelне з’являецца ні в якіх файлах у всіх шасі коду. Пошук у кожным файле на Python і TypeScript у кожным рэпазітарыі не дае нічога. prev_hash,previous_hashіhash_chainтаксама не выявляюць жадных файлаў. Жадны фрэймворк не спыяе на з’ўязак аднаго запісу з наступным, таму хроніку можна пазначыць пазней без залічэння следаў.- OpenInference, які ў экосістэме мае найбольшы набор атрыбутаў для інструменталізаціі — 119 атрыбутаў у пространі імен, тым часам досягае толькі 8 з 12 атрыбутаў і не мае поля для пазначэння пазнічэннях.
- Лячыцца толькі адна польна,
timestamp, якая лічыцца ўсіма пяцьмая фрэймворкамі.agent_id,session_idіrecord_phaseз’являюцца по аднаму у кожным з пяція, аagent_version,outcomeіtrust_level— ні в якім.
Фрэймворкі маюць хорашыя засобы для дэбаггінгу, ал слабкія засобы для падтверджэння. Яны настолькі схожыя між сабой, што замена застаецца непазначанай, пакуль хтось не прагне доказаў. Відсутныя поля не ўнікальныя; яны паказваюць, хто дзеяў, пад чыяй упаважненнем, і чыі быў зменены запіс пасля таго, на якія пытанні след за дэбаггінгам ніколі не было неабходнасці адпавядаць.
Як была выконана підрахунок
Коміты былі выправлены па праектах: OpenAI Agents SDK (openai-agents-python) пад 89c02c8, LangChain пад 0d50cbd, CrewAI пад 92eb5f9, LlamaIndex пад d2ac544, smolagents пад 30bb116 і OpenInference пад 479d168. Спіс полей для кожнага з іх быў взяты з класа, які логуе адзін вызов інструмента, тыяму ў значэнні пакета дадзеных, спецыфічнага для інструмента, і ён быў прыняты з адзінакоў класаў, а не з дасяглібнаў. Пасля чаго поля былі паўставлены ў адпаведнасць да дванаццаці обав’язковых у чырговым праекце аўдыт-трэйлу.
Калі паўэнне задовольняе які-небудзь тэрмін толькі часткова, яму прызначалася оцэнка «часткова» з адазначэннем прычыны. Напрыклад, error у LangChain адзвяртае ўвагу на тое, што ў чымсці была памылка, але не розлічвае памылку ад тайма-ауту, адмовы чы падняць прыгоднасць.
У захавленым матэрыяле паказана сама праца: шысць рэпазітарыёў у чырвонай частцы, кожна запіс пра вызыв інструменту выкарыстоўваецца і оцінюецца па дванаццаці польях. Значэнні trust_level і prev_hash у всіх месцах доравнаюць нулю.
Дванаццаць польях
Стандартам служыць документ Internet-Draft, рэвізія 02, пра аўдытныя следы агента, які Раза Шарыф з CyberSecAI опублікав 3 сябра 2026 года. Гэта індывідуальная праца, а не затверджаны стандарт IETF, таму яна лягае ў канцэнтрацыю адной рэшуча обоснованай працэўкі, а не закона. Усё-такі, гэта найболей конкрэтны опублікаваны адказ, і яго дванаццаць обавязковых польяў важка спрачыць:
record_id— унікальны ідэнтыфікатор для запісу.timestamp— час падарожжа ў фармаце RFC 3339.agent_idпазначае экзанпляр агента, які выконваў дзеянне, аagent_version— версію яго программнага забезпечэння.session_idспаявае дзеянне з сесіяй.action_typeвыкарыстоўвае кантролюемы слоўнік, а не вольны тэкст, аaction_detailзберагае пакет дадзеных, прызначаны для конкрэтнага тыпу дзеяння.outcomeможа быць «успех», «нэуспех», «выпадак», «адзінаванне» або «перадача на вышэйшы ранг».trust_levelпазначае ранг автантыяцыі, пад якой працаваў агент, ад L0 да L4.parent_record_idапускаецца да паказванага ранейшага запісу ў ланцугу, аprev_hashзберагае хэш SHA-256 гэтага запісу.record_phaseпазначае, чы рэкорд быў запісаны да, падчас чы пасля выканання.
Як толькі пасунк такога спісу разам з об’ектам span, стварыцца адпрацоўка проблемы. Першыя восьма поль являюцься тымі, якія дэбаггер могаў бы захацець, тады як апошнія чатыры маюць значэнне толькі для аўдытара, і саме гэтыя чатыры ўсё ў тым, што не ўжо ў спісе.
Колькасць поль па фрэймворку
Колькасць поль у запісе вызову інструмента, з пакрыццю па дванаццаці:
- CrewAI (
ToolUsageFinishedEventплюсBaseEvent): 25 поль, з якіх 5 ўжо ўжо заполненыя, 3 часткова і 4 відсутныя. - LangChain і LangSmith (
RunTree0.12.1): 20 поль, з якіх 6 ўжо заполненыя, 1 часткова і 5 відсутныя. - OpenAI Agents SDK 0.22.0 (
SpanImplплюсFunctionSpanData): 13 поль, з якіх 5 ўжа заполненыя, 2 часткова і 5 відсутныя. - LlamaIndex (
SimpleSpanплюсBaseEvent): 10 поль, з якіх 3 ўжо заповненыя, 1 часткова і 8 відсутныя. - smolagents 1.26.0 (
TimingплюсTokenUsage): 6 поль, з якіх 1 ўжо заповненыя, жадных частковых і 11 відсутныях. - OpenInference semantic conventions візначаюць 119 атрыбутаў спана з пространамі імен (разлічныя константы імен атрыбутаў у фармаце з крапкамі у версіі 479d168, без урахоўвання ўсьмох іншых 43, якія ўжо ў фармаце enum), пры чым 8 атрыбутаў ўжо заповненыя, 1 часткова і 3 відсутныя.
Колькасць неапдытых поль не можа прыказаць пра можлівасць аўдыту. CrewAI фіксуе больш заўсёды поль, але задовольняе менш захадоў, чым LangChain, адколькі большая частка з ягоў 25 поль апісвае кантэкст каманды, такія як agent_role, from_task, plan_step_number і delegations. Яны ўжыткавы, але таксама не адпавядаюць на жаднае пытанне аўдыту. Размаўленасць інструментацыі і падатласць да выкорыстання як доказоў ледзь корэлююць.
Дыяграма чыста паказвае гэта: CrewAI мае больш поль, чым будзь-якае інша парадка, але задовольняе менш захадоў, чым LangChain, адколькі большая частка яго дадатковых элементаў — гэта кантэкст каманды, а не доказы.
Адзін факт выдэляе CrewAI. Ён выдае ToolUsageStartedEvent і ToolUsageFinishedEvent як адзінаковыя класы, таму ён сам аб’яўляе сабою справжні record_phase — справаздача, які існуе ўсё раней, чым запускаецца інструмент. Гэта мае большое значэнне, чым можа здавацца, адколі лог, напісаны выключна пасля факту, можа паказаць, што ўсё-такі ўздарылася якаясь дзеянне, але не можа паказаць, чы раней яго было санкціонавана.
Што не фіксуецца ніякой парадой
Чатыры з дванаццаці поль не ўсім пяцьму парадам, і два з іх застаюцца недаступнымі нават калі урахоўваецца спецыфікацыя інструментаў.
trust_levelне з’являецца ні ў якім файле з усіх шасцях рэпазітарыёў. Без яго нічога не фіксуець автаномію, пад якой дзейнічае агент, таму немагчыма адзначыць разліку межы дозволенай і забранай дзеянні.prev_hashне з’являецца ні ў якіх файлах, так сама як іprevious_hashіhash_chain. Няма нічога, што бы спаявало запісы, а база дадзеных для лёгкага адстэйкання — цэлае звычайнае база дадзеных, рэкорды якой можна зменіць.agent_versionне існуе ў всіх пяці фрэймворках. Ён ўсё-такі ў OpenInference як копіяgen_ai.agent.versionз OpenTelemetry; яго можна задаць, але, судзячы з усьго, самі фрэймворкі практычна ніколі яго не задаюць.outcomeяк катэгорыя класыфікацыі не отрымае повнага балу ні ў якім з фрэймворкаў. У всіх ёсць поле з памылкамі, але ніхто не розлічвае сцэнарыя «адзначана» ад «неудачна», што ўважаецца найважлівэйшым пунктам для аўдытара.
Пошукі за non_repudiation і pre_execution таксама не даюць жадных рэзультатаў.
Чаму гэтыя поля не існуе
Этыя інструменты былі створаны для іншага пытання. Лёгкія паходы дапамагаюць інжынеру з’ясавіць, чаму ўсё працавае медленна або некорэктна, і input, output, duration ажо паказчык-родзіць у значнай меры падходзяць для гэтага. Доказы должны выстаць проты суперніка, укладаючы нават таго, хто кантролюе журнал, а жадна з гэтых сістэм не была створана з урахоўваннем такой апасцярожнасці. Шчэліны — гэта не працязка. Ніхто не спакоўваўся, што лёгкія паходы можу служыць таксама доказам, пакуль не наступіў гэты год.
Найсільнейшы протыпрыём
Можа OpenTelemetry запаліць гэтыя шчэліны? Часткова. OpenInference пакрывае 8 з 12, якія ўтвараюць найлепшыя рэзультаты, а стандарты GenAI ад OpenTelemetry візначаюць gen_ai.agent.id і gen_ai.agent.version, што тэорэтычна закрывае проблему ідэнтыфікаціі. Якшто іх будзе прыменяць адносова адносова, сама ўжыццёўнасць разв’яжа чатыры з дванаццаці проблем без дадатковай працы.
Адзінакова два самыя складныя трэбаванні застаюцца нерашанымі. Доказы парабіяў нельга дадаць да элемента як атрыбут, калі тое, што належыць магазіну, а не да запісу. Ланцуг хэша мае значэнне толькі тады, калі ён запісваецца там, дзе апісальнік не можа яго перапісаць. А record_phase вымагае, каб рэкорд быў створаны раней, чым будзе выканана дзеянне, і гэта ўзлёт архітэктурнага выбору ў часавай сферэ, а не полье, якое дадаецца пазней. Ні адна з гэтых прычын не падпадае пад сэмантычныя правілы.
Мерыябы вімеры
Чысла ўжыткавыя толькі тады, калі ўсе ўсія ўмовы, якія яны задаюць, сарабітаюць адпаведна, таму важна врачымаць наступныя аспекты:
- Гэта статычны аналіз, а не захопленне пад час выканання. Былі падрахаваны поля, якія візначаюць класы. Шасць агентаў не было запусцана з ўжытымі пакетамі дадзеных для парабяну, а фрэймворк можа запалняць поля за дапамогою механізма расшырэння, які не быў працаваны.
metadata, tags і extra ўжоць вядуць як спосабы адхілення ад правіл, таму іх прызначалі як відсутныя. Большасць такіх фрэймворкаў падтрымляе даколькі завгодна ключоў, таму адданая каманда могла бы зберагчы ланцуг хэшаў у extra. Штучка меры вырахоўвае стандартныя значэння, а не максімальныя ліміты.message_content.signature, але яго докстрынг опісвае незрозумелае значэнне, выданае постачальнікам, якое зберагаецца такім, якім яго прынята, падобна да thoughtSignature у Gemini. Ён павергаецца ў правамірнасць логікі модэлю, а не цэліснасці запісу, і толькі постачальнік можа яго пераканацца. Намерна ён прызначалі як відсутны для падтверджэння цэліснасці.trust_level. Калі спіс трэбаванняў змініцца, то і цыфры пакрыцча таксама змянююцца.timestamp уваажаецца задовольненым у всіх пяці прыкладах, але просты datetime.now(), які не мае часовага пояса або не прыкрэплён да певнага момента, ўсё ж слабейшы за таймстамп па стандарту RFC 3161.Гэта не можа выявіць, чыі з гэтага мае значэнне для конкрэтнай сістэмы. Агент, які чытае дакументы і стварае тэкст, добра павінен практыкуваць налічванне следаў для дыбаггінгу, а запісы аўдытнага рангу будуць занадта перадмернымі. Разлік стварае проблемы толькі тады, калі дзеянні агента маюць наследкі, якія хтось пазней можа заперачыць.
Тры наяваннія па парадку выгоды
- Запісуйце аховнік пры выкананні. Гэта значыць даўжыню пры вызове, а не пасля, зазначаючы ID аховніка, час запісу, ID агента і версію, дзеянне, якое будзе выкананае, і адпаведную упаважненасць. Фармат, які вікорыстоўвае CrewAI для падзелу на пачатак/заканчэнне, ёсць шаблоном, а іншыя сістэмы павінны стварыць такі фармат вручную.
- Складзіце аховнікі ў фармат з можлівасцю толькі дадавання новых дадзеных. Гэшаванне пакананага аховніка за дапамою SHA-256 здзейсніма практычна без костоў. Важлівае — гэтыя дадзеныя будуць збераглія, а не сам гэш.
- Задайце
outcomeслоўнік. З пяцьма значэннямі (успех, неудача, таймаут, адмова, падняць на вышэйшы ранг) разлік межу канфлікту з інструментам і адмовы стае можлівым да вышукування і не застаецца ў форме строкі.
Не патрэбна новая рамка, достатнечна толькі апоўну дваста ліній да існуючай. Яна відбівае мадэль безшумных аберанцый агентаў, якія застаюцца непазначанымі на панелях керування, калі ўсуненне сімвалоў выглядае як стан працыспроможнасці, таму што нічога не было зафіксавана.
Швяжыя адказы
У чым разлік між трэйсам агента і журналам аўдыту? Трэйсы ствараюцца для інжынераў, якія хочуць пазніяй адказаць на пытанні пра поведзінку агента, і яны прыпускаюць, што ўхідныя даны ўвесь час справядлівы. Журналы аўдыту ствараюцца для сторон, якія маюць суперчанні, і ў іх неабходна паказаць ідэнтыфікацыю, автантыяцыю і цэласнасць, тыяму хто дзеяў, з якімі правамі і чыгожа даны змяніліся з моменту занесення. Па порэйнаўанню, кожная рамка мае ад 6 да 25 польў трэйсу, але задовольняе толькі 5 стандартных трэбаванняў аўдыту.
Чы можна зробіць логі LangChain гатовымі да аўдыту? Толькі часткова, і шляхом стварэння раштры на аснове фрэймворку, а не яго настройкі. RunTree з LangSmith апранае 6 з 12 памятак безпасна, укладаючы session_id і parent_run_id. Яшчэ трэба дадаць інфармацыю пра тое, камун являе сабою агент і якая версія была выканана, фіксаваны набор значэнняя рэзультатаў, рэгламентаваны рэвэль довяры, запіс, які создаецца да выканання, і ланцуг хэшаў, які зберагаецца толькі для дадавання новых даных. Спецыяльныя даны могу быць размешчаны ў поле extra, але нічога не заповнюе яго аўтаматычна.
Чы OpenTelemetry рашыляе гэтыя проблемы? Ён падтрымлівае частку, якая стосуецца ідэнтыфікацыі. Доказы парабоі і запісы да выканання застаюцца нерашытымі, адтуды што яны залежаць ад часу і месца создання запісаў, а не ад тых атрыбутах, якія мае спан.
Калькава сэрэдзе ўсё больш падатліва да аўдыту сёньня? LangChain праз LangSmith падтрымлівае 6 з 12 функцыяй, тады як CrewAI унікальна способна запропанаваць справжнія запісы праз адбыцьце заданняя плюс высокакалітэтны agent_id. Жадна з іх не ўжо готова да аўдыту. Калі можлівасць аўдытавання ёсць беззаперэчной, трэба окрэма стварыць шар доказаў і рассілваць логі калькавы як сырыя даныя.
Чы не ўзбочанне ў вікорыстоўванні ланцуга хэшаў для внутрашняга інструмента? Зазвычай так. Ключоўны крытэрый — чы можа хтось за межамі команды паверыцца ў гэты лог, напрыклад, кліент, партнер, страховая кампанія або аддзел, які аналізуе інцыдэты з рэальнымі наследкамі. Калі ні, дастатнік будзе стандартны лог. Калі так, то дадаць ланцуг хэшаў зараз коштуе значна менш, чым перабудаваць яго пазней.
Споры працэўнікамі па кантролі агента трываюць месяцы. Працэўнае підрахунакі часткова раз’ясняюць гэты вопыт, адколькі назва поля або ўключаецца ў клас, або не ўключаецца.
Спадні матэрыялы
- Калі панелі керування зеленая, а агент адмаўляеся: відстэжэнне стану: як неудачы агента хаваюцца ў стане, які пераходзіць між стабільнымі крокамі, і што патрэбна адсочваць, а таксама обмежэнні часу выканання, запісы маршрутацыі і рэзультаты ацэнкі.
- Практычныя прыміткі: програмаванне агента, разгадка цыклаў агента: паследовыя інструкцыі па практычным програмаванні агента, разгадцы цыклаў агента: контракты, перакананні і шаблоны коду для команд, якія вікорыстоўваюць гэты патэрн.