Minimal Windows Local AI Chatbot with GPT-2 & Tkinter

Answered using AI by Vibe Coding

Code Question:

Мне нужен код для личного локального ИИ на свой пк на windows с минималистичным интерфейсом который будет обучаться

Code Solution:

Вот пример кода для локального ИИ с минималистичным интерфейсом на Python, использующий transformers от Hugging Face и tkinter для GUI. Этот ИИ будет обучаться на ваших данных.

1. Установка зависимостей

pip install torch transformers sentencepiece tkinter

2. Код (простой чат-бот с возможностью дообучения)

import tkinter as tk
from tkinter import scrolledtext, simpledialog
from transformers import GPT2LMHeadModel, GPT2Tokenizer, TextDataset, DataCollatorForLanguageModeling
from transformers import Trainer, TrainingArguments
import os

class LocalAI:
    def __init__(self):
        self.model_name = "gpt2"
        self.tokenizer = GPT2Tokenizer.from_pretrained(self.model_name)
        self.model = GPT2LMHeadModel.from_pretrained(self.model_name)
        self.history = []

    def generate_response(self, prompt):
        input_ids = self.tokenizer.encode(prompt, return_tensors="pt")
        output = self.model.generate(input_ids, max_length=100, num_return_sequences=1)
        return self.tokenizer.decode(output[0], skip_special_tokens=True)

    def train(self, file_path):
        train_dataset = TextDataset(
            tokenizer=self.tokenizer,
            file_path=file_path,
            block_size=128
        )
        
        data_collator = DataCollatorForLanguageModeling(
            tokenizer=self.tokenizer,
            mlm=False
        )
        
        training_args = TrainingArguments(
            output_dir="./gpt2-finetuned",
            overwrite_output_dir=True,
            num_train_epochs=3,
            per_device_train_batch_size=4,
            save_steps=10_000,
            save_total_limit=2
        )
        
        trainer = Trainer(
            model=self.model,
            args=training_args,
            data_collator=data_collator,
            train_dataset=train_dataset
        )
        
        trainer.train()
        trainer.save_model("./gpt2-finetuned")

class AIApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Локальный ИИ")
        self.ai = LocalAI()
        
        # Чат-поле
        self.chat_area = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=60, height=20)
        self.chat_area.pack(padx=10, pady=10)
        
        # Поле ввода
        self.entry = tk.Entry(root, width=50)
        self.entry.pack(padx=10, pady=5)
        self.entry.bind("<Return>", self.send_message)
        
        # Кнопки
        self.btn_frame = tk.Frame(root)
        self.btn_frame.pack(pady=5)
        
        self.send_btn = tk.Button(self.btn_frame, text="Отправить", command=self.send_message)
        self.send_btn.pack(side=tk.LEFT, padx=5)
        
        self.train_btn = tk.Button(self.btn_frame, text="Обучить", command=self.train_model)
        self.train_btn.pack(side=tk.LEFT, padx=5)
        
    def send_message(self, event=None):
        message = self.entry.get()
        if message:
            self.chat_area.insert(tk.END, f"Вы: {message}\n")
            self.entry.delete(0, tk.END)
            
            response = self.ai.generate_response(message)
            self.chat_area.insert(tk.END, f"ИИ: {response}\n")
            self.chat_area.yview(tk.END)
    
    def train_model(self):
        file_path = simpledialog.askstring("Обучение", "Введите путь к файлу с данными (txt):")
        if file_path and os.path.exists(file_path):
            self.chat_area.insert(tk.END, "ИИ начал обучение...\n")
            self.root.update()
            
            self.ai.train(file_path)
            self.ai.model = GPT2LMHeadModel.from_pretrained("./gpt2-finetuned")
            
            self.chat_area.insert(tk.END, "ИИ завершил обучение!\n")
        else:
            self.chat_area.insert(tk.END, "Файл не найден!\n")

if __name__ == "__main__":
    root = tk.Tk()
    app = AIApp(root)
    root.mainloop()

Как это работает:

  1. Базовая модель: Используется предобученная GPT-2 от Hugging Face
  2. Обучение: Вы можете обучать модель на своих текстовых данных (просто укажите путь к .txt файлу)
  3. Минималистичный интерфейс: Tkinter предоставляет простой GUI

Как использовать:

  1. Сохраните код в файл local_ai.py
  2. Запустите: python local_ai.py
  3. Для обучения создайте текстовый файл с данными и нажмите кнопку "Обучить"

Советы:

  • Для более серьезных задач рассмотрите использование более мощных моделей (GPT-Neo, LLaMA)
  • Добавьте обработку ошибок и индикатор прогресса обучения
  • Для работы с большими моделями потребуется GPU

Хотите упростить или расширить функционал? Могу адаптировать код под ваши нужды.