Как я попытался заставить нейросеть анализировать данные в 1С через локальную нейросеть с помощью Ollama. Личный опыт

20.05.25

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

Формирование отчета на анализе данных нейросетью.

Привет, коллеги! Хочу поделиться экспериментом, в котором я подключил локальную нейросеть к 1С, чтобы она автоматически анализировала отмены записей пациентов.

Не то чтобы я решил какую-то глобальную проблему — скорее, проверил, насколько вообще реально такое сочетание.  

Спойлер: работает, но с костылями.  
 

Что я проверил  
- Можно ли без танцев с бубном заставить 1С и AI общаться.  
- Насколько адекватно нейросеть понимает структурированные данные.  
- Будет ли это хоть сколько-то быстро работать.

 Как это устроено?

1С — собирает данные пациентов (возраст, причины отмен, услуги).  
- Локальная нейросеть (deepseek-r1 через Ollama) — анализирует и после идет обработка полученных данных.  
- HTTP-запросы — как мост между ними.  

По сути, схема такая:  

  1. 1С выгружает данные в JSON.  
  2. Нейросеть получает их + жесткий промпт 
  3. Ответ парсится  в 1С и выводится в отчет.


Что получилось?  

Плюсы

  • Гибкость
    - Нейросеть сама группирует данные по возрасту и причинам — не надо прописывать сложные SQL-запросы.  
    - Можно менять логику анализа просто правкой промпта (без изменений кода).  
  • Автоматические рекомендации
    AI не просто выдает цифры, но и пишет советы :  "Пациенты 30-45 лет чаще отменяют из-за цены → предложите скидки или рассрочку"  
  • Работает локально  
    Не нужен OpenAI  — deepseek-r1 справляется на обычном ПК. Нет утечки данных.  

Проблемы  

 

  • Нейросеть иногда выдает не то что ожидаем
    - Путает "0.00%" и "0%".
    - В 5% случаев выдает ответ не в JSON, а с мусором (приходится чистить).
  • Скорость  
    - Скорость оставляет желать лучшего... Ну или с моей видеокартой только так. P 106 100. Не самое верное решение для таких обработок — для интерактивного отчета мощность маловата.
  • Зависимость от промпта
    Если не прописать жесткие правила , AI начинает выдумывать:
    - Меняет названия полей ("Group" вместо "Группа").
    - Игнорирует пустые категории.  
  • Время разработки
    На разработку промпта и подбор LLM ушло около 8 часов. (Разработка промпта, поиск подходящей модели, которую сможет потянуть моя гпу)
  • Как видно на скриншоте, как я не боролся, дипсик выводит китайские символы...  

Вывод: стоит ли игра свеч?  

  • Где это можно использовать?  (мой взгляд)
    Нестандартная аналитика — когда встроенных отчетов 1С не хватает.
    Быстрые прототипы — чтобы не городить сложные SQL-запросы.    
  • Где не подойдет  
    Там, где важна точность — нейросеть может ошибаться в расчетах.  
    Для больших данных — 10к записей будут обрабатываться очень долго или может сработать ограничение LLM и часть данных не будет обработана.


Спасибо всем за внимание!

Текст промпта, который был разработан.

Проанализируй следующие данные пациентов и выведи ТОЛЬКО JSON-объект в точности по указанной схеме без любых других слов, комментариев или пояснений. Ответ должен начинаться с { и заканчиваться } без каких-либо дополнительных символов или текста до/после.  

Схема вывода:  
{
  "ВозрастныеГруппы": [
    {
      "Группа": "20-30 лет",
      "КоличествоПациентов": N,
      "Доля": "X.XX%",
      "Причины": ["Причина1", "Причина2"],
      "Рекомендация": "Текст"
    },
    {
      "Группа": "30-45 лет",
      "КоличествоПациентов": N,
      "Доля": "X.XX%",
      "Причины": ["Причина1", "Причина2"],
      "Рекомендация": "Текст"
    },
    {
      "Группа": "45-80 лет",
      "КоличествоПациентов": N,
      "Доля": "X.XX%",
      "Причины": ["Причина1", "Причина2"],
      "Рекомендация": "Текст"
    }
  ]
}               

Строгие правила обработки: 
Строгие правила:  
0. **Точное соответствие входным данным**. ПРИМЕР - Если пациент только один (62 года), то:  
   - "20-30 лет": 0 пациентов  
   - "30-45 лет": 0 пациентов  
   - "45-80 лет": 1 пациент  
 
1. Рекомендации должны строго соответствовать указанным причинам и содержать от 3 до 15 слов. Пример:  
   - Причина: "Дорого" → Рекомендация: "Предложить альтернативные бюджетные варианты"  
2. Возрастные группы должны обрабатываться следующим образом:  
   - 20-30 лет: возраст ≥20 и <30  
   - 30-45 лет: возраст ≥30 и <45  
   - 45-80 лет: возраст ≥45 и ≤80  
3. Расчет долей: Доля = (КоличествоПациентовВГруппе / ОбщееКоличествоПациентовВОбработанныхГруппах) * 100. Округлить до двух знаков (формат: "XX.XX%").  
4. Причины ТОЛЬКО из списка: <%ПРИЧИНЫ_ОТКАЗА%>
5. Для пустых групп использовать строго:  
   {
     "Группа": "НАЗВАНИЕ_ГРУППЫ",
     "КоличествоПациентов": 0,
     "Доля": "0.00%",
     "Причины": ["Нет таких пациентов"],
     "Рекомендация": "Не требуется"
   }  
6. Все названия полей должны быть точно как в схеме, использовать только кириллицу ("Группа", не "Group" и не "ГROUP"). 

 

Требования к формату:  
- Ответ должен содержать ТОЛЬКО валидный JSON без каких-либо дополнительных текстов или символов и китайских иероглифов 
- Начинаться с { и заканчиваться }  
- Строго соблюдать структуру и названия полей из схемы     

Данные для обработки:  
=== НАЧАЛО ДАННЫХ ===  
<%ДАННЫЕ%>  
=== КОНЕЦ ДАННЫХ ===                

Пример корректного ответа для данных (1 пациент 62 года):  
```json
{
  "ВозрастныеГруппы": [
    {
      "Группа": "20-30 лет",
      "КоличествоПациентов": 0,
      "Доля": "0.00%",
      "Причины": ["Нет таких пациентов"],
      "Рекомендация": "Не требуется"
    },
    {
      "Группа": "30-45 лет",
      "КоличествоПациентов": 0,
      "Доля": "0.00%",
      "Причины": ["Нет таких пациентов"],
      "Рекомендация": "Не требуется"
    },
    {
      "Группа": "45-80 лет",
      "КоличествоПациентов": 1,
      "Доля": "100.00%",
      "Причины": ["Дорого"],
      "Рекомендация": "Предложить скидки или альтернативы"
    }
  ]
}

 

Код, который был разработан.

#Область ОбработчикиСобытий

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	НастройкиОтчета = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(); 
	
	// Получаем данные пациентов 
	ПациентыДляОбработки = ДанныеПациентов();   
	
	Если ПациентыДляОбработки <> Неопределено Тогда
		// Подготавливаем данные для отправки в AI
		ДанныеДляАнализа = ВходныеДанныеОтменыПациентов(ПациентыДляОбработки);   
		ДанныеДляПромпта = ПреобразоватьВJSON(ДанныеДляАнализа);  
	Иначе
		ДанныеДляПромпта = "Данные для анализа отсутствуют"	
	КонецЕсли;
	
	// Формируем промпт
	ТекстПромпта = ПромптВозрастныеКатегорииОтменаУслуг("АнализОтменыДанныхПациент");
	ТекстПромпта = СтрЗаменить(ТекстПромпта, "<%ДАННЫЕ%>", ДанныеДляПромпта); 
	ТекстПромпта = СтрЗаменить(ТекстПромпта, "<%ПРИЧИНЫ_ОТКАЗА%>", ПричиныОтказа());
	
	// Отправляем запрос к AI
	ОтветAI = ОтправитьЗапросКAI(ТекстПромпта);
	
	// Обрабатываем ответ и формируем результат
	ИсточникДанных = СформироватьТабЧасть(ОтветAI);
	
	// Выводим результат в документ
	ВывестиРезультатВДокумент(ДокументРезультат, НастройкиОтчета, ИсточникДанных);
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область РаботаСДаннымиПациентов
Функция ВходныеДанныеОтменыПациентов(Пациенты) Экспорт 
	
	ДанныеДляПередачи = Новый Структура("ВходныеДанные", Новый Массив);
	
	Для Каждого ДанныеПациента Из Пациенты Цикл
		ИнформацияОтмены = ДанныеПациентаВозрастныеГруппы(ДанныеПациента);
		ДанныеДляПередачи.ВходныеДанные.Добавить(ИнформацияОтмены);
	КонецЦикла;                                 
	
	Возврат ДанныеДляПередачи;
	
КонецФункции 

Функция ДанныеПациентов()
	
	ШаблонПациента = Новый Структура("Возраст, Местоположение, Пол, ФИО, ПричинаОтмены, НаименованиеУслуги");
	
	МассивПациентов = Новый Массив;     
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДанныеПациентовСрезПоследних.Фамилия + "" "" + ДанныеПациентовСрезПоследних.Имя + "" "" + ДанныеПациентовСрезПоследних.Отчество КАК ФИО,
	|	ПРЕДСТАВЛЕНИЕ(ДанныеПациентовСрезПоследних.Пол) КАК Пол,
	|	РАЗНОСТЬДАТ(ДанныеПациентовСрезПоследних.ДатаРождения, &Период, ГОД) КАК Возраст,
	|	ПРЕДСТАВЛЕНИЕ(ОтменаУслугЗаказаПациентаМедицинскиеУслуги.ПричинаОтменыУслугиЗаказаПациента) КАК ПричинаОтмены,
	|	ПРЕДСТАВЛЕНИЕ(ОтменаУслугЗаказаПациентаМедицинскиеУслуги.Номенклатура) КАК НаименованиеУслуги
	|ИЗ
	|	РегистрСведений.ДанныеПациентов.СрезПоследних(&Период, ) КАК ДанныеПациентовСрезПоследних
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтменаУслугЗаказаПациента.МедицинскиеУслуги КАК ОтменаУслугЗаказаПациентаМедицинскиеУслуги
	|		ПО ДанныеПациентовСрезПоследних.Пациент = ОтменаУслугЗаказаПациентаМедицинскиеУслуги.Ссылка.Пациент";
	
	Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		Возврат Неопределено; 
	КонецЕсли;
	
	Выборка = РезультатЗапроса.Выбрать();
	Пока Выборка.Следующий() Цикл
		ДанныеПациента = ОбменДаннымиСобытия.СкопироватьСтруктуру(ШаблонПациента);
		ДанныеПациента.Местоположение = МестоположениеОрганизации();
		ЗаполнитьЗначенияСвойств(ДанныеПациента, Выборка); 
		
		МассивПациентов.Добавить(ДанныеПациента);
	КонецЦикла;
	
	Возврат МассивПациентов;
	
КонецФункции   

Функция ДанныеПациентаВозрастныеГруппы(ДанныеДляОбработки)  
	
	ПроверитьПолнотуДанных(ДанныеДляОбработки, "Возраст, Пол, Местоположение, ФИО, ПричинаОтмены, НаименованиеУслуги");
	
	ДанныеПациента = Новый Структура;
	ДанныеПациента.Вставить("Возраст", ДанныеДляОбработки.Возраст);
	ДанныеПациента.Вставить("Пол", ДанныеДляОбработки.Пол);
	ДанныеПациента.Вставить("Местоположение", ДанныеДляОбработки.Местоположение);
	ДанныеПациента.Вставить("ФИО", ДанныеДляОбработки.ФИО);
	
	Отмена = Новый Структура;
	Отмена.Вставить("ПричинаОтмены", ДанныеДляОбработки.ПричинаОтмены);
	
	СведенияОПриеме = Новый Структура;
	СведенияОПриеме.Вставить("НаименованиеУслуги", ДанныеДляОбработки.НаименованиеУслуги);
	
	Возврат Новый Структура(
	"ДанныеПациента, Отмена, СведенияОЗапланированномПриеме",
	ДанныеПациента, Отмена, СведенияОПриеме
	);
	
КонецФункции
#КонецОбласти   

#Область ВзаимодействиеСAI 
Функция ОтправитьЗапросКAI(ТекстПромпта)
	
	Подключение = Новый Структура;
	Подключение.Вставить("АдресСервера", "localhost");
	Подключение.Вставить("ПортСервера", 11434);
	Подключение.Вставить("КонечнаяТочка", "/api/generate");
	Подключение.Вставить("МодельAI", "deepseek-r1");
	
	ТелоЗапроса = Новый Структура;
	ТелоЗапроса.Вставить("model", Подключение.МодельAI);
	ТелоЗапроса.Вставить("prompt", ТекстПромпта);
	ТелоЗапроса.Вставить("stream", Ложь);
	
	СтрокаЗапроса = ПреобразоватьВJSON(ТелоЗапроса);
	
	HTTP = Новый HTTPСоединение(Подключение.АдресСервера, Подключение.ПортСервера);
	HTTPЗапрос = Новый HTTPЗапрос(Подключение.КонечнаяТочка);
	HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
	
	Попытка
		Ответ = HTTP.ОтправитьДляОбработки(HTTPЗапрос);
	Исключение
		ВызватьИсключение "Ошибка при отправке запроса к AI: " + ОписаниеОшибки();
	КонецПопытки;
	
	Если Ответ = Неопределено Или Ответ.КодСостояния <> 200 Тогда
		ВызватьИсключение "Ошибка при выполнении запроса. Код состояния: " + Ответ.КодСостояния;
	КонецЕсли;
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
	ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
	ОтветСтрока = ДанныеОтвета["response"];
	Если ОтветСтрока = Неопределено Тогда
		ВызватьИсключение "Некорректный ответ от AI: отсутствует поле response";
	КонецЕсли;                                   
	
	ОбработатьОтветОтНейронки(ОтветСтрока);
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(ОтветСтрока);
	ОтветAI = ПрочитатьJSON(ЧтениеJSON, Истина);
	
	Возврат ОтветAI;
	
КонецФункции  

Процедура ОбработатьОтветОтНейронки(ТекстОтвета)  
	
	НачалоПозиция = СтрНайти(ТекстОтвета, "{");
	КонецПозиция = СтрНайти(ТекстОтвета, "}", НаправлениеПоиска.СКонца);
	
	Если НачалоПозиция = 0 Или КонецПозиция = 0 Тогда
		ВызватьИсключение "Некорректный json";
	КонецЕсли;
	
	ДлинаJson = КонецПозиция - НачалоПозиция + 1;
	Json = Сред(ТекстОтвета, НачалоПозиция, ДлинаJson);
	
	ТекстОтвета = Json;
	
КонецПроцедуры 
#КонецОбласти

#Область ФормированиеРезультатов
Функция СформироватьТабЧасть(ДанныеAI)
	
	ИсточникДанных = Новый ТаблицаЗначений;
	ИсточникДанных.Колонки.Добавить("Группа", Новый ОписаниеТипов("Строка"));
	ИсточникДанных.Колонки.Добавить("КоличествоПациентов", Новый ОписаниеТипов("Число"));
	ИсточникДанных.Колонки.Добавить("Доля", Новый ОписаниеТипов("Строка"));
	ИсточникДанных.Колонки.Добавить("Причины", Новый ОписаниеТипов("Строка"));
	ИсточникДанных.Колонки.Добавить("Рекомендация", Новый ОписаниеТипов("Строка"));
	
	ВозрастныеГруппы = ДанныеAI["ВозрастныеГруппы"];
	
	Для Каждого Группа Из ВозрастныеГруппы Цикл
		НоваяСтрока = ИсточникДанных.Добавить();
		НоваяСтрока.Группа = Группа["Группа"];
		НоваяСтрока.КоличествоПациентов = Группа["КоличествоПациентов"];
		НоваяСтрока.Доля = Группа["Доля"];
		НоваяСтрока.Причины = СтрСоединить(Группа["Причины"], Символы.ПС);
		НоваяСтрока.Рекомендация = Группа["Рекомендация"];
	КонецЦикла;
	
	Возврат ИсточникДанных;
	
КонецФункции

Процедура ВывестиРезультатВДокумент(ДокументРезультат, НастройкиОтчета, ИсточникДанных)
	
	ВнешнийНаборДанных = Новый Структура("ВозрастныеГруппы", ИсточникДанных);
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 
	МакетКомпоновки = КомпоновщикМакета.Выполнить(
		ЭтотОбъект.СхемаКомпоновкиДанных, 
		НастройкиОтчета
	);  
	
	Процессор = Новый ПроцессорКомпоновкиДанных; 
	Процессор.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, , Истина); 
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(Процессор);
	
КонецПроцедуры
#КонецОбласти

#Область ВспомогательныеФункции
Функция МестоположениеОрганизации()
	
	ГлавнаяОрганизация = Справочники.Организации.ОсновнаяОрганизация; 
	
	ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(
		ФормированиеПечатныхФорм.СведенияОЮрФизЛице(
			ГлавнаяОрганизация, 
			ТекущаяДатаСеанса()
		),
		"ФактическийАдрес"
	);     
	
	Возврат ПредставлениеОрганизации;
	
КонецФункции  

Функция ПреобразоватьВJSON(Данные)
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, Данные);
	
	Возврат ЗаписьJSON.Закрыть();
	
КонецФункции  

Функция ПричиныОтказа()  
	
	Результат = "";
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ПричиныОтменыУслугЗаказаПациента.Представление КАК ПричинаОтмены
	|ИЗ
	|	Справочник.ПричиныОтменыУслугЗаказаПациента КАК ПричиныОтменыУслугЗаказаПациента";
	
	РезультатЗапроса = Запрос.Выполнить(); 
	Выборка = РезультатЗапроса.Выбрать();  
	
	Если Выборка.Количество() = 0 Тогда
		Результат = "Предопределнных причин в системе нет";
	КонецЕсли;                                          
	
	Пока Выборка.Следующий() Цикл
		Результат = Результат + ", " + Выборка.ПричинаОтмены;
	КонецЦикла; 
	
	Возврат Результат;		
КонецФункции

Процедура ПроверитьПолнотуДанных(ДанныеДляПроверки, СписокОбязательныхСвойств)
	
	МассивСвойств = СтрРазделить(СписокОбязательныхСвойств, ", ", Ложь);
	
	Для Каждого ИмяСвойства Из МассивСвойств Цикл
		Если Не ДанныеДляПроверки.Свойство(ИмяСвойства) Тогда
			ВызватьИсключение СтрШаблон("Отсутствует обязательное свойство: %1", ИмяСвойства);
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры    

Функция ПромптВозрастныеКатегорииОтменаУслуг(НаименованиеПромпта) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|    Промпты.ТекстПромпт КАК ТекстПромпт
	|ИЗ
	|    Справочник.Промпты КАК Промпты
	|ГДЕ
	|    Промпты.Наименование = &Наименование";
	
	Запрос.УстановитьПараметр("Наименование", НаименованиеПромпта);
	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	
	Если Выборка.Количество() = 0 Тогда
		ВызватьИсключение СтрШаблон("Промпт с наименованием '%1' не найден", НаименованиеПромпта);
	КонецЕсли;
	
	Выборка.Следующий();
	Возврат Выборка.ТекстПромпт;
	
КонецФункции             
#КонецОбласти

#КонецОбласти


  

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    25546    61    10    

70

Администрирование веб-серверов Сервера Нейросети Программист Платные (руб)

Сервер поиска по метаданным и поиска по коду, Сервер экспорта и поиска по документации, Сервер синтаксической проверки кода

17.06.2025    17039    0    Infostart    20    

113

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

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

36000 руб.

28.08.2025    2688    1    2    

4

Нейросети Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

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

6000 руб.

03.04.2024    12029    6    0    

11

Мастера заполнения Нейросети 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Платные (руб)

Расширение для заполнения описания товара (номенклатуры) с помощью модели ИИ ChatGPT с ключевыми словами. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ. Прошло аудит на 1cfresh.com. Версия для автоматического заполнения

5000 руб.

13.03.2023    21793    51    50    

79

Нейросети Программист 1С:Предприятие 8 Россия Бесплатно (free)

Узко специализированный кейс "Как с помощью ИИ можно загружать заказы любого формата и из любого источника".

25.11.2025    1152    Tigreno    7    

19

Нейросети Распознавание документов и образов Программист 1С:Предприятие 8 Россия Абонемент ($m)

Статья описывает практический подход к автоматизации сравнения документов с применением технологий OCR и локальных языковых моделей. Рассматриваются этапы настройки и интеграции Tesseract OCR, LM Studio и внешней обработки 1С для создания автономного решения.

1 стартмани

20.11.2025    1243    prokhodolya    4    

17

Нейросети Программист Бесплатно (free)

Большие языковые модели все чаще применяются для генерации кода на 1С, но до сих пор нет единого способа объективно сравнить их качество. Объясняем, как работают метрики BLEU, CodeBLEU и pass@k, и как их можно адаптировать для оценки LLM в экосистеме 1С. Показываем, какие задачи – от простых функций до рефакторинга – помогают полноценно оценить интеллект модели и ее знание платформы. Разбираем ключевую проблему проверки логики и синтаксиса в автоматическом режиме и показываем бенчмарк, который решает эту задачу, сравнивая ChatGPT, Claude, GigaChat и другие модели по единым стандартам.

31.10.2025    3046    Vaslot    14    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Константин С. 676 20.05.25 20:49 Сейчас в теме
ШаблонПациента = Новый Структура("Возраст, Местоположение, Пол, ФИО, ПричинаОтмены, НаименованиеУслуги");

Роскомнадзора на тебя нет, за передачу перс.данных черте куда :-)
zap_home_mog; +1 Ответить
4. Петров-Водкин 185 22.05.25 09:44 Сейчас в теме
(1) куда? на localhost?
zap_home_mog; +1 Ответить
8. zap_home_mog 9 26.05.25 23:48 Сейчас в теме
(1) Как раз и был смысл запустить на localhost. Так бы можно было и не париться, по API тягать данные и всё)
Смысл эксперимента еще в том, чтобы запустить ЛЛМ на локальном хосте и обеспечить конфиденциальность данных.
2. alexkrial 3 21.05.25 06:38 Сейчас в теме
ТелоЗапроса.Вставить("format", "json"); - будет возвращать только JSON в response
3. ef42 21.05.25 06:57 Сейчас в теме
Добрый день!
Спасибо за статью, если можно - то пара вопросов:
1. Видеокарта P 106 100 - это GeForce 1060? Можно поподробнее по спецификациям и настройки окружения? (win, lin, железо, версия Ollama...).
2. Модель использовалась из коробки или была дообучена на ваших данных? По тексту сложилось впечатление, что тестовая база записей и отмен - это пара строк?
6. zap_home_mog 9 26.05.25 23:44 Сейчас в теме
(3) Добрый день. В ближайшие дни внесу все технические характеристики в статью.
9. bulldog 30.05.25 07:52 Сейчас в теме
(6) Добрый день. Очень ждём
5. roman72 403 23.05.25 18:54 Сейчас в теме
Хотелось бы знать
- какая видеокарта была использована
- были ли попытки запускать ЛЛМ на процессоре и есть ли сравнение производительности с видеокартой?
zap_home_mog; +1 Ответить
7. zap_home_mog 9 26.05.25 23:47 Сейчас в теме
(5) Добрый день, видеокарта P106 100 — https://technical.city/ru/video/GeForce-GTX-1060-6-GB-protiv-P106-100.
Пока не экспериментировал с запуском ллм на процессоре. Думаю, в следующих попытках это учту.
Для отправки сообщения требуется регистрация/авторизация