Создание персонального локального ИИ-чат-бота на Python и Ollama
Автор: Javohir Abdullayev · · Искусственный интеллект

Введение: Почему именно персональный и локальный ИИ?
В настоящее время искусственный интеллект стал неотъемлемой частью рынка программного обеспечения. Большинство разработчиков используют API облачных сервисов, таких как OpenAI, Anthropic или Google. Однако зависимость от внешних API не всегда является оптимальным решением. Высокая стоимость, лимиты на количество запросов, полная привязка к сети и, самое главное, передача конфиденциальных данных на сторонние серверы вызывают серьезные опасения.
Именно по этой причине локальные модели искусственного интеллекта (Local LLM) вызывают огромный интерес. В этом практическом руководстве мы создадим умного чат-бота с помощью платформы Ollama и языка Python, который полностью автономно работает на вашем компьютере, запоминает историю диалога и выводит ответы в режиме реального времени (streaming).
Необходимые инструменты и подготовка
В ходе проекта нам понадобятся следующие инструменты:
- Python 3.10+: Основной язык программирования.
- Ollama: Инструмент для удобного локального запуска и управления открытыми LLM-моделями (например, Llama 3, Mistral, Gemma).
- ollama-python: Официальная библиотека Python для взаимодействия с сервисом Ollama.
1. Установка Ollama и загрузка модели
Сначала перейдите на сайт ollama.com, скачайте и установите подходящую версию для вашей операционной системы (macOS, Linux или Windows). После завершения установки загрузите в терминале быструю и легковесную модель llama3.2:1b или llama3.2:3b с помощью следующей команды:
ollama run llama3.2:3bПосле загрузки модели Ollama начнет диалог с вами прямо в терминале. Чтобы выйти, введите команду /bye. Теперь модель сохранена в памяти вашего компьютера и готова к вызовам из Python.
Настройка виртуального окружения Python
Создадим отдельный каталог для проекта и активируем виртуальное окружение Python:
mkdir local-ai-chatbot
cd local-ai-chatbot
python -m venv venv
source venv/bin/activate # Для Windows: venv\Scripts\activate
pip install ollamaШаг 1: Первое подключение к Ollama
На следующем шаге попробуем отправить первый запрос к модели через Python. Создайте файл main.py в папке проекта и напишите следующий код:
import ollama
def test_connection():
response = ollama.chat(
model="llama3.2:3b",
messages=[
{
"role": "user",
"content": "Salom! O'zing haqingda qisqacha aytib ber."
}
]
)
print(response["message"]["content"])
if __name__ == "__main__":
test_connection()При запуске этого скрипта библиотека Python свяжется с локально запущенным демоном Ollama и вернет полный ответ модели искусственного интеллекта. При этом не потребовалось никаких API-ключей или оплаты.
Шаг 2: Архитектура чат-бота с сохранением контекста
Полноценная система диалога должна помнить предыдущие вопросы и ответы. LLM-модели по умолчанию работают без сохранения состояния (stateless) при каждом запросе. Следовательно, для поддержания непрерывности беседы мы должны при каждом новом вопросе передавать модели также и историю предыдущих сообщений.
Давайте напишем полный код чат-бота, который сохраняет историю диалога в виде списка (list) и непрерывно работает через терминал:
import sys
import ollama
MODEL_NAME = "llama3.2:3b"
SYSTEM_PROMPT = {
"role": "system",
"content": (
"Siz PyCoder.uz dasturchilari uchun do'stona va tajribali texnik yordamchisiz. "
"Foydalanuvchi savollariga aniq, lo'nda va amaliy kod misollari bilan javob bering. "
"Faqat o'zbek tilida javob qaytaring."
)
}
def start_chat():
conversation_history = [SYSTEM_PROMPT]
print("=" * 50)
print("Lokal AI Chatbot ishga tushdi!")
print("Suhbatdan chiqish uchun 'exit' yoki 'chiqish' deb yozing.")
print("=" * 50 + "\n")
while True:
try:
user_input = input("Siz: ").strip()
except (KeyboardInterrupt, EOFError):
print("\nSuhbat yakunlandi.")
sys.exit(0)
if not user_input:
continue
if user_input.lower() in ["exit", "quit", "chiqish"]:
print("Suhbat yakunlandi. Xayr!")
break
conversation_history.append({"role": "user", "content": user_input})
print("\nAI Yordamchi: ", end="", flush=True)
try:
stream_response = ollama.chat(
model=MODEL_NAME,
messages=conversation_history,
stream=True
)
full_bot_response = ""
for chunk in stream_response:
chunk_content = chunk.get("message", {}).get("content", "")
print(chunk_content, end="", flush=True)
full_bot_response += chunk_content
print("\n" + "-" * 50 + "\n")
conversation_history.append({"role": "assistant", "content": full_bot_response})
except Exception as error:
print(f"\nXatolik yuz berdi: {error}\n")
if __name__ == "__main__":
start_chat()Шаг 3: Разбор ключевых концепций
Возможности стриминга (Streaming)
В приведенном коде был использован параметр stream=True. В стандартном режиме пользователь вынужден ждать, пока модель полностью завершит генерацию ответа. Стриминг же выводит каждое сгенерированное слово или символ (токен) на экран сразу по мере готовности. Благодаря этому время ожидания пользователя практически сводится к нулю, а система ощущается гораздо более отзывчивой (responsive).
Системный промпт (System Prompt) и назначение роли
С помощью SYSTEM_PROMPT мы задали направление поведения модели. Здесь модели было указано быть техническим ассистентом и давать четкие ответы только на узбекском языке. Вы можете адаптировать эту инструкцию под свои задачи: например, сделать модель рецензентом кода, переводчиком или репетитором английского языка.
Управление памятью (Context Truncation)
Если диалог длится слишком долго, массив conversation_history может стать чрезмерно большим. У каждой модели есть свое контекстное окно (context window). При превышении лимита сообщений качество ответов может снизиться либо возникнет ошибка. В более масштабных проектах рекомендуется ограничивать длину списка:
# Оставить в истории только системный промпт и последние 10 сообщений
if len(conversation_history) > 11:
conversation_history = [conversation_history[0]] + conversation_history[-10:]Выбор моделей на практике и системные требования
При использовании локальных ИИ-моделей решающее значение имеет оперативная и видеопамять (RAM и VRAM) вашего компьютера:
- Llama 3.2 (1B или 3B): Отлично и очень быстро работает даже на обычных ноутбуках с 4–8 ГБ оперативной памяти (RAM). Прекрасный выбор для базового анализа текста и простых ассистентов.
- Mistral (7B) или Llama 3.1 (8B): Требуют 16 ГБ RAM или от 8 ГБ VRAM. Демонстрируют великолепные результаты при написании программного кода и глубоком логическом анализе.
- DeepSeek-Coder или Qwen 2.5 Coder: Мощные модели, специально оптимизированные для разработчиков, которые показывают результаты, близкие к уровню ChatGPT-4 при анализе и рефакторинге кода.
Заключение
В этом руководстве мы создали полностью автономного и безопасного ИИ-чат-бота без необходимости оплачивать сторонние сервисы. Эту архитектуру можно развивать дальше: интегрировать в Telegram-бота, превратить в RAG-систему (Retrieval-Augmented Generation) для работы с вашими PDF-документами или подключить к локальному бэкенду на FastAPI.
Протестируйте этот код на своем компьютере и расширяйте возможности собственного персонального ИИ-ассистента!
Теги: #Python #Ollama #Sun'iy Intellekt #Chatbot #Lokal AI