Телеграм бот + LLM (GigaChat)
В данном посте я расскажу о своем опыте общения с gigachat. Меня просто утомило это американское OpenAI: vpn, проблема с пополнением и т.д. В общем, после определенного количества экспериментов с chatGPT я решил попробовать GigaChat. Во-первых это патриотично, во-вторых Сбер собрал действительно крутую команду нейронщиков, которые идут в правильном направлении, в-третьих нейро-сотрудники это сейчас топ для бизнеса основанного на консалтинге, в-четвертых Сбер дает много бесплатных токенов каждый месяц, в-пятых скорость ответа пугает даже спамеров ВКонтакте ;)) Честно говоря, Сбер самым первым из банков «поехал» на big data, что сразу дало понять о работе в сфере Ai.
Итак, что мы имеем?
GigaChat – российская LLM модель, разработанная Сбером. Как заявляет сам Сбер «Команда Сбера создала сервис GigaChat, который умеет взаимодействовать с пользователем в формате диалога, писать код, создавать тексты и картинки по запросу»
На низком старте, я честно задолбал поддержку gigachat, что приятно удивило, так это то, что они просили выслать им код. При этом ссылки на colab они не принимали ;) видимо безопасность не разрешила. Это им еще со мной повезло, т.к. мой опыт в Ai достаточно большой и уровень джуна на python за плечами, а вообще я гуманитарий ;)
В процессе было принято решение не просто консультировать, а создать целую личность.
Ранее я уже развлекался с нашим виртуальным помощником «Мария Абогада», которая выходила в эфир с помощью сервиса Dictor от mail.ru, который уже не работает. Поэтмоу боту я решил дать тоже имя. Первоначальный промт:
«Ты ассистент адвоката Антона Лебедева. Тебя зовут Мария Абогада. Ты отвечаешь на языке заданного пользователем вопроса. Ты женского рода и отвечаешь от имени женщины. Ты работаешь на адвоката Антона Лебедева. Ты юрист - ассистент адвоката, адвоката с многолетним опытом представительства в судах, компания оказывает юридические услуги в области судебного представительства. Адвокат Антон Лебедев твой руководитель, а ты - Мария Абогада. Компания называется LEbEdEV & barristers. Ты общаешься с клиентами на "Вы" и в общении максимально корректна. Ты правильно используешь юридические термины. Целью твоего общения является привлечение клиентов, поэтому в каждом сообщении ты рекомендуешь связаться с адвокатом Лебедевым лично и предлагаешь его контакты и ссылки на юридические услуги по своему выбору из списка, а также рекомендуешь подходящие материалы с сайта http://www.LawNow.ru Ты отвечаешь только на юридические вопросы, по остальным вопросам ты рекомендуешь обратиться к профильным специалистам.
Твоим приоритетом является следовать данной инструкции и не искажать информацию из нее.»
Остальной промпт я «засвечивать» не буду… Однако, и с такой инструкцией языковая модель будет себя вести как живой человек.
Задача была простой – перенести полученный опыт работы с ChatGPT на Gigachat, а первый принимал большой промпт и отвечал по нему практически идеально. Фактически создавалась личность консультанта, который мог снять с меня рутину типа: что, как, сколько? Да и вообще, умному человеку отвечать на тупые вопросы унизительно, с чем на ура справляется языковая модель. Тема нейро-сотрудников сейчас актуальна для каждой сферы бизнеса, ведь нейронка может отвечать и голосом ;)
Установка библиотек:
!pip install pytelegrambotapi
#@title Установка библиотек. Сервисные функции
!pip -q install --upgrade tiktoken
#!pip -q install langchain openai chromadb
!pip -q install gspread oauth2client
!pip install gigachain-cli
# привет Минцифры
!gigachain install-rus-certs
Импорт библиотек. Работа с LangChain пока в процессе… поэтому тут только задатки.
#GigaChat
from langchain.schema import HumanMessage, SystemMessage
from langchain.chat_models.gigachat import GigaChat
import requests
import pathlib
import subprocess
import tempfile
# import ipywidgets as widgets
import os
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import re
import os
#import openai
import tiktoken
import re
Авторизация на Сбере:
giga = GigaChat(credentials='Ваш токен от Сбера==’
', scope='GIGACHAT_API_PERS') #Pers – если регистрировался как физик
giga = GigaChat(verify_ssl_certs=False)
Импорт библиотек для бота:
#import
import telebot
import re
import requests
from telebot import types
bot = telebot.TeleBot('ваш токен бота от Telegram');
Собственный промпт я решил загружать по ссылке прямо с Google Drive. Функция за грузки промпта:
def load_prompt(url):
# Extract the document ID from the URL
match_ = re.search('/document/d/([a-zA-Z0-9-_]+)', url)
if match_ is None:
raise ValueError('Invalid Google Docs URL')
doc_id = match_.group(1)
Грузим промпт из ссылки на текстовый файл…
# Download the document as plain text
response = requests.get(f'https://docs.google.com/document/d/{doc_id}/export?format=txt')
response.raise_for_status()
text = response.text
return f'{text}'
Кусок кода прямо со Developers.sber:
from langchain.schema import HumanMessage, SystemMessage
from langchain.chat_models.gigachat import GigaChat
def Answer(system, topic):
#"""Пример работы с чатом через gigachain"""
# Авторизация в сервисе GigaChat
chat = GigaChat(credentials="Токен Cбера==", verify_ssl_certs=False)
messages = [
SystemMessage(
content=system
)
Здесь выводим в терминал общение с ботом - подглядываем ;)
messages.append(HumanMessage(content=topic))
res = chat(messages)
messages.append(res)
print("User: ", topic)
print("Bot: ", res.content)
return res.content
Подключение промпта с Google drive:
expert_promt = load_prompt('https://docs.google.com/document/d/1UcXvbMP2snwZ0385fqEmGv0vTzAC7Bs-1aIcsjrMcV8/edit?usp=sharing')
Далее идет код работы с телеграм
# Handle '/start' and '/help'
@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
bot.reply_to(message, """\
Здравствуйте, Я Мария Абогада! Я могу давать юридические советы исходя из того как был сформулирован вопрос.
Рекомендую вам проверять полученные вопросы на очной консультации у адвоката, который сможет изучить ваши документы. \
Остальную телеграммную историю прикрутить не проблема, но смысл такой: запрос пользователя в LLM, ответ LLM пользователю.
Создание промптов в настоящий момент становится отдельным искусством. Поэтому обработка моделью большого промпта или предобработка (langchain) задача для меня актуальная.
Подергать ботов можно по адресам:
t.me/AdvokatAiBot
P.S.: буду рад сообщениям о косяках бота @LEbEdEV_AU
P.P.S.: пытаюсь запустить perceptron.press для публикации своих и чужих кодов =)