Подписывайтесь также на мой Телеграм!
Искусственный интеллект (ИИ, AI) сейчас у всех на слуху. Новости пестрят заголовками о том, как правительства разных стран и крупнейшие компании инвестируют в эту область немыслимые средства.
Конечно, хочется как разработчику, управленцу и просто любопытному человеку быть в контексте происходящего. Решил поэкспериментировать.
В итоге разобрался - как можно использовать языковые модели и написал небольшое Web-приложение, о котором расскажу ниже.
Модели от Т-Технологии
11 декабря 2024 года вышла новость: Группа «Т-Технологии» представила лучшие в мире открытые большие языковые модели на русском языке.
Сразу возникло желание понять - что это значит и как же этим пользоваться. Добрался до задачи на днях и начал копать.
Хочу обратить внимание - я не эксперт в данной области, так что в статье описываю исключительно свой опыт. Тем не менее удалось немного поэкспериментировать с различными инструментами и немного продвинуться в теме.
Итак, в новости была ссылочка на те самые модели. Модели есть более легковесные (T-Lite 4Гб, 8Гб) и потяжелее (T-Pro от 20Гб и больше). То есть - лежат файлы, надо понять что с ними делать...
Самое время дать определение языковой модели. Определение из Яндекс Образования:
Говоря простым языком, языковые модели — это алгоритмы, способные продолжать тексты. Если чуть усложнить, то это вероятностные алгоритмы, и к ним сразу можно задать эмпирический критерий качества: хорошая модель даёт разумные продолжения данных ей текстов.
LM Studio
Для начала мне попалась на глаза LM Studio - инструмент, который можно установить на Windows, MacOS, Linux и искать, скачивать и запускать различные языковые модели (LM) у себя на компьютере. А дальше можно прямо в программе писать свои сообщения в модель, и она будет отвечать (как с ChatGPT - наверное уже многие попробовали).
Можно найти интересующую модель:
И задавать вопросы в чате:
Стоит сказать, что большие модели требуют конских ресурсов для их запуска и работы (в том числе ресурсы видеокарт), так что скачать их конечно можно, но при попытке запустить их в LM Studio они просто вылетают.
Маленькие модели вылетают тоже постоянно. Поэтому при их загрузке в чат нужно играться с параметрами (как минимум у меня нет супер видеокарты, и я убираю ее совсем):
Запустим языковую модель локально
Перед тем, как написать свое приложение, которое будет общаться с языковой моделью, запустим ее локально. Для этого нам понадобится сервис Ollama - фреймворк для запуска и управления большими языковыми моделями (LLM) на локальных вычислительных ресурсах.
1. Разворачиваем сервис Ollama
На официальном сайте Ollama скачиваем дистрибутив. В моем случае для Windows. Устанавливаем и проверяем в командной строке, что сервис запустился:
ollama --version
Должно ответить номером версии.
Также можно в браузере открыть локальный адрес:
http://localhost:11434
Должны получить ответ: Ollama is running
2. Запускаем языковую модель
Запустим языковую модель от Т-Технологии в Ollama. Для этого выполним команду с вопросом:
ollama run hf.co/t-tech/T-lite-it-1.0-Q8_0-GGUF "Расскажи про Linux"
Если модели еще нет на вашем компьютере, она сначала будет скачиваться (примерно 8Гб), а потом ответит на ваш вопрос:
Как видно ответ более чем развернутый, не влезает в экран.
Можно запустить модель без вопроса - модель загрузится и можно будет общаться с ней:
ollama run hf.co/t-tech/T-lite-it-1.0-Q8_0-GGUF
То есть мы добились примерно того же, что делали в LM Studio ранее.
Можно выполнять следующие команды в Ollama:
ollama list - отобразит все модели на вашей машине
ollama ps - отобразит модели, которые сейчас загружены
ollama stop [название модели] - останавливает запущенную модель
ollama rm [название модели] - удаляет модель
Пишем код
Для написания своего приложения на любимом Blazor я воспользовался двумя видосами: Ollama and Semantic Kernel with C# и Build interactive AI-powered web apps with Blazor and .NET
Мы должны получить страничку, на которой есть текстовое поле для ввода вопроса и кнопочка, при нажатии на которую отправляется запрос в локально развернутый сервис Ollama, получаем ответ и выводим его пользователю. Всё просто.
Будем использовать Semantic Kernel (это SDK с открытым кодом, который позволяет интегрировать большие языковые модели (Large Language Models LLMs), такие как OpenAI, Azure OpenAI, Hugging Face с языками программирования C#, Python и Java) и Ollama (это сервис, который помогает запускать опенсорсные языковые модели на своих серверах и в последствии обращаться к ним по API), который развернули ранее в статье.
Исходный код можно склонировать из открытого репозитория в GitVerse (отечественный! git от СберТеха) здесь.
Создаем новый проект в Visual Studio с типом Blazor Web App
Далее я выбрал следующие параметры, чтобы получить приложение Blazor Web Assembly с тестовыми страничками и без лишних настроек:
Получаем решение с двумя проектами (у меня это OllamaBlazorApp.Client и OllamaBlazorApp).
Не было цели писать красивый код, так что просьба не обращать внимание на это!
В оба (для простоты) устанавливаем пакеты:
Microsoft.SemanticKernel
OllamaSharp
В файл Program.cs обоих проектов вставляем код:
builder.Services.AddKernel();
builder.Services.AddScoped<IOllamaApiClient>(_ => new OllamaApiClient("http://localhost:11434"));
builder.Services.AddScoped<IChatCompletionService, OllamaChatCompletionService>();
В итоге для проекта OllamaBlazorApp.Client получается примерно так
Для проекта OllamaBlazorApp:
Также на любой странице (в моем случае Home.razor) понадобится вот такой код (формочка для ввода вопроса):
И в корень проекта OllamaBlazorApp.Client добавим класс OllamaChatCompletionService со следующим содержимым:
К сожалению в Дзене нет нормального форматирования кода, поэтому пришлось выложить скринами.
Исходный код можно склонировать из репозитория здесь.
То есть что мы сделали:
- Установили два Nuget пакета
- Сделали формочку для ввода вопроса с кнопкой Home.razor
- Добавили класс для общения c моделью в Olama OllamaChatCompletionService
- Прописали в DI необходимые сервисы
Не так сложно.
В итоге, запускаем приложение. Пишем свой вопрос в текстовом поле и нажимаем кнопочку Click me. Ждем минуту-две-три и получаем ответ. Да, почему-то Ollama отвечает так долго. Но это ведь первое тестовое приложение на локальном компе. Не разбираемся почему так долго, главное что отвечает и работает!
Подытожим
- Мы выяснили, что такое языковые модели
- Поняли, что есть не только ChatGPT, но и куча других моделей и многие из них опенсорсные (но большинство на английском, а может и на китайском?)
- Узнали, что есть самая лучшая модель на русском языке, и кто ее сделал - не все ведь знают английский )))
- Выяснили, что есть приложение LM Studio, которое позволяет скачивать много моделей, запускать у себя на компе и общаться с ними без всяких VPN-ов, оплат и прочих барьеров, но модели постоянно вылетают
- Узнали про Ollama и как она может помочь для разработки своих приложений
- Разработали простейшее приложение, которое общается с языковой моделью
Вот такой получился эксперимент! Для первого знакомства с языковыми моделями не плохо.