Перейти к содержимому

Нейросети и 1С — Определение тональности текста

Нейросети и 1С - Определение тональности текста

Анализ настроений пользователей (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 в самый раз, при этом модель показала хороший баланс между качеством анализа и требованиями к ресурсам.

В обозревателе доступных моделей, вы можете выбрать другую модель, более подходящую для вашего оборудования:

Нейросети и 1С - Выбор модели
Нейросети и 1С — Выбор модели

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

Установку системного промта, можно осуществить из режима чата, в правой области программы:

Нейросети и 1С - Системный промт
Нейросети и 1С — Системный промт

Будет использоваться следующий промт:

# Роль 
Ты финансовый аналитик, с успешным опытом работы и торговли, более 25 лет, на фондовом рынке Российской федерации (IMOEX).

# Задача 
Внимательно прочитай текст. Определи тональность текста (Sentiment Analysis) и классифицируй результат.

# Требования к выходным данным 
Результат определения, классификации, должен быть представлен в виде ОДНОГО из слов списка категорий.
Не добавляй никакого другого текста, только выбранное слово.

# Список категорий
- Негативный
- Нейтральный
- Позитивный

Теперь можно запускать сервер, чтобы можно было обращаться к нейросети с помощью запросов из 1С, для этого нужно загрузить модель в память с помощью кнопки «Select a model to load» в верхней части программы.
После загрузки модели, на вкладке «Developer» выбрать ранее установленный системный промт и запустить сервер с помощью переключателя «Start server»:

Нейросети и 1С - Запуск cервера
Нейросети и 1С — Запуск cервера

Для проверки работоспособности можно выполнить запрос в браузере:

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 Кб.

Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *