Практычныя прыказкі: Надаць агенту Hermes безпечны доступ у Інтернете з окремым Chrome.
Практычныя прыказкі: Надаць агенту Hermes безпечны доступ у Інтернете з окремым Chrome: контракты, переказы та спеціяльныя поле для коду для команд, якія викорыстоўваюць гэты патерн.
Наступныя прытамлівкі паказваюць практычны спосаб пры выкарыстоўванні падходу «Надаць агенту Hermes безпечны доступ у Інтэрнет за дапамою аддзельнага падман-пада Chrome». Акцэнт ставіцца на контрактах, перакананнях і месцах для коду, а не на мотывацыйных аспектах. Калі працуеце на стадыі агляду, спачатку запісайце контракт: неабяжныя даны, сігнал успеху і тое, што выканаецца у разе частковай нявыполненасці. Такі список пераканаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Документавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў є частью продукту, а не пазнейшым дапрацоўкам.
INTERNET
▲
│
outbound only
│
┌────────────────────────┐
│ Chrome Browser Pod │
│ │
│ Chrome Headless │
│ CDP :9222 │
└───────────┬────────────┘
│
private CDP network
│
┌───────────▼────────────┐
│ Hermes / Ollama Pod │
│ │
│ Hermes ─────► Ollama │
│ localhost:11434
│ │
└────────────────────────┘
│
▼
AMD GPU
Chrome → Internet YES
Hermes → Chrome YES
Hermes → Ollama YES
Hermes → Internet directly NO
Chrome → host filesystem NO
Hermes → rest of host NO
Either → Podman socket NO
Чаму ставіць Chrome у аддзельны пад?
Прынцып «Чаму размістаць Chrome на сцэне» працюе найкраща, калі яго розглядаць як меркаваны аспект. Зафіксавце адна ідеальная версія, адзин случай неудачы і прыметкі па поверненню да попярэдней версіі пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты графа павінны быць простымі та з адначыя типамі дадзеных. Вкладаныя структуры дадзеных масквуюць, який вузел запісаў канкрэтны поле, і спакойваюць працу пасля перерываў.
Untrusted Internet content
↓
Chrome container
↓
CDP
↓
Hermes
Чаму CDP?
Этап Why CDP працюе найкраща, калі яго розглядаць як вимерную паверхню. Зафіксавце адзін ідеальны прыклад, адзін прыклад неудачы і запіс працэў павернення да пярвоначальнага стану пры розшырэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і не падзеўляйцеся частым, некомплектным выкананнем задач. Храніце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакойваюць працу пасля перарываў.
chromedp/headless-shell
Дызайн сеті
Этап проектавання сеті працюе найэфективней, калі яго спрыяваць як меравальную плошчу. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштабаў. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відкрытыя данні пра косты з самага пачатку запобегаюць неспакоўным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Храніце стан графа ў простам і типаваным формате. Вярнутыя структуры данных маскуюць інфармацыю пра тое, калькі вузел запісаў калькі поле, і спакшваюць продовжэнне роботы пасля перарываў. Этап проектавання сеті працюе найэфективней, калі яго спрыяваць як меравальную плошчу. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштабаў. Дакументавайце як шлях успеху, так і шлях вярнэння да нормальнага стану. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
hermes-browser-link
browser-egress
Internet
▲
│
browser-egress
│
Chrome Pod
│
hermes-browser-link
│
Hermes Pod
hermes-browser-link
Шаг 1 — Зупініце існуючую среду Hermes
Для першага, ў яком трэба зупініць процес, пярэд тым, як зменшыць код, неабходна визначыць інпуты, адпаведальную особу за шаг і критэрыі завершэння. Аператары должны магчымаць перзапуск шага з вядомай точкі контролю, не падозрываючы прыхованы стан. Валіць кращэ маленькія, тэставаныя елементы за велікія скрыпты. Калі шаг не выйшаў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес. Неабходна людская апраўда для тых крокаў, якія выкарыстоўваюць грошы або зменяюць даны варабочага сервісу. Компіляцыйныя налашчэння не є прамаравамым паказателем завершання бізнес-процэса.
systemctl --user stop hermes-local
systemctl --user disable hermes-local
podman volume ls
hermes-data
ollama-models
Шаг 2 — Выберыце прыватную падсет
Для другога крока «Выберыце стадію» неабяжна пазначыць вхідныя даны, адпаведальнага за крок і критэрыі завершэння пры перадзеяванні коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце гэтай стадіі як кантракту межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, пазначыце перакананні успеху і адмовіцеся ад бяспечнага частковага завершэння. Заставіце людзкую апраўду на тых этапах, дзе витрачаюцца грошы або зміняюцыся даны для працы. Кампайл-временныя наладкі не ўзроўнаваліся з пачатковым станом бізнесу.
10.77.0.0/24
Hermes pod: 10.77.0.10
Chrome pod: 10.77.0.20
podman network ls
podman network inspect NETWORK_NAME
Крок 3 — Створыце прыватную сеть кантролю браузера
Для крока 3 «Стварыць стадію» неабяжна пазначыць вхідныя даны, адміністратара крока і крэтырыя для завершэння пры перадзеіснавленні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і кост токена або запыту разам з функцыйнальнымі рэзултатамі. Відразы коста з самага пачатку запобегае неспакоўным рахункам, калі процес пераходзіць з дэмовай среды ў спакульную. Апраўляць людзкую атрыбутацыю для тых крокаў, якія витрачаюць грошы або зменяюць даны ў працэсе. Працэс складання коду не ўзроўнаважваеся з повнасцю бізнес-функцыйоналу. Для крока 3 «Стварыць стадію» неабяжна пазначыць вхідныя даны, адміністратара крока і крэтырыя для завершэння пры перадзеіснавленні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы прыхованы стан. Адначасова документаваць шлях успеху і шлях вярнення. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай продукту, а не елементамі пазнейшага доўнешчэння.
podman network create \
--internal \
--subnet 10.77.0.0/24 \
hermes-browser-link
podman network inspect hermes-browser-link
Шаг 4 — Створэнне сеті выходу браузера
Калі працюеце над шагам 4 «Створэнне», спачатку запісайце умовы: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разы частковага нявыпалення. Такі список контролю дапамагае заліцвачыць змяны ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь шаг нявыпанаецца, прычына нявыпалення павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зробіце перапактаванне пасля дорогіх шагоў. Програма не павінна зноў выклікаць той самы вызов LLM, калі аператар праканае пазнейшы вузел.
podman network create browser-egress
Шаг 5 — Перастворэнне пада Hermes
Калі вы виконваеце 5-й крок «Стварыць занова стадію», спачатку запісайте угоду: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разе частковага невыпалення. Такі список пераканаець у тым, што пазнейшыя змены коду будуць чыстымі. Спрэтавайцеся да гэтай стадіі як да угоды межа даннімі і перакананымі выходамі. Дайце назвы артыфактам, задаць тэсты на успех і не падзеўляйцеся частковым завершэнням без паведамлення. Зробіце перапытку пасля дорогіх крокаў. Програма не должна зноў выклікаць той самы календар LLM, калі аператар праканаецца з пазнейшым вузлам.
podman pod rm -f hermes-local
podman pod create \
--name hermes-local \
--network hermes-browser-link:ip=10.77.0.10 \
--userns=keep-id:uid=10000,gid=10000
10.77.0.10
6-й крок — Стварыць занова Ollama
Калі працуеце над этапам 6 «Павторачунак Ollama», спачатку запісайце умовы взаўзейшага дакумента: неабходныя даны, сігнал успеху і тое, што выходзіць пад частковым невясненням. Такі список дапамагае залічваць пазнейшыя змены ў кодзе чыста.
podman run -d \
--name ollama \
--pod hermes-local \
--device /dev/kfd \
--device /dev/dri \
--group-add keep-groups \
-e HOME=/root \
-e OLLAMA_MODELS=/root/.ollama/models \
-e OLLAMA_CONTEXT_LENGTH=64000 \
-v ollama-models:/root/.ollama \
docker.io/ollama/ollama:rocm
http://127.0.0.1:11434
podman exec ollama ollama list
Шаг 7 — Перзахоўваць Hermes
Этап перзахоўвання Hermes у рамках шага 7 будзе працаваць наякша, якщо яго спрацоўваць як виміроўваную структуру. Зберажыце адну «золатую» копію дадзеных, адны прыклад неудачы і запіс пра вярненне да поперадняе стану, перш чым расширваць масштабы. Валідзіце невялікія, тэставаныя елементы замест большых скрыптов. Калі якісь шаг не выйшаў, прычына неудачы павінна вказываць на адную конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Храніце стан графа ў простам і типаваным формате. Вкладаныя структуры дадзеных маскуюць інфармацыю пра тое, який вузол запісаў кожны поле, і спакшуюць возз'ядналенне роботы пасля перерываў.
export HERMES_WORKSPACE="$HOME/path/to/Hermes-Workspace"
podman run -d \
--name hermes \
--pod hermes-local \
--security-opt=no-new-privileges \
--pids-limit 512 \
-v hermes-data:/opt/data \
-v "$HERMES_WORKSPACE:/opt/data/workspace:rw,nodev,nosuid" \
-w /opt/data/workspace \
docker.io/nousresearch/hermes-agent:latest \
sleep infinity
RW access:
$HERMES_WORKSPACE
/
$HOME
~/.ssh
~/.config
your normal browser profile
Podman socket
Docker socket
Шаг 8 — З’явіць Chrome Headless Shell
Этап 8 «З’явленне Chrome» працюе найэфектыўней, калі яго розглядаць як мерыемую паверхню. Зафіксавайце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да поперадньага стану пры расшырэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць критэрыя успеху і не падзеўляйцеся частым, непূরным выкананнем задачы. Храніце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў які поле, і спакоююць продовжэнне выканання пасля перерываў.
podman pull docker.io/chromedp/headless-shell:latest
Этап 9 — Створыце окольны пад Chrome
Крок 9 «Стварыць стадію» працуе наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выконання і косты токеноў або запытак па боку ад функцыйнальных рэзультатаў. Візуабельнасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя сераўы. Храніце стан графа простым і з адначытаемымі даннымі. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшваюць продовжэнне роботы пасля перарываў. Крок 9 «Стварыць стадію» працуе наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Дакументавайце як шлях успеху, так і шлях вяснавання проблем. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
podman pod create \
--name hermes-browser-pod \
--network hermes-browser-link:ip=10.77.0.20 \
--network browser-egress
Chrome
│
├── 10.77.0.20 ─── private link to Hermes
│
└── browser-egress ─── Internet
Крок 10 — Запуск Chrome унутрані браузерскага падмету
Для этапу «Выкананне Chrome» на кроку 10 неабяжна прадзецьваваць інпуты, адпаведнага власніка крока і крэтарыя выходу пры перадзеўці коду. Аператары должны магчымае перывыканнець крок з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшае, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес. Неабяжна людская апраўда для тых крокоў, якія выкарыстоўваюць грошы або зменяюць даны праўай працы. Кампіляцыйныя наладкі не ўзначаюць павноты бізнес-процэса.
podman run -d \
--name hermes-browser \
--pod hermes-browser-pod \
--init \
--shm-size=2g \
--security-opt=no-new-privileges \
docker.io/chromedp/headless-shell:latest
-p 9222:9222
10.77.0.20:9222
Крок 11 — Тэставанне Chrome з контейнера Hermes
Для стадіі тэста Chrome у пасох 11 неабяжна ўзначыць вхідныя данні, адпаведальнага за пасох і крэтыры завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчымае запускаць пасох з вядомай точкі контролю, не прыпускаючы стану, які залишаецца незрозумелым. Спрыяйце цій стадіі як даговору межаў вхідных даных і перакананых выходных рэзультатаў. Даць назвы артыфактам, узначыць крэтыры успеху і не прымкнуцца да тыхняе частковага завершэння без падтверджэння. Забезпечыце людзкую апраўдку для тых ситуацыяй, дзе відбываецца выдатак грошэй або зміняюцыся данні для працы системы. Компіляцыйныя налашчэння не ўзначаюць павнае завершэння бізнес-процэсу.
podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("http://10.77.0.20:9222/json/version").read().decode())'
{
"Browser": "HeadlessChrome/...",
"webSocketDebuggerUrl": "ws://10.77.0.20:9222/devtools/browser/..."
}
Hermes → Chrome
Пасох 12 — Пераканацца, што Chrome мае доступ да Інтэрнету
Для этапа «Падзеўка 12: Адбавочная перакананне» пярэд змінайчом коду неабходна запрацаваць вхідныя даны, выканавальніка крока і крэтарыя для завершэння. Аперацыйныя працавнікі должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спяльнаныя сераўеры. Заставіце людзкую апрацоўку для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе виробніцтва. Компіляцыйныя налашчэння не ўзроўнаваліся з повнасцю бізнес-функцыйоналу. Для этапа «Падзеўка 12: Адбавочная перакананне» пярэд змінайчом коду неабходна запрацаваць вхідныя даны, выканавальніка крока і крэтарыя для завершэння. Аперацыйныя працавнікі должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Дакументавайце як «шчаслівы» так і «вярнучыся» шляхі роботы. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных запытаў є часткай продукту, а не чымсь, што дадаецца пазней.
podman exec hermes-browser \
curl -I https://example.com
browser-egress
Шаг 13 — Пераканацца, што Hermes не мае прымальнага доступу да Інтэрнету
Калі вы працюеце над шагам 13 «Пераканацца, што Hermes не мае прымальнага доступу да Інтэрнету», спачатку запісайце умовы кантракту: неабяжлівыя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыпання. Такі список пераканаецца дапамагае залічваць змяны ў кодзе чыста. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь шаг не выйшоў, прычына нявыпання павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Зробіце пераканацца пасля дорогіх шагоў. Програма не павинна зноў стягваць плата за той самы вызов LLM, калі аператар праканаецца з новага пазнейшы ўзел.
podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("https://example.com", timeout=5).status)'
podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("http://10.77.0.20:9222/json/version").status)'
200
Hermes → Internet FAIL
Hermes → Chrome PASS
Chrome → Internet PASS
Шаг 14 — Направіць Hermes да удаленай інстанцыі Chrome
Калі працуеце над стадзіяй «Хермес», пункт 14, спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўвае, каб пазнейшыя змены коду былі чыстымі. Спрыятлівае ставленне да гэтай стадзіі як да контракту межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задаце правілы пераканання успеху і не падзволяйце частковаму завершэнню без паведамлення. Зробіце пераконтроль пасля дорогіх крокаў. Програма не должна зноў выклікаць той самы календар LLM, калі аператар прабуе зноў запрацаваць з пазнейшым вузлам.
http://127.0.0.1:9222
http://10.77.0.20:9222
podman exec \
--user 10000:10000 \
hermes \
hermes config set browser.cdp_url http://10.77.0.20:9222
podman exec hermes \
grep -A3 '^browser:' /opt/data/config.yaml
browser:
cdp_url: http://10.77.0.20:9222
podman restart hermes
Пункт 15 — Апробаваце з Хермеса
Калі працуеце над стадыям тэставання Крока 15, спачатку запісайце «кантракт»: неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список пераканаець у тым, што пазнейшыя змены коду будуць чыстымі. Запісвайце час выканання і кост токена або запытку празаўсёды разам з функцыйнальнымі рэзултатамі. Відразы коста з самага пачатку запобегае неспакою, калі процес пераходзіць з дэмавайну у спяльныя среды. Зробіце контрольную паўзу пасля дорогіх крокаў. Система вярнення не должна зноў нарахоўваць кост той самай вызову LLM, калі аператар прабуюць зноў запрацаваць пазнейшы вузел. Калі працуеце над стадыям тэставання Крока 15, спачатку запісайце «кантракт»: неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список пераканаець у тым, што пазнейшыя змены коду будуць чыстымі. Дакументавайце як «шчаслівы» шлях, так і шлях вярнення да нормальнасці. Прабавы, людзкія контролі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам.
podman exec -it \
--user 10000:10000 \
-w /opt/data/workspace \
hermes \
hermes
Важна прытама: гэта ўсё ж адказ браузера, а не безакцыянальны доступ да Інтэрнету через Hermes
Этап, які ўважаецца важным, працюе найэфектывнейша, калі яго спрыяваць як меравальную плошчу. Зафіксавайце адна ідеальная версія, адзин случай неудачы і прыметкі па поверненню да попярэдней версіи пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, прычына неудачы павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцужок задач. Рэзультаты роботы графа павінны быць простымі та з адначытаемымі дадзеннямі. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакойваюць працу пасля перарываў.
Hermes browser tools
↓
Chrome
↓
Internet
curl https://example.com
Чаму не падключыць Chrome да модуля Hermes?
Этап «Чаму не выкорыстаць Chrome?» працюе найэфектывней, калі яго спрыяваць як меравальную паверхню. Запісаце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненню роботы перш чым расширваць масштабы. Спрыяйце этапу як даговору между вхіднымі даннымі і паўнастацэннымі выхіднымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад тыхняга частковага завершэння без паведамлення. Храніце стан графа як просты і з адначытаемымі дадзеннямі. Вярнутыя структуры дадзеных маскуюць, який вузел запісаў канкрэтны поле, і спакшваюць продажчыку роботу пасля перарываў.
127.0.0.1:9222
Hermes pod:
private network only
Browser pod:
private network
+
Internet network
Не запускайце свой стандартны профіль Chrome
Метод «Не монтавайце вашу сцэну» працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Зберагуйце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выконання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівае прадставленне костаў з’являецца рана, таму не будзе неспакою з рахункамі, калі процес перейдзе з дэма-серавера ў спяльныя среды. Робіце стан графа плоскім і з адначытаемымі дадзеннямі. Вкладаныя блокі дадзеных маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшуюць продовжэнне роботы пасля перарываў. Метод «Не монтавайце вашу сцэну» працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Зберагуйце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Дакументавайце як шлях успеху, так і шлях вярнэння да нормальнага стану адночасна. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
-v "$HOME/.config/google-chrome:/chrome-profile"
Необав’язкова: профіль прыгледу агента з можлівасцю зберагання
Для неабяцковага ўзбіранага этапу працы браузера-агента неабходна пазначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры перадзеіснавленні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест амаль неконтрольваных скрыптав. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Неабходна людская апраўка для тых крокав, якія выкорыстоўваюць грошы або зміняюць даны ў працэсе виробніцтва. Праця ў часе компілявання не є гарантыяй полнай адпаведальнасці ў бізнесе.
podman volume create hermes-browser-profile
Human browser profile separate
Agent browser profile separateHost filesystem separate
CDP должна застацца прыватной
Колькі хто CDP павінен застацца на стадії прыватнае выкананне, неабяжна практычна вказаць інпуты, адміністратара крока і крэтынія выходу пры змены коду. Аператары павінны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Спрыяйце гэтай стадіі як кантракту межа інпутамі і падтвердзенымы выходам. Даўце назвы артыфактам, практычна вказаць перагляды успеху і адмовіцеся ад тыхоўскага частковага завершэння. Заставьце людзкія падтверджэння на тых элементах, якія витрачаюць грошы або зменяюць даныя праўай працы. Прыўязка ў часе компілявання не адпавядае пачатковай цэласнасці бізнесу.
10.77.0.20:9222
hermes-browser-link
0.0.0.0:9222 -> Chrome
Пераканацца ў ізоляцыі
Для стадіі пераканальнення ізоляцыі неабходна ўпэўненасць у тым, што былі з’явлены вхідныя даны, апраўнік крока і крэтырыя завершэння прычыненне перад зменыма коду. Аперацыйныя працавнікі должны магчымае перадзеўжваць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спаканую. Апраўненне чалавека неабходна для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе. Компіляцыйныя налашчэння не ўзначаюць павнае адпраўленне продукту. Для стадіі пераканальнення ізоляцыі неабходна ўпэўненасць у тым, што былі з’явлены вхідныя даны, апраўнік крока і крэтырыя завершэння прычыненне перад зменыма коду. Аперацыйныя працавнікі должны магчымае перадзеўжваць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Дакументавайце як «шчаслівы» шлях, так і шлях вяснавання. Перапрыбуткі, апраўненне чалавека і обробка нерабочых паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
podman pod inspect hermes-local
podman pod inspect hermes-browser-pod
Hermes pod
└── hermes-browser-link
Browser pod
├── hermes-browser-link
└── browser-egress
podman inspect hermes \
--format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}'
podman inspect hermes-browser \
--format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}'
podman port hermes-browser
Автаматычна запуск падоў
Кал працуеце над этапам автаматычнай запуск падоў, спачатку запісаце кантракт: неабходныя даны, сігнал успеху і тое, што выходзіць у разе частковага абякання. Такі список пераконтрацоў дапамагае залічыць змяны ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць крок абякае, прычына абякання павінна вказваць на адную адпаведальнасц, а не на заплутаны ланцуг задач. Зробіце контрольную паўзу пасля дорогіх крокаў. Функцыя адновы не павінна зноў выклікаць той самы калект працэсу розумнага мовлення, калі аператар пракушае пазнейшы вузел.
nano ~/.config/systemd/user/hermes-local.service
[Unit]
Description=Hermes Local AI and Browser Pods
After=default.target
[Service]
Type=oneshot
RemainAfterExit=yesExecStart=/usr/bin/podman pod start hermes-browser-pod
ExecStart=/usr/bin/podman pod start hermes-localExecStop=/usr/bin/podman pod stop -t 30 hermes-local
ExecStop=/usr/bin/podman pod stop -t 30 hermes-browser-podTimeoutStartSec=120
TimeoutStopSec=60[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now hermes-local
sudo loginctl enable-linger "$USER"
podman pod ps
hermes-local
hermes-browser-pod
Усуненне проблем
Калі працюеце на стадыі адзьявлення проблем, спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрыймайце гэтую стадыю як контракт межа данымі і перакананымі выходамі. Дайце назву элементам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зробіце пераконтроўку пасля дорогіх крокаў. Програма для продакцыі не павінна знову стягваць плата за той самы вызов LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел.
Hermes не можа дасягнуць порту 9222
Калі працуеце з ситуацыяй, калі Hermes не можа дася да стадію, спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Запісвайце час выканання і кост токена або запиту праза функцыональныя рэзультаты. Відразлівасць коста з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя сераўры. Зробіце контрольную пункт пасля дорогіх крокаў. Функцыя адновлення не должна зноў нараховваць кост той самай вызову LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел. Калі працуеце з ситуацыяй, калі Hermes не можа дася да стадію, спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Дакументавайце як «шчаслівы» шлях, так і шлях вярнення да нормальнасці. Прабулі, людзкія контролы і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
podman ps
podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("http://10.77.0.20:9222/json/version").read().decode())'
hermes-browser-link
Chrome можа запускаться, але сторанцы збіваюцца
Chrome можа запускаться, але кращэ працюе, калі яго розглядаць як меравальную паверхню. Запісаце адна ідеальная версія, адзин случай неудачы і прыметкі па поверненню да попярэдней версіі пры расшырэнні масштаба. Вядзейце прывялёвыя, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты графа павінны быць простымі та з адначытаемым типам. Вкладзеныя блокі маскуюць інфармацыю пра тое, калькі вузел запісаў калькі поле, і спакоююць працу пасля перерываў.
--shm-size=2g
Chrome працуе, але інструменты прыглядча Hermes не показуюцца
Chrome працюе, але стадія Hermes работае найкраща, калі яе розглядаць як мерыемую паверхню. Запісаце адна «золатая» транскрыпцыя, адзін прыклад неудачы і прыметку па поверненню да пярвоначальнага стану пры розшырэнні масштаба. Разглядзеце гэтую стадію як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Даце назвы артыфактам, задаце критэрыі успеху і не падзельвайцеся на частковыя завершэння без паведамлення. Адкройце інструменты з вузкімі схемамі та чысткімі пазначэннямі побачных наследкав. Хостам неабходна інфармацыя пра тое, якія вызовы змінююць стан, перш чым яны автаматычна схваляюць ўсё.
browser:
cdp_url: http://10.77.0.20:9222
nano не ў доступе внутрь контейнера Hermes
Этап, калі «nano» недоступны, працюе лепш, калі яго спрыяваць як меравальную паверхню. Зберагачыце адны ідеальны прыклад, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выконання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівае паказанне костаў з’являецца рана, таму не будзе неспакою з рахункамі, калі процес перейдзе з дэма-серавера ў спяльныя среды. Разважайце стан графа простым і з адначытаемымі дадзеннямі. Вкладаныя блокі маскуюць, калькі вузел запісаў калькі поль, і спакойнае выкананне працы зупіняецца пасля перарываў. Этап, калі «nano» недоступны, працюе лепш, калі яго спрыяваць як меравальную паверхню. Зберагачыце адны ідеальны прыклад, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Дакументавайце як шлях успеху, так і шлях вярнэння да нормальнага стану адночасна. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадацца пазней.
hermes config set
podman exec \
--user 10000:10000 \
hermes \
hermes config set browser.cdp_url http://10.77.0.20:9222
Завершаныя модэлі безпекі
INTERNET
▲
│
browser-egress
│
┌─────────┴──────────┐
│ Chrome Browser Pod │
│ │
│ Headless Chrome │
│ CDP :9222 │
└─────────┬──────────┘
│
hermes-browser-link
INTERNAL ONLY
│
┌─────────▼──────────┐
│ Hermes/Ollama Pod │
│ │
Host Workspace ─►│ Hermes │
RW │ │ │
│ ▼ │
│ Ollama │
│ │ │
└─────┼──────────────┘
▼
AMD GPU
ACCESS
Hermes → designated host workspace YES
Hermes → Ollama YES
Hermes → Chrome CDP YESChrome → Internet YESHermes → Internet directly NO
Hermes → rest of host filesystem NO
Hermes → SSH keys NO
Chrome → host filesystem NO
Chrome → normal browser profile NO
Hermes → Podman/Docker socket NO
Chrome → Podman/Docker socket NO
Host/LAN → Chrome CDP NO
Чаму вы выбіраеце гэтую архітектуру
Give it the filesystem.
Give it Docker.
Give it Internet.
Give it Chrome.
Give it credentials.
one working directory
local-model access
browser-control access
model storage
GPU access
Internet access
CDP connectivity
my SSH keys
my entire home directory
my normal browser profile
my Podman socket