Тренд на использование больших языковых моделей (LLM) не ослабевает, но облачные решения вроде ChatGPT или Gemini имеют ряд ограничений: зависимость от интернета, платные подписки и, что самое важное, конфиденциальность данных. Особенно остро последний вопрос стоит при работе с корпоративной или чувствительной информацией, которую нельзя загружать в чужие сервисы.

В этой статье я хочу поделиться опытом создания полностью локального AI-ассистента на основе Microsoft Phi-3-mini — компактной, но мощной модели, способной анализировать данные из CSV, JSON и TXT файлов. Весь проект представляет собой набор Python-скриптов с открытым исходным кодом, которые автоматизируют установку и предоставляют интуитивно понятный чат-интерфейс.

Почему Phi-3-mini?

Microsoft позиционирует семейство моделей Phi-3 как "достаточно маленькие" (Small Language Models), но при этом "достаточно умные". Phi-3-mini, обладая 3.8 миллиардами параметров, демонстрирует производительность, сопоставимую с моделями вроде Mixtral 8x7B и GPT-3.5, но в значительно меньшем размере. Это делает её идеальным кандидатом для локального запуска на потребительском железе.

Компактность: ~7-8 ГБ против десятков и сотен ГБ у более крупных моделей.

Эффективность: Оптимизирована для работы на GPU с ограниченными ресурсами.

Качество: Поддерживает контекст до 4K токенов и отлично справляется с логическими и аналитическими задачами, включая код.

Архитектура решения

Проект задуман как максимально простой в развертывании. Его ядро состоит из двух основных скриптов на Python:

auto_install_AI_Phi-3-mini_.py — установщик, который берет на себя всю рутину.

chat_with_AI_Phi-3-mini.py — интерактивный чат-клиент для общения с моделью и анализа данных.

Ключевые компоненты системы:

Менеджер зависимостей: Автоматически проверяет наличие Python 3.8+, pip и совместимых версий ключевых библиотек (PyTorch, Transformers и др.).

Детектор окружения: Определяет наличие и тип GPU (CUDA), чтобы задействовать аппаратное ускорение, или переключается на CPU.

Загрузчик моделей: Скачивает модель с Hugging Face Hub и размещает её в локальной структуре каталогов.

Файловый менеджер: Отслеживает папку data_files, автоматически обнаруживая и читая файлы для анализа по запросу пользователя.

Система сохранения: Реализует логику ручного и автоматического сохранения истории диалогов и ответов модели.

Структура проекта после установки:

auto_install_AI_Phi-3-mini_.py
chat_with_AI_Phi-3-mini.py

 phi3-project/
   ├── models/
   │   └── phi3-mini/          # Локальная копия модели
   ├── data_files/
   │   ├── responses/          # Автосохраненные ответы
   │   ├── sales_data.csv
   │   └── report.json
   └── scripts/                # Вспомогательные скрипты


? Как это работает: Установка и запуск

Весь процесс установки сводится к нескольким командам:

bash

Клонируем репозиторий (или копируем скрипты)

git clone
cd phi3-project

Запускаем автоматическую установку

python auto_install_AI_Phi-3-mini_.py
Установщик последовательно:

  • Проверит системные требования.

  • Предложит выбрать диск для установки.

  • Создаст структуру папок.

  • Установит необходимые Python-пакеты.

  • Загрузит модель Phi-3-mini.

После этого копируем файл

bash
python chat_with_AI_Phi-3-mini.py

в корневую папку проекта и запускаем чат-клиент. И всё — модель загружена, можно общаться и анализировать данные.

Ключевые возможности чат-клиента

Диалог с нейросетью происходит в редакторе. Я использовал Visual Studio Code.

Диалог прост - запускаете файл чата в редакторе и в терминале в строке ввода данных пишите, что вам нужно. Для выхода из диалога набираете "exit" или "выход"


система команд, которые можно вводить в терминале при диалоге:

  • /help - Справка по командам

  • /clear - Очистить историю

  • /history - Показать историю диалога

  • /stats - Статистика сессии

  • /files - Список доступных файлов

  • /model - Информация о модели

  • /exit - Выйти из программы

  • /save - сохранить последний ответ

  • /saveall - сохранить всю историю диалога

  • /autosave - включить/выключить автосохранение

  • /responses - показать сохраненные файлы

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

Пример диалога:

? Вы: Проанализируй файл sales_data.csv и найди топ-3 категории по продажам.
? Phi-3: Файл 'sales_data.csv' содержит 12500 записей. Проанализировав данные, вот топ-3 категории по объему продаж:

  1. Электроника: $1,542,000

  2. Книги: $891,500

  3. Одежда: $745,200 Также я заметил, что в столбце 'Discount' присутствует 5% пропущенных значений.

Полная оффлайн-работа

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

Технический стек и оптимизация

Язык: Python 3.8+

Фреймворки: PyTorch, Transformers (Hugging Face)

Квантование: Используется 8-битное квантование (bitsandbytes) для уменьшения потребления памяти без значительной потери качества.

Ускорение: Автодетект CUDA, поддержка GPU NVIDIA через torch.cuda.

С какими вызовами пришлось столкнуться

Потребление памяти: Даже такая "маленькая" модель требует ~8 ГБ ОЗУ для комфортной работы. Решением стало внедрение 8-битного квантования и четкие минимальные системные требования.

Скорость ответа на CPU: На процессоре генерация ответа может занимать десятки секунд. Мы честно предупреждаем пользователей, что для продуктивной работы крайне желателен GPU.

Управление контекстом: Модель имеет ограничение в 4096 токенов. Пришлось реализовать «обрезание» истории диалога, чтобы оставаться в лимите.

Выводы и перспективы

Развертывание локальных LLM перестало быть прерогативой крупных компаний с мощными дата-центрами. Такие модели, как Phi-3-mini, открывают возможность создания персональных и корпоративных AI-ассистентов, которые:

  • Работают оффлайн.

  • Гарантируют конфиденциальность.

  • Не требуют ежемесячных платежей.

  • Кастомизируются под конкретные задачи.

Данный проект — это концепт, который можно развивать в разных направлениях: добавить веб-интерфейс на Streamlit или Gradio, интегрировать другие модели (например, кодогенерирующие), реализовать RAG (Retrieval-Augmented Generation) для работы с внутренней базой документов.

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

Ссылки на проект

Спасибо за уделенное внимание.

Комментарии (6)


  1. sneg2015
    16.10.2025 15:55

    Спасибо за статью. Действительно интересный опыт.
    Все же очень смущает доверие к такому анализу. В том же pandas , хотя бы примерно понятно что и как выбирается. Тут же где гарантия, что модель не выдумала свой ответ?


    1. Sasa987 Автор
      16.10.2025 15:55

      Вы правы в своих сомнениях. Нейросети как хороший друг - если не знает как ответить, то может просто соврать, чтобы поддержать тебя. Ей нельзя верить на 100%, но она даст помощь в направлении куда мыслить, или с чего начать, если ты оказался в затруднении.


    1. Jacov911
      16.10.2025 15:55

      Очень просто, пусть llm использует python, и делает отчёт через пандас

      Ровно так и работал анализ в чатгпт и клоде


    1. Sasa987 Автор
      16.10.2025 15:55

      @sneg2015 для дополнительной проверки корректности ответа LLM можно просить ее использовать конкретную библиотеку Python, например:

      Вы: "Проанализируй мой файл 'my_data.csv', генерируя и выполняя Python код с pandas"

      ответ LLM: "Я создам код для анализа:
      ``python import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('my_data.csv') print("Базовая статистика:") print(df.describe()) print("Корреляционная матрица:") print(df.corr()) # Построим график plt.figure(figsize=(10, 6)) plt.scatter(df['x'], df['y']) plt.title('X vs Y') plt.show() ``"


  1. Sasa987 Автор
    16.10.2025 15:55

    @sneg2015 еще один вариант :
    Вы - ассистент по анализу данных. Всегда отвечай, генерируя исполняемый Python код с pandas. Данные: файл 'sales.csv' с колонками: date, product, revenue, units_sold Задача: проанализировать сезонность продаж Сгенерируй код который: 1. Загрузит данные 2. Преобразует даты 3. Посчитает месячную выручку 4. Построит график тренда 5. Выведет статистику Не объясняй словами - покажи код.

    от LLM вы получите:

    python

    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    
    # Загрузка данных
    df = pd.read_csv('sales.csv')
    df['date'] = pd.to_datetime(df['date'])
    
    # Анализ сезонности
    df['month'] = df['date'].dt.month
    monthly_revenue = df.groupby('month')['revenue'].sum()
    
    print("Месячная выручка:")
    print(monthly_revenue)
    
    plt.figure(figsize=(12, 6))
    plt.plot(monthly_revenue.index, monthly_revenue.values)
    plt.title('Сезонность продаж')
    plt.xlabel('Месяц')
    plt.ylabel('Выручка')
    plt.grid(True)
    plt.show()
    
    # Дополнительная статистика
    print(f"Общая выручка: {df['revenue'].sum():.2f}")
    print(f"Средние продажи в месяц: {monthly_revenue.mean():.2f}")


  1. maxcat
    16.10.2025 15:55

    Кстати, это SLM, а не LLM. Отсюда и компактность