Как я попытался заставить нейросеть анализировать данные в 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' не найден", НаименованиеПромпта);
	КонецЕсли;
	
	Выборка.Следующий();
	Возврат Выборка.ТекстПромпт;
	
КонецФункции             
#КонецОбласти

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


  

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

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

15250 руб.

25.08.2025    57502    116    32    

126

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

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

6100 руб.

03.04.2024    15724    8    0    

12

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

За десять дней после релиза OneBase получила полноценные управляемые формы, локализацию интерфейса на 14 языков, точную денежную арифметику на decimal, систему ролей и прав, новый REST API и набор CLI-инструментов для разработки совместно с ИИ. Разбираю ключевые изменения платформы, показываю новые возможности и делюсь результатами одной из самых насыщенных недель развития проекта.

05.06.2026    566    Ibrogim    21    

10

Нейросети Обновление 1С Бесплатно (free)

Когда доработанную 1С не обновляли годами, начинать приходится не с переноса кода, а с разбора того, что вообще накопилось в базе. Там могут быть десятки обработок, расширения, правки типовых объектов, а документации либо нет, либо она давно не актуальна. На примере реального обновления разбираем, как кодовые агенты, MCP-серверы и языковые модели помогают навести порядок в доработках, собрать план миграции, понять, где при переносе будут проблемы, и автоматизировать часть исправлений.

05.06.2026    1697    wonderboy    1    

14

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

ИИ сделал внешнюю обработку за 19 минут, собрал EPF без входа в Конфигуратор, и она заработала с первого раза! Да, звучит как кликбейт, но это был живой стрим, а не вылизанное демо. В статье показываю стенды, замеры, скиллы, MCP и честные ограничения — чтобы скептики спорили не лозунгами, а своими примерами.

04.06.2026    2487    top_1c    156    

47

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

Расскажем, как создать ИИ-помощника внутри 1С без Python и другого внешнего кода – только на базе 1С, HTTP-запросов и необходимой инфраструктуры. Разберем универсальный шаблон RAG-системы, который можно адаптировать под разные задачи: от поддержки пользователей и поиска по базе знаний до работы с регламентами и инструкциями. На живом примере соберем минимальный рабочий прототип помощника, который умеет работать с данными, искать релевантный контекст и формировать ответы. Отдельно объясним, почему самым сложным этапом оказывается не архитектура, а качество подготовки данных и чанкинг.

04.06.2026    598    Palk    3    

6

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

Набор локальных skills для ИИ-агентов под 1С: XML-исходники, EPF/ERF, формы, роли, веб-публикация и test bridge — HTTP-расширение для проверки тестовых баз без COM и UI.

02.06.2026    3597    Aleksandr    60    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Константин С. 685 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 10 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 10 26.05.25 23:44 Сейчас в теме
(3) Добрый день. В ближайшие дни внесу все технические характеристики в статью.
9. bulldog 30.05.25 07:52 Сейчас в теме
(6) Добрый день. Очень ждём
5. roman72 404 23.05.25 18:54 Сейчас в теме
Хотелось бы знать
- какая видеокарта была использована
- были ли попытки запускать ЛЛМ на процессоре и есть ли сравнение производительности с видеокартой?
zap_home_mog; +1 Ответить
7. zap_home_mog 10 26.05.25 23:47 Сейчас в теме
(5) Добрый день, видеокарта P106 100 — https://technical.city/ru/video/GeForce-GTX-1060-6-GB-protiv-P106-100.
Пока не экспериментировал с запуском ллм на процессоре. Думаю, в следующих попытках это учту.
Для отправки сообщения требуется регистрация/авторизация