5.9 KiB
Текстовые aux на локальной Ollama (qwen3:8b) + отключение thinking
Дата: 2026-08-30. Продолжение qwen3-vl-ollama-setup.md: после vision переведены
текстовые auxiliary-задачи (title_generation, web_extract) на локальную qwen3:8b.
Хост: RTX 5060 Ti 16 GB VRAM, Ollama в Docker, main-модель — polza.ai.
Итоговая конфигурация
auxiliary:
vision: # qwen3-vl:8b (мультимодальная)
provider: custom
model: qwen3-vl:8b
base_url: http://localhost:11434/v1
api_key: ollama
title_generation: # qwen3:8b (текстовая)
provider: custom
model: qwen3:8b
base_url: http://localhost:11434/v1
api_key: ollama
extra_body:
think: false
web_extract: # qwen3:8b
provider: custom
model: qwen3:8b
base_url: http://localhost:11434/v1
api_key: ollama
extra_body:
think: false
compression: # остаётся в облаке (нужен 64K+ контекст)
provider: auto
Проверено E2E через from agent.auxiliary_client import call_llm:
- title_generation: "Настройка Ollama: локальные модели" — 11.3 сек (на qwen3-vl было 109 сек)
- web_extract: нормальный пересказ — 7.5 сек
- compression резолвится на auto → polza, не тронута
Почему qwen3-vl НЕ годится для текстовых aux
На простой вопрос ("какой сегодня день недели?") qwen3-vl:8b сгенерила 3778 токенов (eval_ms 54 сек) и отвечала 64 сек. reasoning=false в ответе, но content огромный — модель "растекается". Для быстрых aux (заголовки, извлечение) непригодна.
Ключевая находка: отключение thinking у qwen3 в Ollama
ВАЖНО (2026-09-04, Ollama 0.22.1): think: false через OpenAI /v1/chat/completions НЕ работает
для qwen3 — модель все равно думает, content пуст, finish: length (reasoning съел лимит).
Через нативный /api/chat + think: false думание выключается корректно (но Hermes ходит через /v1).
Решение для Hermes/aux — собрать тег с вырезанным reasoning (никакие опции не помогают):
# 1. Получить modelfile (docker):
docker exec ollama ollama show qwen3:8b # или GET /api/show -> поле "modelfile"
# 2. В TEMPLATE заменить все $.IsThinkSet -> false (ветки thinking навсегда выключены)
# 3. Собрать (переиспользует blob, без скачивания):
docker cp /tmp/qwen3-nothink-Modelfile ollama:/root/
docker exec ollama ollama create qwen3:8b-nothink -f /root/qwen3-nothink-Modelfile
Ключ: $.IsThinkSet управляет думанием (вставляет /think//no_think в user msg и thinking{{ .Thinking }}
в assistant). При false модель просто отвечает. Проверено: qwen3:8b-nothink через /v1 отвечает
мгновенно (finish: stop), E2E через call_llm(task=...) в Hermes — корректный content
(title_generation, web_extract). Оригинальный qwen3:8b не трогаем (откат — 1 строка в config).
Затем в config.yaml (вручную, т.к. hermes config set не правит dict extra_body; порядок полей в
файле: provider, model, base_url, api_key, timeout, extra_body): model для
auxiliary.title_generation и auxiliary.web_extract := qwen3:8b-nothink.
ОПРОВЕРГНУТЫЕ способы (не работают — модель все равно генерит reasoning первыми токенами):
enable_thinking: falseв options (/api/chat) — таймаутenable_thinking: falseв extra_body (/v1/chat/completions) — content пустой/no_thinkв начале user-сообщения — reasoning=True, content пустой- system prompt "don't think" — не помогает
- корневой
think: falseв /v1 — НЕ работает в Ollama 0.22 (работает только native /api/chat)
Симптом при неотключённом thinking: content = '', usage.completion_tokens == max_tokens
(весь бюджет съело reasoning), время ответа большое. Диагностика: смотреть поле
reasoning/reasoning_content в ответе.
Полный список auxiliary-задач (из config.yaml)
vision, web_extract, compression, skills_hub, approval, mcp, title_generation, triage_specifier, kanban_decomposer, profile_describer, curator.
session_search — НЕ auxiliary-задача: hermes config set auxiliary.session_search.provider
даёт warning "not a recognized config key" (в конфиге у неё только extra_body/max_concurrency/
timeout). Не настраивать как auxiliary.
VRAM (обе модели одновременно)
qwen3:8b 6.13 GB + qwen3-vl:8b 7.19 GB + bge-m3 1.21 GB ≈ 14.5 GB — влезают в 16 GB, переключение vision↔текст без выгрузки (keep_alive по умолчанию). При нехватке Ollama выгружает LRU-модель и перезагружает при следующем вызове (+5-15 сек).
Нюанс hermes config set
hermes config set auxiliary.<task>.extra_body не пройдёт (extra_body — dict, не скаляр) —
править YAML вручную (python+yaml.safe_dump). Остальные ключи (provider/model/base_url/
api_key) ставятся через hermes config set с --force если ключ не в schema.