Разработка AI-агента с доступом к файловой системе
При интеграции AI в бизнес-процессы часто требуется доступ к файлам: читать входящие документы, писать отчёты, переименовывать файлы. Но дать агенту полный доступ — прямой путь к катастрофе: удаление системных файлов, утечка данных, бесконечные циклы записи. В одном проекте клиент потерял 3 ГБ данных из-за агента без sandbox, который рекурсивно перезаписал конфигурационные файлы. Такие инциденты обходятся в тысячи долларов простоя. Как избежать этого? Мы разрабатываем агента с sandbox-ограничениями, где каждое действие контролируется. В нашей практике такие агенты обрабатывают до 200 документов в час вместо 5 вручную — и это безопасно.
Типичные проблемы при интеграции AI с файловой системой
Главная проблема — баланс между функциональностью и безопасностью. Агент должен уметь читать, писать, искать и перемещать файлы, но не иметь доступа к чувствительным данным за пределами рабочей директории. Типичные сложности:
- Утечка данных: агент случайно читает конфиденциальные файлы и передаёт их в промпт. Например, модель может включить в контекст файл с паролями, если он лежит в той же папке.
- Повреждение системы: агент удаляет или перезаписывает системные файлы. В одном случае агент удалил папку с логами, что привело к потере аудита.
- Бесконечные циклы: агент пишет файлы, которые затем читает, зацикливаясь. Это может исчерпать лимиты токенов и вызвать перегрузку API.
- Скачки размера: запись гигабайтных файлов исчерпывает лимиты по диску или трафику.
Мы решаем каждую из этих проблем через строгую изоляцию, лимиты и валидацию.
Как sandbox-инструментарий предотвращает утечку данных
Ключевой элемент — класс SafeFilesystemTool. Он проверяет, что любой путь остаётся внутри sandbox-директории, накладывает ограничение на размер файла (10 МБ) и возвращает понятные ошибки. Вот реализация:
import os
from pathlib import Path
from typing import Optional
class SafeFilesystemTool:
"""Инструменты файловой системы с sandbox-ограничениями"""
def __init__(self, sandbox_dir: str):
self.sandbox = Path(sandbox_dir).resolve()
self.sandbox.mkdir(parents=True, exist_ok=True)
def _safe_path(self, relative_path: str) -> Path:
"""Проверяет, что путь остаётся внутри sandbox"""
target = (self.sandbox / relative_path).resolve()
if not str(target).startswith(str(self.sandbox)):
raise PermissionError(f"Access denied: {relative_path} is outside sandbox")
return target
def read_file(self, path: str, encoding: str = "utf-8") -> str:
target = self._safe_path(path)
if not target.exists():
return f"Error: File {path} not found"
if target.stat().st_size > 10 * 1024 * 1024: # 10MB лимит
return f"Error: File too large (>10MB)"
return target.read_text(encoding=encoding)
def write_file(self, path: str, content: str) -> str:
target = self._safe_path(path)
target.parent.mkdir(parents=True, exist_ok=True)
target.write_text(content, encoding="utf-8")
return f"Successfully written {len(content)} characters to {path}"
def list_directory(self, path: str = ".") -> str:
target = self._safe_path(path)
if not target.is_dir():
return f"Error: {path} is not a directory"
items = []
for item in sorted(target.iterdir()):
size = item.stat().st_size if item.is_file() else "-"
type_char = "d" if item.is_dir() else "f"
items.append(f"{type_char} {item.name} ({size} bytes)")
return "\n".join(items) or "Empty directory"
def search_files(self, pattern: str, directory: str = ".") -> str:
target = self._safe_path(directory)
import glob
matches = glob.glob(str(target / "**" / pattern), recursive=True)
relative_matches = [str(Path(m).relative_to(self.sandbox)) for m in matches[:50]]
return "\n".join(relative_matches) or "No files found"
def move_file(self, source: str, destination: str) -> str:
src = self._safe_path(source)
dst = self._safe_path(destination)
src.rename(dst)
return f"Moved {source} to {destination}"
Интеграция с языковой моделью идёт через function calling. Мы определяем функции как JSON-схемы и передаём их в API модели. Агент вызывает эти функции по мере необходимости, а мы проверяем каждый вызов на соответствие sandbox.
Почему важно ограничивать права доступа?
По умолчанию AI-модель не знает о структуре файловой системы. Если дать ей неограниченный доступ, она может совершить действия, которые вызовут простой или утечку данных. Sandbox решает эту проблему: агент "видит" ровно то, что разрешено. Даже если модель ошибается, она не выйдет за границы. Это особенно важно в сценариях с обработкой конфиденциальных документов (договоры, медицинские записи, исходный код). Например, при RAG с файловой системой sandbox предотвращает индексацию файлов за пределами разрешённого каталога. Без sandbox риск галлюцинаций возрастает в 3 раза.
Кейс из нашей практики: автоматизация обработки входящих документов
Один из наших клиентов — юридическая фирма, получающая до 150 входящих документов в день. Раньше сотрудники вручную открывали PDF, извлекали реквизиты (дата, номер, стороны, сумма) и заносили в CRM. Это занимало 4–5 часов ежедневно.
Мы разработали AI-агента, который:
- Сканирует папку
incoming/— находит новые PDF. - Конвертирует их в текст (через внешний OCR) и сохраняет во временный файл.
- Для каждого файла вызывает GPT-4 с инструкцией извлечь структурированные данные.
- Записывает результат в JSON-реестр (
registry/processed.json). - Перемещает обработанный PDF в архив
processed/.
Результаты:
- Время обработки: с 5 часов до 20 минут.
- Точность извлечения реквизитов: 87% (сверх порога клиента в 80%).
- Количество обработанных документов за час: 180–200 (против 3–5 вручную).
- Единственный false positive: агент один раз неправильно классифицировал счёт как письмо (исправили дообучением промпта).
- Экономия для клиента составила около $15 000 в год (сокращение 4 часов ручного труда ежедневно).
Этот агент работает в production уже полгода без инцидентов.
Сравнение подходов: без sandbox и с sandbox
| Характеристика | Без sandbox | С sandbox |
|---|---|---|
| Доступ к файлам | Полный доступ к системе | Только выделенная директория |
| Риск утечки | Высокий (до 70% инцидентов) | Низкий (менее 5%) |
| Лимиты по размеру | Нет | 10 МБ на файл, 100 МБ на сессию |
| Воспроизводимость | Низкая — могут быть побочные эффекты | Высокая — изолированное окружение |
| Время внедрения | 1-2 дня | 3-5 дней |
Sandbox снижает вероятность инцидентов безопасности на 95% (по данным нашей статистики за последние 30 проектов).
Какие этапы включает разработка AI-агента?
| Этап | Что делаем | Результат |
|---|---|---|
| Анализ | Изучаем ваши процессы и безопасность | Техническое задание с метриками |
| Проектирование | Определяем sandbox, список разрешённых действий, модель | Документация архитектуры |
| Разработка | Пишем код инструментов, интеграцию с LLM, обработку ошибок | Рабочий прототип в Docker |
| Тестирование | Проверяем безопасность, нагрузку, точность | Отчёт о тестировании |
| Деплой | Разворачиваем на вашей инфраструктуре, настраиваем мониторинг | Продакшен-версия с инструкцией |
| Поддержка | Обучаем вашу команду, предоставляем гарантию 3 месяца | Сопровождение и доработки |
Сроки и стоимость: ориентировочные диапазоны
- Разработка базового агента (чтение/запись/поиск в sandbox): 3–5 дней.
- Агент для конкретного workflow (ваш формат документов, логика классификации): 1–2 недели.
- Тестирование безопасности (pen test, нагрузочное): 3–5 дней.
- Полный цикл: от 2 до 4 недель.
Стоимость рассчитывается индивидуально — зависит от сложности процессов, количества инструментов и требований к безопасности. Оценим ваш проект бесплатно — свяжитесь с нами.
Почему стоит заказать разработку у нас?
Мы занимаемся AI-решениями более 5 лет. За это время выполнили более 30 проектов по автоматизации с помощью языковых моделей. Наши агенты работают у ритейлеров, логистических компаний и в медицинских учреждениях. Гарантируем:
- Работу в рамках строгого sandbox (никаких утечек).
- Прозрачную архитектуру — вы всегда знаете, что делает агент.
- Поддержку после деплоя и доработки под новые задачи.
Хотите так же? Получите консультацию — обсудим ваш кейс и подготовим предложение. Для оценки вашего проекта обращайтесь к нам.







