Галоўная / Артыкулы / Практычныя прытамулкі: Зьвярніце Hermes Agent локальна (і абэрнана) за дапамою Ollama.

Практычныя прытамулкі: Зьвярніце Hermes Agent локальна (і абэрнана) за дапамою Ollama.

Практычныя прыказкі: як запускаць Hermes Agent локальна (і безпечна) адзіну з Ollama, а таксама інструкцыі ў вопуску з контрактамі, перакананнямі та месцамі для коду для команд, якія викорыстоўваюць гэты патэрн.

4149 слоў

Існавайце гэта як перапрацоўаны варыянт ідэй з артыкула «Запуск агента Hermes локальна (і безпечна) з Ollama і Rootless Podman на Arch Linux» для аператараў: чыстыя этапы, арганізаваныя блакі коду і прыметкі з вяселення, якія застаюцца пасля перадачы. Этап «Апглэйв» найкраща працюе, калі яго спрыяваць як вимерную плошчу. Запісаўце адна ідеальная транскрыпцыю, адзін кейс неудачы і прыметкі з вярнення да пачатковага стану прычаму расшырэння масштаба. Спрыявайце гэты этап як кантракт між вхіднымі дадзеннямі і паўнастацэннымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і не падтрымайце беззвучнае частковае завершэння.

1. Установіце Rootless Podman

Для стварэння ўстановленага rootless-этапу Podman неабходна пазначыць вхідныя даны, адпаведальнага за крок і критэрыі завершэння пры перадзеяванні коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Запісвайце час выконання і вартасць токена або запытку празаўсёды разам з функцыйнальнымі рэзултатамі. Відразы вартасці з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмавайнага сераўера у спяльныя сераўеры. Аддзельце стварэнне кліента ад цыклу перадачы паведамленняў, ўжо тады, калі можна будзе змяніць прадаўца, не перапісваючы машыну стана дыялогу.

sudo pacman -Syu podman
1) crun
2) krun
3) runc
1
podman --version
podman info --format '{{.Host.OCIRuntime.Name}}'
crun
grep "^$USER:" /etc/subuid
grep "^$USER:" /etc/subgid

2. Пры неабходнасці вылечыце rootless OverlayFS

Для стадіі 2 Fix rootless OverlayFS неабяжна ўзначыць вхідныя даны, адпаведальнага за этап і крэтыяры завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымае перазапускаць этап з вядомай точкі контролю, не падозрэўаючы пра скрыты стан. Конфігурацыю трэба залічыць праза код аплікацыі. Файлы сераўнавання, храненні секрэтных данных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое працавнікі можуць пераглядаць, не чытаючы весь граф. Аддзельнае стварэнне кліента ад цыклу паведамленняў дазволяе змініць прадаўцоў без перапісвання машыны стану размовы.

kernel does not support overlay fs:
'overlay' is not supported over extfs
sudo pacman -S fuse-overlayfs
which fuse-overlayfs
/usr/bin/fuse-overlayfs
~/.config/containers/storage.conf
[storage]
driver = "overlay"
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
podman info --debug | grep -Ei 'graphDriverName|mount_program|overlay'

3. Апшырэнне: пераказаць хранення Podman на большы дрыў

Для 3 неабяцковых ўрадзоў стадіі Podman неабходна пазначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчымае перайсці на выкананне кроку з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабходна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Аддзельна трэба выконваць стварэнне кліента і цикл обмены паведамленнямі, каб можна было зменіць прадаўцаў без перапісвання машыны стану дыялогу. Для 3 неабяцковых ўрадзоў стадіі Podman неабходна пазначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчымае перайсці на выкананне кроку з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце таму, каб гэтае ўрадзоўвалася як контракт між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвайце артыфакты, пазначыць крэтыяры успеху і не прымайце часткова завершаныя рэзультаты без паведамлення.

write /var/tmp/container_images_storage...:
no space left on device
$HOME/.local/share/containers/storage
/var/tmp
/path/to/large-drive/podman/
├── storage/
└── tmp/
sudo mkdir -p /path/to/large-drive/podman/storage
sudo mkdir -p /path/to/large-drive/podman/tmp
sudo chown -R "$USER:$USER" /path/to/large-drive/podman
mkdir -p ~/.config/containers
nano ~/.config/containers/storage.conf
[storage]
driver = "overlay"
graphroot = "/path/to/large-drive/podman/storage"
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
export TMPDIR=/path/to/large-drive/podman/tmp
echo 'export TMPDIR=/path/to/large-drive/podman/tmp' >> ~/.bashrc
source ~/.bashrc
podman info --format 'GraphRoot: {{.Store.GraphRoot}}'
podman info --debug | grep -Ei 'graphRoot|imageCopyTmpDir|mount_program'
~/.local/share/containers/storage

4. Створыце едынную папку-хост, даючую доступ Hermes

Калі працуеце над крокам 4 «Створыце едынную папку-хост», спачатку запісайце умовы викорыстоўвання: неабходныя даны, сігнал пра успех і тое, што будзе адбывацца у разе частковага няўспэху. Такі список дапамагае заліцварваць можлівыя змены ў коде. Запісывайце час выканання задачы, а таксу токенаў або запытанняя пры кожным функцыйнальным рэзултате. Відразы цены з самага пачатку запобегае неспакойным рахункам, калі праця пераходзіць з дэмовай среды ў спакульную. У кожным запыте фіксуйце ідэнтыфікатор запыту, ідэнтыфікатор моделі і час затрымкі. Без такога лёгку паводлу немагчыма разліцварваць періадычныя проблемы прадаўца на багі самай аплікацыі.

export HERMES_WORKSPACE="$HOME/path/to/Hermes-Workspace"
mkdir -p "$HERMES_WORKSPACE"
Obsidian Vault/
├── Personal/
├── Work/
├── Research/
└── Agent Workspace/       ← only this folder is exposed
podman volume create hermes-data
podman volume create ollama-models

5. Наладжыце доступ да AMD GPU

Калі вы працуеце над 5-ю стадзіяй налаштавання AMD GPU, спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага абякання. Такі список контроля дапамагае залічыць пазнейшыя змены ў кодзе чыстымі. Зберагаюце налаштаванні паза кодам прыемліка. Файлы сераўнавання, храненні секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжлівага чытання всей структуры. Запісуйце ID запиту, ID модэлю і час адклікання праз кожны вызов. Без такога лёгку, інтэрмітентных абяканняў прадаўцы выглядаюць як багі прыемліка.

/dev/kfd
/dev/dri
ls -l /dev/kfd
ls -l /dev/dri/render*
groups
sudo usermod -aG video,render "$USER"
groups
groups
video render

6. Пераканайцеся, што /dev/net/tun працуе

Калі працюеце над 6-й стадзіяю «Check dev net», спачатку запісайце угоду: неабяжлівыя данні, сигнал працэздольнасці і тое, што выходзіць пад частковую нявыполненасць. Такі список контролю дапамагае заставіць пазнейшыя змены коду быць чыстымі. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам. Зявляйце логі з ідэнтыфікаторам запиту, ідэнтыфікаторам моделі і часам затрымкі праз кожны вызов. Без такога следу періодычныя памылкі прадастаўця выглядаюць як багі прыемніка. Калі працюеце над 6-й стадзіяю «Check dev net», спачатку запісайце угоду: неабяжлівыя данні, сигнал працэздольнасці і тое, што выходзіць пад частковую нявыполненасць. Такі список контролю дапамагае заставіць пазнейшыя змены коду быць чыстымі. Спрыятлівайце гэтай стадзіі як угоды межа даннімі і перакананымі выходнымі рэзультатамі. Даўце назвы элементам, задайце критэрыя працэздольнасці і адмовіцеся ад мовчанкавага частковага завершэння.

pasta failed with exit code 1:
Failed to open() /dev/net/tun: No such device
ls -l /dev/net/tun
sudo modprobe tun
uname -r
ls /usr/lib/modules/

7. Выберыце локальны модэль

Этап «7. Выберыце локальны модэль» працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісваце часы выконання і косты токеноў або запытак праза функцыйнае рэзультаты. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмавайнага режыма ў спяльныя сервісы. Закрепіце інтэрпретара і файл з правіламі залежнасцяў перад тым, як выучаць цикл. Разніця межу лэптопам і средой CI ёсць найчастэйшым таямным абаранкам для дэмавайных версій API.

gemma4:12b
export HERMES_MODEL="gemma4:12b"

8. З’явіце адпраўкі контэйнераў

Этап 8 «З’явлення контейнера» працюе найэфективнейша, калі яго розглядаць як вимерную паверхню. Зафіксавце адна «золатая» транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Зберагаеце настройкі пазнаходзячыся за межамі коду прыемліка. Файлы сяродавішняе сераўісу, хранілішчы секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць аудыт без неабяжнага чытання всіх дадзеных. Закрепіце інтэрпретара і файл з блокаванням залежнасцей пры практыкуванні циклу. Разлік межаў між ноутбукам і системай CI ёсць найчастэйшым таямным абрывам для дэманстрацый API.

podman pull docker.io/ollama/ollama:latest
podman pull docker.io/ollama/ollama:rocm
podman pull docker.io/nousresearch/hermes-agent:latest

9. З’явіце модэль у стацыонарным об’ёме

Этап «9. Зялежванне модэлю» працюе наўздыякрашэй, калі яго спрыятаць як мерымае паверхне. Запісайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Забезпечыце фіксацію інтэрпретара і файла з блокаванням залежнасцяў пры рэализацыі циклу. Разніця межу лэптопам і системай CI ёсць найчыстае безшумнае нарушэння пад час дэманстрацый API. Этап «9. Зялежванне модэлю» працюе наўздыякрашэй, калі яго спрыятаць як мерымае паверхне. Запісайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Спрыяйце гэты этап як кантракт межу вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задайце критэрыя успеху і адмовіцеся ад безшумнага частковага завершэння.

podman rm -f ollama-bootstrap 2>/dev/null
podman run -d \
  --name ollama-bootstrap \
  -v ollama-models:/root/.ollama \
  docker.io/ollama/ollama:latest
podman rm -f ollama-bootstrap 2>/dev/null
podman run -d \
  --network host \
  --name ollama-bootstrap \
  -v ollama-models:/root/.ollama \
  docker.io/ollama/ollama:latest
podman exec -it ollama-bootstrap \
  ollama pull "$HERMES_MODEL"
podman exec ollama-bootstrap ollama list
gemma4:12b
podman rm -f ollama-bootstrap
container name "ollama-bootstrap" is already in use
podman rm -f ollama-bootstrap

10. Стварыць сеть толькі для внутрашньага вжытку

У падзеўцы «Стварыць сеть толькі для внутрашньага вжытку» неабходна прадзефінаваць вхідныя даны, адпаведальную за крок і критэрыя завершэння пры змены коду. Аператары должны магчымае перзапускать крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і вартасць токена або запытку праза функцыйнальных рэзультатаў. Відразлівая вартасць з самага пачатку запобегае неспакоўным рахункам, калі парадок пераходзіць з дэмовай среды ў спяльную. Аддзельна выконваць стварэнне кліента ад цыклу паведамленняў, каб можна было зменіць прадастаўцаў без перапісвання машыны стану размовы.

--network none
podman network create \
  --ignore \
  --internal \
  hermes-internal
podman pod create \
  --name hermes-local \
  --network hermes-internal \
  --userns=keep-id:uid=10000,gid=10000

11. Запуск Ollama з AMD ROCm

Для запуску Ollama з 11 стадзіям неабяжна пазначыць вхідныя даны, адміністратара крока і критэрыя завершэння пры перадзеіснавленні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Конфігурацыю трэба залічыць паза кодам прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф. Аддзельнае стварэнне кліента ад цыклу паведамленняў дазволяе змініць прадаўцоў без перапісвання машыны стану размовы.

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
--device /dev/kfd
--device /dev/dri
--group-add keep-groups
ollama/ollama:rocm
HOME=/root
OLLAMA_MODELS=/root/.ollama/models
podman exec ollama ollama list
podman logs ollama
HOME=/
OLLAMA_MODELS=/.ollama/models
/root/.ollama/models
HOME=/root
OLLAMA_MODELS=/root/.ollama/models
podman exec ollama ollama list

12. Пераканацца, што ROCm дзейсна выкарыстоўвае GPU

Для стадіі 12 Verify ROCm неабяжна ўзначэнне вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад змінайом коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Аддзельнаюць стварэнне кліента ад цыклу паведамленняў, таким чынам дазволяючы змініць прадаўцоў без перапісвання машыны стану размовы. Для стадіі 12 Verify ROCm неабяжна ўзначэнне вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад змінайом коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце цій стадіі як кантракту межы вхіднымі дадзенымі і паўнастаяправеранымі выходнымі рэзультатамі. Даўце назвы артыфактам, узначьце критэрыя успеху і адмовіцеся ад мовчанкавага частковага завершэння працы.

podman logs ollama 2>&1 | grep -Ei 'gpu|rocm|amd|gfx'
podman exec -it ollama \
  ollama run gemma4:12b \
  "Reply with exactly: AMD GPU test successful"
podman exec ollama ollama ps
PROCESSOR
CONTEXT
64000

13. Запуск Hermes з выключаным монтажам толькі адной папкі-хоста

Калі працуеце над пунктам 13 «Запуск Hermes», спачатку запісайте умовы: неабяжлівыя данні, сигнал успеху і тое, што будзе адбывацца у разе частковага невыпання. Такі список дапамагае заліцварыць будучыя змены ў кодзе. Запісвайце часы выконання і кост токена або запиту разам з рэзультатамі функцыянальных працоў. Візуабельнае паказанне коста з самага пачатку запобегае неспакою, калі праця пераходзіць з дэмовай среды ў спакульную. У кожным запыте фіксуйце ID запыту, ID модэлю і час затрымкі. Без такога лёгку, перыядычныя проблэмы прадаўцы выглядаюць як багі самай аплікацыі.

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
/:/host
/home:/home
~/.ssh
~/.config
Docker socket
Podman socket
$HERMES_WORKSPACE
        ↓
/opt/data/workspace
hermes-data
        ↓
/opt/data

14. Пераканацца ў межах монтажу

Калі працюеце над 14-м этапам прабавы, спачатку запісайце умовы кантракта: неабяжлівыя даны, сигнал працэздольнасці і тое, што выходзіць пад частковую нявыполненасць. Такі список контроля дапамагае залічыць змяны ў кодзе пасля таго. Зберагаюце канфігурацыю паза кодам прыемліка. Файлы сераўнавання, храненні секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць адбавіць аудыт без неабяжлівага чытання всей структуры. Запісваюце ID запытку, ID модэлю і час адпаведзення праз кожны вызов. Без такога лёгкага следу періадычныя кантракты паводлара выглядаюць як багі прыемліка.

podman inspect hermes \
  --format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}'
Podman volume -> /opt/data
your allowed folder -> /opt/data/workspace
podman exec hermes sh -c \
  'test ! -S /var/run/docker.sock && echo "No Docker socket exposed"'
podman exec hermes sh -lc \
  'test -e "$HOME/.ssh" && echo "SSH directory visible" || echo "Host SSH directory not visible"'

15. Прабаваце, чы можа Hermes дасягнуць Ollama

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

podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("http://127.0.0.1:11434/v1/models").read().decode())'
podman exec hermes python - <<'PY'
...
PY
podman exec -i hermes python - <<'PY'
import urllib.request
print(
    urllib.request.urlopen(
        "http://127.0.0.1:11434/v1/models"
    ).read().decode()
)
PY

16. Пераканаце, чы ўсунуты доступ да зовнішняй сеті

Этап 16 «Пераканаце, чы ўсунуты доступ да зовнішняй сеті» працуе наяўней, калі яго розглядаць як вимерную величыну. Перш чы расширваць масштабы, зафіксавайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану. Запісвайце часы выконання і вартасьць токена або запиту разам з рэзультатамі функцыянальных тестаў. Візуальны адлік вартасцей з самага пачатку запобегае неспакоўным рахункам, калі процес пераходзіць з дэмовай среды ў спакульную. Зафіксавайце інтэрпретара і файл з правіламі залежнасцяў пры пачатку роботы з цікламі. Разніця ў работе на ноутбуку і у середовышчах CI ёсць найпашчэрэйшым безследным абараненнем працы дэмавых версій API.

podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("https://example.com", timeout=5).read())'
podman ps
11434/tcp
0.0.0.0:11434->11434/tcp

17. Наладзіце Hermes для викорыстання локальнага Ollama

17. Найкраща праця з налаштаванням Hermes для адміністрування працоў ведэцца тады, калі яго спрыяваць як меркаваную паверхню. Запісаце адна «золатая» копія даных, адзін прыклад неудачы і запіс працэй з вярненням да пачатковага стану пры розширэнні масштаба. Зберагаеце налаштаванні пазырочна ад коду прыемліка. Файлы сераўнавання сяродовысці, хранілішча секрэтных данных і флагі функцый должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Закрепіце інтэрпретара і файлы з інформацыяй пра залежнасці пры практыкуванні циклаў. Разлікы межа лэптопам і системай CI є самым частым непазначальным бягам у дэманстрацыях API.

podman exec -it \
  --user 10000:10000 \
  -w /opt/data/workspace \
  hermes \
  hermes model
Ollama Cloud
Custom endpoint (enter URL manually)
http://127.0.0.1:11434/v1
gemma4:12b
64000

18. Оыкорыстоўваеце локальны тэрмінал Hermes – усередзіне контейнера

18 Use Hermes локальныя стадыі працююць наўжоўшы, калі іх спрыяваць як меркаваную паверхню. Зберагуце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументаваце як шлях успеху, так і шлях вяснавання проблемы. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных поведань ўскладнень ёсцю частью продукту, а не пасляднім дапрацоўкам. Забезпечыце фіксацію інтэрпретара і файлу блокавання залежнасцей пры стварэнні циклу. Разлікі межаў між ноутбукам і системай CI ёсцю найчастэйшым таямным нарушэнням пад час деманстрацый API. 18 Use Hermes локальныя стадыі працююць наўжоўшы, калі іх спрыяваць як меркаваную паверхню. Зберагуце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Спрыявайце гэтую стадію як даговор межаў вхідных даных і перакананых выходных рэзультатаў. Даць назвы артыфактам, задаць критэрыя успеху і не падзеўляцца частычным, непрыканальным завершэнням.

terminal:
  backend: local
Hermes "local"
      ↓
Hermes container
Hermes "local"
      ↓
your Arch workstation
podman exec --user 10000:10000 hermes \
  hermes config set terminal.backend local
podman exec --user 10000:10000 hermes \
  hermes config set terminal.cwd /opt/data/workspace
podman exec --user 10000:10000 hermes \
  hermes config set terminal.home_mode profile

19. Запуск Hermes

Для 19-го этапу запуску Hermes неабяжна прадзецаваць параметры, адпаведальнага за шаг і крэтыя завершэння прычыны перад зменым коду. Аператары должны магчымаць перзапуск шагу з вядомай точкі контролю, не падозрываючы схованы статус. Запісваць час выконання і кост токена або запыту праза функцыйнальныя рэзултаты. Відразлівасць коста з самага пачатку запобегае неспакоўным рахункам, калі парадок пераходзіць з дэмавайнага режыма ў спяльныя среды. Аддзельваць стварэнне кліента ад цыклу паведамленняў, каб было можна змяніць прадстаўніка без перапісвання машыны стану канверсацыі.

podman exec -it \
  --user 10000:10000 \
  -w /opt/data/workspace \
  hermes \
  hermes

20. Автаматычна запускайце среду пад час запуску

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

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/hermes-local.service
[Unit]
Description=Hermes Local AI Pod
After=default.target
[Service]
Type=oneshot
RemainAfterExit=yesExecStart=/usr/bin/podman pod start hermes-local
ExecStop=/usr/bin/podman pod stop -t 30 hermes-localTimeoutStartSec=120
TimeoutStopSec=60[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable hermes-local.service
systemctl --user start hermes-local.service
systemctl --user status hermes-local.service
Active: active (exited)
sudo loginctl enable-linger "$USER"
loginctl show-user "$USER" -p Linger
Linger=yes
podman ps
podman exec -it \
  --user 10000:10000 \
  -w /opt/data/workspace \
  hermes \
  hermes

Усуненне проблем, якія насправды выйшлі з-пад кантролю

Для адміністрування проблем на даным этапе неабяжна ясная дэфініцыя вхідных дадзеных, адпаведнага адпаведальніка за крок і крэтарыяў выходу пры зміне коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Аддзельнаюце стварэнне кліента ад цыклу паведамленняў, ўпэўніваючыся тым, што прадаўцы можна заменіць без перапісвання машыны стану размовы. Для адміністрування проблем на даным этапе неабяжна ясная дэфініцыя вхідных дадзеных, адпаведнага адпаведальніка за крок і крэтарыяў выходу пры зміне коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце таму, каб гэты этап выступаў як контракт між вхіднымі дадзенымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задайце крэтарыі успеху і не прабоўваце прыймаць часткова завершаныя рэзультаты без паведамлення.

Problem:
kernel does not support overlay fs
Fix:
Install fuse-overlayfs and configure it as the overlay mount program.
Problem:
no space left on device under /var/tmp
Fix:
Move Podman's graphroot if needed AND set TMPDIR.
Changing Podman's --tmpdir is not the same thing.
Problem:
ollama-bootstrap name already in use
Fix:
podman rm -f ollama-bootstrap
Problem:
pasta cannot open /dev/net/tun
Fix:
sudo modprobe tun
If the installed modules don't match the running kernel, reboot.
Problem:
Installed nvidia-container-toolkit on an AMD machine
Fix:
Don't.
Use ollama/ollama:rocm with /dev/kfd and /dev/dri.
Problem:
Added myself to video/render but `groups` still didn't show them
Fix:
Log out and back in.
The existing login session retains its original supplementary groups.
Problem:
Ollama model files and manifest exist, but `ollama list` is empty
Fix:
Check:
podman logs ollamaIf Ollama is using:
OLLAMA_MODELS=/.ollama/modelswhile the volume is mounted under:
 /root/.ollamaset explicitly:
HOME=/root
OLLAMA_MODELS=/root/.ollama/models
Problem:
Hermes → Ollama Python test silently prints nothing
Fix:
If using `python -` with a heredoc, add `podman exec -i`.
Or simply use `python -c`.
Problem:
The Hermes provider menu doesn't contain "local Ollama"
Fix:
Choose:
Custom endpoint (enter URL manually)Then:
http://127.0.0.1:11434/v1
Problem:
Everything works, but Hermes reports an inadequate context window
Fix:
Set OLLAMA_CONTEXT_LENGTH=64000 server-side and configure Hermes for the same value.
Verify the real allocation with:
ollama ps

Чаму вы воліяеце гэта замест простага даверы агенту

Калі працюеце над раздзелам «Чаму вы выбіраеце гэты этап», спачатку запісайце умовы контракту: неабяжлівыя даны, сигнал успеху і тое, што выканаецца у разы ў частковай нявыполненасці. Такі список контроля дапамагае залічыцца з пазнейшымі змянамі ў кодзе. Запісвайце час выканання і вартасьць токена або запиту праза функцыональныя рэзультаты. Відразувая візуабельнасьць вартасцей запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмовай среды ў спяльныя сераверы. Запісвайце ID запиту, ID модэлю і час затрымкі праза кожны вызов. Без такога лёгкага следу періодычныя памылкі прадастоўніка выглядаюць як багі ў самай прыемлівасці.

Prompt restrictions
        ↓
Hermes file write protections
        ↓
Hermes container filesystem
        ↓
Rootless Podman user namespace
        ↓
Host filesystem permissions

Прымечанне пра стрэмкія местныя інструменты AI

Калі працуеце над прымечкам А па тэму швайнаеў стадію, спачатку запісаце кантракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага абякання. Такі список контроля дапамагае залічыць змяны ў кодзе пасля таго. Храніце настройкі за межамі коду аплікацыі. Файлы сераўнавання, хранальнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжнага чытання всіх элементаў. Запісвайце ID запытку, ID модэлю і час адклікання праз кожны вызов. Без такога лёгку, тымчасовых абяканняў прадаўцоў можна спыліць з багамі аплікацыі.

Does Podman see the GPU?
        ↓
Does Ollama see the model?
        ↓
Does Ollama actually use the GPU?
        ↓
Is the context really 64K?
        ↓
Can Hermes reach /v1/models?
        ↓
Can Hermes perform an actual file operation?
        ↓
Can Hermes reach anything it shouldn't?

Апошні рэзультат

Калі працюеце над стадзіяй фінальнага рэзултата, спачатку запісайце «кантракт»: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў захоўвае чыстасць пазнейшых змян у кодзе. Дакументавайце як шлях успеху, так і шлях вяснавання ситуацыі. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткаю продукту, а не пазнейшым дапрацоўкам. Зявляйце логі з ідэнтыфікаторам запиту, ідэнтыфікаторам моделі і часам адліку за кожны вызов. Без такога следу періодычныя памылкі прадастаўця выглядаюць як багі ў прыемніку. Калі працюеце над стадзіяй фінальнага рэзултата, спачатку запісайце «кантракт»: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў захоўвае чыстасць пазнейшых змян у кодзе. Спрыймайце гэтую стадзію як кантракт межа даннімі і перакананымі выходнымі рэзултатамі. Даўце назвы элементам, задайце критэрыяі успеху і адмовіцеся ад тыхнага тылу частковага завершэння.

Local inference                YES
AMD GPU acceleration           YES
Hermes persistent memory       YES
One writable host workspace    YES
Cloud LLM required             NO
Host filesystem exposed        NO
Podman/Docker socket exposed   NO
Normal Internet egress         NO
Entire Obsidian vault exposed  NO

Чэк-ліст для эксплуатацыі

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

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

Запісвайце ідэнтыфікатор запиту, ідэнтыфікатор моделі і час адказу праз кожны вызов. Без такога следу періядычныя абярэння прадаўцоў выглядаюць як багі ў прыемніку.

Залічвайце стан графа простым і з адзінаковым типам дадзеных. Вярнутыя структуры дадзеных маскуюць, який вузел запісаў кожны поле, і спакойваюць працэс пасля перарываў.

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

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

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

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