Назначение. Эта часть не требует предыдущего практикума. Она ведёт от чистой Windows- или macOS-системы до локального голосового и экранного агента, а затем показывает три взаимозаменяемых маршрута LLM: прямой Ollama, Hermes API Server или минимальный local-agent-gateway.
1. Что именно собирается
Итоговая система состоит из независимых компонентов. Их нельзя называть одним словом «агент»: у каждого своя роль.
| Компонент | Роль | Где работает | Обязателен |
|---|---|---|---|
| Codex | Инженер: читает репозиторий, планирует, меняет файлы, запускает проверки | Desktop/CLI | Нет, если используется Hermes как инженер |
| Hermes Agent | Инженер и/или OpenAI-совместимый runtime с инструментами | CLI/Desktop/API server | Только для Hermes-маршрута |
| Open-LLM-VTuber | Интерфейс, Live2D, диалог, WebSocket, ASR/TTS orchestration | Python-сервер + браузер/Electron | Да |
| Ollama | Локально запускает LLM/VLM | 127.0.0.1:11434 | Да для локального маршрута |
| Sherpa-ONNX | Локально распознаёт микрофон | В процессе VTuber | Для voice baseline |
| pyttsx3 | Локально озвучивает ответ системным голосом | В процессе VTuber | Для локального TTS |
| Local gateway | Bearer auth, allowlists, request ID, безопасные ошибки и streaming | 127.0.0.1:8642 | Один из gateway-маршрутов |
| OpenRouter | Необязательный облачный провайдер моделей | Интернет/API | Нет |
Схема потоков
Микрофон -> Sherpa-ONNX ASR -----------------------------+Скриншот/экран -> Open-LLM-VTuber -> выбранный LLM endpoint | v ответ -> pyttsx3 -> динамикиМаршрут A: Open-LLM-VTuber -> Ollama:11434Маршрут B: Open-LLM-VTuber -> Hermes:8642 -> выбранная Hermes-модельМаршрут C: Open-LLM-VTuber -> local-agent-gateway:8642 -> Ollama:11434
Главное различие. Codex не является постоянным локальным HTTP gateway. Он может создать, настроить и проверить gateway, но Open-LLM-VTuber не может отправлять runtime-запросы непосредственно в текущий чат Codex.
2. Как выбрать маршрут
| Нужен результат | Выбор | Почему |
|---|---|---|
| Самый простой полностью локальный VTuber | Прямой Ollama | Меньше процессов и конфигурации |
| Hermes, память и инструменты внутри runtime | Hermes API Server | OpenAI-compatible API и полный toolset Hermes |
| Минимальный контролируемый шлюз к Ollama | local-agent-gateway | Узкий код, allowlists, тесты и нейтральные ошибки |
| Быстро менять облачные модели | Hermes + OpenRouter или прямой OpenRouter | Один API, но данные уходят во внешний сервис |
Рекомендованный учебный маршрут. Сначала докажите прямой Ollama baseline. Затем добавьте ровно один gateway. Так ошибка всегда локализуется между уже проверенными границами.
3. Что человек всё равно делает сам
- Подтверждает установщики и системные диалоги Windows/macOS.
- Проходит вход в ChatGPT/Codex, GitHub, Hermes/Nous Portal или OpenRouter.
- Даёт браузеру доступ к микрофону, камере или демонстрации экрана.
- Произносит тестовую фразу и подтверждает, был ли слышен звук.
- Решает, публиковать ли ветку и создавать ли draft PR.
- Никогда не вставляет секрет в чат: вводит его локально в защищённый файл или системный prompt.
Почему AI не может сделать буквально всё. Авторизация, выбор устройства ввода, прослушивание динамиков и выдача GUI-разрешений являются границами человеческого контроля. Хороший агент доходит до такой границы, сообщает одну точную операцию и после неё продолжает без повторного объяснения.
4. Требования к компьютеру и каталогу
| Параметр | Windows | macOS |
|---|---|---|
| ОС | Windows 10/11 x64; PowerShell 7 желательно | macOS 13+ желательно; Intel или Apple Silicon |
| Терминал | Windows Terminal + PowerShell 7 | Terminal/iTerm + zsh |
| Рабочая папка | C:\dev\agent-lab | ~/dev/agent-lab |
| Путь | ASCII, без OneDrive и длинных имён | Без iCloud Drive и сложных пробелов |
| RAM | 16 ГБ минимум для 4B VLM; больше лучше | 16 ГБ unified memory минимум; больше лучше |
| Свободное место | Не менее 15-25 ГБ | Не менее 15-25 ГБ |
5. Предварительная установка
Устанавливайте системные компоненты вручную. AI сначала проверяет наличие и только затем предлагает отсутствующее. Не запускайте одновременно несколько package manager-команд.
Установка базовых инструментов
Windows PowerShell 7
winget install --id Microsoft.PowerShell --source wingetwinget install --id Git.Git -ewinget install --id GitHub.cli -ewinget install --id Gyan.FFmpeg -ewinget install --id astral-sh.uv -e# Ollama: установите официальное Windows-приложение или:winget install --id Ollama.Ollama -e# После установки закройте и заново откройте Terminal.
macOS Terminal (zsh)
# Установите Homebrew с brew.sh, если его ещё нет.brew install git gh ffmpeg uvbrew install --cask ollama# Запустите Ollama из Applications один раз.exec zsh
Проверка
Windows PowerShell 7
pwsh --versiongit --versiongh --versionuv --versionffmpeg -versionollama --versiongh auth status
macOS Terminal (zsh)
zsh --versiongit --versiongh --versionuv --versionffmpeg -versionollama --versiongh auth status
Нормальный результат. Все version-команды завершаются с кодом 0. `gh auth status` может требовать `gh auth login`; токен нельзя копировать в отчёт.
6. Установка и запуск Codex
Codex используется здесь как инженерный агент. Выбирайте Desktop-приложение, если важны изображения и удобные разрешения, либо CLI для воспроизводимого терминального процесса.
Первый запуск
Windows PowerShell 7
# Рекомендуется официальный Codex Desktop installer.# Для CLI используйте официальный установщик, показанный приложением/документацией.codex --versionSet-Location C:\dev\agent-labcodex
macOS Terminal (zsh)
# Установите Codex Desktop для macOS либо официальный CLI.codex --versionmkdir -p ~/dev/agent-labcd ~/dev/agent-labcodex
Windows sandbox. Если CLI сообщает, что `codex-windows-sandbox-setup.exe` не найден, сначала обновите Codex и перезапустите терминал. Не обходите проблему постоянным полным разрешением. Для разовой read-only команды допустимо выбрать однократное выполнение вне сломанной sandbox только после проверки команды и cwd.
macOS permissions. Первый доступ Codex к каталогу Desktop/Documents, браузеру или автоматизации может вызвать системный диалог Privacy & Security. Разрешайте только нужный каталог или действие; Full Disk Access для практикума не требуется.
PROMPT: безопасная проверка Codex
Работай как инженер в режиме контролируемого агента на Windows.
Текущая рабочая папка: C:\dev\agent-lab. Не предполагай, что команды другой ОС работают здесь.
Перед изменением файлов:
1. Покажи карту релевантной части репозитория и входные точки.
2. Сформулируй одну атомарную цель.
3. Перечисли файлы чтения и изменения.
4. Назови риски, предположения и реальные команды проверки.
5. Сначала покажи план. Не меняй файлы до моего явного «одобряю».
Ограничения:
- не используй sudo; не выполняй rm -rf, git reset --hard, git clean -fd и force push;
- не изменяй main и upstream без отдельного явного разрешения;
- не читай и не печатай .env, токены, SSH-ключи, cookies, keychain и полный conf.yaml;
- не трогай файлы вне текущего проекта;
- не ставь глобальные пакеты без отдельного обоснования;
- не скрывай ошибки и не заменяй тест утверждением;
- после изменения покажи краткий diff, реальный минимальный тест и git status --short;
- если требуется расширение scope, остановись и запроси новый атомарный шаг.
Классифицируй ошибки как environment, configuration, dependency, source или test limitation.
Не задавай вопросов, ответ на которые можно безопасно получить read-only проверкой. Останавливайся
только перед секретом, GUI-разрешением ОС, внешней публикацией или расширением scope.
Текущая задача: только инвентаризировать среду. Выполни Get-Location и версии git, gh, uv, ollama. Ничего не изменяй. Не печатай токены.
PROMPT: тот же шаг на macOS
Работай как инженер в режиме контролируемого агента на macOS.
Текущая рабочая папка: ~/dev/agent-lab. Не предполагай, что команды другой ОС работают здесь.
Перед изменением файлов:
1. Покажи карту релевантной части репозитория и входные точки.
2. Сформулируй одну атомарную цель.
3. Перечисли файлы чтения и изменения.
4. Назови риски, предположения и реальные команды проверки.
5. Сначала покажи план. Не меняй файлы до моего явного «одобряю».
Ограничения:
- не используй sudo; не выполняй rm -rf, git reset --hard, git clean -fd и force push;
- не изменяй main и upstream без отдельного явного разрешения;
- не читай и не печатай .env, токены, SSH-ключи, cookies, keychain и полный conf.yaml;
- не трогай файлы вне текущего проекта;
- не ставь глобальные пакеты без отдельного обоснования;
- не скрывай ошибки и не заменяй тест утверждением;
- после изменения покажи краткий diff, реальный минимальный тест и git status --short;
- если требуется расширение scope, остановись и запроси новый атомарный шаг.
Классифицируй ошибки как environment, configuration, dependency, source или test limitation.
Не задавай вопросов, ответ на которые можно безопасно получить read-only проверкой. Останавливайся
только перед секретом, GUI-разрешением ОС, внешней публикацией или расширением scope.
Текущая задача: только инвентаризировать среду. Выполни pwd и версии git, gh, uv, ollama. Ничего не изменяй. Не читай Keychain.
7. Установка и настройка Hermes Agent
Hermes может играть две роли: инженерный CLI и постоянный OpenAI-compatible API Server. Не смешивайте их в одном объяснении: интерфейс `hermes chat` не является endpoint, а `hermes gateway` является.
Установка Hermes
Windows PowerShell 7
iex (irm https://hermes-agent.nousresearch.com/install.ps1)# Откройте новый PowerShellhermes --versionhermes doctorhermes setup --portal
macOS Terminal (zsh)
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bashexec zshhermes --versionhermes doctorhermes setup --portal
Если Nous Portal не используется, выполните `hermes model` и интерактивно выберите OpenRouter, Ollama или другой провайдер. Ключ вводится только в локальный secret prompt/конфигурацию Hermes.
Разделение профилей
Windows PowerShell 7
hermes profile create olv-runtimeolv-runtime setupolv-runtime tools# Для разработки отдельно:hermes profile create codercoder setup
macOS Terminal (zsh)
hermes profile create olv-runtimeolv-runtime setupolv-runtime tools# Для разработки отдельно:hermes profile create codercoder setup
Ограничение toolset. API Server Hermes даёт доступ к инструментам агента. Для профиля `olv-runtime` отключите terminal, file, browser, code_execution, delegation и cronjob, если VTuber не должен управлять компьютером. Профиль разделяет состояние, но не является filesystem sandbox.
Для включения Hermes API Server задайте в конфигурации профиля: enabled=true, host=127.0.0.1, port=8642 и уникальный bearer key. Предпочитайте `hermes dashboard` или `hermes config`; не публикуйте `.env` профиля.
Схема параметров — не вставляйте реальный ключ в документ или чат
API_SERVER_ENABLED=trueAPI_SERVER_HOST=127.0.0.1API_SERVER_PORT=8642API_SERVER_KEY=<UNIQUE_LOCAL_KEY># CORS не задавайте, если браузер не вызывает Hermes напрямую.
Запуск Hermes API Server
Windows PowerShell 7
olv-runtime gateway# В другом окне:Invoke-RestMethod http://127.0.0.1:8642/health
macOS Terminal (zsh)
olv-runtime gateway# В другом окне:curl -fsS http://127.0.0.1:8642/health
PROMPT: настроить Hermes как ограниченный runtime
Проведи настройку отдельного Hermes-профиля `olv-runtime` как loopback-only OpenAI-compatible API Server.
Сначала read-only проверь текущую версию Hermes и актуальный синтаксис через `hermes --help` и `hermes gateway --help`.
Не читай и не печатай существующие secret files. Не генерируй ключ в сообщении. Попроси меня один раз ввести новый локальный bearer key через безопасный локальный ввод.
Настрой host 127.0.0.1, port 8642, обязательную bearer-аутентификацию и минимальный toolset без terminal, file, browser, code_execution, delegation и cronjob.
Не ослабляй CORS. До изменения покажи точные параметры и план. После подтверждения запусти gateway, проверь /health, отрицательный запрос без auth и один обезличенный chat-completions smoke test. В отчёте покажи только статусы, request id и redacted key length.
8. OpenRouter: только если нужен облачный маршрут
- Создайте ключ на сайте OpenRouter и сохраните его только в локальном secret store выбранного клиента.
- Проверьте актуальный model id перед каждым экспериментом: бесплатные модели и лимиты меняются.
- Не отправляйте закрытый код, `.env`, голосовые записи и несокращённые скриншоты.
- В Hermes выберите OpenRouter через `hermes model`; не подставляйте OPENROUTER_API_KEY в командную строку.
- В Codex OpenRouter не требуется для работы самого Codex; это отдельный runtime для приложения.
Граница данных. Облачная модель получает содержимое prompt и переданные изображения. Локальный Ollama не отправляет inference-запрос в облако, но первоначальная загрузка модели требует сети.
9. Создание рабочей папки и получение Open-LLM-VTuber
Клонирование
Windows PowerShell 7
New-Item -ItemType Directory -Force C:\dev\agent-lab | Out-NullSet-Location C:\dev\agent-labgit clone --recursive https://github.com/Open-LLM-VTuber/Open-LLM-VTuber.gitSet-Location .\Open-LLM-VTubergit submodule statusgit status --short
macOS Terminal (zsh)
mkdir -p ~/dev/agent-labcd ~/dev/agent-labgit clone --recursive https://github.com/Open-LLM-VTuber/Open-LLM-VTuber.gitcd Open-LLM-VTubergit submodule statusgit status --short
Не используйте Code → Download ZIP. Frontend является Git submodule. Обычный ZIP может дать `Detail Not Found` и лишить проект корректной Git-истории.
Зависимости
Windows PowerShell 7
uv sync
macOS Terminal (zsh)
uv sync
Первый запуск может скачать ASR-модели. Не классифицируйте длительное отсутствие вывода как зависание, пока процесс жив и сеть/диск активны.
10. Воспроизведение upstream baseline
Запуск без изменения source
Windows PowerShell 7
Set-Location C:\dev\agent-lab\Open-LLM-VTuberuv syncuv run run_server.py --verbose
macOS Terminal (zsh)
cd ~/dev/agent-lab/Open-LLM-VTuberuv syncuv run run_server.py --verbose
- Успех: сервер слушает `localhost:12393`, браузер получает HTTP 200 и source tree не изменён.
- Если `conf.yaml` отсутствует, первый запуск обычно создаёт его; остановите сервер Ctrl+C и проверьте файл по имени, не печатая содержимое.
- Если uv cache недоступен только агенту, повторите ту же команду с одноразовым разрешением вне sandbox. Это environment, а не dependency.
- Если процесс жив, но порт не слушает, сохраните время ожидания и классифицируйте как environment до появления traceback.
11. Ollama и qwen3-vl:4b
Модель и health check
Windows PowerShell 7
ollama listollama pull qwen3-vl:4bInvoke-RestMethod http://127.0.0.1:11434/api/tags | Select-Object -ExpandProperty models
macOS Terminal (zsh)
ollama listollama pull qwen3-vl:4bcurl -fsS http://127.0.0.1:11434/api/tags
Порт занят. На Windows Ollama tray app и на macOS Ollama.app уже могут слушать 11434. Не запускайте второй `ollama serve`, если health check работает.
Текстовый smoke test
Windows PowerShell 7
$body = @{model='qwen3-vl:4b'; messages=@(@{role='user';content='Ответь одним словом: готово'}); stream=$false} | ConvertTo-Json -Depth 5Invoke-RestMethod -Method Post -Uri http://127.0.0.1:11434/v1/chat/completions -ContentType 'application/json' -Body $body
macOS Terminal (zsh)
curl -sS http://127.0.0.1:11434/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{"model":"qwen3-vl:4b","messages":[{"role":"user","content":"Ответь одним словом: готово"}],"stream":false}'
12. Безопасное изменение conf.yaml
Версия важнее примера. Не заменяйте весь `conf.yaml` фрагментом из другого релиза. Сначала найдите существующие ключи и их реальные отступы, затем меняйте только значения.
Для прямого Ollama выберите существующий `ollama_llm`. Для gateway выберите существующий `openai_compatible_llm`. В релизе 1.2.1 путь начинается с `character_config`, а не `system_config`.
| Маршрут | llm_provider | base_url | model/key |
|---|---|---|---|
| Прямой Ollama | ollama_llm | http://127.0.0.1:11434 | qwen3-vl:4b; key не нужен |
| Hermes | openai_compatible_llm | http://127.0.0.1:8642/v1 | обычно hermes-agent + API_SERVER_KEY |
| local gateway | openai_compatible_llm | http://127.0.0.1:8642/v1 | qwen3-vl:4b + GATEWAY_BEARER_TOKEN |
Backup и синтаксическая проверка
Windows PowerShell 7
Copy-Item .\conf.yaml ".\conf.yaml.before-setup.$(Get-Date -Format yyyyMMdd-HHmmss)"# Откройте файл в локальном редакторе, не выводите его в терминал.uv run python -c "from pathlib import Path; import yaml; yaml.safe_load(Path('conf.yaml').read_text(encoding='utf-8')); print('YAML_OK')
macOS Terminal (zsh)
cp conf.yaml "conf.yaml.before-setup.$(date +%Y%m%d-%H%M%S)"# Откройте файл в локальном редакторе, не выводите его в терминал.uv run python -c "from pathlib import Path; import yaml; yaml.safe_load(Path('conf.yaml').read_text()); print('YAML_OK')
Реальная ошибка, которую нужно узнавать. Если `basic_memory_agent` и `llm_provider` имеют одинаковый отступ, provider становится соседним ключом и Pydantic/YAML падает. Исправляйте только отступ конкретной строки, затем полностью разбирайте YAML.
PROMPT: точечно настроить conf.yaml
Работай только с локальным игнорируемым conf.yaml Open-LLM-VTuber. Не печатай весь файл и секреты.
Сначала разберись с реальной YAML-структурой программно и покажи существующие пути для basic_memory_agent.llm_provider, openai_compatible_llm.base_url, llm_api_key и model. Не полагайся на путь из моего текста, если схема отличается.
Атомарная цель: настроить выбранный мной маршрут, изменив минимальное число scalar values. Создай timestamped backup. До изменения покажи безопасный redacted diff и дождись подтверждения. После изменения полностью распарсь YAML и проверь точные пути, показывая ключ как <redacted> и только его длину. Source, templates и dependencies не меняй.
13. Локальный русский ASR
Выберите существующий backend `sherpa_onnx_asr`. Модели и допустимые значения определяются текущей версией проекта; не придумывайте имена ключей.
- В браузере разрешите микрофон только для localhost:12393.
- Сначала используйте наушники либо выключите динамики, чтобы доказать отсутствие feedback loop.
- Произнесите короткую фразу с уникальным числом, например «Проверка локального распознавания 4827».
- В evidence сохраняйте transcript, но не сохраняйте исходное аудио без необходимости.
- Cloud ASR keys и endpoints должны отсутствовать в активном пути.
Критерий. Уникальное число и смысл русской фразы распознаны приемлемо; в логах нет cloud request. Ошибки выбора микрофона — environment, неверный backend — configuration.
14. Локальный TTS через pyttsx3
Список голосов зависит от ОС. На Windows в нашем baseline был `Microsoft Irina Desktop`. На macOS сначала установите русский системный голос в System Settings → Accessibility → Spoken Content/System Voice, затем выберите имя, реально выведенное pyttsx3.
Список голосов без персональных путей
Windows PowerShell 7
uv run python -c "import pyttsx3; e=pyttsx3.init(); [print(i, v.name, getattr(v,'languages',[])) for i,v in enumerate(e.getProperty('voices'),1)]
macOS Terminal (zsh)
uv run python -c "import pyttsx3; e=pyttsx3.init(); [print(i, v.name, getattr(v,'languages',[])) for i,v in enumerate(e.getProperty('voices'),1)]
Изолированный TTS smoke test
Windows PowerShell 7
uv run python -c "import pyttsx3; e=pyttsx3.init(); v=next(x for x in e.getProperty('voices') if x.name=='Microsoft Irina Desktop'); e.setProperty('voice',v.id); e.say('Проверка локального синтеза 4827'); e.runAndWait(); print('TTS_COMPLETED')
macOS Terminal (zsh)
# Замените <RUSSIAN_VOICE_NAME> только именем из предыдущего вывода.uv run python -c "import pyttsx3; e=pyttsx3.init(); v=next(x for x in e.getProperty('voices') if x.name=='<RUSSIAN_VOICE_NAME>'); e.setProperty('voice',v.id); e.say('Проверка локального синтеза 4827'); e.runAndWait(); print('TTS_COMPLETED')
Неинтерактивная сессия. COMError на Windows или отсутствие слышимого звука в sandbox/SSH не доказывает поломку pyttsx3. Повторите тест в обычном пользовательском Terminal с доступом к аудиосессии. На macOS проверьте выбранный output device и системный голос.
15. Минимальный local-agent-gateway
Этот маршрут воспроизводит реализованный нами gateway: loopback-only FastAPI, bearer auth, backend/model allowlists, request ID, ограничение размера, нейтральные 4xx/502, safe logging и streaming passthrough.
Получение и тесты
Windows PowerShell 7
Set-Location C:\dev\agent-labgit clone --branch agent/local-gateway https://github.com/aka-gst/local-agent-gateway.gitSet-Location .\local-agent-gatewayuv sync --extra testCopy-Item .\.env.example .\.env# Заполните .env локально, не печатая его.uv run pytest -q
macOS Terminal (zsh)
cd ~/dev/agent-labgit clone --branch agent/local-gateway https://github.com/aka-gst/local-agent-gateway.gitcd local-agent-gatewayuv sync --extra testcp .env.example .env# Заполните .env локально, не печатая его.uv run pytest -q
Имена параметров .env — реальный token не выводить
GATEWAY_BEARER_TOKEN=<32 RANDOM BYTES, BASE64URL>GATEWAY_ALLOWED_BACKENDS=ollamaGATEWAY_ALLOWED_MODELS=qwen3-vl:4bGATEWAY_DEFAULT_BACKEND=ollamaGATEWAY_OLLAMA_BASE_URL=http://127.0.0.1:11434/v1GATEWAY_UPSTREAM_TIMEOUT_SECONDS=120GATEWAY_MAX_REQUEST_BYTES=1048576
Запуск gateway
Windows PowerShell 7
uv run local-agent-gateway# Отдельное окно:Invoke-RestMethod http://127.0.0.1:8642/health
macOS Terminal (zsh)
uv run local-agent-gateway# Отдельное окно:curl -fsS http://127.0.0.1:8642/health
Почему timeout 120. При первом запросе qwen3-vl:4b может загружаться в память дольше 30 секунд. Сначала измерьте прямой Ollama-вызов; только затем увеличивайте timeout. `upstream unavailable` при рабочем Ollama часто является timeout, а не ошибкой модели.
Streaming. Open-LLM-VTuber фактически отправляет `stream=true`. Gateway должен передавать поток без накопления всего ответа, не пересылать клиентский Authorization в Ollama и закрывать upstream при disconnect.
16. Порядок запуска четырёх окон
| Окно | Каталог | Процесс | Проверка |
|---|---|---|---|
| 1 | любой | Ollama.app/tray или ollama serve | 11434 /api/tags |
| 2 | local-agent-gateway или Hermes profile | gateway | 8642 /health |
| 3 | Open-LLM-VTuber | uv run run_server.py --verbose | 12393 HTTP 200 |
| 4 | любой | health/smoke commands | статусы и request id |
Проверка портов
Windows PowerShell 7
Get-NetTCPConnection -State Listen -LocalPort 11434,8642,12393 -ErrorAction SilentlyContinue | Select-Object LocalAddress,LocalPort,OwningProcess
macOS Terminal (zsh)
lsof -nP -iTCP:11434 -iTCP:8642 -iTCP:12393 -sTCP:LISTEN
17. End-to-end smoke tests
- Text-only: в VTuber отправьте «Ответь одним словом: готово». Должен появиться ответ, gateway — HTTP 200/request id.
- Voice: включите microphone capture и произнесите фразу с новым уникальным числом. Сохраните только transcript и PASS/FAIL.
- TTS: после одного ответа подтвердите слухом локальное воспроизведение. Затем выключите микрофон.
- Loop control: на 15 секунд включите микрофон при динамиках и убедитесь, что новых бесконечных циклов нет; при риске используйте наушники.
- Vision: используйте штатную кнопку camera/screen share или file input. Если `document.querySelectorAll('input[type=file]').length` равно 0, не имитируйте upload: отметьте capability NOT RUN.
Чего не доказывает UI-ответ. Сам ответ не доказывает маршрут. Нужны request id/HTTP 200 gateway и лог выбранного upstream без prompt/response содержимого.
18. Остановка и откат
- Ctrl+C в окне Open-LLM-VTuber; дождитесь shutdown complete.
- Ctrl+C в окне gateway; проверьте освобождение 8642.
- Ollama tray/app можно оставить работающим; `ollama serve` остановите Ctrl+C.
- Восстанавливайте conf.yaml только из известного timestamped backup при остановленном VTuber.
- Не завершайте неизвестный PID. Сначала определите приложение-владельца порта.
19. Диагностика по симптомам
| Симптом | Класс | Минимальная проверка | Действие |
|---|---|---|---|
| uv cache Access denied | environment | uv cache dir; повтор той же команды вне sandbox | Однократное разрешение или локальный cache внутри workspace |
| 11434 address in use | environment | listener + /api/tags | Не запускать второй Ollama |
| YAML ParserError | configuration | полный safe_load + строки вокруг ошибки | Исправить только отступ/скаляр |
| Pydantic literal error | configuration | список допустимых backend из ошибки/кода | Использовать точный идентификатор |
| Gateway 401 | configuration | сравнение token match без вывода | Одинаковый token и restart |
| Gateway 400 model not allowed | configuration | ollama list + allowlist | Точный model tag |
| Gateway 502 unavailable | environment/config | прямой Ollama + время | Запустить Ollama или увеличить timeout обоснованно |
| Chat endpoint error | configuration | base_url, health, model, request id | Исправить первую упавшую границу |
| pyttsx3 COMError | environment | интерактивный пользовательский терминал | Повторить вне sandbox |
| Нет file input | capability | DOM count и UI controls | NOT RUN; использовать camera/screen share |
| Звук не слышен | environment/config | системный output + изолированный TTS | Выбрать голос/output; не менять source |
| Feedback loop | configuration/environment | VAD, mic, 15 секунд | Наушники; настройка VAD, не повышать громкость |
20. Один master prompt для AI
Этот prompt рассчитан на уже установленного Codex или Hermes. Он не отменяет системные диалоги и подтверждения внешних публикаций, но минимизирует уточняющие вопросы.
MASTER PROMPT — замените только ОС и маршрут
Я хочу с нуля настроить локальную связку Open-LLM-VTuber + Ollama qwen3-vl:4b + sherpa_onnx_asr + pyttsx3_tts на <Windows|macOS>.
LLM-маршрут: <прямой Ollama|Hermes API Server|local-agent-gateway>.
Работай как контролируемый инженер. Самостоятельно выполняй все безопасные read-only проверки и не задавай вопросы, ответ на которые виден в документации, --help, репозитории или локальном состоянии. Перед каждой группой изменений покажи атомарную цель, точные файлы, redacted diff, риски и команды теста; жди моего «одобряю». После одобрения заверши группу целиком.
Не используй sudo, destructive Git, force push, изменение main/upstream, глобальные пакеты без обоснования. Не читай и не печатай .env, conf.yaml целиком, token, SSH, cookies или keychain. Секрет запрашивай только через безопасный локальный ввод и показывай лишь match/length. Не меняй source Open-LLM-VTuber, templates или dependencies, пока не доказан source defect и я отдельно не расширил scope.
Порядок:
1. Проверь ОС, shell, cwd, git, gh, uv, ffmpeg, ollama и выбранного агента. Классифицируй проблемы.
2. Получи Open-LLM-VTuber recursive clone в коротком несинхронизируемом пути; прочитай README/CLAUDE/pyproject/quick-start; покажи карту.
3. Выполни upstream baseline: uv sync, verbose server, HTTP 200, shutdown, source-tree unchanged.
4. Проверь Ollama, скачай qwen3-vl:4b только после подтверждения, выполни text-only smoke.
5. Создай backup conf.yaml и настрой минимальные реальные YAML paths выбранного маршрута; не заменяй файл шаблоном. Полностью распарсь YAML.
6. Настрой sherpa_onnx_asr. Получи список pyttsx3 voices без путей; выбери доступный русский системный голос, на Windows предпочти Microsoft Irina Desktop, на macOS используй фактически установленный русский голос.
7. Если выбран gateway: настрой loopback 127.0.0.1:8642, bearer auth, allowlists, request id, безопасные ошибки и streaming. Для Hermes отключи опасные toolsets runtime-профиля. Для local-agent-gateway запусти pytest.
8. Запусти компоненты в правильном порядке и выполни health checks.
9. Остановись для моих ручных действий только четыре раза: browser login, secret input, microphone/screen permission и подтверждение слышимого звука.
10. Проведи text, voice, TTS, 15-second loop и доступный vision smoke. Не выдавай NOT RUN за PASS.
11. Покажи sanitised evidence: версии, backend names, request id/status, transcript тестовой фразы, TTS user-confirmed, loop result, source-tree status. Не показывай полный prompt/response.
12. Останови сервисы в обратном порядке и предложи ровно один следующий шаг.
Если команда одной ОС не подходит, сначала переведи её в native PowerShell 7 или zsh. Bash heredoc `<<'PY'` не используй в PowerShell. При любой ошибке покажи реальный вывод и не продолжай к следующей границе, пока текущая не доказана.
21. Формат итогового отчёта
Шаблон evidence
ОС: Windows / macOSМаршрут: direct Ollama / Hermes / local-agent-gatewayOllama model: <exact tag>ASR: sherpa_onnx_asr — PASS / FAIL / NOT PROVENTTS: pyttsx3_tts, voice=<name> — PASS / FAIL / NOT PROVENGateway: HTTP status=<code>, request_id=<sanitized>Vision: PASS / FAIL / NOT RUN; method=<screen/camera/file>Loop control: PASS / FAIL / NOT RUN; observation=15 sSource tree: unchanged / known diffSecrets printed: noНе доказано: <ограничения>Следующий атомарный шаг: <ровно один>
22. Официальные источники и проверка актуальности
- Codex: https://developers.openai.com/codex/
- Codex Windows sandbox: https://developers.openai.com/codex/windows/
- Hermes Agent — установка, Portal и CLI: https://hermes-agent.nousresearch.com/docs/
- Hermes API Server: https://hermes-agent.nousresearch.com/docs/user-guide/features/api-server/
- Ollama — загрузка для Windows и macOS: https://ollama.com/download
- Ollama API: https://docs.ollama.com/api
- Open-LLM-VTuber Quick Start: https://docs.llmvtuber.com/en/docs/quick-start/
- Open-LLM-VTuber LLM configuration: https://docs.llmvtuber.com/en/docs/user-guide/backend/llm/
- OpenRouter API: https://openrouter.ai/docs/api-reference/overview
- uv: https://docs.astral.sh/uv/
- GitHub CLI: https://cli.github.com/manual/
Правило версий. Команды этого руководства сверены с локальным Open-LLM-VTuber 1.2.1 и окружением практикума. Если точный YAML path или CLI-флаг отличается, сначала прочитайте локальные README/CLAUDE/pyproject и --help, затем меняйте только фактически существующий ключ.