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

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

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С — переключение на внешний сервис не требует никакой миграции данных, всё совместимо.