В библиотеке искусственного интеллекта для 1С появилась опция анализа изображения. Можно попросить большую языковую модель (LLM) выдать информацию на основании того, что она видит. Будет полезно познакомиться с тем, как это работает и что является best practice при работе с изображениями и LLM.
Добавив опцию загрузки изображения в библиотеку, я стал экспериментировать. Как и положено 1С-нику, экспериментировал я ни с чем иным, как с УПД. Взял первый попавшийся документ в демонстрационной базе Управление Торговлей ред. 11. Вывел на экран и сфотографировал, немного наклонив.

Изображение передается модели в формате base64. При этом, сначала идет префикс вида: "data:image/png;base64,", а затем собственно строка base64. В префиксе указывается формат изображения. Поддерживаются форматы PNG (.png), JPEG (.jpeg and .jpg), WEBP (.webp), non-animated GIF (.gif).
В расширении, содержащем библиотеку, есть также обработка "Библиотека искусственного интеллекта пример". Воспользуемся ею для экспериментов. Укажем путь к файлу изображения и зададим простой вопрос.

Теперь спросим что-нибудь сложнее

Что здесь считать строкой разобрались без проблем. Попробуем теперь получить ИНН продавца.

В общем ИИ неплохо ориентируется. Не путается в терминах "продавец"/"поставщик", ИНН от КПП отличает. Попробуем преобразовать это изображение в заданную нами структуру

В принципе, это работает, но до практического применения еще далеко. Если вы попробуете воспользоваться этим вот так просто, что называется "в лоб", тогда вам надо будет написать парсер для полученного ответа. Это только кажется относительно простой задачей. На деле, она почти не решаемая. ИИ будет вам выдавать правильные по сути структуры. Но по форме они будут время от времени "плавать", например так:

В state-of-art моделях предусмотрена опция response_format для того, чтобы задавать фиксированный формат ответа. Я добавил поддержку этой опции в версию 14 библиотеки. Зададим JSON-схему ответа.
{
"name": "Universal_Transfer_Document",
"strict": true,
"schema": {
"type": "object",
"properties": {
"DocumentNumber": {
"type": "string"
},
"DocumentDate": {
"type": "string"
},
"Seller_INN_KPP": {
"type": "string"
},
"DocumentItems": {
"type": "array",
"items": {
"type": "object",
"properties": {
"Code": {
"type": "string"
},
"Quantity": {
"type": "number"
},
"Price": {
"type": "number"
}
},
"required": [
"Code",
"Quantity",
"Price"
],
"additionalProperties": false
}
}
},
"additionalProperties": false,
"required": [
"DocumentNumber",
"DocumentDate",
"Seller_INN_KPP",
"DocumentItems",
]
}
}

Посмотрим, что у нас получится в ответе. Обратите внимание на то, что я оставил вопрос пользователя пустым. В данной ситуации он не нужен. Модели и так понятно, что надо преобразовать картинку в JSON. Что бы вы ни написали в поле "вопрос" результат будем один и тот, же. Поэтому не будем зря тратить входные токены.

Вот мы и получили на выходе JSON структуру, соответствующую заданной нами схеме. Дальше можете делать с ней что хотите. Например, создавать документы в базе данных (ПТиУ или РТиУ).
Превращение потока в структуру, будь то голос, письменная речь или картинка — одна из важнейших, если не самая важная способность больших языковых моделей. А умение правильно использовать данную способность — одно из важнейших, если не самое важное сейчас качество разработчика.
Комментарии (80)
pavelsha
17.02.2025 02:41Относительно названия статьи: По контексту статьи было бы лучше:
«Мы понимаем практически всё...». Но так как выходом модели является json, а не созданные бизнес-объекты в 1С, то стоит добавить «, но сказать пока не можем».
Room111
17.02.2025 02:41А когда ИИ сможет решить такую вот тривиальную задачу: "Сделай и отправь документы в ооо "рога". Далее суть: такие-то работы и услуги или такие то товары. Результат - договор, акт, счёт с отправкой по Эдо и почте?
exwill Автор
17.02.2025 02:41Уже может
pavelsha
17.02.2025 02:41Так?
"Алиса, напиши смс Петровой, чтобы отправила договор и счёт в Рога"
Тогда ИИ вообще всемогущий. Он может даже шлепать печать на бумагу, носить конверт на почту, делать опись, отправлять заказным. А по дороге обратно он зайдет в магазин и купит домой хлеба, сосисок и молока, а также чай Нури с печеньками в офис
exwill Автор
17.02.2025 02:411С умеет работать и с ЭДО и с почтой уже давно. Здесь я вам показал как структурировать входящий поток (будь то изображение, аудио или письменная речь, в других моих статьях можете прочитать про голосовой ввод).
Соединяете первое и второе, и получаете то, что вы спросили
Wesha
17.02.2025 02:411С умеет работать и с ЭДО и с почтой уже давно.
Вот когда оно научится работать с УДО...
rebug
17.02.2025 02:41С моим опытом чгпт от опенэйай, как по мне, на данном этапе развития нейросетей перепроверять, что они там поняли - дороже, чем перепечатать самому.
exwill Автор
17.02.2025 02:41Имеет смысл потратить еще немного времени и разобраться в теме поглубже. Начните, например, с температуры. Потом вызовы функций и формат ответа. Статья ведь ровно об этом. Как получать четкие ответы от LLM
copenhagen72
17.02.2025 02:41Имеет смысл потратить ещё немного времени и разобраться в теме поглубже - и написать статью на хабр нормально. Начните, например, с температуры.
У меня телефон уже 2 года без проблем распознает текст с фотографий, даже рукописный.
exwill Автор
17.02.2025 02:41Но согласитесь, ведь есть разница между преобразованием поток-поток и поток-структура
GarfieldX
17.02.2025 02:41Нету. Если распознавание удалось, т.е. все сущности идентифицированы, то все остальное, как вы сами же выразились выше, задача тривиальная.
exwill Автор
17.02.2025 02:41Нет, не тривиальная. У вас на входе был текст в виде изображения и на выходе вы получили текст в виде текста. Ну и что? До структуры тут еще очень далеко
copenhagen72
17.02.2025 02:41ИИ распознал текст в виде "параметр = значение" и выдал данные с картинки в структуре по вашему шаблону.
Требуется пояснение, в чем тут новизна.А также пояснение зачем распознавать формализованные электронные документы УПД (имеющие исходный XML или XLS)?
Идем глубже, зачем распознавать УПД, если маркировка и прослеживаемость скоро покроет все от станков до носков, и документы в этом случае ходят через электронный документооборот?
Пока статья на уровне "смотрите как я умею".
exwill Автор
17.02.2025 02:41Согласен, что распознавание УПД с "бумаги" - это довольно нишевая история. Просто цель статьи - учебная. И, да, это в первую очередь "смотрите, как это делается". УПД я взял потому, что это близко 1С-никам. Разумеется, у технологии есть и более интересные применения. О них я тоже планирую рассказать
staswiz
17.02.2025 02:41У меня сработал следующий промт:
На основании печатной формы на картинке сгенери программный код 1С создания документа следующей структуры:
Док.Номер = "..."; // возьми с картинки
Док.Дата = "...";
Док.Поставщик = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "...");
//далее для каждой строки
СтрокаТовара = Док.Товары.Добавить();
СтрокаТовара = Справочники.Номенклатура.НайтиПоРеквизиту("Код", "...");
СтрокаТовара.Количество = Число("...");
СтрокаТовара.Цена = Число("...");
СтрокаТовара.Сумма = Число("...");
Ответ ChatGPT 4-o:
// Создание документа
Док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Док.Номер = "82"; // номер документа
Док.Дата = "30.09.2017"; // дата документа
Док.Поставщик = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "9999115007");
// Добавление первой строки товара
СтрокаТовара = Док.Товары.Добавить();
СтрокаТовара = Справочники.Номенклатура.НайтиПоРеквизиту("Код", "B-789"); СтрокаТовара.Количество = Число("2");
СтрокаТовара.Цена = Число("1423.73");
СтрокаТовара.Сумма = Число("2847.46");
// и так далее для каждой строки
То есть можно генерить не json, а сразу программный код, который останется только отправить в Выполнить()exwill Автор
17.02.2025 02:41Ну, да. В принципе, можно. Только Выполнить() не везде применимо. Те, кто пользуются облачными сервисами 1С, будут в затруднении.
royozz
17.02.2025 02:41Немного смущает отправка потенциально конфиденциальных данных по api моделей неведомо куда. Что на это скажут ИБ и юристы? Или есть локально развернутые варианты моделей?
exwill Автор
17.02.2025 02:41По ЭДО данные тоже уходят неведомо куда. Но если очень нужно, то локально развернуть можно. Просто цена вопроса такова, что практически любой здравомыслящий менеджер, услышав ее, скажет: да фиг с ней. В двух вариантах: фиг с ней с безопасностью или фиг с ней с технологией. Причем, на мой взгляд, первый вариант более правильный. Ну кому там эта ваша УПД нужна? Она промелькнет на сервере провайдера и будет уничтожена. Там еще сотни тысяч таких же в очереди стоят. В конце концов, все пользуются телефонной связью, а ведь ее можно прослушать
akdengi
17.02.2025 02:41Роскомнадзору на его запрос, почему у вас документация утекает, также будете отвечать? ЭДО идет по зашифрованному каналу с применением криптографических средств, разрешенных в РФ, а тут сливаете информацию на американские серверы. Плюс попадаете в зависимость от иностранного API. Дело ваше, но 15 миллионов штрафа на юрлицо это реальность. Понятно, что типа "и так документы все по почте отправляют электронной и пофиг", но это до поры. Те же системы корпоративные по распознаванию документации обязаны иметь сертификацию почему то и используют локальные модели внутри своего контура безопасности.
igrblkv
17.02.2025 02:41Так можно и в родные Яндекс и Сбер сливать - и пусть с ними разбираются, что у них и как (куда сливает)?
ildarz
17.02.2025 02:41По ЭДО данные тоже уходят неведомо куда.
По ЭДО, даже если документооборот идет не напрямую между контрагентами, а через внешний сервис, данные "утекают" сертифицированным компаниям, зарегламентированным по самое небалуйся. В случае публичных AI они утекают именно что неведомо куда и всплыть могут непонятно как и в какой ситуации. Если вы цветами по интернету торгуете, это может быть не особо важно (хотя и там можно напороться на формальные несоответствия в случае обработки перс. данных, например), а в случае крупной компании уже немного другие оценки.
igrblkv
17.02.2025 02:41библиотека искусственного интеллекта для 1С
разве не от самой 1С? или это китайцы с дипсиком подсуетились?
Если от самой 1С - то и вопросы все к ней, разве нет?
Или там можно любую подключить, по своему желанию?exwill Автор
17.02.2025 02:41Подключится можно к любому провайдеру, который поддерживается библиотекой (на сегодняшний день это Yandex, Сбер, OpenAI, Antropic, Google, Nvidia, Deepseek и др.)
Sasha_56756
17.02.2025 02:41Зачем использовать искусственного идиота для задачи распознавания документов? OCR будет и быстрее и точнее вытаскивать данные из документов.
exwill Автор
17.02.2025 02:41И в структуру превращать?
Sasha_56756
17.02.2025 02:41Да, FineReader\ContentReader умеет превращать сканы документов в XML. Наверно уже лет 10 умеет. https://contentai.ru/contentreader-server#!/tab/435126432-3
exwill Автор
17.02.2025 02:41Ну приведите пример распознавания УПД FineReader-ом. Сделает он такой же JSON (XML), как у меня? И будет делать стабильно от документа к документу?
UFO_01
17.02.2025 02:41А вы вот прям гарантируете что ваше решение будет стабильно от документа к документу? Тут, как говорится, какие ваши доказательства. Или вам, как и нейронке, верить на слово?
exwill Автор
17.02.2025 02:41Можно и на слово. Почему бы вам не поверить человеку с большим опытом? Можно и на спор. Запустим на сотне разных документов (в нормальном разрешении) и проверим
UFO_01
17.02.2025 02:41Я всё-таки предпочитаю опираться на доказательства и факты.
Возможно у меня просто профдеформация началась из-за работы в critical-safety, но мне недостаточно сотни документов. Скажем, пару миллионов, если контора из-за ошибки ИИ влетит на большие деньги, это можно было бы уладить с помощью сэкономленных благодаря ИИ денег.
И вот если бы было проделано подобное, составлен подробный отчёт, оформленный в статью, вне зависимости от результатов, никто бы слова не сказал против.
exwill Автор
17.02.2025 02:41А почему не пару миллиардов? Вы ведь выбираете такие цифры, которые, как вам кажется, защитят вашу позицию. Вы истину не ищете
UFO_01
17.02.2025 02:41Нет, я выбираю цифры, благодаря которым можно будет говорить хотя бы о примерной вероятности ошибки при формировании документов. Если ИИ ошибается хотя бы в 1%, это уже может вылиться в очень большие неприятности.
Поясню с моей позиции. Скажем, документы вещь ответственная (никому не хочется увидеть юристов на пороге). Ошибка системы = опасный отказ (компания теряет клиента/партнёра/деньги). Подобный ущебр это SIL 1 (условно). SIL 1 это 1 отказ на 0.1 млн. часов работы. Так что увы, только прогнать пару миллионов документов, выхлоп проверить через какую-то систему верификации, собрать статистику, и только потом выпускать такую систему работать без контроля человека. Потому что нам нужен предсказуемый результат. Человек даёт предсказуемый результат, ИИ пока что, увы, нет. И я очень надеюсь увидеть тот момент, когда это изменится.
Вы истину не ищете
А призывы вам на слово верить это якобы поиск истины?
exwill Автор
17.02.2025 02:41Допустим, мы прогнали 1000 документов и получили 1 случайный отказ. Что это будет означать, по вашему?
Прогнать 1000 документов реально. Это будет стоить порядка 20 рублей.
SwingoPingo
17.02.2025 02:41exwill, не сочтите за занудство, но как то автоматизируя большую окологосударственную контору (речь о десятках миллионов документов) мы получили целую лекцию от их руководства про вероятность ошибки оператора при заведении данных и методы их уменьшения, там оказались целые методики. И поскольку мы ставили системы автоматического сбора данных, то у нас с порога первое что спросили - вероятность ошибки наших систем. Не "много меньше" и "практически нулевая", а какая точно, что бы понимать как перестраивать системы компенсаций этих ошибок. И поскольку мы оперировали терминами подобными "допустим", "случайный" и т.д. внедрение у нас шло тяжко, пока мы не перешли на язык заказчика, где каждый этап ввода данных характеризуется измеренной (по методологии!) "ошибкой оператора".
ПС. поясню - допутим ИИ распрознает документ сделки с маржинальностью в 5% со штрафными санкциями в 10% с вероятностью любой ошибки в нем 1% и с вероятностью ошибок в строках в 1.5%, в цифрах 0.5%. Соответственно что бы скомпенсировать риски Вы посадите человека (или алгоритм, ИИ) перепроверяющего документы с параметрами, где риски выше заданной Вами нормы. Особо рискоемкие документы, т.к. ответственность за сделку лежит на живом физическом человеке, Вы, вероятно, запланируете на проверку этому самому человеку.
И еще Вам надо будет расшивать ответственность, т.к. за правильность учета юридическую ответственность несут конкретные люди, а решение о применении ИИ в их сфере ответственности будут принимать, скорее всего, вовсе не они.
exwill Автор
17.02.2025 02:41Спасибо за развернутый ответ!
При внедрении технологий искусственного интеллекта происходит следующее. Вы приходите со своим решением. У вас спрашивают: какая у вас вероятность ошибки? А вы отвечаете: А какая вам нужна? Такую и сделаем.
Допустим у вас ошибка 1 на 100 документов. Вам говорят: нет, нам нужна 1 на 10 000. Хорошо, говорите вы. Стоимость распознавания 100 документов 2 рубля. Будем распознавать каждый документ два раза. В случае несовпадения, будем распознавать в третий раз или отдавать человеку по вашему выбору. Так мы получим 1 к 10 000. Стоимость тогда будет 4 рубля на 100 документов. Устроит?
SwingoPingo
17.02.2025 02:41А вероятность ошибки второго распознавания зависит от результатов первого? В бух вроде по правилам, емнип, перепроверку делает другой оператор, что важно (уйдем ли мы в холивар про действительно случайное число)).
Опять же не все нужно перепроверять, т.к. на косяки подобного рода создаются компенсационные резервы активов и пока мы находимся в рамках этих резервов, вмешиваться в процесс вроде как дороже чем принять ошибки как есть. Но то уже лирика конечно.
Ещё вопрос - LLM может выкидывать флаг о трудностях возникших при интерпретации вместе с результатом? По типу "документ существенно отличается от статистических"
max-zhilin
17.02.2025 02:41По-моему, вы уходите в специфическую область с предположением типа "а если бы он вёз патроны?".
Статья же не об этом.
exwill Автор
17.02.2025 02:41Конечно нет. Тут принципиальное отличие от детерминированных систем. В детерминированной системе если этот документ распознался с ошибкой, то он и дальше будет распознаваться с этой же самой ошибкой, сколько не запускай. А здесь вероятность
remzalp
17.02.2025 02:41данные да, а вот свойства из документа по переменным раскидать - уже сложнее. Ну и даже OCR в случае не сильно чистого документа - нисколько не усомнится, что ООО "Рога .b./,.vx.vx и копыта" вполне нормальное название, а на нейронку хоть какая-то надежда
pavelsha
17.02.2025 02:41В сканируемых первичных докуметах будут реквизиты, которые правильнее использовать в качестве ключевой вместо названия. Можно и нужно уточнять адрес и название по ИНН, КПП
gennayo
17.02.2025 02:41Вот когда ИИ сможет по видеопотоку "на лету" делать инвентаризацию в магазине/на складе в реальном времени - вот тогда будет польза :)
exwill Автор
17.02.2025 02:41Так это и сейчас уже можно сделать
gennayo
17.02.2025 02:41А поделитесь ссылкой на такое готовое решение?
ychu
17.02.2025 02:41https://softservebs.com/en/ai-driven-ecosystem/image-recognition-fmcg/
Но это не совсем то, не видно количество товаров в глубину полки, поэтому нельзя посчитать точное количество для инвентаризации.
Speedmanc
17.02.2025 02:41>вот когда научится перцептрон узнавать цифры, тогда и будет ИИ
>вот когда научатся глубокие сети картинки рисовать, тогда и будет ИИ
>вот когда научатся мультимодальные модели документы обрабатывать <= вы находитесь здесь
moving the goalpost
mlnw
17.02.2025 02:41У КИС и ИИ та же дилемма, что и у автопилотов в авто: покуда ИИ занимается вспомогательными вещами, где сложно навредить, типа аналитики, отчетиков - использовать ее можно и нужно. Но когда речь о формировании документов, особенно первички, встаёт вопрос: а какова будет конкретная фамилия той проблемы, когда ИИ, скажем, отправит все деньги с р/с в счёт оплаты им же сформированного заказа рогов и копыт в ноунейм-фирму.
exwill Автор
17.02.2025 02:41Это будет фамилия того, кто нажал кнопку. В чем проблема?
mlnw
17.02.2025 02:41Проблема в том, что внедрение ИИ и подразумевает избавление от тех, кто нажимает кнопки. Или нажатие кнопки в итоге должно приводить сразу к огромному количеству операций, которые кнопкодав в ручном режиме выполнить не в состоянии. Если же у нас ИИ таков, что его действия надо поштучно визировать (или даже вызывать) кожаным контролером, тогда зачем вообще это всё: оно либо по эффективности не будет сильно превосходить того, что было (и потенциал ИИ раскрыт не будет), либо всё визирование рано или поздно скатится в формализм, который нас также не убережет от ошибки ИИ.
MikeHail
17.02.2025 02:41Стоит взглянуть на письма от налоговой - они имеют типовой шаблон и непонятно бывает что налоговая вообще хочет и что это вообще такое и приходится звонить исполнителю для пояснения. И сам исполнитель бывает не понимает что это такое - ему это выдала программа. И в ответ исполнитель получит просто отписку.
В месяц получал от налоговой 14 писем с требованием и отвечал отписками. Смысла во всем этом я не очень понимаю. Не хотелось бы превратиться в такого же исполнителя для ИИ - подписал что то и получил в ответ что то и сиди думай что это такое.
Wesha
17.02.2025 02:41Это будет фамилия того, кто нажал кнопку. В чем проблема?
Введёте должность зицпредседателя?
UFO_01
17.02.2025 02:41Так ИИ же внедряют для того чтобы полностью всё автоматизировать. Если вам на каждый чих нужно действие человека, то зачем вам вообще ИИ, если производительность от этого только упадёт. Не говоря уже о том, что отвечать за то, что нейронка выдала бред, придётся отвечать человеку с фамилией на документе. Вы бы взяли на себя такую ответственность?
Это не говоря уже о том, что вы по сути сливаете документы на сторону, на что может очень сильно возбудиться Роскомнадзор. Если что, выдержка из политики конфиденциальности OpenAI
Пользовательский контент: Мы собираем Персональные данные, предоставляемые Вами при пользовании нашими Услугами («Контент»), включая ваши запросы и прочий загружаемый Вами контент, такой как файлы, изображения и аудио, в зависимости от используемых функций.
Вы, конечно, извините за грубость, но открывая вашу очередную статью про внедрение ИИ, я всё больше и больше убеждаюсь, что вам нужен хорошенький такой snap back to reality.
Thomas_Hanniball
17.02.2025 02:41Зумеры придумали OCR (Оптическое распознавание символов), которое было реализовано в ABBYY FineReader лет 15 назад, т.е. в древнюю эпоху миллениалов.
exwill Автор
17.02.2025 02:41OCR это поток - поток
AI это поток - структура
UFO_01
17.02.2025 02:41А разница-то какая? Можете вот прям ну, популярно просветить несведущих?
exwill Автор
17.02.2025 02:41Поток -> документ в 1С
Структура -> документ в 1С
Можете оценить разницу?
"А мне... ну это... как... вот одно ванильное, одно клубничное, потом два капучино... а не, не, не надо капучино, два американо"
Прикиньте, как вы это превратите в 1С-овский документ ЗаказПокупателя?
А теперь прикиньте, как вы превратите в документ вот это:
{
"items":[
{"name":"Клубничное мороженое","quantity":1},
{"name":"Ванильное мороженое","quantity":1},
{"name":"Кофе американо","quantity":2}
]
}
UFO_01
17.02.2025 02:41Не-а :)
UPD: Вы если что-то дописываете, то было бы неплохо обозначать что добавили, а то вы расписали что подразумеваете под потоком (я вообще на другое подумал), а я теперь как идиот выгляжу, потому что ответил до разъяснений. Кстати, то, что вы описали не спасает от ошибок ИИ ни в коем случае (или будем каждый раз проверять за ним, очень эффективно получится), а в конечном итоге выливается в формализм, кому от этого лучше вопрос хороший.
kuzzdra
17.02.2025 02:41Древние технологии вроде как умели распознавать форматированные документы.
exwill Автор
17.02.2025 02:41Они преобразовывали изображение в текст. А дальше надо было писать парсер этого текста
igrblkv
17.02.2025 02:41Поправочка: в таблицу, например в Эксель, а там уже стандартный импорт из Экселя в 1С с допиливанием небольшим.
kuzzdra
17.02.2025 02:41Automated processing of human filled application forms with ABBYY FlexiCapture. Видео 12 лет.
MikeHail
17.02.2025 02:41В 18-19 году пользовался adobe finereader для облегчения своей работы. Сканируешь, распознаешь, вставляешь, проверяешь...
ИИ наверное с ума сойдёт т.к. документы разные и имеют следы износа - где то отпечаток ботинка, где то пыль, где то шариковой ручкой заметки или галочки - промышленная компания, там не очень хорошо относятся к документам.
yukon39
17.02.2025 02:41Понятно, что пример демонстрационный, но, пардон, распознавать из аналога, то что изначально создавалось в цифровом виде... ну так, атмосферу только греть.
Лет 10-15 назад оцифровка документов была прям хайтеком, а сейчас когда везде ЭДО, это уже анахронизм.
Есть современные технологии без всякого AI для представления цифровых данных в аналоговом виде в удобном для массовой обработки формате. Тот же QR код, например.
Alcpp
17.02.2025 02:41Учитывая то, что многие вам доверяют чувствительные данные - так себе заголовок.
lexore
Провокационный заголовок
perfect_genius
Да и кривой. Судя тексту там явно должно быть "всё", а не "все".
copenhagen72