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 и содержимое независимыми инструментами.