Практычныя прытамулі: Заліквідаванне автонамнага агента ў межах ліній
Практычныя прыказкі: Как контролаваць автонамны агента ў межах заданых правілаў: контракты, перакрыцчы і месца для дадзення коду для команд, якія выкарыстоўваюць гэты патэрн.
Існавайце гэта як перапрацоўку ідэй з кнігі «Заліквідацыя автонамнага агента ў межах правілаў» для працавальнікаў: чыстыя этапы, аранжаваныя блакі коду і прыметкі па вяснаванню, якія застаюцца пасля перадачы. Этап Аналізу работае найкраща, калі яго спрыяваць як мерыемую плошчу. Запісаўце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметку па адвярненню роботы перш чым расширваць масштаб. Спрыяйце гэты этап як кантракт між вхіднымі дадзеннямі і паўнастайшымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад безсловеснага частковага завершэння.
Чаму простая перапачатка стрынга недастатня
Калі трэба выконваць просты этап у вигляде стрэнга, спачатку неабяжна задаць вхідныя даны, адпаведальнага за шаг і крэтарыя для завершэння працы, перш чым зменіць код. Аператары должны магчымае перзапускать шаг з вядомай точкі контролю, не прабуючы здогадвацца пра схованы стан. Запісвайце час выконання і вартасць токена або запытку праз адны ряд з функцыйнальнымі рэзултатамі. Відразы вартасці з самага пачатку запобегае неспакоўным рахункам, калі процес пераходзіць з дэмовай среды ў спяльнаваныя сераўеры. Заставіце людзкую апрацоўку для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны у працэсе виробніцтва. Праця ў час компілявання не абавесць цэлыснасцю бізнес-процеса.
curl http://localhost/exec?cmd=ping%20192.168.2.1
Разбіранне складовых пры адгукванні пра ўсё
Для адміністрування процэса зняцья шароў неабходна пазначыць вхідныя даны, адпаведальнага за кожны крок і критэрыя завершэння пры зміне коду. Аператары должны магчыма ўвайсці крок з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Конфігурацыю трэба залічыць паза кодам прыкладнення. Файлы сераўнавання, хранільнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаючы весь ланцуг задач. Прызначыць людскія празгляды для рэшэнняў, якія витрачаюць грошы або зменяюць даны у працэсе виробніцтва. Прыўязка на час компілявання не є гарантыяй полнай адпаведнасці бізнес-процэсаў.
def _de_cloak_payloads(cmd: str, depth: int = 0, max_depth: int = 3) -> set[str]:
"""
Recursively searches for base64, hex, and URL encodings inside cmd.
Returns a set of all extracted/decoded plain strings.
"""
extracted = {cmd}
if depth >= max_depth:
return extracted
# 1. URL Decoding
decoded_url = urllib.parse.unquote(cmd)
if decoded_url != cmd:
extracted.update(_de_cloak_payloads(decoded_url, depth + 1, max_depth))
# 2. Hex escape and raw hex string decoding
for match in re.findall(r"(?:\\x[0-9a-fA-F]{2})+", cmd):
hex_bytes = bytes.fromhex(match.replace("\\x", ""))
extracted.update(_de_cloak_payloads(hex_bytes.decode("utf-8", errors="ignore"), depth + 1, max_depth))
# 3. Base64 decoding
for match in re.findall(r"\b[A-Za-z0-9+/]{12,}={0,2}\b", cmd):
padded = match + "=" * ((4 - len(match) % 4) % 4)
decoded = base64.b64decode(padded.encode("ascii")).decode("utf-8", errors="ignore")
extracted.update(_de_cloak_payloads(decoded, depth + 1, max_depth))
return extracted
Той жа трюк працуе з цыфрамі, а не толькі з текстам
У стадії «Той самы трюк работае» неабяжна прадзеўляць вхідныя даны, абавесця крока і крэтынія выходу пры перадзеўленні коду. Аператары должны магчымае запускать крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія пераказы і обробка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Неабяжна застаўляць людзкую затверджэнняе для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе. Компіляцыйныя налашчэння не ўзроўнаваны з повнасцю бізнес-функцый. У стадії «Той самы трюк работае» неабяжна прадзеўляць вхідныя даны, абавесця крока і крэтынія выходу пры перадзеўленні коду. Аператары должны магчымае запускать крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце цій стадіі як кантракту межа вхіднымі данымі і перакананымі выходамі. Даўце назвы артыфактам, прадзеўляць пераказы успеху і адмовіцца ад беззвучнага частковага завершэння.
def _normalize_ip_token(token: str) -> str | None:
token = token.strip().lower()
# A bare integer or hex integer standing in for a full IP
if token.isdigit() or (token.startswith("0x") and all(c in "0123456789abcdef" for c in token[2:])):
val = int(token, 16) if token.startswith("0x") else int(token)
if 0 <= val <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:
if val > 1024 or val in (0,):
return str(ipaddress.ip_address(val))
# Dotted octal or dotted hex, one part at a time
if "." in token:
parts = token.split(".")
if len(parts) == 4:
normalized_parts = []
for p in parts:
val = int(p, 16) if p.startswith("0x") else int(p, 8) if p.startswith("0") and len(p) > 1 else int(p)
if 0 <= val <= 255:
normalized_parts.append(str(val))
if len(normalized_parts) == 4:
return ".".join(normalized_parts)
return None
Домены выклікаюць іншы спосаб прытрымання, у працоўным аспекте
Калі працюяеце над тым, што домены выклікаюць адзін другога, спачатку запішыце кантракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпання. Такі список пераканаецца дапамагае залічваць змяны ў кодзе чыста. Запісвайце час выканання і кост токена або запыту паляглі разам з функцыйнальнымі рэзультатамі. Відразлівае паказанне костаў з’являецца неспадзейчаных сум у момент, калі праця пераходзіць з дэмаверсіі ў спадзеленыя сераўы. Зробіце перапаказ пасля дорогіх крокаў. Система вярнення не павінна знову нарахоўваць тую ж самую плата за вызов LLM, калі аператар перапрыяўляе роботу да наступнага вузла.
tld = token.rsplit(".", 1)[-1]
if tld in _FILE_EXTENSIONS:
continue
if not any(token == d or token.endswith("." + d) for d in self.domains):
raise ScopeViolation(f"Domain {token!r} is outside engagement scope.")
Аднаўленне ўсьго разам
Калі працюеце на стадыі «Адгрупаванне элементаў», спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список пераканальвае ў тым, што пазнейшыя змены коду будуць чыстымі. Зберагаюце настройкі паза кодам прыемліка. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцый крануцца ў аднам месцы, дзе аператары можаць аудытаваць іх, не чытаючы весь граф. Ствараеце контрольныя пункты пасля дорогіх крокаў. Функцыя вярнення роботы не должна зноў выклікаць той самы календар LLM, калі аператар перапрыяўляе роботу да пазнейшай вузлы.
def check(self, cmd: str) -> None:
payloads = _de_cloak_payloads(cmd)
for payload in payloads:
if self.networks:
for m in _IPV4_RE.finditer(payload):
self._validate_ip(m.group(1))
for token in re.split(r"[\s\"'$,;()|&<>`\\/]", payload):
normalized = _normalize_ip_token(token)
if normalized:
self._validate_ip(normalized)
if self.domains:
for m in _DOMAIN_RE.finditer(payload):
token = m.group(0).lower()
tld = token.rsplit(".", 1)[-1]
if tld in _FILE_EXTENSIONS:
continue
if not any(token == d or token.endswith("." + d) for d in self.domains):
raise ScopeViolation(f"Domain {token!r} is outside engagement scope.")
Што далей
Калі працюеце над стадзіяй «Што далей», спачатку запісайце угоду: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў захоўвае чыстасць пазнейшых змян у кодзе. Дакументавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Стварайце контрольныя пункты пасля дорогіх крокаў. Система вярнення не павінна зноў выраховваць адплату за той самы вызыв LLM, калі аператар перапрыбуе пазнейшы вузел. Калі працюеце над стадзіяй «Што далей», спачатку запісайце угоду: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў захоўвае чыстасць пазнейшых змян у кодзе. Спрыймайце гэтую стадзію як угоду межа данымі і перакананымі выходамі. Дайце назву артыфактам, задаць тэсты на успех і не падтрымайце безслуховае частковае завершэння.
Контрольны список для эксплуатацыі
Калі працюеце над стадзіяй Кантрольнага списку, спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у случае частковага неяксамоства. Такі кантрольны список дапамагае залічваць змяны ў кодзе чыста.
Валіце маленькія, тэставаныя елементы замест вялікіх скрыптав. Калі якісь крок не выйшае, неяксамоства павінны адносіцца да адной адпаведнасці, а не да заплутанага ланца задач.
Зробіце кантрольную паузу пасля дорогіх крокаў. Система вярнення працы не павінна зноў нарахоўваць адной і той жа вызов LLM, калі аператар пракантруе пазнейшы вузел.
Фіксуйце версіі залежнасцяў і запісвайце хеш ад з’ядра, якое запускала дэманстрацыю. Возможнасць павтарэння важлівей, чым традыцыйныя знання.
Спрыятлівае ставленне да гэтай стадзіі як да угоды межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задаць критэрыя успеху і адмовіцеся ад тыхнявага частковага завершэння.
Зробіце кантрольную паузу пасля дорогіх крокаў. Система вярнення працы не павінна зноў нарахоўваць адной і той жа вызов LLM, калі аператар пракантруе пазнейшы вузел.
Перш чым запускать даную структуру, заморозьце версіі, зафіксавце «золаты» транскрыпты для критичных етапаў і паказвце спосабы вярнення да пачатковага стану. У спільных серавысках неабходны ліміты частоты запуску, пераканання ў належнасці ресурсаў і чысткі власнік для змены секрэтных даных. Лепш выбіраць простую надзею на надзейнасць, чым хітрыя експерыментальныя дэманстрацыі.
Прыметка для 373547c620fe: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токенав на кожную сесію і зберагачыце транскрыпты празаўседы ў фіксаты для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównаннімы.
Для прыметкі па забезпечэнню надзейнасці на стадыі 0 неабходна ўжо да змены коду адзначыць вхідныя даны, власніка кроку і критэрыя завершэння. Аперацыёныя системы должны магчымае перзапускаты крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы, чым велікія скрыпты. Калі крок не выйшаў, прычына нехтаравання должна быць адносна адзінай адпаведальнасці, а не заплутанага ланцацька.
Дзеянне паўжасткі 0/771: звярніце увагу на час выканання, клас памылкі і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля, на аднойчынай базе паказаных дадзенняў, а не на асобістым мнэнні, выявіце, чы робіць змены.
Калі працуеце над першым этапам паўжасткі, спачатку запісайце параметры контракта: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковай памылкі. Такі список дапамагае заставаць пасляэтапныя змены ў кодзе чыстымі. Запісвайце час выканання і колькасць токенаў або вартасць запытку па боку функцыйнальных рэзультатаў. Відразлівае паказанне вартасцей запобегае неспадзянанным расходам, калі працэс пераходзіць з дэмаверсіі ў спяльныя сераўы.
Дзеянне паўжасткі 1/771: звярніце увагу на час выканання, клас памылкі і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля, на аднойчынай базе паказаных дадзенняў, а не на асобістым мнэнні, выявіце, чы робіць змены.