Перейти к содержанию

AI

В проекте есть два связанных, но разных AI-слоя.

AI в основном GUI

Кнопка AI или Ctrl+I берёт выбранный файл из панели — в том числе файл внутри образа — либо файл с диска. Данные читаются чанками; параметр ai_max_bytes ограничивает объём (по умолчанию 262 144 байта). Импорт слоя не делает сетевой запрос: обращение начинается только после явного действия.

Доступны бэкенды:

  • OllamaBackend — локальный Ollama;
  • OpenAiCompatBackend — любой endpoint /v1/chat/completions с совместимым протоколом;
  • NullBackend — понятный ответ, если бэкенд не настроен.

Ключевые настройки: ai_backend, ai_base_url (по умолчанию http://127.0.0.1:11434), ai_model, ai_api_key, ai_max_bytes. Ключ вводится как пароль и не должен попадать в журнал. Модель может ошибаться; результат AI — подсказка, а не доказательство.

Быстрая настройка локального Ollama

Если окно AI сообщает «AI-бэкенд не настроен», откройте Конфигурация → Настройки и нажмите «Проверить и настроить Ollama». MountFile проверит http://127.0.0.1:11434/api/tags, найдёт уже загруженные модели и сам выберет Ollama и модель в настройках. Сетевой запрос выполняется только после нажатия этой кнопки; ключи и содержимое образа не отправляются при проверке.

Если Ollama ещё не установлена на Windows, установите её с https://ollama.com/download/windows, запустите приложение, затем в PowerShell загрузите локальную модель:

ollama pull llama3.2:3b

После этого снова нажмите кнопку автонастройки. Установка Ollama и загрузка модели не выполняются скрытно, потому что модель может занимать несколько гигабайт. Без локального Ollama можно выбрать OpenAI-совместимый эндпоинт и указать его адрес, модель и API-ключ.

Какой советник когда используется

В пакете два независимых модуля с похожими именами — это не две версии одного, а разные роли. Таблица ниже снимает путаницу.

Модуль Роль Публичный API Кто вызывает
mountfile/ai_format_advisor.py советник по метаданным: принимает FileFingerprint, никогда не открывает файл; хранит выбранные рецепты в ~/.mountfile/ai_kb.json advise_from_metadata, Remember, KnowledgeBase, FormatSpec GUI: mountfile/tc_window.py (кнопка «AI»), тесты test_format_advisor.py, test_ai_ui.py
mountfile/ai_format_advisor_v2.py мульти-гипотезный разбор: ставит гипотезы по сигнатурам, спрашивает LLM, умеет консенсус двух бэкендов и отчёт в GitHub Issues HypothesisEngine, Calibration, LLMBackendAdapter, GitHubReporter, FormatAdvisorDialog, advise_and_show, maybe_advise GUI: Инструменты → AI: гипотезы о формате файла… (Ctrl+Alt+I)

Суффикс _v2 здесь означает «второй подход», а не «замена первого». Удалять или сливать модули нельзя без решения по продуктовой линии: _v2 содержит собственный диалог и сетевой слой, ai_format_advisor держит контракт «только метаданные» и уже встроен в GUI.

AI: гипотезы о формате файла

Действие Инструменты → AI: гипотезы о формате файла… (Ctrl+Alt+I) доступно после выбора файла. Оно читает только первые 4 KiB (для файлов внутри образа — через провайдер файловой системы), строит слепок с сигнатурой и энтропией и показывает гипотезы советника v2. При настроенном backend этот слепок передаётся модели только после явного запуска действия. Автоматическое создание GitHub Issue не включено: отчёты требуют отдельной настройки и действия в диалоге советника. Анализ read-only и не меняет файл или образ.

Запрос AI в диалоге анализа (Ctrl+I) и гипотезном советнике выполняется в рабочем потоке, поэтому окно остаётся отзывчивым во время чтения и ожидания ответа модели.

Format Advisor: локально и только по метаданным

Команда Format Advisor (Ctrl+Shift+I) — отдельный режим от Ctrl+I: советник использует только имя, расширение и уже известный размер выбранного файла. Он не открывает содержимое, не читает сигнатуру сам, не вызывает LLM или сетевой backend. Рекомендации и предлагаемые команды read-only; инструменты не запускаются автоматически. Сохранение первой рекомендации в ~/.mountfile/ai_kb.json выполняется только после явного подтверждения.

Настройка автосовета при просмотре файла только добавляет локальную подсказку в журнал. Она не меняет отдельное поведение Ctrl+I, которое анализирует файл после явного запуска и может передать выбранный объём данных настроенному backend (в том числе удалённому OpenAI-compatible endpoint).

mountfile_ai.py: проверяемый агентный слой

Установка компонентов:

python -m pip install "mcp[cli]" pydantic openai pytsk3

pytsk3 нужен для чтения разделов и файловых систем; openai нужен для OpenAI-совместимого агента; mcp[cli] — только для MCP-сервера. Без pytsk3 остаются проверки сигнатур raw-файла, но операции с разделами и файлами не работают.

Человеческая проверка без модели:

python mountfile_ai.py inspect --image dump.bin

Агент использует OpenAI-совместимую конфигурацию. Для локального Ollama пример настройки из текущего модуля:

export OPENAI_API_KEY=ollama
export OPENAI_BASE_URL=http://localhost:11434/v1
export MOUNTFILE_MODEL=qwen2.5-coder:7b
python mountfile_ai.py agent --image dump.bin \
  --query "inspect partitions and look for deleted PDFs" --json

Доступна также команда mcp, которая требует mcp[cli] и запускает сервер на stdio для внешнего клиента. Модуль поддерживает allowlist образов, hash-chained JSONL-аудит (MOUNTFILE_AUDIT), рабочую папку (MOUNTFILE_WORKDIR) и лимит раундов (MOUNTFILE_MAX_ROUNDS). Каждый инструментальный вызов попадает в аудит, а утверждения проходят gates по фактическому результату вызова.

Для пакетного MCP façade используйте явную точку входа mountfile.ai.cli:

python -m mountfile.ai.cli mcp --image /absolute/path/dump.img \
  --workspace ~/.mountfile/workspace

Сервер работает через stdio, принимает один image-файл или каталог разрешённых образов и по умолчанию пишет артефакты только в ~/.mountfile/workspace. Список разделов возвращает byte offset, который затем передаётся в операции поиска и чтения тома.

Read-only по умолчанию

MOUNTFILE_READONLY по умолчанию равен 1. В таком режиме извлечение, восстановление удалённых файлов и XOR-вывод запрещены. Значение 0 разрешает записать результаты во внешнюю рабочую папку; сначала используйте копию образа и задайте отдельный MOUNTFILE_AUDIT.

AI-слой не выполняет полноценный антивирусный анализ, не обещает корректность вывода модели и не превращает неполный recovery в подтверждённый результат. Сверяйте SHA-256, offset, inode и содержимое независимыми инструментами.