Общие вопросы
Отправка писем по SMTP на VDS с панелью NetAngelsКак сбросить пароль root?Запуск образов VDS на локальном компьютереИспользование раздела Облачные VDS в панели управленияИспользование образа с панелью управления NetAngelsСпециальные образы VDS для быстрого развертывания (LAMP)Как клонировать виртуальные машиныГостевой агентПриватная сетьКак поправить настройки sshd?Как включить защиту от DDoS через CloudflareVDS как промежуточный сервер для выхода в интернетМонтирование диска в VDSУстановка сервера MinecraftЗащита от DDoS атакИнструкция по настройке исходящего SMTP для тарифов VDS StartСервер для веб-конференций, совещаний и онлайн лекцийВосстановление отдельных файлов в виде архиваНастройка сети на VDSУстановка Windows из ISO-образа на VDSSSH-доступ к хостинг-аккаунтуКак настроить отправку почты с сайтаАвтоматизация обновления SSL-сертификата через API NetAngelsВыпуск SSL сертификата на VDS c помощью утилиты dehydratedКак подключить SSL-сертификат для сайта на облачном VDS с панелью управления NetAngelsКонсольные команды. Работа с данными.Консольные команды. Работа с MySQL, создание и загрузка дампа.Консольные команды. Анализ состояния сервера
Делаем собственный чатбот за 5 минут

Делаем собственный чатбот за 5 минут

В этой статье мы покажем как можно очень быстро и просто развернуть собственный чатбот на базе OpenSource модели llama 3.1.

Использование локальных LLM (Large Language Models) имеет ряд преимуществ перед использованием облачного сервиса ChatGPT от OpenAI. В первую очередь это сохранение конфиденциальности вашей информации. Когда вы используете ChatGPT, все ваши запросы и загруженные документы собираются и хранятся на серверах OpenAI, а так же могут быть использованы при обучении будущих моделей, что может привести к утечке конфиденциальной информации. Локальные LLM модели, с другой стороны, можно развернуть на собственных серверах или даже на персональных компьютерах, гарантируя полный контроль над данными и отсутствие передачи конфиденциальной информации третьим лицам. Это не только обеспечивает более высокий уровень безопасности, но и позволяет организациям соблюдать требования по защите данных и соответствующую нормативную базу. Кроме того, локальные модели могут быть персонализированы и настроены в соответствии с конкретными потребностями организации, что может привести к повышению точности и полезности получаемых ответов. Это особенно важно для задач, требующих глубокого понимания предметной области или специфических знаний.

Модель, используемая в нашем учебном чатботе, не обладает никакой информацией о вашей компании, но ее легко можно научить работать с вашими документами и отвечать на вопросы по ним, используя подход RAG (Retrieval Augmented Generation). Правда такая доработка уже выходит за рамки данной статьи.

Создаем VDS на тарифе Ultra:

Разумеется, любая современная LLM требует серьезных вычислительных мощностей и для достижения сколь либо приемлемой скорости работы моделей вам потребуются видеокарты (GPU) с довольно большим объемом видеопамяти. Но покупать дорогие видеокарты на сегодняшний день нет необходимости, ведь их можно арендовать на почасовой основе. Наша компания предлагает линейку VDS Ultra с видеокартами от Nvidia.

Чтобы запустить такой VDS, достаточно в вашем личном кабинете перейти в раздел VDS, нажать на кнопку создания виртуальной машины (ВМ) и выбрать требуемую вам конфигурацию сервера, а также модель и количество видеокарт, которые вам необходимы. Предположим что вы всё это уже проделали и получили доступ к вновь созданной ВМ по ssh. Здесь и далее мы предполагаем что вы зашли на сервер от имени пользователя ubuntu, создаваемого по умолчанию.

Проверим что у нас есть доступ к видеокарте:

$ sudo nvidia-smi

Fri Aug  2 10:25:21 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA RTX A5000               Off |   00000000:01:00.0 Off |                  Off |
| 30%   41C    P0             N/A /  230W |       0MiB /  24564MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

Видим что у нас есть видеокарта RTX A5000 с 24 ГБ видеопамяти. Значит мы можем загрузить в нее любую модель размером приблизительно до 20 ГБ, с учетом того что нам нужно оставить какой-то объем памяти под кеши и контекст запросов.

Устанавливаем ollama:

Ollama представляет на сегодняшний день наиболее простой и быстрый способ запуска LLM и предоставляет к ним API, совместимое с форматом запросов OpenAI, так что вы можете использовать для работы с вашей LLM те же библиотеки и тот же код, что и для работы с ChatGPT. Установка ollama делается очень просто:

$ sudo curl -fsSL https://ollama.com/install.sh | sh

Теперь нам надо решить какую модель использовать, какой размер модели и уровень квантизации выбрать. Модель llama3.1 размером 8 миллиардов параметров с квантизацией 8 бит (что такое квантизация?) имеет размер 8,5 ГБ (подробнее о доступных вариантах квантизации этой модели), а значит доступной нам в случае нашего учебного примера видеопамяти более чем достаточно для запуска такой модели. Скачаем ее:

$ ollama pull llama3.1:8b-instruct-q8_0

Убедимся что модель доступна:

$ ollama ls

NAME                        ID              SIZE    MODIFIED
llama3.1:8b-instruct-q8_0   9b90f0f552e7    8.5 GB  9 seconds ago

Теперь мы буквально в шаге от того, чтобы начать работать с собственной большой языковой моделью. Осталось только установить соответствующие библиотеки для python.

Создаем виртуальное окружение python

Создадим виртуальное окружение python, в которое поставим нужные нам пакеты:

$ python3 -m venv ~/.venv
$ source ~/.venv/bin/activate
$ pip install ollama gradio

Ну а теперь напишем простейший скрипт на python, реализующий интерфейс чат бота на базе пакета gradio:

import gradio as gr
from ollama import Client


def response(input, history, system):
    messages: list = [{'role': 'system', 'content': system}]
    for human, bot in history:
        messages.append({'role': 'user', 'content': human})
        messages.append({'role': 'assistant', 'content': bot})
    messages.append({'role': 'user', 'content': input})

    client = Client(host='http://localhost:11434')
    stream = client.chat(model='llama3.1:8b-instruct-q8_0', messages=messages, stream=True)

    response = ''
    for chunk in stream:
        response += chunk['message']['content']
        yield response

def main():
    gr.ChatInterface(
        response, retry_btn=None, title='Ollama chatbot',
        additional_inputs=[
            gr.Textbox(
"""You are a powerful conversational AI trained to help people. You will see a conversation history between yourself and the user, ending with an instruction from the user.
You help people answer their questions and other requests interactively. You will be asked a very wide array of requests on all kinds of topics.
You should focus on serving the user's needs as best you can, which will be wide-ranging. If provided with a context you must ground your answer to the context.
Unless the user asks for a different style of answer, you should answer in full sentences, using proper grammar and spelling. IMPORTANT! ALWAYS answer in Russian!""",
            label='System prompt')
        ]
    ).queue().launch(
        server_name='0.0.0.0', server_port=8000, width='100%', # share=True
    )


if __name__ == "__main__":
    main()

Запускаем наш чат бот:

$ python chatbot.py

Открываем в браузере url: http://vm-abcdef.na4u.ru:8000/ и вуаля, у нас есть собственный аналог chatgpt :) Только не забывайте, что с настройками по умолчанию этот чат бот будет доступен всем желающим.

Облачные VDS
Облачные VDS
Облачные VDS
Масштабируются под любые задачи: от размещения сайта до IT-инфраструктуры
С 2003 года
Надежность.
Нам доверяют десятки тысяч компаний и разработчиков
20 лет
Предоставляем услуги профессионального хостинга
35 000
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime
наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
ВК49865