Время на прочтение
9 мин
Количество просмотров 49K
«История ничему не учит, а только наказывает за незнание уроков.»
(с) В.О. Ключевский
Друг предложил мне поработать над проектом для нашей кафедры. ТЗ пока не сформулировано, но точно известно, что это будет бот в телеге. Я хоть и питонист, но с ботами дел никогда не имел, поэтому пишу эту статью, как заметку, для себя и молодых перспективных ребят, чтоб у них было от чего оттолкнуться. Постараюсь писать максимально понятным и простым языком. Профессионалам тут особо делать не чего, хотя, может и придёт какая-нибудь идея.
Краткое описание бота
Наш бот будет создан на тематику Белого движения в гражданской войне в России (1917-1922) /сегодня разговор не о политике. Это просто пример/
-
По команде /start бот будет приветствие и посылать стикер;
-
После приветствия появится клавиатура под строкой набора сообщений с двумя кнопками «Вывести случайную цитату белогвардейца» и «Литература»
-
Нажатие на первую кнопку выведет рандомную цитату из excel файла (такое извращение нужно для подготовки к будущему проекту)
-
Нажатие на кнопку «Литература» выдаст инлайновую клавиатуру (далее будет прояснение, для тех кто не понял что это) с названиями произведений белогвардейских авторов или о белогвардейцах.После нажатия клавиатура пропадёт (просто этим навыком, думаю, необходимо обладать), начнётся загрузка pdf файла и появится оповещение «Приятного чтения!»
Вот такой простенький бот у нас по выйдет.
Начало. Создание бота и добавление библиотек.
Для начала добавим библиотеку pyTelegramBotAPI обычным пипом в cmd.
pip install pyTelegramBotAPI
А также загрузим простенькую библиотеку для работы с Excel. (ЧИТАЕТ ТОЛЬКО .xls!!!)
pip install xlrd
Время импортировать все необходимые библиотеки.
import telebot #импорт pyTelegramBotAPI
from telebot import types #также достанем типы
import random #рандом обязательно
import xlrd #библиотка чтения экселевских файлов
Далее нужно создать самого бота в телеграме. Для этого пройдёмся по следующим шагам:
-
Найти в поиске телеграма @BotFather
-
Написать ему команду /newbot
-
Первым сообщение отправить имя бота, а вторым его юзернейм (который пишется с @). Он должен быть уникальный и оканчиваться на Bot или _bot
После этих шагов батя пришлёт нам ссылку на нашёго бота и его API.
Если коротко, то API — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
(Более подробная инфа тут API)
Кодим
Раз библиотеки уже добавили, значит создаём переменную, определяющую бота с помощью API.
bot = telebot.TeleBot("TOKEN")
В начале, при написании команды /start, бот у нас выдаст приветствие. Соответственно, вставляем декоратор обработчика сообщений.
@bot.message_handler(commands=['start'])
Если кто не знает что такое декораторы, то есть достаточно подробная статья, рекомендую ознакомиться.
Коротко: Декораторы — это, по сути, просто своеобразные «обёртки», которые дают нам возможность делать что-либо до и после того, что сделает декорируемая функция, не изменяя её.
Теперь наш бот понимает команду /start, но ещё ничего не делает. Создаём функцию приветственного сообщения.
@bot.message_handler(commands=['start'])
def send_welcome(message):
stic = open('stic/welcome.webp', 'rb') #чтение файла в двоичном формате
# клавиатура
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
but1 = types.KeyboardButton("Вывести случайную цитату белогвардейца")
but2 = types.KeyboardButton("Литература")
markup.add(but1, but2)
bot.reply_to(message, "Здравствуй, {0.first_name}nСмотрю, ты за Единую, Великую и Недилимую".format(message.from_user)
,parse_mode='html',reply_markup=markup)
bot.send_sticker(message.chat.id,stic)
Пробежимся по коду
Строкой stic = open('stic/welcome.webp', 'rb')
мы записываем в переменную путь к нашему стикеру в формате .webp (скачать его можно из сообщений телеграма правой кнопкой мыши, «сохранить как»)
Ниже происходит создание клавиатуры markup = types.ReplyKeyboardMarkup(resize_keyboard=True) ,
а точнее запись в переменную подстрочной клавиатуры. Параметр resize_keyboard=True
подгоняет кнопки по высоте до возможного минимума. Также создаём две кнопочки и добавляем в клавиатуру:
but1 = types.KeyboardButton("Вывести случайную цитату белогвардейца")
but2 = types.KeyboardButton("Литература")
markup.add(but1, but2)
Клавиатура готова, но пока не используется. Пока оставим её и переключимся на сообщение. Одной строкой мы указываем боту отправить сообщение с текстом, именем отправителя ({0.first_name}
, а вытягивает его он из.format(message.from_user)
мы можем дописать .format(message.from_user, bot.get_me())
и вызвать имя бота, добавив в текст {1. first_name}
), правилом оформления parse_mode='html' (
также можно выбрать 'markdown')
и определением клавиатуры, которую создали выше.
bot.reply_to(message, "Здравствуй, {0.first_name}nСмотрю, ты за Единую, Великую и Недилимую".format(message.from_user)
,parse_mode='html',reply_markup=markup)
Последней строкой отправляем стикер bot.send_sticker(message.chat.id,stic)
Время дать возможность боту коммуницировать
@bot.message_handler(func=lambda message: True)
def menu(message):
if message.chat.type == 'private':
if message.text == "Вывести случайную цитату белогвардейца":
#достаём циататы из ворда
rb = xlrd.open_workbook('citat/citat.xls', formatting_info=True)
sheet = rb.sheet_by_index(0)
for rownum in range(sheet.nrows):
rand = int(random.randint(0,rownum))
row = sheet.row_values(rand)
bot.send_message(message.chat.id, row)
elif message.text == "Литература":
#инлайновая клавиатура
inMurkup = types.InlineKeyboardMarkup(row_width=1)
but1 = types.InlineKeyboardButton("И.Ф. Плотников - Александр Васильевич Колчак. Исследователь, адмирал, Верховный правитель России",callback_data='book1')
but2 = types.InlineKeyboardButton("А.В. Туркул - Дроздовцы в огне", callback_data='book2')
but3 = types.InlineKeyboardButton("П.Н. Врангель - Записки", callback_data='book3')
but4 = types.InlineKeyboardButton("М.Г. Дроздовский - Дневник", callback_data='book4')
inMurkup.add(but1, but2, but3, but4)
bot.send_message(message.chat.id, "Книги на любой вкус", reply_markup=inMurkup)
else:
bot.send_message(message.chat.id, "Я не знаю что и ответить")
Букв много, но сейчас всё раскидаем. Берём знакомый декоратор и делаем проверку лямбдой сообщение. Если не в курсе что такое лямбда-функция, то сюда. Бот у нас работает через личные сообщения, поэтому пропишем if message.chat.type == 'private':
, если требуется, то можете указать условия для
“group”, “supergroup” или “channel” , но нам это не нужно.
Далее идёт строка с текстом. ВАЖНО текст должен совпадать с названием кнопки клавиатуры, которую указывали выше.
Создаём экселевский файлик, в первую колонку вписываем цитаты, сохраняем в формате .xls в папку, как делали со стикером.
Со спокойной душой вызываем на файл на чтение rb = xlrd.open_workbook('citat/citat.xls', formatting_info=True),
указываем лист с которого считываем инфу sheet = rb.sheet_by_index(0)
индексы как у массива (первый элемент нулевой).
Далее определяем диапазон заполненных строк в листе и записываем их количество в rownum
. Используем эту переменную как верхнюю границу до которой может сгенерироваться случайное число rand = int(random.randint(0,rownum))
. Получив ячейку, вытаскиваем из неё значение row = sheet.row_values(rand)
отправляем его bot.send_message(message.chat.id, row)
.
Для литературы будем использовать инлайновую клавиатуру.
elif message.text == "Литература":
#инлайновая клавиатура
inMurkup = types.InlineKeyboardMarkup(row_width=1)
but1 = types.InlineKeyboardButton("И.Ф. Плотников - Александр Васильевич Колчак. Исследователь, адмирал, Верховный правитель России", callback_data='book1')
but2 = types.InlineKeyboardButton("А.В. Туркул - Дроздовцы в огне", callback_data='book2')
but3 = types.InlineKeyboardButton("П.Н. Врангель - Записки", callback_data='book3')
but4 = types.InlineKeyboardButton("М.Г. Дроздовский - Дневник", callback_data='book4')
inMurkup.add(but1, but2, but3, but4)
bot.send_message(message.chat.id, "Книги на любой вкус", reply_markup=inMurkup)
Определяем клавиатуру inMurkup = types.InlineKeyboardMarkup(row_width=1)
параметр row_width=1
говорит о том, что на одной строке будет одна кнопка. Принцип кнопок создания такой же как и у обычной клавиатуры, но появляется параметр callback_data
значения которого примет бот после нажатия на кнопку и поймёт что нужно сделать (далле это всё опишем).
Последней строкой отправляем сообщение и цепляем к нему инлайновую клавиатуру.
Работа с callback_data
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
if call.message:
if call.data == 'book1':
doc = open('boo/Plotnikov_Ivan-Aleksandr_Vasilevich_Kolchak_Issledovatel_admiral_Verhovnyi_pravitel_Rossii.pdf', 'rb')
bot.send_document(call.message.chat.id, doc)
elif call.data == 'book2':
doc = open('boo/Turkul_-_Drozdovtsy_v_ogne.pdf','rb')
bot.send_document(call.message.chat.id, doc)
elif call.data == 'book3':
doc = open('boo/Vrangel_P_Zapiski_a4.pdf', 'rb')
bot.send_document(call.message.chat.id, doc)
elif call.data == 'book4':
doc = open('boo/Drozdovsky_dnevnik_1963__ocr.pdf', 'rb')
bot.send_document(call.message.chat.id, doc)
#удаляем инлайновую клаву
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Книги на любой вкус",
reply_markup=None)
#Создаём уведомление
bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
text='Приятного чтения!')
except Exception as e:
print(repr(e))
Первым делом вызываем декоратор обработки колбэка и подтверждаем, что он был получен @bot.callback_query_handler(func=lambda call: True)
. Далее создаём функцию с конструкцией try-except (Что это? Чекай). Код хоть и приличный по объёму, но весь однотипный. Через if мы понимает какая «дата» пришла от кнопки, например if call.data == 'book1':
отвечает за первую кнопку с книгой про Колчака. Соответственно, командой
doc = open('boo/Plotnikov_Ivan-Aleksandr_Vasilevich_Kolchak_Issledovatel_admiral_Verhovnyi_pravitel_Rossii.pdf', 'rb')
мы создаём переменную doc в которую «суём» pdf файл, который сохранили в папку «boo» заранее.
Теперь строкой bot.send_document(call.message.chat.id, doc)
отправляем файл в чат.
После леса из наших elif удалим инлайновую клавиатуру, дабы не мешалась. Действие необязательно, но мы же с вами тренируемся, поэтому пусть код будет здесь.
Вызываем функцию bot.edit_message_text
По тексту определяется сообщение и
в параметр, который мы использовали для добавления клавиатуры — reply_markup
вносим значение None
.
Уведомление призывается заклинанием
Параметр show_alert
отвечает за вид оповещения (False — простое временное уведомление, True — уведомление с кнопкой «Ок»)
Завершаем эту ступень кода конструкцией проверки исключений (ошибок).
except Exception as e:
print(repr(e))
Финальный аккорд:
bot.polling(none_stop=True)
Именно этой командой и закончим наш код. Теперь бот постоянно проверяет не написал ли ему кто.
В итоге получился такой код:
import telebot
from telebot import types
import random
import xlrd
bot = telebot.TeleBot("TOKEN")
@bot.message_handler(commands=['start'])
def send_welcome(message):
stic = open('stic/welcome.webp', 'rb')
# клавиатура
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
but1 = types.KeyboardButton("Вывести случайную цитату белогвардейца")
but2 = types.KeyboardButton("Литература")
markup.add(but1, but2)
bot.reply_to(message, "Здравствуй, {0.first_name}nСмотрю, ты за Единую, Великую и Недилимую".format(message.from_user),parse_mode='html',reply_markup=markup)
bot.send_sticker(message.chat.id,stic)
@bot.message_handler(func=lambda message: True)
def menu(message):
if message.chat.type == 'private':
if message.text == "Вывести случайную цитату белогвардейца":
#достаём циататы из ворда
rb = xlrd.open_workbook('citat/citat.xls', formatting_info=True)
sheet = rb.sheet_by_index(0)
for rownum in range(sheet.nrows):
rand = int(random.randint(0,rownum))
row = sheet.row_values(rand)
bot.send_message(message.chat.id, row)
elif message.text == "Литература":
#инлайновая клавиатура
inMurkup = types.InlineKeyboardMarkup(row_width=1)
but1 = types.InlineKeyboardButton("И.Ф. Плотников - Александр Васильевич Колчак. Исследователь, адмирал, Верховный правитель России", callback_data='book1')
but2 = types.InlineKeyboardButton("А.В. Туркул - Дроздовцы в огне", callback_data='book2')
but3 = types.InlineKeyboardButton("П.Н. Врангель - Записки", callback_data='book3')
but4 = types.InlineKeyboardButton("М.Г. Дроздовский - Дневник", callback_data='book4')
inMurkup.add(but1, but2, but3, but4)
bot.send_message(message.chat.id, "Книги на любой вкус", reply_markup=inMurkup)
else:
bot.send_message(message.chat.id, "Я не знаю что и ответить")
#обработка callback
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
if call.message:
if call.data == 'book1':
doc = open('boo/Plotnikov_Ivan-Aleksandr_Vasilevich_Kolchak_Issledovatel_admiral_Verhovnyi_pravitel_Rossii.pdf', 'rb')
bot.send_document(call.message.chat.id, doc)
elif call.data == 'book2':
doc = open('boo/Turkul_-_Drozdovtsy_v_ogne.pdf','rb')
bot.send_document(call.message.chat.id, doc)
elif call.data == 'book3':
doc = open('boo/Vrangel_P_Zapiski_a4.pdf', 'rb')
bot.send_document(call.message.chat.id, doc)
elif call.data == 'book4':
doc = open('boo/Drozdovsky_dnevnik_1963__ocr.pdf', 'rb')
bot.send_document(call.message.chat.id, doc)
#удаляем инлайновую клаву
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Книги на любой вкус",
reply_markup=None)
#Создаём уведомление
bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
text='Приятного чтения!')
except Exception as e:
print(repr(e))
bot.polling(none_stop=True)
Пара слов от автора
Если есть желание показать друзьям что наворотили, то запускайте код и всё будет работать, но если код остановить или выключить комп, то бот ничего выдавать не будет. Из этого выходит, что для полноценного бота просто необходим хостинг, что, как правило, платно.
Больше функций, параметров и всего прочего находится в документации. Справочник на русском. Библиотеки pyTelegramBotAPI и xlrd.
Огромное спасибо за прочтение статьи! Надеюсь она оказалась полезной. А если понравилась, то поднимай статью в рейтинге и оставляй комменты)
Автор обитает тут: ВК, Инстаграм
Содержание
- Пишем простого телеграм-бота на гугл-таблицах
- Шаг 1
- Шаг 2
- Шаг 3 — Редактируем табличку
- Разбираемся с “листами”
- Разбираемся с колонками
- Flow Default
- Что можно делать с помощью бота?
- Продумываем сценарий
- Создаём Flow
- Создаём листы для базы данных
- Фигачим автоматизацию
- Как бот может вынести значение, которое требует юзер, из Excel таблицы? PyTelegramBotAPI
- 2 ответа 2
Пишем простого телеграм-бота на гугл-таблицах
— Ой, гугл, как мне собрать чат-бота? Да так, чтобы и бесплатно, и с супер гибким функционалом!
В первом приближении есть две опции:
А. Выучить Python, чтобы самостоятельно делать любых ботов. Сложность: 999; Стоимость: Условно бесплатно
Б. Оплатить подписку на конструкторе ботов. Сложность: изи-пизи; Стоимость: $$$
Ну нам, конечно же, бот нужен прямо сейчас, поэтому вариант с изучением питона отпадает. 🤓 Идём смотреть конструкторы — они, в основном, не супер гибкие, ну и платные конечно же. 😒 А ведь мы — кулцхакеры, мы же всё хотим беспалтно, да? Так что тоже не вариант…
И тут на сцену выходит @xlsheet_bot — это тг-бот, который позволит тебе создать бота бесплатно!
Шаг 1
Перед тем как идти в @xlsheet_bot нужно получить token будущего бота. Это такой уникальный ключ, которые авторизует нашего бота в царстве ботов.
- Заходим в телегу
- Идём сюда @BotFather— это официальный тг-бот для создания ботов. Ботов папка короче
- Пишем /newbot
- Вписываем любое имя, которое будет заканчиваться на “bot”. Лично у меня он с первого раза не принимает любое имя, поэтому я всегда 2 раза отправляю одно и тоже 🤔
- Дальше бот должен прислать нам сообщение, мол всё получилось, дать ссылку на нашего бота и token
Шаг 2
- Идём сюда @xlsheet_bot — это наш бот для создания бота из гугл-таблички
- Пишем /start
- Вводим свою гугло-почту (@gmail.com)
- Вводим token из BotFather
- Ждём
Ура, бот создал гугл-табличку! Иди проверять почту, там должно быть вот такое уведомление.
Шаг 3 — Редактируем табличку
Ну что, до этого всё было слишком легко, да? Давай теперь приступим к основном блюду!
Разбираемся с “листами”
- Settings, Broadcasts и Rules — их можешь особо не трогать
- Flow Default — условно это первый экран, который видит пользователь
- Flow Fallback —что-то типа страницы 404, нужно, чтобы вернуть пользователя к первому экрану, если он натыкает что-то не то
- Flow 1,2,3… — ключевая фишка в том, что мы можем создавать бесконечное кол-во новых листов и тем самым создавать новые сценарии использования нашего бота
Разбираемся с колонками
- type — тип функции, их предусмотрено много, но мы будем использоваться только три: text, action & ask
- text — собственно текст, который бот отправит пользователю
- data — техническое поле куда будем писать инструкции для функций
- typing — сюда можно вбить кол-во секунд сколько бот должен типа печатать сообщение, чтобы изображать живого человека 😅
- buttons — текст кнопок, если они предполагаются
- next — указание на следующее действие
Ну а строчки в табличке — это последовательность действий бота.
Flow Default
Это первый экран нашего бота, который человек увидит после того как отправит боту команду /start.
Мой бот приветствует человека по имени, спрашивает с чем он может помочь и показывает 3 кнопки (действия) на выбор.
Сначала про первую строчку, она выделена голубым на картинке выше.
- Функция type отправит пользователю текст из ячейки B2
- Условное обозначение <> заменится на имя пользователя, которое он указал в телеге
- В столбике data у меня стоит mode:quick, чтобы сообщение появлялось мгновенно
- В столбике buttons можно вписать сколько угодно кнопок, главное поставить знак ; между названиями. Также можно использовать эмодзи
- В столбике next указываем номера строк таблички на которые должны вести наши текстовые кнопки. Митапы — строчка 4, вопросы — 7, команда — 10
Зеленым отмечены команды действий, которые ведут на другие Flow — их в моем боте 5. Все действия здесь сделаны одинаково, поэтому разберем только строчку #4.
- Это функция action, поэтому мы должны использовать колону data, куда впишем что действие должно делать
- sendFlow означает, что мы хотим отправить бота посмотреть другой лист нашей таблички
- flow: Flow Meetup — указывает на какой лист таблички мы его отравляем, где “Flow Meetup” — название конкретного листа
В телеге этот “код” будет выглядеть так:
Ну а дальше дублируете лист Flow Default и таким образом создаёте новые сценарии!
Что можно делать с помощью бота?
В целом, у @xlsheet_bot есть целый справочник того, что можно сделать используя их конструктор, но мне не со всем удалось разобраться. 😅
Изначально я задумала сделать бота для выполнения трёх рутинных действий:
- Регистрировать народ для участия в митапах нашей команды
- Собирать вопросы (анонимно и НЕ анонимно)
- Отправлять рассылку
На мой взгляд, самое крутое, что можно делать с помощью бота — это собирать данные от пользователей в табличку. И вот как это можно использовать, например, для задачи по регистрации людей на митапчик.
Продумываем сценарий
Вообще будет полезным сначала нарисовать что-то типа блок-схемы, чтобы было проще собирать алгоритм бота. Очень соверую такое сделать, так как я сначала делала без нее и пришлось делать очень много правок, чтобы довести всё до ума.
- У нас иногда идет сбор заявок сразу на несколько митапов, поэтому нужна развилка
- Помимо почту хочется еще собирать вопросы для спикеров
- Бот умеет передавать данные только с помощью поля ask
- Я не разобралась как присвоить данным какой-то лейбл, поэтому пришлось на каждый митап делать несколько Flow (листов) в табличке 🙈
Создаём Flow
В итоге в табличке мы имеем 3 Flow для регистрации на митапы:
- Flow Meetup — со списком ближайших митапов и кнопка регистрации на каждый
- FLow Reg1 — регистрация на первый митап
- Flow Reg2 — на второй
Flow Meetup оч простой, если вы смогли повторить Flow Default, то с этим проблем у вас тоже не будет.
А вот Flow Reg1 уже выглядит посложнее, но обо всем попорядку.
Первым делом мы спрашиваем email, чтобы потом отправить юзеру приглос на почту, поэтому создаем функцию ask — она пробросит полученные данные обратно в табличку.
Далее нужна развилка хочет ли человек задать вопрос, поэтому делаем простую text функцию с 2 кнопками. Если человек выбирает “да”, то на этот случай у нас есть еще одна ask функция.
Самое главное действие в этом Flow — строчка 12 и функция action с действием saveRecord, именно благодаря ей мы получим ответы пользователя.
После того как данные отправлены показываем пользователю success screen и навигационные кнопки.
Создаём листы для базы данных
Чтобы функция saveRecord нам нужно создать лист с “базой”, куда бот будет скидывать данные. В моем примере такой лист называется Meetup1. Там нужно задать колонкам названия и вписать их под функцией.
Фигачим автоматизацию
Поскольку я не сообразила как присвоить Flow лейблы или теги и мне пришлось делать отдельные листы для каждого Flow и для каждой “базы” моя табличка стала очень перегружена “листами”. Поэтому я через Integromat настроила перенос данных с 2х листов в моей табличке в 1 базу на AirTable (таки уже с тегами конкретного митапа 😅). Также во время переноса Integromat фильтровал имейл, чтобы внести в AirTable только корпоративные.
Ну вот и всё. Таким же образом, как функцию ask почты можно настроить проброс в базу каких угодно данных. А если прикрутить ко всему этому Integromat, то можно и рассылки любые делать, и вообще очень много всего! Дерзайте!
Источник
Как бот может вынести значение, которое требует юзер, из Excel таблицы? PyTelegramBotAPI
Создаю телеграм бота (библиотека pytelegrambotapi). Допустим, бот связан с мебелью, а этой мебели 200 штук и писать if-elif-else, словари и т.д. очень долго и неудобно. Поэтому решил подключить к работе Excel таблицу (впервые с ним работаю, выбрал библиотеку xlrd, если библиотека выбрана не так, как надо, то прошу сообщить мне!).
Есть заголовки столбцов: название, материал, высота, ширина.
И должно выглядить вот так:
Юзер: «Пишет название мебели»
Бот: *берет всю инфу об ЭТОЙ мебели, кроме названия*
Бот: *Выводит* «Высота: х см., ширина у см., материал такой-то»
Возможно ли такое реализовать? Есть ли примеры? Примеров вообще не нашел в гугле. Заранее спасибо громадное))
2 ответа 2
Действительно, реализовать такое можно, но использовать для этих целей Excel — не лучшая идея. Почему? .xls это простой файл, считывание таких файлов относительно медленная операция, особенно с учетом того, что считывание экселя обычно значительно замедляется при увеличении количества данных (а что если у вас будет 10000 наименований мебели?) а так же с учетом того, что библиотека, которая его читает должна кроме прочего спарсить такой файл в удобный для работы в питоне объект (например в словарь или список). Такая задача, возможно, требует другого подхода.
Возможно вы скажете, что в вашей текущей задаче такой проблемы не появится, но ведь этот ответ в Т.Ч. для будущих поколений и для помощи вам в решении будущих задач 🙂
Теоретически (если вашей мебели действительно всего +-200 экземпляров) можно хранить всё в Json файле, примерно так:
Для работы с Json в Python есть готовый модуль json , а его считывание, запись и парсинг происходят весьма быстро, но такой подход все ещё будет не очень хорошо работать для большого количества данных, хотя к преимуществам можно отнести возможность создания произвольной структуры: Для каждой мебели вы можете указывать те поля, которые хотите, например сделать объект без поля цвет , без описания, или добавить к шкафу параметр наличия отдельной антресоли.
Однако раз (судя по вашему вопросу) вы имеете четкую структуру описания каждого объекта, возможно данное «преимущество» вам не нужно, тогда вы можете прибегнуть к более традиционному способу: использовать Базу данных
База данных имеет много преимуществ, к основным можно отнести следующие:
- Высокая скорость работы (относительно прошлых способов)
- Возможность общего доступа (например если кроме вашего бота информацию из неё будет читать ещё ваш сайт, или если вы захотите подключиться к ней из вне и внести изменения) Согласитесь, удобнее зайти в браузер и поменять всё оттуда, а не подключаться к файловой системе сервера, открывать файл, копировать, вставлять и т.д.
- Определение правил безопасности (В базе данных можно легко ограничить права разных пользователей, например, чтобы вы могли вносить любые правки, а ваш менеджер мог лишь смотреть на них)
- Определение связей данных (например, если вы хотите всегда знать к какому шкафу в комплекте идет данная антресоль, или к какому кухонному комплекту можно заказать в комплекте данный стол.
Более подробно о преимуществах вы можете узнать в интернете 🙂
Я же попробую показать пример кода работы с sqlite3 базой данных. Она имеет много ограничений, в сравнении с более «правильным» базами данных, такими как MySQL , PostgreSQL , Oracle и т.п. Но имеет очень важное преимущество: она не требует дополнительных настроек и установок, а её использование достаточно просто, например Python имеет встроенный модуль для работы с sqlite3 базами данных, в то время как для работы с postgreSQL понадобится установка дополнительных библиотек, например psycopg2 .
Попробую представить небольшой фрагмент (Очень упрощенный) Создания базы данных и добавления в неё информации:
Надеюсь пока не слишком сложно? После запуска данного кода в базе мы увидим следующую картину:
Сразу отвечу на возможно возникший вопрос тех, кто впервые столкнулся с базами данных, и не понимает, что это за странные буквы аля CREATE TABLE — это специальный язык SQL . Почти все реляционные базы данных (например все упомянутые выше) управляются при помощи этого языка, не стоит пугаться раньше времени, основы его очень просты например здесь можно изучить весь основной синтаксис за 20 минут.
Скорее всего, запуск данного кода, с заполнением базы данных вы хотите выполнять редко: при поступлении новых товаров, например раз в неделю. В остальное время вам, скорее всего нужно будет читать содержимое. Давайте рассмотрим пример:
Вот так можно сделать чтение всех записей из таблицы:
Согласитесь, не очень сложно?
Вот что мы получим в консоли:
А как известно простое правило гласит:
Всё что можно вывести в консоль, можно вывести и в telegram бота.
Но ведь нам нужно получать только конкретную мебель по названию? Да без проблем:
При этом в выводе мы увидим всю информацию об искомом столе:
И при этом логику вы можете легко подстроить под себя: находить только те модели, которые есть на складе, возможно пользователь захочет увидеть всю черную мебель и т.д. всю логику фильтрации (если вы сделаете её при помощи SQL) будет брать на себя БД, а она делает это куда быстрее питона (хорошо видно на большом количестве записей)
Но вы же всё-таки спрашивали про Excel, и я говорил, что можно сделать через excel? Ну, за слова надо отвечать. Вот так выглядит мой excel файл:
А вот как выглядит его считывание:
Сразу оговорись, я использую pandas и openpyxl , потому что новые .xlsx файлы библиотека xlrd обрабатывать не умеет.
Вам может показаться, что данный скрипт куда проще, Но за это приходится дорого платить: В то время как скрипт читающий записи из базы у меня выполняется
0.3 секунды, этот уже целых 2! И будьте уверены, чем больше будет записей, тем больше будет разрыв.
Более того, скрипт записи отрабатывает ещё дольше, около 3х секунд:
Но при его работе получается другая структура документа:
А значит, нужно либо учитывать это при считывании, либо изменять структуру получаемого файла под себя. Причем я, например, не смог в приемлемые сроки найти в интернете понятный гайд, как это сделать. Хотя нужные мне подсказки по работой с базе данных я нашел по первым же ссылкам.
Да, возможно есть и более быстрые способы работы с Excel, но они, очевидно, будут более сложными и менее понятными.
Исходя из всего выше перечисленного, как я уже сказал, для таких целей нужно использовать базу данных, ведь именно для этого они и придуманы.
Источник
0 / 0 / 0
Регистрация: 07.11.2021
Сообщений: 10
1
07.11.2021, 19:40. Показов 6526. Ответов 2
Хочу совместить вместе Telegram и Python.
Оба коды работают без ошибок, много над ними замучился я.
Внизу коды:
1. Для ответа в телеграм боте;
2. Для импорта нужных данных из Excel по поиску
Нужно сделать так чтобы, когда в боте что та написали, он начал искать это в файле Excel и ответил ползователю.
Если есть другие варианты кода, то я буду рад узнать.
Python | ||
|
Python | ||
|
0
Действительно, реализовать такое можно, но использовать для этих целей Excel — не лучшая идея. Почему? .xls
это простой файл, считывание таких файлов относительно медленная операция, особенно с учетом того, что считывание экселя обычно значительно замедляется при увеличении количества данных (а что если у вас будет 10000 наименований мебели?) а так же с учетом того, что библиотека, которая его читает должна кроме прочего спарсить такой файл в удобный для работы в питоне объект (например в словарь или список). Такая задача, возможно, требует другого подхода.
Возможно вы скажете, что в вашей текущей задаче такой проблемы не появится, но ведь этот ответ в Т.Ч. для будущих поколений и для помощи вам в решении будущих задач
Теоретически (если вашей мебели действительно всего +-200 экземпляров) можно хранить всё в Json
файле, примерно так:
[
{
"name": "Черный стол",
"sizes": "100x200x300",
"color": "black",
"description": "самый лучший стол"
},
{
"name": "Синий стул",
"sizes": "146x300x69",
"color": "blue",
"description": "самый лучший стул для лучшего стола"
},
{
"name": "Шкаф",
"sizes": "2x2",
"color": "purple",
"description": "Кто вообще заказал фиолетовый шкаф?"
}
]
Для работы с Json
в Python есть готовый модуль json
, а его считывание, запись и парсинг происходят весьма быстро, но такой подход все ещё будет не очень хорошо работать для большого количества данных, хотя к преимуществам можно отнести возможность создания произвольной структуры:
Для каждой мебели вы можете указывать те поля, которые хотите, например сделать объект без поля цвет
, без описания, или добавить к шкафу параметр наличия отдельной антресоли.
Однако раз (судя по вашему вопросу) вы имеете четкую структуру описания каждого объекта, возможно данное «преимущество» вам не нужно, тогда вы можете прибегнуть к более традиционному способу: использовать Базу данных
База данных имеет много преимуществ, к основным можно отнести следующие:
- Высокая скорость работы (относительно прошлых способов)
- Возможность общего доступа (например если кроме вашего бота информацию из неё будет читать ещё ваш сайт, или если вы захотите подключиться к ней из вне и внести изменения) Согласитесь, удобнее зайти в браузер и поменять всё оттуда, а не подключаться к файловой системе сервера, открывать файл, копировать, вставлять и т.д.
- Определение правил безопасности (В базе данных можно легко ограничить права разных пользователей, например, чтобы вы могли вносить любые правки, а ваш менеджер мог лишь смотреть на них)
- Определение связей данных (например, если вы хотите всегда знать к какому шкафу в комплекте идет данная антресоль, или к какому кухонному комплекту можно заказать в комплекте данный стол.
Более подробно о преимуществах вы можете узнать в интернете
Я же попробую показать пример кода работы с sqlite3
базой данных. Она имеет много ограничений, в сравнении с более «правильным» базами данных, такими как MySQL
, PostgreSQL
, Oracle
и т.п. Но имеет очень важное преимущество: она не требует дополнительных настроек и установок, а её использование достаточно просто, например Python имеет встроенный модуль для работы с sqlite3
базами данных, в то время как для работы с postgreSQL
понадобится установка дополнительных библиотек, например psycopg2
.
Попробую представить небольшой фрагмент (Очень упрощенный) Создания базы данных и добавления в неё информации:
import sqlite3 as sl
con = sl.connect('furniture.db')
try:
with con:
con.execute("""
CREATE TABLE furniture (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name VARCHAR(255),
size VARCHAR(255),
color VARCHAR(255),
description TEXT
);
""")
except sl.OperationalError:
print('База данных уже создана. Пропускаем этот этап')
# Записываем в базу какие-то записи
sql = 'INSERT INTO furniture (name, size, color, description) values( ?, ?, ?, ?)'
data = [
('Черный стол', '100x200x300', 'black', 'самый лучший стол'),
('Синий стул', '146x300x69', 'blue', 'самый лучший стул для лучшего стола'),
('Шкаф', '2x2', 'purple', 'Кто вообще заказал фиолетовый шкаф?')
] # data Может быть любыми вашими записями, как вы их запишите, это лишь ваше дело
with con:
con.executemany(sql, data)
Надеюсь пока не слишком сложно? После запуска данного кода в базе мы увидим следующую картину:
Сразу отвечу на возможно возникший вопрос тех, кто впервые столкнулся с базами данных, и не понимает, что это за странные буквы аля CREATE TABLE
— это специальный язык SQL
. Почти все реляционные базы данных (например все упомянутые выше) управляются при помощи этого языка, не стоит пугаться раньше времени, основы его очень просты например здесь можно изучить весь основной синтаксис за 20 минут.
Скорее всего, запуск данного кода, с заполнением базы данных вы хотите выполнять редко: при поступлении новых товаров, например раз в неделю. В остальное время вам, скорее всего нужно будет читать содержимое. Давайте рассмотрим пример:
Вот так можно сделать чтение всех записей из таблицы:
import sqlite3 as sl
con = sl.connect('furniture.db')
with con:
data = con.execute("SELECT * FROM furniture")
for row in data:
print(f'{row[4]} размером {row[2]} и с цветом "{row[3]}"')
Согласитесь, не очень сложно?
Вот что мы получим в консоли:
А как известно простое правило гласит:
Всё что можно вывести в консоль, можно вывести и в telegram бота.
Но ведь нам нужно получать только конкретную мебель по названию? Да без проблем:
import sqlite3 as sl
con = sl.connect('furniture.db')
furniture_name = 'Черный стол'
with con:
data = con.execute("SELECT * FROM furniture WHERE name=?", [furniture_name])
res = data.fetchone()
if not res:
print('Мебель не найдена')
else:
print(res)
При этом в выводе мы увидим всю информацию об искомом столе:
И при этом логику вы можете легко подстроить под себя: находить только те модели, которые есть на складе, возможно пользователь захочет увидеть всю черную мебель и т.д. всю логику фильтрации (если вы сделаете её при помощи SQL) будет брать на себя БД, а она делает это куда быстрее питона (хорошо видно на большом количестве записей)
Но вы же всё-таки спрашивали про Excel, и я говорил, что можно сделать через excel? Ну, за слова надо отвечать. Вот так выглядит мой excel файл:
А вот как выглядит его считывание:
import pandas as pd
xl = pd.ExcelFile('db.xlsx')
df1 = xl.parse(xl.sheet_names[0])
hist_data = df1.to_numpy().tolist()
for el in hist_data:
print(el)
Сразу оговорись, я использую pandas
и openpyxl
, потому что новые .xlsx
файлы библиотека xlrd
обрабатывать не умеет.
Вам может показаться, что данный скрипт куда проще, Но за это приходится дорого платить: В то время как скрипт читающий записи из базы у меня выполняется ~0.3 секунды, этот уже целых 2! И будьте уверены, чем больше будет записей, тем больше будет разрыв.
Более того, скрипт записи отрабатывает ещё дольше, около 3х секунд:
import pandas as pd
#xl = pd.ExcelFile('db1.xlsx', )
data = [
[1, 'Черный стол', '100x200x300', 'black', 'самый лучший стол'],
[2, 'Синий стул', '146x300x69', 'blue', 'самый лучший стул для лучшего стола'],
[3, 'Шкаф', '2x2', 'purple', 'Кто вообще заказал фиолетовый шкаф?']
]
df = pd.DataFrame(data)
df = df.transpose()
df.to_excel('db.xlsx')
Но при его работе получается другая структура документа:
А значит, нужно либо учитывать это при считывании, либо изменять структуру получаемого файла под себя. Причем я, например, не смог в приемлемые сроки найти в интернете понятный гайд, как это сделать. Хотя нужные мне подсказки по работой с базе данных я нашел по первым же ссылкам.
Да, возможно есть и более быстрые способы работы с Excel, но они, очевидно, будут более сложными и менее понятными.
Исходя из всего выше перечисленного, как я уже сказал, для таких целей нужно использовать базу данных, ведь именно для этого они и придуманы.
Организовать удобный учет и оцифровать процессы можно при помощи простейших и доступных всем инструментов. В данной публикации мы поделимся исходниками своей наработки, которую можно настроить по описанной инструкции или использовать как идею для реализации в своем бизнесе.
О чем пойдет речь
Мы, команда разработчиков helpexcel.pro, постоянно создаем готовые решения в Гугл таблицах для управленческого учета в малом бизнесе и бесплатно публикуем их в открытом доступе.
В этот раз мы поделимся своими наработками для учета небольшого склада. Это мини-сервис для учета небольшого склада, созданный на основе Гугл таблицы с возможностью ввода данных через Телеграм-бота.
Решение подойдет для небольших интернет-магазинов или, например, для учета расходных материалов.
Основные функции таблицы
Таблица устроена так, что в ней есть область для внесения справочников, область для учета приходов, область для учета событий и область аналитики. В качестве аналитики формируются отчеты о дебиторской и кредиторской задолженности, остатки по складу и расчет себестоимости.
В классическом виде представлены ABC и XYZ анализы товаров, что дает аналитику о том, в какие товары стоит дальше вкладываться.
Ниже делимся ссылкой на таблицу, но советуем вам ознакомиться с описанием, чтобы понять принцип ее устройства и использовать 100% возможностей.
Чтобы полноценно воспользоваться таблицей создайте ее копию на своем Гугл диске.
Описание работы таблицы
Для нас это уже не первая версия складской таблицы, и мы предусмотрели потребности пользователей в разных способах подсчета закупочной цены.Для корректного подсчета прибыли, рентабельности и ценности товаров на складе нужно выбрать метод расчета закупочной цены. Настройка находится на листе “Справочник”:
В рамках функций таблицы заложено 3 вида расчета: по средней цене прихода, метод FIFO и метод LIFO.
По средней цене прихода
Этот метод принимает за себестоимость среднее значение за указанный вами период.
Возьмем для примера период в 1 месяц.
Месяц назад закупочная цена была 1000 рублей, 16 дней назад — 1050 рублей, а 3 дня назад — 1000 рублей.
Для данного метода принимается средняя закупочная цена — 1050 рублей.
Метод FIFO
«Первым пришёл — первым ушёл»
Разберем этот принцип на примере. Вы приобрели 2 принтера по 5 000 ₽ за шт. и ещё два абсолютно таких же, но уже по 6 000 ₽.
У вас хотят купить один из них. Для продавца не важно, какой из них взять — они одинаковые. Но бухгалтеру важна общая стоимость товара на складе.
По методу FIFO нужно взять принтер, который поступил на склад раньше всех. То есть за 5 000 рублей.
В таком случае на складе останется 1 принтер стоимостью 5 000 рублей и 2 принтера за 6 000 рублей.
Общая стоимость 3-х принтеров на складе — 17 000 рублей.
Метод LIFO
«Последним пришёл — первым ушёл»
Для удобства возьмем тот же пример с принтерами. Все суммы и количества оставим теми же.
По методу LIFO мы должны взять принтер, который поступил на склад позже всех. За 6 000 рублей.
Тогда на складе останется 2 принтера стоимостью 5 000 рублей и 1 принтер стоимостью 5 000 рублей.
Стоимость оставшихся 3-х принтеров — 16 000 рублей.
Продолжаем заполнять справочник таблицы переменными. Укажите ваш часовой пояс, заполните справочники товаров, поставщиков и покупателей.
Далее переходим к учетной части таблицы.
Принцип работы каждого листа рассмотрим по отдельности.
Лист закупки
Информация о всех пополнениях склада фиксируется на данном листе или через Телеграм-бота.
Некоторые поля таблицы расчетные, в них работают формулы — не заполняйте эти столбцы.
Для обеспечения хранения большого числа строк и возможности связи с ботом к таблице подключена внешняя база данных. Для просмотра исторической информации можно выбрать период и нажать кнопку “обновить”.За счет этой настройки мы ускорили работу таблицы и не выводим невостребованные строки с данными.
Если же какая-то позиция была введена по ошибке или уже не актуальна, то ее можно удалить. Для этого в последнем столбце выделите галочкой нужные строки и нажмите на кнопку “удалить”.
Для ввода данных через telegram-бота нужно перейти по ссылке https://t.me/help_excel_storage_bot. Если вы правильно выполнили настройку бота, то у вас появится блок из 4-х кнопок:
Выберите “Закупки”.
Далее, следуя диалогу бота, вы вводите информацию о закупке. Поля диалога бота идентичны полям таблицы.
Для отображения информации, введенной через бота, нужно нажать кнопку “обновить”.
Лист отгрузки
Поля таблицы отгрузок работают по тому же принципу, что и лист закупок.
В правой части таблицы представлена область расчета себестоимости и показателей дохода от реализации товара. Показатели рассчитываются при нажатии на кнопку “обновить” или “сохранить”.
Лист аналитики
Данный лист состоит из трех блоков.
Область расчета складских запасов:
Дебиторская и кредиторская задолженность:
Сумма задолженности отражается в столбце “задолженность” если вы не поставили галочку напротив суммы в столбце “статус оплаты”. Тогда таблица считает, что платеж еще не проведен.
Также, если вы поставили в столбце “дней отсрочки” количество дней, и эта дата уже прошла, то сумма будет отражена в столбце “просроченная задолженность”.
Лист ABC анализа
Все товары делятся на 3 группы::
А: приносят 80% продаж
В: приносят 15% продаж
С: приносят 5% продаж
Лист XYZ анализа
Отчет показывает колебания спроса, товары разбиваются на 3 группы:.
X — товары продаются стабильно в течение года.
Категория Y — товары сезонного спроса.
Категория Z — спрос нерегулярен, какие-либо тенденции отсутствуют.
Лист ABC XYZ
На данном листе объединяется информация ABC и XYZ анализа. Товарная матрица делится на 9 групп:
- AX – приносящие значительную долю выручки со стабильным спросом;
- AY – большая доля выручки, но спрос подвержен колебаниям;
- AZ – хорошо продаются, но спрос плохо поддается прогнозированию;
- BX – средние объемы выручки, низкие колебания спроса;
- BY – средние объемы выручки, колебания спроса в пределах нормы, например, сезонные;
- BZ – средние объемы выручки, сложно прогнозируемый спрос;
- CX – низкая доля в прибыли, стабильный уровень спроса;
- CY – невысокий уровень прибыли при средних колебаниях спроса;
- CZ – низкий уровень прибыли, высокие колебания спроса.
Пример:
Настройка таблицы
Для начала нужно создать копию таблицы, как показано на картинке ниже:
В таблицу встроен скрипт, который считает себестоимость товаров. Для того, чтобы таблица работала правильно, нужно авторизоваться. Для этого нажмите на значок обновления на листе “Отгрузки”:
У вас появится такое поле:
Нажмите на “Продолжить”.
Выберите свой google-аккаунт
В появившемся окне нажмите на “Дополнительные настройки”:
Затем, на “Перейти на страницу “script”:
В следующем окне пролистайте вниз и нажмите на кнопку “Разрешить”:
Отлично, авторизация скрипта пройдена!
Настройка Telegram-бота
Основное предназначение бота — ввод данных о приходах и отгрузках в таблицу. Он служит больше как вспомогательный интерфейс для возможности мобильного ввода информации.
Для его настройки вам нужно на листе “Пользователи бота” добавить номера сотрудников, которые будут работать с ботом.
Номер телефона обязательно нужно ввести через цифру 7, без “+” и других дополнительных знаков. Так, как показано на скриншоте.
После нажатия на кнопку сохранить вам нужно будет принять соглашение об обработке данных.
Затем вам нужно перейти на страницу бота @help_excel_storage_bot.
В диалоге с ботом следует нажать на кнопку “Запустить” (если вы через ПК) или на кнопку “Старт” (если вы через телефон):
После этого также нужно будет принять соглашение об обработки данных и ввести свой телефон в формате +7##########.
На этом настройка чат-бота окончена. Подробное описание работы чат-бота и таблицы будет далее.
Спасибо, что полностью ознакомились с нашим руководством!
Если у вас еще останутся вопросы по таблице, то можете задать их в нашем телеграмм-чате:
- “Поговорить” с ChatGPT в Excel
- Как получить API токен
- ChatGPT API
- Completions API
- Модели Completions API
- Это бесплатно?
В последнее время о ChatGPT слышно практически отовсюду. И шумиха не безосновательна — Ведь этот инструмент поистине революционен. Он позволяет решать задачи буквально на лету и очень качественно отвечает на вопросы.
С его помощью можно написать статью, маркетинговый слоган, получить список идей на любую тему, написать программный код на нескольких популярных языках программирования, исправить код если он не работает, получить комментарии к нему.
Как ChatGPT может помочь пользователям Excel? Вот как (качественно!) сам ChatGPT отвечает на этот вопрос:
ChatGPT может помочь пользователям Excel, предоставляя советы и подсказки, отвечая на вопросы, решая проблемы и предоставляя инструкции по использованию различных функций и возможностей программы Excel. Некоторые конкретные способы, которыми ChatGPT может помочь пользователям Excel, включают:
- Предоставление советов по использованию функций: ChatGPT может предоставить пользователю советы по использованию различных функций Excel, например, как использовать функцию SUM для суммирования ячеек или функцию VLOOKUP для поиска данных в таблице.
- Решение проблем: если у пользователя возникают проблемы при использовании Excel, ChatGPT может помочь ему решить их, например, если он не может открыть файл или получает сообщение об ошибке.
- Предоставление инструкций: ChatGPT может предоставить пользователю инструкции по использованию различных функций Excel, например, как создать график или таблицу.
- Ответы на вопросы: если у пользователя есть вопросы по использованию Excel, ChatGPT может ответить на них, например, как скопировать формулу из одной ячейки в другую или как настроить печать на нескольких страницах.
- Подсказки по повышению эффективности: ChatGPT может предоставить пользователю подсказки по повышению эффективности при использовании Excel, например, как использовать ячейки с именами или как создать макрос для автоматизации повторяющихся задач.
В целом, ChatGPT может быть полезным инструментом для пользователей Excel, которые нуждаются в помощи при использовании программы.
Поскольку меня неоднократно просили включить поддержку ChatGPT в мою надстройку, я охотно пошёл навстречу и оперативно разработал процедуру которая позволяет “разговаривать” с речевыми моделями от компании OpenAI, той самой что разработала ChatGPT.
Но прежде нужно получить персональный токен, который позволит API вас идентифицировать и списывать деньги за его использование. На старте OpenAI “дарит” вам некоторое количество денег для тестового использования в течение 3 месяцев, виртуально зачисляя их на ваш аккаунт.
Как получить API токен
Чтобы получить токен, потребуется регистрация на сайте OpenAI. После регистрации можно будет посмотреть текущие токены и сгенерировать новый токен.
ChatGPT API
Релиз API ChatGPT состоялся 1 марта 2023 г. и стал, пожалуй, поворотной точкой в истории сервиса. Чтобы не отставать от прогресса, я внедрил в надстройку и его.
Его ответы максимально похожи на человеческие, в них практически нет речевых и прочих ошибок, он может решить множество самых непростых задач и дать совет в ситуациях, когда на поиск ответов в интернете вы могли бы потратить несколько часов.
А на английском языке он может написать даже стихотворение, где слова будут в рифму.
Процедура доступна в полной версии надстройки !SEMTools.
Completions API
Этот API дополняет текст, который вы ему отправляете, выдавая несколько вариантов продолжения, из которых можно выбрать. Есть несколько моделей
Процедура доступна в один клик с панели надстройки, в разделе WEB-инструменты. Запросы рекомендуется писать на английском языке. Доступна в любой версии надстройки.
Как воспользоваться процедурой:
- Задать текстовую последовательность, которую вы хотите, чтобы “продолжил” искусственный интеллект;
- Выбрать нейронную модель;
- Ввести максимальное количество токенов (условно, слов) в ответе;
- Указать персональный API токен для аутентификации
Как видите в примере выше, API не дает ответ, если сумма токенов в вопросе и предполагаемом ответе превышает установленные лимиты. Для модели Да Винчи это 2049 токенов (условно, одно слово это один токен).
Вопросы попадают в ячейки первого столбца, а ответы – в ячейки напротив. Больше примеров использования API можно найти на сайте OpenAI.
Модели Completions API
Их четыре, от самой быстрой и глупой до самой умной и медленной. Да Винчи — наиболее продвинутая модель. Однако, она существенно отстает от того, что выдаёт ChatGPT через веб-интерфейс и API. К тому же, на момент написания статьи API ChatGPT в 10 раз дешевле чем модель Да Винчи. Но все еще равен по цене Кюри и дороже остальных моделей.
Наиболее прикладная задача, которую могут решать эти модели – это дополнение и продолжение уже имеющегося текста. Но иногда неплохо справляются с прикладными советами и описаниями различных объектов, идей, персон и т.д..
Это бесплатно?
Бесплатный сыр, ну вы поняли.
Но на заре развития продукта OpenAI предоставляет привлекательные условия. В первую очередь это грант в 18 USD на использование нейронных моделей на 3 месяца. Каждый ответ использует некоторое количество токенов, если доверять сайту компании, то 1.000 токенов это примерно 750 слов в ответе.
Модель | Цена за 1K токенов |
Ada | 0.0004 USD |
Babbage | 0.0005 USD |
Curie | 0.0020 USD |
Davinci | 0.0200 USD |