Вызов функций 1С в Ollama

03.04.25

Интеграция - WEB-интеграция

В этой статье мы научим LLM-модель вызывать функции 1С и расширять свой ответ информацией из нашей базы.

Например, пользователь спросит «Есть ли у вас красные яблоки в наличии?», после чего модель зайдёт в 1С, посмотрит остатки красных яблок и даст точный ответ.  

Для снижения порога вхождения статья будет построена на облачных серверах. Поэтому для реализации нам понадобится лишь Windows 10 или выше, т.к. начиная с Windows 10 появился встроенный SSH-клиент. А также нам понадобится 115 рублей для аренды серверов. Примерно столько мне потребовалось денег, чтобы за 2 часа аренды двух серверов с тарифами на апрель 2025 решить поставленную задачу.  

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

 

Шаг 1. Публикуем демо-базу 1С

Заходим на сайт 1С и запрашиваем учебную платформу 1С. Нам потребуется платформа не ниже 8.3.25.1394. Замечание: если есть стандартная платформа и комьюнити-лицензия (для разработчика), то можно воспользоваться таким вариантом.

Регистрируемся в Selectel и создаем облачный сервер (Продукты — Облачные серверы). Имя сервера — fc-1c (далее его IP адрес — IP_АДРЕС_FC_1C). Источник - Windows Server 2019 Standard. Конфигурация — Фиксированная, Standard, 1 vCPU. Диски — 40 Гб. Сохраняем пароль администратора. Нажимаем кнопку «Создать сервер». Данный сервер стоит 2,81 руб. в час. Если использовать собственный сервер, то достаточно выбрать машину, которая удовлетворяет минимальным требованиям для запуска Windows 10.

Через RDP заходим на выданный IP-адрес сервера — IP_АДРЕС_FC_1C.

Устанавливаем учебную платформу 1С: указываем «Web server extension modules» и «Additional interface — Russian».  
Загрузим демо-конфигурацию 1С в локальную базу с именем ollama-function-calling-1c.

Устанавливаем IIS и даём доступ на локальный путь к базе пользователю IUSR. Т. к. учебная платформа x86, не забываем включить разрешение 32-разрядных приложений (такая описана в этой статье). Публикуем демо-базу от имени администратора в вебе и убеждаемся, что база доступна по ссылке http://IP_АДРЕС_FC_1C/ollama-function-calling-1c/ru/.

 

Шаг 2. Публикуем LLM-модель

На своём компьютере генерируем SSH-ключ. Открываем командную строку (CMD) и набираем ssh-keygen. На все вопросы следует просто нажимать Enter. Запоминаем публичный ключ, который сформировался в файле C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh/id_ed25519.pub.

В Selectel и создаем облачный сервер (Продукты — Облачные серверы). Имя сервера — fc-ollama (далее его IP-адрес — IP_АДРЕС_FC_OLLAMA). Источник — Ubuntu 24.04 LTS 64-bit CUDA 12.8 Docker. Конфигурация — Фиксированная, GPU, 4 vCPU и 1 x Tesla T4 16 Гб, диски — 60 Гб. SSH-ключ — указываем наш сформированный ключ. Нажимаем кнопку «Создать сервер». Данный сервер стоит 54,2 руб. в час. Если использовать собственный сервер, то необходимо выбрать машину с видеокартой с памятью не менее 16 Гб.

Через командную строку подключаемся к нашему серверу: ssh root@IP_АДРЕС_FC_OLLAMA.

Обновляем индексы — apt-get update.
Обновляем пакеты — apt-get upgrade. На всё соглашаемся и во всплывающем окне нажимаем Enter.
Устанавливаем git — apt install git.
Устанавливаем docker compose — apt-get install docker-compose-plugin.
Скачиваем демо-проект LLM-модели — git clone https://github.com/HardAndHeavy/ollama-function-calling.
Переходим в каталог ollama-function-calling — cd ollama-function-calling.
Создаём файл настроек — make gen. На все вопросы нажимаем Enter, устанавливая значения по умолчанию.
Запускаем конфигурацию для модели — make run-1c.
Загружаем LLM-модель — make seed-saiga-llama.

Убеждаемся, что LLM-модель работает, — заходим на http://IP_АДРЕС_FC_OLLAMA и общаемся с моделью. Внимание, первое сообщение будет обрабатываться долго, т. к. модель всё ещё загружается в видеокарту. Необходимо подождать.

Переходим в настройки Open WebUI (иконка пользователя справа сверху — Настройки).  
Свяжем 1С и Open WebUI: Учетная запись — Ключи API (показать) — Создать новый секретный ключ (далее КЛЮЧ_API).  
Свяжем Open WebUI с 1С: Настройки администратора — Конвейеры — Base Url (далее BASE_URL) устанавливаем http://IP_АДРЕС_FC_1C/ollama-function-calling-1c/hs/function-calling и нажимаем кнопку «Сохранить».

Заходим в базу 1С — Демо. Вызов функций 1С из Ollama — Настройки. Имя сервера - IP_АДРЕС_FC_OLLAMA. Ключ API — КЛЮЧ_API.

Замечание. Остановить работу сервисов LLM-модели можно командой — make stop. Запустить работу — make run-1c.

 

Шаг 3. Тестирование

Внимание, т. к. платформа учебная, то необходимо закрыть конфигуратор 1С и предприятие 1С. Не должно быть никаких соединений с базой. Проверить работу HTTP-сервиса можно по ссылке http://IP_АДРЕС_FC_1C/ollama-function-calling-1c/hs/function-calling — успешным ответом будет «Calling 1C functions from Ollama».

Демо работы в Open WebUI

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

Демо работы в 1C

 

 

Как это работает

Для того чтобы заработал механизм вызова функций, Open WebUI расширяется плагином Pipelines. После его включения Open WebUI начинает прогонять каждый вопрос дважды. В результате чего мы получаем:

  • Фильтр сообщений — проверяет сообщения на запретные темы (взлом, мошенничество, создание запрещенных вещей и т. д.).
  • Лимит запросов — ограничение пользователей по количеству запросов.
  • Логирование запросов — сохранение того, что пользователи спрашивают и что им отвечает модель.
  • Дополнение запросов нужным контекстом — например, документацией.
  • Вызов функций.


В нашем случае Pipelines перехватывает сообщение и пытается определить, нет ли в вопросе чего-то, что связано с описанными функциями в файле function_calling_1c.py:

def cost_of_remaining_stock(
            self,
            days: int,
        ) -> str:
            """
            Get the cost of the remaining stock on the specified date.

            :param days: The number of days of deviation from the current date. If it is now, then 0. If yesterday, then -1. If a week ago, then -7.
            :return: The value of the remaining stock on the specified date.
            """

            date = now()
            date = date + timedelta(days=days)
            res = requests.post(self.pipeline.valves.BASE_URL, json={ "name": "store", "date": date.strftime('%Y-%m-%dT%H:%M:%S.%f') })
            json = res.json()
            return f"The product in stock is estimated at ${json['value']} at {date.strftime('%d %B %Y')}"

Т. е. если человек начинает говорить про склад, то надо запустить эту процедуру. В ней же срабатывает POST-запрос по пути BASE_URL (http://IP_АДРЕС_FC_1C/ollama-function-calling-1c/hs/function-calling).

По пути BASE_URL работает HTTP-сервис FunctionCalling быза 1С. В модуле менеджера вычисляется сумма по формуле 3 * (НомерМесяца * 1000 + НомерДняВГоду). Поэтому модель отвечает, что остаток на складе оценивался в 12 273 на третье апреля и 12 276 на второе апреля. И это правильные ответы.

Функция ЛюбойURLМетодPOST(Запрос)
	
	ДанныеЗапроса = ОбщегоНазначения.ЗначениеИзJSONСтроки(Запрос.ПолучитьТелоКакСтроку());
	ИмяПоказателя = ДанныеЗапроса.name;
	Дата = ПолучитьДатуИзСтроки(ДанныеЗапроса.date);
	
	Если ИмяПоказателя = "store" Тогда
		Значение = 3 * (Месяц(Дата) * 1000 + ДеньГода(Дата));
	ИначеЕсли ИмяПоказателя = "money" Тогда
		Значение = 5 * (Месяц(Дата) * 1000 + ДеньГода(Дата));
	Иначе
		Значение = 0;
	КонецЕсли;
	
	ДанныеОтвета = Новый Структура;
	ДанныеОтвета.Вставить("value", Значение);
	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.УстановитьТелоИзСтроки(ОбщегоНазначения.СтрокаJSONИзЗначения(ДанныеОтвета));
	Возврат Ответ;
	
КонецФункции

 

На этом наша работа завершена, не забудьте удалить облачные сервера.

 

Дополнительно

  • Open WebUI —  Очень простая и мощная платформа ИИ, поддерживающая множество LLM-моделей и RAG. В связке с Ollama и Pipelines позволяет настроить агентов, которые будут работать над приватными данными локально в собственном окружении.
  • Код демо базы 1С

См. также

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2946    5    0    

11

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

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

60000 руб.

07.05.2019    35031    69    45    

28

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    2697    2    3    

5

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    1023    6    2    

9

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    4607    4    2    

5

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    19254    23    22    

20

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    19018    54    50    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user1832003 57 04.04.25 02:14 Сейчас в теме
по факту сделан обычный сервер 1с с публикацией на веб http сервисов и вызов их же. Казалось бы при чем тут какая-то ollama и 1с в целом... в запрос можно любой ресурс выбрать, лишь бы на той стороне обработка была
2. Soloist 547 04.04.25 09:43 Сейчас в теме
(1) Всё так. Изначально была написана статья «Вызов функций в Ollama» (https://habr.com/ru/articles/863232/). И она содержит саму суть так, как вы и описали. Но спустя время я понял, что можно расширить аудиторию, снизив порог вхождения. Поэтому решил написать пример конкретно для 1С, а также подобрал такой маршрут, что любой человек, не имеющий оборудования и знаний в разворачивании системы, сможет попробовать вызывать функцию.
Оставьте свое сообщение