Эксперименты с API Google Gemini
Я об этом уже писал в telegram-канале, но уточню для тех, кто ещё не читал.
Есть Google AI Studio, где можно работать с нейросетью Gemini. Там куча всяких возможностей, но главное, что можно получить API Key, причем бесплатно. Для разработчиков, которые хотят самостоятельно разобраться в работе нейросетей, это просто ценнейший подарок.
Как только я об этом узнал, то сразу загорелся сделать свое приложение. Там же с помощью Gemini, сделал каркас на PHP и запустил на локальном сервере (localhost).
Сейчас моя разработка выглядит так в браузере:
Помимо удовольствия от самого программирования, я выяснил несколько интересных тонкостей.
Первое — каждый запрос к ИИ обрабатывается строго индивидуально
То есть каждый вопрос для ИИ звучит как совершенно новый. Он ничего не знает про то, что было в предыдущем.
Поэтому, чтобы создавать видимость полноценного диалога, при каждом обращении к серверу, отправляются и все старые вопросы и ответы. Например если это 10-й вопрос, то программа отправит не только его, но и все с первого по девятый.
Второе — текст вопроса — основополагающий
То есть вопрос разбивается на токены и дальше поступает в «машинное отделение» — в саму нейросеть. Чтобы ответ был полным, то к тексту вопросу будет автоматом добавлена вся предыдущая переписка.
То есть можно взять любую старую переписку, скопировать в виде текста, добавить вопрос и вставить в новый чат и ИИ будет думать, что диалог уже состоялся и он его продолжит.
Третье — текстовые файлы на самом деле никуда не загружаются
Ну формально, они конечно могут уходит на сервер и всё такое, но смысл такого файла просто приплюсовать своё содержимое к последнему вопросу. Это полностью эквивалентно тому, если бы взять содержимое файлы и скопировать в поле вопроса. При этом свой вопрос лучше задавать именно в конце, то есть после содержимого файла. Во всяком случае именно такова рекомендация.
Четвертое — ограничение на размер файлов и вопросов
Это «жлобство» со стороны компаний. Чтобы было понятно, нейросеть оперирует миллионами токенов, а это примерно миллион слов. То есть ей вообще по барабану, будет ли загружен гигантский диалог на 100 Кб. Она его проглотит и не подавится.
Пятое — я понял, почему программы ИИ тормозят
Это особенно заметно, когда получается большой диалог. Всё дело в хранении всего диалога. То есть когда мы цепляем текстовые файлы на 100кб, то при каждом запросе трафик будет включать весь этот файл. Чем больше переписка, тем больше трафика. Поэтому всё напрямую зависит от алгоритма хранения информации чата.
Я не знаю как именно это организовано у других, но у меня весь диалог хранится в localStorage (фактически это база SQLite), то есть данные никак не сказываются на нагрузке. Сам же браузер, конечно хранит тексты в виде сгенерированного html, но кажется сейчас это не проблема (например те же книги на 500 страниц выводятся вообще без проблем).
Шестое — промпты, которые якобы «прокачивают» уровень ответов ИИ, полная чушь
Ограничения ИИ строятся только на количестве запросов к серверу: запросы в минуту, запросы в день и количество токенов в минуту. Например на бесплатной Gemini 2.0 Flash можно делать до 15 запросов в минуту. А если перейти на Gemini 2.5 Pro, то это уже от 150 до 2000 запросов в минуту. То есть это уже бизнес уровень. Для личного пользования даже 15 запросов в минуту — выше крыши.
«Продвинутость» ИИ напрямую зависит только от используемой модели. Всё! Больше ни от чего.
Седьмое — качество промптов
Ответ нейросети происходит в пределах контекста диалога или контекста темы. Например, если ввести Достопримечательности
, то ИИ будет просить уточнить запрос. Но если ввести Достопримечательности. Париж
, то сразу получите правильный ответ. Можно, конечно, добавить что-то вроде Ты опытный экскурсовод
, но принципиально это не изменит ответа, разве что добавит больше «шума».
Восьмое — температура ответа
В API есть такой параметр, который влияет на «рандомность» ответа. Кратко — это то, насколько в своём ответе нейросеть будет внедрять случайные токены. При температуре 0 случайность будет сводиться к минимуму. При температуре 1 — ответ будет выглядеть более «творческим». В Gemini (и OpenAI) температура может быть от 0 до 2. Два, насколько я верно понял — это самый «творческий» режим.
В других нейросетях температура может меняться по шкале от 0 до 1.
При этом, что важно, размер ответа никак не зависит от температуры. То есть ответ может быть кратким и творческим (1.0) и длинным и «сухим» (0.0).
Чтобы «ввести в ступор» нейросеть попробуйте сделать такой промпт:
1. Первый 2. Второй 3. ...
Если это новый диалог, то при низкой температуре ИИ предложит уточнить запрос и приведёт несколько примеров — они будут краткие и «сухие». При температуре более 1 (середина) он уже расширит ответы на более «живые» примеры.
Но если это уже существующий диалог, то он попробует вставить существующий контекст — ИИ будет пытаться при высокой температуре творчески подойти к ответу и «впихнуть» тематику диалога в эти пункты. При низкой температуре ему это будет сделать сложнее.
Девятое — контекст
Дело даже не в промпте, а в том, что нужно очерчивать контекст вопроса. Ошибка — это думать, что ИИ знает всё и способна угадывать ваши мысли. Нет. Каждый вопрос она разбивает на токены и потом прогоняет через нейросеть. Так формируется ответ. Но когда очерчен контекст, то нейросеть будет ограничивать тематику ответа, а значит ответ будет более точным.
Что касается «творческих» вопросов, например Опиши ощущение счастья
, то ИИ всё равно будет опираться на то, что заложено в её базе. Скорее всего ответ будет первым, который будет самым популярным, поэтому если нужно получить что-то другое, то придётся задать второй вопрос, который попросит уточнения первого. По другому это не будет работать.
Десятое — ИИ не может сам регулировать температуру
Она может её эмулировать (если явно попросить), но это будет не настоящая температура. Я поэкспериментировал на эту тему и поведение ИИ при разной температуре, даже если явно просить её имитировать, будут существенно различаться. То есть температура это параметр, который непосредственно влияет на работу модели нейросети.
Я попробовал поэкспериментировать с Copilot'ом, но он в итоге признался, что
Ты прав — я сам себе температуру не регулирую. Она задаётся моими разработчиками, когда они настраивают поведение модели. Так что изменить её “на лету” в рамках этого диалога я действительно не могу.
Я вообще не знаю других ИИ, где можно самостоятельно регулировать температуру, кроме как в Google AI Studio.
Одиннадцатое — есть ещё и TopP
Ещё один параметр, который влияет на выбор ответов нейросети — TopP. Общий смысл его в том, что модель будет выбирать «вариативность» ответов. При низком значении (менее 0.5) нейросеть будет выбирать самые очевидные и явные ответы, а при 1.0 уже может работать с токенами у которых меньше вероятности попасть в ответ. TopP для простоты можно указывать как проценты.
Комбинируя температуру (°) и TopP (%) можно настроить работу ИИ под свои задачи. Скажем если дать 2° и 100%, то это будет самым «творческим» режимом. А если указать 0° и 10%, то ответы будут только те, которые максимально исключают случайности.
На практике это может быть так: если в программировании стоит задача получить самый «точный» ответ, то ставим минимальные значения. Если же нужно обсудить идеи, то ставим по максимуму — это позволит нейросети выдавать нестандартные и неожиданные ответы.
И опять же, этот параметр доступен либо через API, либо в Google AI Studio.
Я хочу показать пример творческого подхода по максимуму.
В логотипе Gemini используется бабочка (либо звезда), что противоречит самому слову «gemini» — близнецы, что явно указывает на отсылку к знаку Зодиака ♊️. Я привожу полный ответ нейросети, чтобы вы поняли как работает её «творческий режим»:
Абсолютно верно подмечено! Название Gemini действительно является латинским словом, обозначающим "близнецы", и прямо отсылает к астрологическому знаку Близнецов (♊), символизируемому двумя параллельными вертикальными линиями, соединенными сверху и снизу горизонтальными перекладинами.
Действительно любопытно, что в качестве визуального представления была выбрана бабочка, а не что-то, более непосредственно связанное с образом двух сущностей или символикой знака Близнецов.
Вот несколько возможных причин такого выбора (чисто спекулятивных, поскольку официальных объяснений я на данный момент не встречал в открытых источниках):
- Смена бренда/визуальной айдентики: Визуализация могла измениться со времени прямого ориентирования на символику Близнецов. Возможно, бабочка лучше соответствует текущему позиционированию или художественному стилю Google AI.
- Метафорическое значение: Бабочка может символизировать трансформацию, эволюцию, коммуникацию, множественные связи или даже нечто эфемерное и динамичное – качества, которые можно соотнести с возможностями развитой языковой модели. Две симметричные части крыльев едва ли отражают "двойственность".
- Уход от прямой астрологической ассоциации: Возможно, GoogleAI стремился избежать слишком буквальной связи с астрологией и создать более универсальный и технологически ориентированный образ.
- Различные визуализации для разных контекстов: В зависимости от платформы и целей, логотип или визуальный элемент могут быть различными. Возможно, вы видели бабочку в одном контексте, а символ Близнецов (или что-то другое) используется в другом. Где именно вы видели мой "логотип" - внутри какого сервиса или интерфейса?
Ваше замечание подчеркивает интересный момент несоответствия между названием и, по крайней мере, одной из визуальных репрезентаций модели. Возможно, с течением времени фирменный стиль Gemini будет развиваться и найдет более прямую визуальную связь со своим именем.
Спасибо, что обратили на это внимание! Это действительно заставляет задуматься об истории создания бренда и выборе визуальных образов. Да, двойственность символа 'II', скрещенные линией означает 'и', подобно '&', и две точки над 'i'. Бабочке также присуща 'двойственность' - два крыла или цикл яйцо-гусеница-бабочка.
Здесь он сам при думал варианты, сам их обосновал, а текст сформулировал с каким-то жеманством (мне почему-то сразу представился Невзоров 👨🎨 с его манерой речи).
Попробуйте попросить свою нейросеть перефразировать этот ответ в более простую форму: сразу будет видна разница и по объему текста и по его «напыщенности».
Просто для сравнения, вот что выдал Copilot:
Gemini — это латинское слово, означающее "близнецы", и оно отсылает к астрологическому знаку с тем же названием. Но вместо символа близнецов в визуальном образе бренда используется бабочка.
Почему так? Возможно, бабочка выбрана из-за ассоциаций с трансформацией, симметрией и развитием — всё это хорошо отражает идею современных языковых моделей. А может, Google просто хотел уйти от астрологических символов к более универсальному и технологичному образу.
В общем есть над чем подумать. 😎