ChatGPT и все-все-все. Недорого

от автора

Я довольно долго с большим скепсисом смотрел на все эти новомодные нейросети.
Во-первых, меня основательно напрягало то, что они умеют фантазировать, если чего-то не знают.
Во-вторых, я попробовал из любопытства, но не понял зачем это мне.

Но, поскольку тема регулярно всплывает на Хабре и несколько хороших знакомых рекомендовали всё же разобраться и попробовать — я разобрался и попробовал.
И теперь хочу рассказать, как пользоваться с удобством и недорого (бесплатно тоже можно).

TL;DR: ставим OpenWebUI, подключаем к openrouter.ai, опционально — заносим openrouter.ai денег, пользуемся.

А теперь — зачем так сложно. Есть же локальные LLM (которые замечательно работают с тем же OpenWebUI), если не брать локальные, то можно же просто использовать чат хоть в ChatGPT, хоть в DeepSeek, хоть в [вписать нужное]?

Да, но нет.

Локальные LLM к моему огромному сожалению, отвечают на вопросы (мои, во всяком случае) ощутимо хуже. Можно вложиться в железо и повысить качество, но я посмотрел на суммы и решил, что платить за облако не так и дорого.

Чат в том же ChatGPT работает очень даже хорошо, но для доступа к свежим и самым интересным моделям нужно оформить подписку.
С одной стороны, $25 не так, чтобы и много.
А вот с другой — платишь ты вне зависимости от того, пользуешься или нет. Опять же семейной подписки у них нет, а если оплачивать себе, жене, детям, то выходит уже и не так, чтобы мало.
А выдать всем один аккаунт… Ну, так себе решение.

И вот тут на сцену выходит openrouter.ai — по большому счёту, прокси для ряда популярных (и не очень) LLM. Как платных, так и бесплатных. Сейчас их (я посмотрел) — 336.
И доступны они через OpenAI API, что означает, что подключить его можно как к уже упомянутому OpenWebUI, так и к десктопным приложениям для работы с LLM.

Что радует отдельно и особо — оплачиваются тут т.н. токены, стоят эти токены очень недорого (запросы тут стоят буквально сотые и тысячные доли цента. Конечно зависит от модели, но тот же ChatGPT здесь расходуется куда экономнее).

А дальше всё просто — заводим всем членам семьи, кому это необходимо, отдельный ключ API, подключаем ему в приложение, которое больше нравится и, собственно, пользуемся.

Важный нюанс! LLM, которые недоступны из России (как например, ChatGPT), через него будут выдавать ошибку. Но если пустить запросы к openrouter.ai через VPN, то всё работает.
Забегая вперёд — а если поставить дома OpenWebUI и подключить его к openrouter.ai, который работает через VPN, то появляется возможность работать с любыми LLM отовсюду, без VPN.

OpenWebUI — что, зачем и почему

Мне показалось удобнее всего развернуть OpenWebUI на домашнем сервере и создать в нём несколько аккаунтов для родственников и друзей (тем более, каждый может подключить свой аккаунт openrouter.ai).

Причины простые — во-первых, я хочу иметь доступ к своим чатам откуда угодно, а десктопное приложение сразу привязывает меня к одному устройству, а во-вторых (но изначально это было основной причиной) — чат в openrouter.ai после ChatGPT показался мне каким-то… недоделанным. OpenWebUI гораздо удобнее.

иллюстрация цельнотянута из официальной документации

иллюстрация цельнотянута из официальной документации

При наличии докера разворачивается он элементарно — кладём каталог (пусть будет openwebui) файл compose.yaml со следующим содержанием:

<services:    webui:     image: ghcr.io/open-webui/open-webui:main     container_name: open-webui     restart: unless-stopped     ports:       - "127.0.0.1:8080:8080"     environment:       DEFAULT_LOCALE: ru       OPENAI_API_BASE_URL: https://openrouter.ai/api/v1       OPENAI_API_KEY: sk-or-v1-a       ENABLE_WEBSOCKET_SUPPORT: "true"       WEBSOCKET_MANAGER: "redis"       WEBSOCKET_REDIS_URL: "redis://redis:6379/1"       WEBUI_SECRET_KEY: "verysecretkey"     volumes:       - ./open-webui:/app/backend/data    redis:     image: docker.io/valkey/valkey:8-alpine     container_name: redis     restart: unless-stopped     command: valkey-server --save 30 1 --loglevel warning     volumes:       - ./redis:/data

единственное — рекомендую не прописывать параметры OpenAI API в качестве переменных, гораздо удобнее прописать их затем через веб-интерфейс, тем более, прописываются они для каждого пользователя отдельно.
я оставил их здесь в качестве иллюстрации — как подключаться к openrouter.ai

дальше — по вкусу. У меня этот контейнер проксируется наружу через nginx, конфиг там несложный:

location / {   proxy_http_version 1.1;   proxy_set_header Upgrade $http_upgrade;   proxy_set_header Connection $connection_upgrade;    proxy_set_header Host $host;   proxy_set_header X-Real-IP $remote_addr;   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   proxy_set_header X-Forwarded-Proto $scheme;   proxy_buffering off;    proxy_pass http://openwebui; }

Теперь — чем же хорош OpenWebUI?

кратко — модели, веб-поиск и RAG. Что это такое?

Начнём с простого — качество ответа LLM зависит от т.н. system prompt.
Если просто — это описание о чём и как мы будем общаться с LLM.

Вот, например, один из моих, я использовал его для рефакторинга своего конфига домашнего роутера (для понимания — два провайдера, два туннеля до внешних серверов, чтобы гонять через них трафик до ChatGPT, например, т.к. с Россией они не работают)

Действуй как инженер по сетям с большим опытом. Ты хорошо разбираешься в теории и приктике построения сетей. У тебя большой опыт в настройке сложных конфигураций. Все вопросы касаются только продукции компании Mikrotik и языка RouterOS.  Ты объясняешь своему коллеге, не нужно чрезмерно упрощать.  Необходимо разбить задачу на подзадачи, кратко описать для чего нужна данная подзадача и привести после неё полностью готовый код на языке Router OS 7  Выполняй подзадачи шаг за шагом. Перепроверяй свои ответы.

Зачем? Чтобы улучшить качество ответов за счёт сужения предметной области и формата вывода. И это работает.
Отдельно отмечу, что в определённый момент мне пришла в голову нехитрая мысль — попросить LLM улучшить этот system prompt и перевести его на английский. И, да, это тоже работает.

Так вот, в ChatGPT была такая сущность, как «проекты», т.е. папки для чатов, в которых был прописан системный промпт для всех чатов, которые в ней создаются.
Т.е. создаёшь проект mikrotik, прописываешь в него вон тот вышеупомянутый промпт и всё, новые чаты будут уже с ним.

В чатах openrouter.ai такого не было, а прописывать промпт каждый раз для каждого чата надоело очень быстро.
В OpenWebUI для того же используются т.н. модели.
При создании модели указываешь, какую нейронку и какой промпт для неё использовать и всё, можно пользоваться.
Это удобно. Для меня, буквально киллер-фича.

Далее — возможность использовать веб-поиск (подключается в настройках).
Любая LLM — это, в некотором роде, капсула времени. Её знания ограничены тем, когда её собрали.

Пример: спрашиваю Google: Gemini Pro 2.0 Experimental (free) — расскажи о Civilization VII.
ответ: К сожалению, официальной информации о Civilization VII очень мало, поскольку игра находится в разработке и официально её пока не анонсировали. …

а теперь используем веб-поиск и задаём тот же вопрос той же Google: Gemini Pro 2.0 Experimental (free) — расскажи о Civilization VII.
ответ: Sid Meier’s Civilization VII — это пошаговая 4X-стратегия, разработанная Firaxis Games и изданная 2K. Игра вышла 11 февраля 2025 года на платформах Windows, macOS, Linux, Nintendo Switch, PlayStation 4, PlayStation 5, Xbox One, Steam Deck и Xbox Series X/S.

есть возможность подгружать страницу из интернета и выдёргивать информацию с неё, но у меня она почему-то то работает, то нет.

Ну и наконец RAG

Полагаю, здесь будет уместно процитировать документацию.
Что такое RAG?

Генерация с расширенным поиском (Retrieval-Augmented Generation, RUG) объединяет LLM с полученными из внешних источников знаниями.
Система извлекает соответствующие данные из загруженных документов, повышая качество и точность ответов.

Проще говоря, берём набор текстовых файлов с какими-либо данными (я взял набор md-файлов со статьями из Obsidian). Добавляем их как знания (практически это выглядит как «дать название и подгрузить файлы»). После чего они индексируются и их можно использовать через LLM, нупример запросить, что значит какой-либо термин из этих документов.

Я проверял, работает неплохо, но зачем это мне, пока непонятно.
Хотя, судя по статье «Создаем чат-бота техподдержки на русском языке с RAG из документации компании в OpenWebUI» функционал востребованный.

На этом я, пожалуй, завершу.
Нельзя объять необъятное.

Да, благодаря статье «Как добавить в OpenWebUI генерацию изображений через ComfyUI», я эту генерацию добавил (за что спасибо @akdengi, который исчерпывающе написал что и как). Но генерировать изображения через специализированный интерфейс мне кажется удобнее.

Да, сообщество OpenWebUI создало целую коллекцию инструментов для него, но я пока просто не добрался до них, чтобы разобраться, что это и зачем.

Да, там есть возможность, цитирую, Execute code for analysis. Но и до этого я пока не добрался.

В целом же — крайне удобный интерфейс для подключения самых разных LLM.
Для дома, для семьи — прямо самое то (тем более, системные требования там скромные и с облачными LLM запустить можно практически на чём угодно).

Из минусов могу упомянуть следующие:

  1. с телефона пользоваться можно, но мне показалось, что не очень удобно;

  2. в линуксе, чтобы скопировать часть ответа, нужно нажимать Ctrl+C (а не просто выделить, как обычно);

  3. опубликовать какой-либо чат можно либо только для пользователей своего OpenWebUI, либо через openwebui.com/chats/

Очень хотелось бы какого либо экспорта (и он даже есть), но имеющийся это либо md-файл, либо сгенерированный из него pdf. Чувство прекрасного хочет, либо html, либо pdf, но чтобы сохранялось оформление, как в вебе.

Ну и, напоследок, главный вопрос — а для чего этот чат с нейросетями вообще нужен?

Важное замечание (от Капитана Очевидности) — знания и опыт нейросеть не заменяет.
Но вот в качестве помощника вполне работает.

Я для себя выделил несколько основных сценариев взаимодействия:

  1. Утёнок для метода утёнка. При обдумывании задачи можно накидывать в чат варианты, это полезно во-первых, потому что «мышление письмом» само по себе штука полезная, а во вторых, LLM иногда подкидывает варианты, про которые сам бы не подумал. Даже если не подкидывает — всё равно неплохо получается.

  2. Падаван для черновой работы. Скажем, я давно хотел выкладывать статьи из obsidian в веб через генератор статичесих сайтов. Имеющиеся темы мне не нравились, я представлял, что хочу получить, но несмотря на то, что про html+css я знаю очень давно, рука не набита и создать эту тему (примитивную до упора, но всё же) всё никак не мог собраться.
    Выдал LLM чёткое ТЗ, несколько раз подкорректировал и вот результат.

    Другой пример — у меня сгорело старое реле времени для фотоувеличителя и я вспомнил, что давно хотел попробовать заменить его на f-spot реле (сейчас неважно, что это). Паять его на ардуинке мне было откровенно лень и я попросил LLM сгенерировать конфиг для Home Assistant, который будет включать и выключать умную розетку на определённые интервалы времени.
    Мог я это сделать сам? Определённо мог, но пришлось бы повозиться.
    Хотел ли я это делать? Совершенно точно нет, я хотел получить готовый конфиг, без лишних усилий.

  3. секретарь-референт. Недавно увлёкся плёночной фотографией и всё не мог сформулировать для себя некоторые моменты, несмотря на чтение книг и статей.
    Попросил LLM сгенерировать сценарий съёмки для вполне конкретных условий.
    Получил вот такой результат.

    Как прокомментировал один мой друг:

    что поразило — это правильное «понимание» нейронкой аспектов построения кадра и особенностей передачи пространства объективами с разными ФР. Например, я это тоже понимаю, но я для этого понимания 10 лет активно фотографировал на разные объективы, и поэтому приобрел такой опыт. НО! Словами донести этот опыт до тебя, например, я уже не смог, в итоге кинул в тебя статьей про эльфа-и-домик.

    Второй момент — опыт работы с естественным освещением (время дня, тени и снег). Я это тоже знаю, но невербально: Если бы ты меня спросил, когда лучше пейзажи фотать — я бы сказал вечером, на закате. А почему — сказал бы, ну тык это ж «режымное время» жы!

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

    TL;DR: есть информация, а есть опыт. В информации может, но не обязан, содержаться опыт.
    Поисковик ищет информацию.
    Нейронка извлекает из информации опыт, и вербализирует его.

    У меня сходные впечатления. Несмотря на то, что по ссылке нейронка в одном месте советует совершенно неправильно (путает плёнку и цифру).
    Но тут как раз про то, что знания она не заменяет.

Итог: штука полезная, периодически ощущения как от интернета в 1996 году. Ну или от того, как поисковики нормальные появились.

P.S. пара ссылок, до которых пока не добрался, но если кто пробовал, с интересом бы послушал:
requesty.ai — альтернатива openrouter.ai, который я использую;
comfyonline.app — облачный ComfyUI с оплатой за использование. Была мысль прикрутить его к OpenWebUI, но ещё не прикрутил.

P.P.S. при написании этой статьи использовалась только та нейросеть, которая у меня в голове. Потому что мой внутренний голос бесится, когда статьи пишет не он.
Упомянутые сервисы и организации не заплатили мне за это ни копейки, а могли бы : ))


ссылка на оригинал статьи https://habr.com/ru/articles/889660/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *