Когда я только начинала разбираться с ИИ в прошлом году, мне казалось, что “сделать AI-проект” — это примерно написать красивый промпт, нажать пару кнопок и получить магию. Ну, максимум — подключить Telegram-бота. На практике всё оказалось, как всегда, не так: магия была, но рядом с ней жили терминал, сервер, зависимости, ошибки, почему-то старый SQLite и внезапное ощущение: “А почему оно вообще не работает, если пять минут назад почти работало?”
Один из проектов, который помог мне это прочувствовать, — RAG-ассистент по документам. RAG расшифровывается как Retrieval-Augmented Generation, по-русски — генерация с поиском по базе знаний. Можно сделать так, что модель будет отвечать не по тому, что в нее уже загрузили без твоего участия, а сначала ищет нужные фрагменты в твоих документах, которые надо подгрузить, и формирует ответ на их основе. Для большого числа задач это важно, ведь никому не нужен уверенный ассистент, который красиво придумывает несуществующие регламенты компании, например.
Я собрала ассистента, который умеет читать .docx и .txt файлы, разбивать их на небольшие смысловые куски — они называются чанки, сохранять их в ChromaDB, один из вариантов векторной базы данных для поиска по смыслу, и отвечать на вопросы через языковую модель, которую тоже можно выбрать, так как она будет подключена по API-ключу. В проекте также появился hybrid retrieval — гибридный поиск: часть результатов находится по смыслу, часть — по ключевым словам. В этот момент я почувствовала себя очень умной, это было приятно, хоть и недолго.
Отдельная часть проекта — Telegram-бот. Я уже их делала. По умолчанию любой ассистент только “скрипт в терминале”, и пользоваться им как обычным инструментом неудобно в большинстве случаев, даже когда привыкаешь снова видеть терминал — я про страшное черное окно с командной строкой, но теперь он снова в моде. В итоге пишешь вопрос в Telegram — получаешь ответ по своим документам. Круто, до тех пор, пока не начинается деплой, без которого тоже не обойтись.
Деплой — это когда проект нужно не просто запустить у себя на компьютере, а разместить на сервере, чтобы он работал постоянно, а не только когда компьютер включен и проект запущен в терминале. Вот тут началась взрослая жизнь. Сначала я выбрала сервер, подключилась к нему по SSH — это способ управлять удалённым сервером через терминал. Почувствовала себя почти системным администратором. Потом выяснилось, что на сервере нет Python, как будто я заранее знала, что он там должен быть. Потом Python появился, но зависимости решили установить с собой половину космического корабля, на который я не рассчитывала, покупая сервер за 450 руб./мес: torch, CUDA, NVIDIA-пакеты. Сервер, у которого всего 12 GB диска, посмотрел на это всё и, кажется, молча осудил меня за жадность.
Пришлось переделать проект: отказаться от локальных embeddings через sentence-transformers и перейти на OpenAI embeddings. Да, я теперь знаю много умных слов. Embeddings — это числовое представление текста, благодаря которому система понимает, какие фрагменты документа близки по смыслу к вопросу. Для маленького сервера это оказалось правильным решением: меньше тяжёлых библиотек, проще установка, меньше боли.
Но сервер не сдавался. Потом ChromaDB сказала, что системный SQLite слишком старый. SQLite — это лёгкая, легонькая встроенная база данных, а ChromaDB использует её внутри. Обновлять системную библиотеку было рискованно, ну это ChatGPT так сказал, поэтому я добавила аккуратный Python-патч через pysqlite3-binary. На этом этапе я уже перестала удивляться и просто записывала: “ага, ок, что ещё?”.
Финальный сюрприз был географический. Теперь это важно, мы все знаем. OpenAI API отказался работать с первого сервера из-за неподдерживаемого региона. То есть код уже был почти в порядке, но IP-адрес сервера — нет. Пришлось взять новый сервер в правильной локации. И вот после всех этих приключений бот наконец заработал, пережил перезагрузку сервера и продолжил отвечать. Я не сразу даже поверила в это, что я не просто “поговорила с нейросетью”, а собрала цепочку: документы, поиск, модель, кэш, логи, Telegram, сервер, автозапуск.
Главный результат тут не сам бот. Главный результат — я стала меньше бояться технической части. Я, конечно, всё ещё иногда копирую команду с ощущением “ну, поехали”. Но теперь я уже понимаю, что происходит, где искать ошибку и какие вопросы задавать.
А это, пожалуй, и есть нормальный путь в ИИ: не изображать уверенного эксперта с первого дня, а честно собирать, ломать, чинить и постепенно превращать непонятное в рабочее.