Анализ настроений пользователей (Sentiment Analysis) — мощный инструмент для оценки восприятия бренда или финансового инструмента. В этой заметке реализуем собственный анализатор тональности прямо в 1С, используя локальную нейросеть. Это позволит автоматически оценивать, какие комментарии в Т-Пульс — позитивные, негативные или нейтральные, без дорогих облачных сервисов и с полным контролем над данными.
1. Подготовка конфигурации 1С для работы с HTTP-запросами
Создадим пустую конфигурацию, в которую необходимо добавить Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 и общую форму с размещением в рабочую область начальной страницы. О том, как это сделать подробно описано в моих предыдущих заметках на этом сайте.
2. Получение комментариев из API Т-Пульс в 1С
Для начала поработаем над общей формой, в которой будет происходить основное взаимодействие, необходимо:
- Добавить реквизит формы «Инструмент» (тип «Строка»).
- Добавить реквизит формы «Комментарии» (тип «ТаблицаЗначений»), с колонками «Комментарий» (тип «Строка») и «Тональность» (тип «Строка»).
- Добавить команду «ПолучитьКомментарии».
Разместить добавленные элементы на форме, в удобном для вас виде.
Для команды «ПолучитьКомментарии» добавить обработчик, содержащий следующий код:
&НаКлиенте
Процедура ПолучитьКомментарии(Команда)
// Предварительно очищаем таблицу.
Комментарии.Очистить();
// Запрашиваем данные и выводи их в таблицу.
ТекстыКомментариев = ПолучитьКомментарииНаСервере(Инструмент);
Для каждого Текст Из ТекстыКомментариев Цикл
Комментарии.Добавить().Комментарий = Текст;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьКомментарииНаСервере(Инструмент)
// Формируем адрес для получения комментариев.
Адрес = СтрШаблон("https://www.tinkoff.ru/api/invest-gw/social/v1/post/instrument/%1", Инструмент);
// Устанавливаем лимит, последние 10 комментариев.
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("limit", 10);
// Увеличиваем таймаут для выполнения запроса.
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Таймаут", 60);
// Формируем заголовки для запроса.
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36");
ДополнительныеПараметры.Вставить("Заголовки", Заголовки);
// Выполняем запрос.
ОтветЗапроса = КоннекторHTTP.GetJson(Адрес, ПараметрыЗапроса, ДополнительныеПараметры);
Если НРег(ОтветЗапроса["status"]) = "error" Тогда
ВызватьИсключение ОтветЗапроса["payload"]["message"];
КонецЕсли;
ТекстыКомментариев = Новый Массив;
// Получаем текст комментариев.
Данные = ОтветЗапроса["payload"]["items"];
Для каждого Комментарий Из Данные Цикл
ТекстыКомментариев.Добавить(Комментарий["content"]["text"]);
КонецЦикла;
Возврат ТекстыКомментариев;
КонецФункции
3. Установка нейросети
Для работы с локальной нейросетью будет использоваться LM Studio, которую необходимо скачать и установить, делается это довольно просто без каких либо сложностей. Далее, необходимо скачать модель, в моем случае программа предложила скачать «openai/gpt-oss-20b» на 12.11 GB, что для моей NVIDIA GeForce RTX 4070 в самый раз, при этом модель показала хороший баланс между качеством анализа и требованиями к ресурсам.
В обозревателе доступных моделей, вы можете выбрать другую модель, более подходящую для вашего оборудования:

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

Будет использоваться следующий промт:
# Роль Ты финансовый аналитик, с успешным опытом работы и торговли, более 25 лет, на фондовом рынке Российской федерации (IMOEX). # Задача Внимательно прочитай текст. Определи тональность текста (Sentiment Analysis) и классифицируй результат. # Требования к выходным данным Результат определения, классификации, должен быть представлен в виде ОДНОГО из слов списка категорий. Не добавляй никакого другого текста, только выбранное слово. # Список категорий - Негативный - Нейтральный - Позитивный
Теперь можно запускать сервер, чтобы можно было обращаться к нейросети с помощью запросов из 1С, для этого нужно загрузить модель в память с помощью кнопки «Select a model to load» в верхней части программы.
После загрузки модели, на вкладке «Developer» выбрать ранее установленный системный промт и запустить сервер с помощью переключателя «Start server»:

Для проверки работоспособности можно выполнить запрос в браузере:
http://127.0.0.1:1234/v1/models
В результате должен быть выведен список доступных моделей, в формате JSON.
4. Интеграция с LM Studio: отправка запросов на анализ из 1С
Теперь можно приступить к анализу текста комментариев, для этого в общей форме, добавим команду «Анализ», разместим ее на форме, добавим обработчик со следующим кодом:
&НаКлиенте
Процедура Анализ(Команда)
АнализНаСервере();
КонецПроцедуры
&НаСервере
Процедура АнализНаСервере()
// Обходим таблицу.
Для каждого СтрокаТаблицы Из Комментарии Цикл
// Адрес локального сервера.
Адрес = "http://localhost:1234/v1/chat/completions";
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
// Необходимые параметры запроса.
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("model", "openai/gpt-oss-20b");
ПараметрыЗапроса.Вставить("stream", Ложь);
ПараметрыЗапроса.Вставить("max_tokens", -1);
// Формируем непосредственно текст сообщения.
Сообщение = Новый Массив;
Сообщение.Добавить(Новый Структура("role, content", "user", СтрокаТаблицы.Комментарий));
ПараметрыЗапроса.Вставить("messages", Сообщение);
// Выполняем запрос.
Ответ = КоннекторHTTP.PostJson(Адрес, ПараметрыЗапроса, Новый Структура("Заголовки", Заголовки));
Ошибка = Ответ.Получить("error");
Если ЗначениеЗаполнено(Ошибка) Тогда
ВызватьИсключение Ошибка;
КонецЕсли;
// Полученный результат выводим в ту же строку.
СтрокаТаблицы.Тональность = Ответ["choices"][0]["message"]["content"];
КонецЦикла;
КонецПроцедуры
В результате мы получили работающий прототип. Его можно развивать, добавив кеширование результатов, анализ большего количества комментариев или более детальную классификацию, например, «сдержанно-позитивный», «агрессивно-негативный».
💾 Файл конфигурации: Нейросети и 1С — Определение тональности текста 40 Кб.
