Данный пример это просто побаловаться. Однако на работе эта разработка приобрела глубокий практический смысл:
Развернут Confluence, заполненный тысячами статей технической документации различных команд разработчиков. Что-то нужное отыскать в данном море хаоса - достаточно нетривиальная задача, поэтому команда эксплуатации скормила свою часть документации нейросети и сделала телеграмм-бот, через который на свои запросы получали конкретные ответы с ссылками. Мне подумалось, что слишком эгоистично и несправедливо скрывать столь полезную разработку, и попросил доступ к API этой нейросети, чтобы сделать некую единую точку входа из 1С. Завёл бота, в процедуре обработки сообщений просто делается вызов API, пересылается ответ от ИИ - это работает!
Но аппетит приходит во время еды. Почему бы не расширить возможности нового бота? Пусть он научится обрабатывать разнообразные запросы, возможно, работать с файлами… Очень соблазнительно, правда? Выбор пал на Deepseek, так как его бесплатно можно развернуть на мощностях, но мощностей у меня не было, поэтому зарегистрировался на их сайте и закинул на счет для API 50 юаней ради экспериментов. Как закинул, это уже отдельная история. Оказалось что Deepseek очень болтлив, прям невероятно словоохотлив. Ответ на простой вопрос мог задерживаться на долгие минуты. Мало того, ограничение на сообщение в системе взаимодействия 4000 символов, с учетом разметки, то есть надо научиться разбивать длинные тексты на удобные кусочки. Стал читать что есть в сети по этой теме, и накопал что вообще-то надо использовать SSE-запросы, которые 1С поддерживает никак. Это позволило бы в реальном времени получать часть ответа и выводить его на экран. А потом ещё вспомнил, что нужно передавать историю сообщений, чтобы ИИ понимал контекст вопросов.
Исходя из требований появилось такое решение:
- На node js делается мини сервис с двумя методами. Один которое принимает запрос от 1С, пересылает его Deepseek. Получив ответ, он тут же возвращает 1С некий идентификатор сообщения, но продолжает считывать ответ, резать на порции и сохраняет. Второй метод отдаёт сохраненные порции.
- Делается база данных, где можно хранить историю ответов, историю запросов в разрезе пользователей. Я использовал PostgreSQL.
- 1С в обработчике бота ОбработкаСообщенияСистемыВзаимодействия делает запрос на сервис
- 1С получив номер идентификатора, начинает требовать у сервиса не выданные сохраненные порции ответа. Порция отдаётся один раз, и помечается выданной.
Решение простое и, главное, работающее!
Забавляло наблюдать, как Deepseek рассуждает над абсурдными вопросами вроде вычисления массы Земли в тухлых котлетах, но как оказалось, может достаточно неплохо писать запросы на 1С, если правильно прописать в контексте нюансы формирования и структуру базы. То есть в свободной форме, описываешь какие данные нужны от базы, и получаешь запрос... PROFIT!. Но есть ограничение, 64 кб на размер запроса в ИИ. Мне не удалось влезть в размер при описании даже не очень большой кастомной конфигурации. Печалити, а мог бы быть почти Copilot.
Собрал тестовый пример. Файловая база с комьюнити лицензией, бесплатная система взаимодействия из 1С:Диалог, бесплатная СУБД, бесплатный мини сервис. Единственное слабое звено - это сама нейронка, так как я тестировал только Deepseek, и в открытый доступ свои данные для подключения выкладывать не буду. Но если кто-нибудь решится потыкать данное решение, кажется что-нибудь придумает.
Из того что можно улучшить - ответ приходит в markdown. Так как в системе взаимодействия используется форматированный документ, то лучше текст сконвертировать в html. Через iisnode также можно развернуть сервис, который это будет делать. Было бы неплохо сделать передачу и анализ файлов. Если развернуть локально модель и изолировать от интернетов, кажется, это достаточно безопасно.
Спасибо за внимание!
Ссылки для скачивания
Репозиторий - https://github.com/dns-technologies/deepseek_for_1c
Вступайте в нашу телеграмм-группу Инфостарт