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

Сервис извлечения текста из файлов

schema_type: howto howto_total_time: PT20M

Сервис извлечения текста из файлов

«Управление IT-отделом 8» умеет извлекать текст из присоединённых к заданиям и комментариям файлов и использовать этот текст в двух местах:

  • Полнотекстовый поиск платформы — позволяет искать задания по содержимому прикреплённых документов.
  • AI-ассистент — при анализе задания читает не только тему и описание, но и содержимое прикреплённых файлов.

По умолчанию извлечение делает встроенный механизм 1С с использованием технологии IFilter. Этот вариант работает только под Windows и требует, чтобы для каждого формата файла на сервере 1С был установлен соответствующий IFilter (Adobe iFilter для PDF, Microsoft Office iFilter для DOCX и т.д.). Со сканами документов он не справляется — текст из изображений не извлекается.

В качестве альтернативы можно подключить внешний сервис извлечения текста. Он закрывает все слабые места встроенного механизма.

Чем сервис лучше встроенного варианта

Что не умеет встроенный механизм 1СЧто умеет внешний сервис
Работает только под WindowsРаботает на Windows и Linux (Docker)
Требует установленные IFilter в системеСамодостаточный образ — все зависимости внутри
Сканы документов и фотографии — пустой текстРаспознавание изображений (OCR) на русском и английском
Архивы не разбираютсяZIP, RAR, 7Z распаковываются автоматически (до 3 уровней вложенности)
EML, MSG, EPUB не поддерживаютсяПоддерживаются
HTML/веб-страницы — не работаетИзвлекает текст из веб-страниц по URL

Поддерживаемые форматы внешнего сервиса:

  • Документы: PDF, DOCX, DOC, ODT, RTF
  • Презентации: PPTX, PPT (с заметками докладчика)
  • Таблицы: XLSX, XLS, ODS, CSV
  • Изображения с распознаванием: JPG, PNG, TIFF, BMP, GIF, WebP
  • Архивы: ZIP, RAR, 7Z, TAR, GZ
  • Электронная почта: EML, MSG
  • Книги и веб: EPUB, HTML
  • Текст и конфигурации: TXT, JSON, XML, YAML, TOML, INI
  • Исходный код: более 50 языков программирования

Локальное извлечение текстовых файлов

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

txt, md, log, bsl, os, xml, json, yaml, yml, html, htm, css, js, ts, py, sql, csv, ini, conf, sh, ps1, bat

Локальное извлечение работает везде — и в полнотекстовом поиске, и в ассистенте при анализе заданий, и в чатах ассистента при прикреплении файлов.

Ограничение по кодировке. Чтение выполняется в кодировке UTF-8. Если файл сохранён в другой кодировке (например, Windows-1251 или UTF-16), содержимое не извлечётся. Это не ошибка программы — внешний HTTP-сервис с такими файлами тоже не справится. Пересохраните файл в UTF-8, чтобы решить проблему.

Размер файла для локального извлечения ограничен тем же лимитом, что и для сервиса — по умолчанию 20 МБ.

Совет

Локальное извлечение работает всегда — даже до настройки сервиса. Это хороший способ начать использовать ассистента с текстовыми логами, конфигами и скриптами, не разворачивая Docker.

Что понадобится для подключения

  1. Сервер, на котором будет запущен сервис извлечения. Подходит любой Linux или Windows с установленным Docker. Для распознавания сканов рекомендуется минимум 2 ГБ ОЗУ и 2 ядра процессора.
  2. Сетевой доступ от сервера 1С к серверу с сервисом (один HTTP-порт, по умолчанию 7555).
  3. Доступ к настройкам параметров учёта в «Управление IT-отделом 8» (требуются права администратора).
Совет

Если сервер 1С работает под Linux — внешний сервис фактически единственный способ получить извлечение текста из PDF/DOCX. Встроенный механизм Windows IFilter в этом случае недоступен.

Шаг 1. Развёртывание сервиса

Самый простой способ — через Docker. Создайте на сервере файл docker-compose.yml:

services:
extract-text:
image: text-extraction-api:latest
ports:
- "7555:7555"
environment:
AUTH_MODE: apikey
API_KEYS: "ваш-секретный-ключ-минимум-20-символов"
restart: unless-stopped

Запустите сервис:

docker compose up -d

После запуска проверьте, что сервис отвечает:

curl http://localhost:7555/health

Должен вернуться ответ со статусом «ok».

Безопасность

Не выставляйте сервис в публичную сеть. Безопаснее всего развернуть его в локальной сети рядом с сервером 1С и обращаться по внутреннему IP-адресу. Если необходим внешний доступ — обязательно используйте AUTH_MODE=apikey и настройте reverse proxy с HTTPS.

Без авторизации

Если сервис стоит в полностью закрытой сети и доступ к нему есть только у сервера 1С, можно запустить его без ключа:

environment:
AUTH_MODE: none

В этом случае поле «Ключ сервиса извлечения текста» в 1С оставьте пустым.

Проект сервиса с подробной документацией по развёртыванию: https://github.com/Diversus23/extract-text.

Шаг 2. Настройка в «Управление IT-отделом 8»

  1. Откройте раздел «Администрирование» → «Настройки параметров учёта».
  2. Перейдите на закладку «Файлы».
  3. В группе «Извлечение текста» заполните поля:
    • Адрес сервиса извлечения текста — полный URL сервиса с указанием версии API. Например, http://192.168.1.100:7555/v1.
    • Ключ сервиса извлечения текста — тот же ключ, что задан в API_KEYS сервиса. Если сервис запущен в режиме без авторизации (AUTH_MODE=none) — оставьте поле пустым.
  4. Нажмите «Записать» — настройки сохраняются автоматически.
Осторожно
Адрес обязательно с /v1

Указывайте URL до версии API включительно. Правильно: http://192.168.1.100:7555/v1. Без /v1 запросы будут возвращать ошибку «Не найдено».

Шаг 3. Проверка подключения

На той же закладке «Файлы» нажмите кнопку «Проверить подключение». Программа отправит в сервис тестовый файл и проверит, что сервис правильно вернул его содержимое.

Возможные результаты:

  • «Подключение успешно. Адрес: ... Время отклика: ... мс» — всё настроено корректно, можно пользоваться.
  • «Адрес сервиса не задан» — поле «Адрес сервиса извлечения текста» пустое.
  • «Сервис вернул ошибку: Сетевая ошибка ...» — сервер 1С не может достучаться до сервиса. Проверьте URL, доступность по сети, что сервис запущен.
  • «Сервис вернул ошибку: Invalid API key» — ключ в настройках 1С не совпадает с ключом сервиса. Перепроверьте поле «Ключ сервиса извлечения текста».
  • «Сервис ответил, но не вернул содержимое тестового файла» — сервис на адресе отвечает, но это, скорее всего, не сервис извлечения текста, а что-то другое (например, веб-сервер по умолчанию). Перепроверьте адрес.
Совет

Перед нажатием «Проверить подключение» сначала запишите изменения настроек — кнопка работает с уже сохранёнными значениями. Если форма помечена как «Изменено», программа подскажет это сделать.

Как это работает в повседневной работе

После настройки сервиса извлечение текста начинает работать автоматически — никаких дополнительных действий не требуется.

Полнотекстовый поиск

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

Анализ заданий ассистентом

Когда AI-ассистент анализирует задание (например, по нажатию кнопки «Анализировать» или через автоматизацию):

  • Картинки (JPG, PNG, JPEG) отправляются в нейросеть как изображения — модель «видит» их напрямую (если выбрана мультимодальная модель).
  • Документы (PDF, DOCX, XLSX, EML и т.д.) — программа извлекает из них текст через сервис и подкладывает его в текст запроса с разделителями вида --- FILE: договор.pdf ---. Так нейросеть может анализировать содержимое документов, даже если выбранная модель не умеет работать с файлами напрямую.
  • Архивы распаковываются автоматически — нейросеть увидит содержимое всех файлов внутри.

Извлечение делается по требованию: содержимое прикреплённого PDF реально читается только в тот момент, когда ассистент действительно запрашивает анализ задания. Если файл никому не понадобился — лишней работы не происходит.

Файлы в чатах ассистента

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

Если вы прикрепили файл и сразу же отправили запрос — программа в момент сборки контекста сделает это синхронно. Небольшая задержка возможна для крупных файлов (несколько МБ), но это исключение.

Подробнее о работе с файлами в чатах — в статье Работа с файлами в AI-ассистенте.

Если что-то не работает

«Подключение успешно», но текст из файлов не появляется в поиске

Полнотекстовый индекс обновляется регламентным заданием «Извлечение текста». По умолчанию оно запускается раз в несколько минут. Подождите 5–10 минут после прикрепления файла. Также проверьте, что в «Администрирование» → «Регламентные и фоновые задания» регламент «Извлечение текста» включён.

Сервис стал недоступен — что произойдёт?

Ассистент в момент анализа задания пропустит файлы, которые не успел обработать (в журнале регистрации появится запись с пометкой «Файлы.Извлечение текста»). Полнотекстовый поиск продолжит работать со старыми, ранее проиндексированными файлами. Уже извлечённые тексты остаются в базе и не теряются.

После восстановления сервиса извлечение возобновится автоматически на следующем тике регламента.

Хочу временно отключить сервис и вернуться к встроенному механизму

Очистите поле «Адрес сервиса извлечения текста» в настройках и нажмите «Записать». Программа автоматически переключится на встроенный механизм Windows IFilter — никакая настройка регламента или дополнительные действия не требуются.

Файл с расширением .txt, .md или .log не извлекается, а сервис отключён

Для этих форматов программа читает содержимое напрямую, без HTTP-сервиса. Если извлечение не происходит, скорее всего, файл сохранён в неподдерживаемой кодировке (например, Windows-1251 или UTF-16). Пересохраните файл в UTF-8 — и он обработается автоматически.

Для дополнительной диагностики откройте журнал регистрации и отфильтруйте по событию «Файлы.Извлечение текста» — там будет подробное сообщение о причине.

Файл не извлёкся — статус «Извлечь не удалось»

Возможные причины:

  • Размер файла превышает лимит сервиса (по умолчанию 20 МБ).
  • Файл повреждён или имеет неподдерживаемый формат.
  • Защищённый паролем PDF/архив.

Подробности можно посмотреть в журнале регистрации, отфильтровав записи по событию «Файлы.Извлечение текста».

Архив не распаковался

Сервис распаковывает архивы до трёх уровней вложенности. Если внутри ZIP лежит другой ZIP, в котором ещё один ZIP — четвёртый уровень обработан не будет. Также имеет значение размер: суммарный объём распакованного содержимого ограничен 100 МБ.

Где посмотреть результат вручную

Извлечённый текст хранится в стандартном поле справочников файлов. Через интерфейс конфигурации его не видно (поле служебное), но он доступен:

  • Через стандартный поиск — введите фрагмент текста из документа в строку поиска заданий.
  • В анализе ассистента — текст автоматически подставляется в запрос к нейросети.

Этот же подход используется и встроенным механизмом 1С — переключение на внешний сервис не требует никакой миграции данных, всё совместимо.