Как я сервис-инженеров с AI подружил

04.09.23

Интеграция - Нейросети

Искусственный интеллект так или иначе подбирается к бизнесу (или наоборот). Хочу поделиться с вами одним примером. Разработка относительно простая, но очень показательная. Хорошо демонстрирует какую практическую ценность можно извлечь из новой технологии.

Задача была поставлена так:

Есть сервис-инженеры. Они обслуживают какое-то оборудование и в процессе обслуживания расходуют некие материалы. (Далее в тексте названия материалов я заменил на выдуманные мной). Требовалось, чтобы факт расходования материала фиксировался сервис-инженером немедленно и "прилетал" в 1С.

Такая задача прекрасно решается с помощью обычного телеграм-бота с кнопочками. Но хотелось чего-то большего и было решено делать телеграм-бота, который будет понимать, что ему говорят сервис-инженеры. Т.е. на входе у нас не текст и не нажатия на кнопки, а голосовое сообщение. Это голосовое сообщение должно быть распознано, или как это еще называется, транскрибировано, в общем оно должно превратиться в текст. Текст, полученный в результате транскрибирования голосового сообщения обрабатывается большой языковой моделью. На выходе языковая модель выдает нам структурированные данные, а именно: какой материал списывается, в каком количестве и по номеру какого заказа. Далее, из этого уже получается документ в 1С.

Последний шаг для большинства из присутствующих здесь является тривиальным. А вот предыдущие два могут показаться чересчур сложными для такой простецкой задачи. Но лично я убежден, что интерфейсы такого рода очень востребованы. Пользователи хорошо их воспринимают. А специалистам не плохо бы и освоить. 

В конце статьи вернемся к этой теме, а пока я расскажу (с техническими деталями) как я это сделал. И надеюсь, что в конце моего рассказа, вам это уже не будет казаться таким сложным.

Поставщик API для большой языковой модели на момент написания статьи один. Это OpenAI. С поставщиками решений для транскрибирования аудио все значительно проще. Их много, и есть из кого выбирать. Но я особо не заморачивался с выбором. Дело в том, что у OpenAI тоже есть модель для транскрибирования Whisper. Она обучена на 680 000 часов аудио. Т.е. это довольно большая модель, а для нейросетей размер имеет значение, причем решающее. 

Фрагменты кода будут на Python. Вообще-то я делаю телеграм-ботов и на 1С, но конкретно этот был сделан на Python. Думаю, это непринципиально. Кому это потребуется, тот с легкостью переведет это на 1С.

Для начала я решил, что мне нужно прочитать голосовое сообщение из телеграм, транскрибировать его и оправить результат обратно в телеграм, но уже в виде текста. Сообщения из телеграм читаются так:

    api_url = f"https://api.telegram.org/botхххххххххххххххххххххххххххх/getUpdates?offset={offset}"
    response = requests.get(api_url)
    data = response.json()

Дальше немного заморочено. В ответе мы получаем не сам файл, а его id. По этому id надо получить ссылку для скачивания и уже только потом скачать. Т.е. у нас тут еще два запроса

            file_id = data["result"][0]["message"]["voice"]["file_id"]
            api_url = f"https://api.telegram.org/botхххххххххх/getFile?file_id={file_id}"
            response = requests.get(api_url)
            filedata = response.json()
            file_path = filedata["result"]["file_path"]

            api_url = f"https://api.telegram.org/file/botхххххххххххххххххх/{file_path}"
            response = requests.get(api_url)

            if response.status_code != 200:
                exit(1)
            with open('tempvoice.ogg', 'wb') as file:
                file.write(response.content)
            audio_file = open('tempvoice.ogg', 'rb')

Теперь у нас "на руках" аудио-файл, который можно отправлять OpenAI для транскрибирования. И это будет ровно одна строка

transcript = openai.Audio.transcribe("whisper-1", audio_file)

Здесь я пользуюсь библиотекой от OpenAI (отчасти поэтому еще и был выбран Python). Можно и без библиотеки, через request. Будет на несколько строк больше.

Как бы там ни было, результат "улетает" обратно в телеграм.

            myresponse = {}
            myresponse["chat_id"] = chatid
            myresponse["text"] = transcript["text"]

            api_url = "https://api.telegram.org/botххххххххххххххххххххх/sendMessage"
            response = requests.post(api_url, json=myresponse)

 

И оно работает!

Глядя на картинку, вы можете догадаться, что для теста я не придумал ничего другого, как сказать "раз, два, три". Потом "четыре, пять". Ну а "вышел зайчик погулять" уже нельзя было не сказать. Как видите, "вышел зайчик" превратилось в "пришел зайчик". Вот тут важный момент. Какими бы хорошими ни были транскрибирующие модели, ошибки все равно будут (по крайней мере на текущий момент так). Причем, ошибок будет не мало. Это сильно зависит от языка. Для некоторых языков количество ошибок делает процесс бессмысленным. Но с русским языком нам повезло. Он входит в десятку лучших, обгоняя, например, французский.

Все-таки почти 6% ошибок означает, что ошибки будут в каждой расшифровке аудио. Я в этом убедился, когда некоторое время назад занимался другим проектом. Это была сеть стоматологических  клиник. Было очень смешно, когда "зуб мудрости" упорно превращался в "жуб мудрости". До недавнего времени это было проблемой. Вот получили мы расшифровку. А дальше что с ней делать? Да, человек ее без проблем прочтет, потому что ошибок не так уж много. Но человек в общем случае мог бы и прослушать исходный файл. Все самое интересное должно происходить дальше, при автоматической обработке полученного текста. И тут ошибки начинают сильно мешать. Все изменилось с появлением больших языковых моделей. Зуб или жуб, пришел или вышел - нет никакой разницы. Оно вас в любом случае поймет.

Отправляем расшифровку на обработку языковой моделью.

            systempromt = """В распоряжении сервис-инженера имеются следующие материалы 
            фильтрА12 фильтрБ20 фильтрД100 уплотнитель23 уплотнитель56 фреон120 фреон300"""
            userpromt = transcript["text"]+""" На основании этой расшифровки голосового сообщения дай ответ на следующие вопросы
            1. Какой материал из имеющихся списывается
            2. Количество
            3. Номер заказа"""

            msg = []
            msg.append({"role":"system","content":systempromt})
            msg.append({"role":"user","content":userpromt})
            responseai = openai.ChatCompletion.create(
              model="gpt-3.5-turbo",
              messages=msg,
              temperature=0,
              stop=["#", ";"]
            )

Systempromt и userpromt. Можно сказать, что суть работы AI инженера заключается в том, чтобы присвоить правильные значения этим двум переменным. Кажется, что это просто. Ну... иногда это действительно просто.

Обратите также внимание на параметр temperature. Если мы не хотим, чтобы модель креативничала (а мы в данном случае не хотим), тогда в этом параметре надо задать 0. Пробую модель на разных вариантах. От четкого "фильтр D100 одна штука заказ тридцать пять шестьдесят пять". До "значит так... эта... уплотнитель спиши двадцать третий... а нет нет... пятьдесят шестой пятьдесят шестой на заказ десять... да блин че там... двадцать один... ага... две штуки" 

  

Модель отрабатывает без ошибок. В принципе, из этого уже можно создавать документы в 1С. Но лучше немного поправить promt.

            userpromt = transcript["text"]+""" На основании этой расшифровки голосового сообщения дай ответ на следующие вопросы
            1. Какой материал из имеющихся списывается
            2. Количество
            3. Номер заказа
            Ответ представь в формате json"""

Для создания документов нам нужны структурированные данные. Поэтому в нашем случае будет логичным попросить модель выдавать структурированные данные.

А она это умеет!

 

Структурированные данные на выходе нам пригодятся также для обработки крайних случаев. Например, вот что я получил после того, как сказал в микрофон "раз два три четыре пять"

Особенность языковой модели в том, что она суперисполнительна и будет пытаться выполнить работу "изо всех сил". Опция "да ну тебя нафиг, что за ерунду ты тут бормочешь" не то чтобы отсутствует, но встречается очень-очень редко. То, что вы видите на картинке сейчас принято называть "галлюцинациями". Считается, что эти самые "галлюцинации" являются главной проблемой в использовании больших языковых моделей. В нашем случае это никакая не проблема. Мы ожидаем получить структуру из трех элементов без вложенностей. И если мы получаем что-то не то, значит... что-то не то.

Время от времени модель как бы уставала со мной общаться и вместо положенных слов "материал", "количество" и "номер заказа" выдавала скупые 1,2,3

Тут проявляется еще одна особенность больших языковых моделей. Некоторая непредсказуемость их поведения. Но для нас это опять же не проблема. Можно брать значения первого, второго и третьего элементов структуры, не обращая внимания на имена. Также можно обращаться по имени "материал", а если его нет, то по имени "1". Лично я выбрал второй путь.

Эксперименты закончены. JSON уезжает в 1С, чтобы превратиться в документ. А нам надо вывести пользователю "человеческое" сообщение.

 

Вот тут, кстати можно было бы и кнопочки "да", "нет" прикрутить. Для экономии денег. Но было решено сделать интерфейс только голосовым, без кнопок.

Дело сделано. Поговорим на тему того, а в чем, собственно, прелесть таких интерфейсов. Самое главное, что нам дали большие языковые модели заключается в том, что оно нас понимает. У слова "понимает" может быть много смыслов. Что такое "понимать" с философской точки зрения мы не поймем никогда. Но есть и чисто практический подход. Если что-то может продолжить то, что вы начали, значит оно вас понимает. И этот практический подход работает. А это, в свою очередь, означает, что теперь любой может рассчитывать на то, что компьютер его поймет. Это трудно переоценить. Теперь компьютер будет делать то, что вы хотите здесь и сейчас. Так было и раньше, только для этого надо было быть программистом. А все прочие должны были довольствоваться тем, что компьютер будет делать то, что хотел программист. Большие языковые модели переворачивают эту ситуацию. Думаю, что в скором времени пользователи будут требовать от нас, специалистов, такие интерфейсы, какой я вам здесь продемонстрировал. И только такие.

Надеюсь, что моя статья поможет уважаемым коллегам начать осваивать новую технологию. 

 

 

  

искусственный интеллект AI GPT

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159414    872    399    

861

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7768    55    22    

66

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    23432    68    45    

117

Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция мессенджера WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

15600 руб.

23.06.2023    9482    58    12    

34

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 руб.

27.12.2021    38196    108    161    

201

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8500 руб.

10.11.2023    10417    36    21    

61

SALE! 15%

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 19980 руб.

06.10.2023    15396    35    7    

70

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3120 руб.

14.01.2013    187974    1138    0    

912
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 217 05.09.23 07:23 Сейчас в теме
будущее наступило
mkalimulin; +1 Ответить
2. mkalimulin 1230 05.09.23 07:58 Сейчас в теме
(1) ага, а прошлое закончилось )
starik-2005; kraynev-navi; +2 Ответить
9. starik-2005 3087 07.09.23 12:24 Сейчас в теме
(2) Будешь делать следующий шаг, или подсказка нужна? ))
mkalimulin; +1 Ответить
10. mkalimulin 1230 07.09.23 12:28 Сейчас в теме
(9) Буду делать, и не один ))) А подсказки всегда приветствую
11. SlavaKron 08.09.23 00:31 Сейчас в теме
(10) А чего "дальше" просветите убогого?
12. mkalimulin 1230 08.09.23 07:44 Сейчас в теме
(11) Насколько я понимаю, starik-2005 полагает, что этот процесс приведет к тому, что человек сказал, что ему надо, человек получил, что ему надо. Человек сказал что-то и в базе данных появилась запись. Человеку надо посмотреть что-то в своей базе данных, он опять же сказал что он хочет посмотреть и получил. В этом случае должно произойти переосмысление роли и места таких специфических прокладок между человеком и компьютером, какой сейчас является платформа 1С.
AlexanderEkb; +1 Ответить
3. ITEkb 05.09.23 11:32 Сейчас в теме
В моменты прочтения подобных статей закрадывается тень мысли..
- Хммм, а чем это занимаюсь я? ))))

Очень интересная разработка.
Спасибо за то, что поделились.
mkalimulin; +1 Ответить
4. mkalimulin 1230 05.09.23 11:52 Сейчас в теме
(3) Ну я тоже не только этим занимаюсь, а хотелось бы.
Спасибо за отклик!
5. fancy 35 06.09.23 08:06 Сейчас в теме
А исходное голосовое сообщение к документу списания прикрепляете (для проверки корректности:)?
6. mkalimulin 1230 06.09.23 08:13 Сейчас в теме
(5) Нет, не прикрепляю. Но в принципе такое возможно
7. Xershi 1555 07.09.23 01:47 Сейчас в теме
Как раз обсуждал такую задачу. А тут готовая статья!!
8. mkalimulin 1230 07.09.23 02:10 Сейчас в теме
(7) Главное, что оно работает. Качество распознавания в такой связке: ASR (automatic speech recognition) + большая языковая модель может быть очень высоким
13. RayCon 745 10.09.23 15:31 Сейчас в теме
Всегда приятно читать статью Профессионала (с большой буквы). Спасибо за окно, приоткрытое в наступающее будущее!
mkalimulin; +1 Ответить
14. mkalimulin 1230 10.09.23 17:54 Сейчас в теме
(13) Спасибо за отзыв!
Оставьте свое сообщение