Работаю в OpenChamber (GUI для OpenCode) с DeepSeek V4, GLM 5.1 и 5.2. Хорошие модели, но текстовые. Картинки не воспринимают от слова совсем. Скриншот с ошибкой, референс дизайна: для агента это пустота. Перепечатывать вручную занимало больше времени, чем сама задача.
Менять на мультимодальные не вариант: Vision не делает модель сильнее в коде и рассуждениях, а агентские инструкции я уже заточил под GLM и DeepSeek. Видел решения для Pi, но переходить с OpenCode не готов. Поиск привёл к плагину opencode-eyesight, и в процессе настройки он оброс идеями. Так появился Vision Bridge.
Как это устроено.
Два слоя, каждый делает своё:
1️⃣ Фоновое описание.
Плагин opencode-eyesight перехватывает картинку на входе в модель: отправляет во vision-модель, получает текстовое описание, подменяет оригинал. Модель видит только [Image: ...]. Оригинал сохраняется в истории контекста. Процесс полностью автоматический.
2️⃣ Точечный анализ.
MCP-сервер describe_image: когда автоописания мало, агент сам вызывает инструмент describe_image(image_path, prompt). Передаёт конкретный вопрос: «прочитай текст ошибки», «какая кнопка активна», «сравни два кадра». Сервер на FastMCP шлёт картинку как base64 на OpenAI-совместимый эндпоинт /v1/chat/completions и возвращает текстовый ответ. Провайдер-агностичный, OpenRouter или neuraldeep, переключается четырьмя env-переменными.
Почему два слоя?
Плагин даёт общий обзор, но не отвечает на конкретные вопросы по картинке. Без второго слоя агент додумывает детали и галлюцинирует. Дисциплина простая: автоописание даёт базовое понимание, describe_image даёт точный ответ. Агент знает разницу и всегда указывает источник.
Модели и провайдеры.
• OpenRouter: Qwen3 VL 30B (instruct, не thinking). У OpenRouter 6 провайдеров на эту модель. Выбран Alibaba как самый дешёвый ($0.13/$0.52 за Mtok) и быстрый. Закреплён жёстко через provider.order, allow_fallbacks: false.
• Neuraldeep: Qwen3.6 35B. Бесплатно. Альтернатива для тех, у кого OpenRouter блокирует аккаунты (РФ, санкции ЕС).
Инъекция в системный промпт.
Агенту нужна инструкция: как пользоваться мостом и когда звать describe_image. В репо готовые блоки с учётом архитектуры внимания модели:
• GLM: sparse attention (top-k), блок в начало промпта + дублирующий якорь в конец
• DeepSeek Pro: clipped sparse attention, recency-эффект. Краткий блок + якорь в самый конец
• DeepSeek Flash: только якорь, полные body-блоки её дестабилизируют
• Generic: для любой другой модели (Kimi, GPT-OSS, и др.)
MCP-сервер на Python, конфиги и пошаговый гайд:
🔗 https://github.com/dimkurilo/vision-bridge-opencode
#opensource