Skip to content
BotServBotServ
IRC BotAI ChatbotOllamaLLM IRCПрограммирование ботовСоздание чатботаЛокальный AI

IRC-бот с искусственным интеллектом: Ollama LLM

Создайте AI-бота для IRC с локальной моделью Ollama. Пошаговое руководство с кодом на Python и защитой.

S

schutzgeist

6 min read
IRC-бот с искусственным интеллектом: Ollama LLM

IRC-бот с искусственным интеллектом: Запускаем локальную LLM через Ollama в чате

Что рассматривает этот материал

  • Почему Internet Relay Chat и локальный AI идеально дополняют друг друга.
  • Архитектура: IRC-клиент встречает Ollama API.
  • Полный шаблон на Python для самостоятельной разработки.
  • Память переговоров, модерация и защита от флуда.
  • Безопасность и типичные ошибки при реализации.

Введение: Классика встречает современный AI

IRC-боты старше большинства языков программирования, которые используются сегодня. Eggdrops модерировали каналы, когда слово “chatbot” ещё не существовало. Что изменилось: раньше боты реагировали на фиксированные триггеры, теперь локальная LLM может отвечать на свободные вопросы. И вот в этом суть для BotServ.de: AI-бот в IRC это наверное самое честное упражнение в разработке ботов из всех возможных. Никакого волшебства фреймворков, никакой привязки к облаку, просто сокет, протокол и модель, работающая на собственном оборудовании.

Практическая ценность очевидна: поддерживающий бот в канале сообщества, помощник по документации проекта, помощь с кодированием в канале разработчиков. А поскольку модель работает локально через Ollama, беседы сообщества не передаются никакому внешнему сервису.

Архитектура: Как работает AI-бот в IRC

Принцип приятно прост. Твой бот это обычный IRC-клиент, который подключается с ником и паролем, присоединяется к одному или нескольким каналам и прослушивает сообщения. Когда приходит сообщение, адресованное боту, он отправляет его в Ollama API, получает ответ и постит его в канал.

IRC-сеть  <--Socket/TLS-->  Твой бот (Python)  <--HTTP-->  Ollama (локальная LLM)

Три компонента, три сферы ответственности: IRC-часть управляет протоколом и соединением, логика бота решает, когда отвечать, а Ollama обеспечивает интеллект. Если ты хочешь глубже разобраться в программировании ботов, на IRC-Coding.de найдёшь свыше 500 статей об Eggdrops, клиентах и chatbots, включая AI-тематику.

Требования для твоего AI-IRC-бота

  • Ollama установлена с моделью, например ollama pull qwen3 или llama3.2. GPU с 8 GB VRAM хватает для небольших моделей, подробности в нашем учебном пути по локальному AI.
  • Python 3.10+ на том же компьютере или сервере в сети.
  • Доступ к IRC-сети: собственный сервер (см. нашу статью о IRC-демонах) или публичная сеть, допускающая ботов. Некоторые сети требуют регистрацию бота.
  • Зарегистрированный ник для бота, чтобы он оставался узнаваемым.

Бот на Python: Базовый каркас

IRC это протокол в открытом виде, не нужна даже библиотека. Минимальный вариант с обычным сокетом:

import socket
import requests

SERVER = "irc.dein-netz.de"
PORT = 6697
NICK = "kibot"
CHANNEL = "#dein-kanal"
OLLAMA_URL = "http://localhost:11434/api/chat"
MODEL = "qwen3"

history = {}

def ask_llm(user, text):
    msgs = history.setdefault(user, [])
    msgs.append({"role": "user", "content": text})
    msgs = msgs[-10:]
    history[user] = msgs
    r = requests.post(OLLAMA_URL, json={
        "model": MODEL,
        "messages": [{"role": "system", "content":
            "Du bist ein hilfreicher Bot in einem IRC-Kanal. "
            "Antworte kurz, maximal zwei Saetze."}] + msgs,
        "stream": False,
    })
    reply = r.json()["message"]["content"]
    history[user].append({"role": "assistant", "content": reply})
    return reply

irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Для продакшена: ssl.wrap_socket или ssl.create_default_context()
irc.connect((SERVER, PORT))

def send(line):
    irc.send((line + "\r\n").encode())

send(f"NICK {NICK}")
send(f"USER {NICK} 0 * :KI-Bot")

buf = ""
while True:
    buf += irc.recv(4096).decode(errors="ignore")
    lines, buf = buf.split("\r\n")[:-1], buf.split("\r\n")[-1]
    for line in lines:
        if line.startswith("PING"):
            send("PONG " + line.split()[1])
        if " 376 " in line or " 422 " in line:      # MOTD Ende
            send(f"JOIN {CHANNEL}")
        if f"PRIVMSG {CHANNEL}" in line and f"!ki " in line:
            user = line.split("!")[0].lstrip(":")
            text = line.split("!ki ", 1)[1].strip()
            send(f"PRIVMSG {CHANNEL} :{user}: {ask_llm(user, text)}")

Это намеренно минимально: подключиться, играть в PING/PONG, отвечать на !ki вопрос, постить ответ. Для боевого использования лучше взять библиотеку вроде irc (pip install irc) или pydle, которые правильно обрабатывают переподключения, SASL и TLS.

Этапы развития: От игрушки к полезному боту

Дизайн триггеров. Префикс !ki предотвращает ответ бота на каждую строку. Вариант: реагировать на ник (“kibot: вопрос”), выглядит естественнее, но требует чистого парсинга.

Память на пользователя. Пример выше хранит для каждого ника последние десять сообщений. Учти смену ников: память привязана к нику, а не к аккаунту. Для боевых ботов маппируй на Services-аккаунты.

Rate-limiting. Критически важно: максимум один запрос на пользователя в секунду, остальное в очередь. Иначе сам бот станет источником флуда и попадёт в бан-лист.

Ограничивай длину ответов. IRC-сообщения ограничены примерно 512 байтами на строку. Длинные ответы LLM нужно разбивать на строки по 400 символов, иначе сервер оборвёт сообщение посередине слова.

Активируй защиту от флуда. Многие IRCD кикают клиентов, которые отправляют слишком быстро. Добавь паузу между строками (0,5-1s) или используй систему throttling.

Безопасность: Как правильно защитить AI-бот

Бот с доступом к оборудованию заслуживает уважения:

  • Относись к Prompt Injection серьёзно: Каждый в канале может подсунуть боту текст. Не давай боту инструментов, прав доступа к файлам или shell, пока он слушает открытый канал. Начни с чистого текста, позже думай о whitelist-функциях.
  • Лимиты по стоимости и нагрузке: Даже локальная модель потребляет время GPU. Ограничи количество запросов в час, чтобы троль не заблокировал твою видеокарту.
  • Зарегистрируй и защити ник бота: Иначе кто-то присвоит личность твоего бота.
  • Не логируй чувствительные данные: Содержание канала может быть персональным, держи минимальное время хранения логов.
  • Основы IRC-безопасности: Закаливание базовой сети и хоста бота рассматривается на IRC-Security.de, наш обзор в IRC-Cybersecurity.

Типичные грабли при создании KI-IRC-бота

Бот не отвечает. Обычно не ответил на PING и сервер закрыл соединение. PING/PONG это не деталь, а обязательность.

Мусор вместо кириллицы. IRC старый, история кодировок запутана. Отправляй и получай UTF-8, errors="ignore" это workaround, лучше декодируй правильно.

Бот заливает канал. Всегда используй rate-limit, всегда ограничивай длину ответов, при сомнениях отвечай через /notice вместо сообщения в канал.

“AI в IRC это игрушка.” Только отчасти. Технология позади, streaming-ответы, управление контекстом, throttling, это всё то же самое, что в любом серьёзном chatbot-бэкенде. Кто это здесь реализует правильно, может применить везде.

Дополнительные ссылки на IRC-ботов и AI

  • IRC-Coding.de - Учиться программировать, строить ботов, Eggdrops, AI-кодирование: специальный сайт для разработки ботов.
  • IRC-Mania.de - Главный портал IRC-контента, обучающие материалы по ботам и воркшопы.
  • IRC-Security.de - Правильная защита ботов и серверов.
  • IRC-FAQ.de - Быстрые ответы на вопросы о ботах.
  • IRC-FAQ.com - Международные FAQ по ботам и скриптам.
  • Ollama - Локальный LLM-бэкенд для бота.

Связанные материалы на BotServ.de: Справочник команд IRC, IRC-Services объяснены и учебный путь IRC.

FAQ: AI-бот в IRC - Частые вопросы

Что нужно для AI-бота в IRC?

Локальная LLM через Ollama, Python-скрипт как IRC-клиент и доступ к сети. GPU с 8 GB VRAM хватает для небольших моделей, CPU-режим работает, но медленно.

Какая модель подходит для IRC-бота?

Компактные модели с быстрыми временами ответа: Qwen3, Llama 3.2, Mistral или Phi. Chatbot не нужны огромные модели, нужна скорость, потому что конversations в канале происходят в real-time.

Разрешены ли AI-боты в публичных IRC-сетях?

Зависит от сети. Многие требуют регистрацию или одобрение, некоторые имеют отдельные каналы для ботов. В собственной IRC-сети правила устанавливаешь ты.

Как предотвратить спам бота в канале?

Rate-limit на пользователя (1 запрос/сек), сокращай ответы до 400 символов и разбивай на отдельные строки, плюс триггер-префикс вроде !ki, чтобы не каждая строка вызывала ответ.

Может ли бот отвечать на личные сообщения?

Да, в коде реагируй на PRIVMSG на ник бота вместо канала. Практично для чувствительных вопросов и щадит rate канала.

Что такое Prompt Injection в IRC-боте?

Когда пользователь канала подсовывает боту инструкции (“игнорируй все правила”). Пока бот только возвращает текст, это раздражающе, но безопасно. Опасно становится только если бот имеет инструменты или доступ к shell.

Нужны ли навыки программирования?

Базовое знание Python хватает для каркаса. Всё остальное, Eggdrops, интеграция Services, продвинутые боты, изучишь на IRC-Coding.de.

Что такое BotServ?

Классический IRC-сервис, управляющий ботами в каналах, и тёзка этого сайта. Команды описаны в нашем справочнике команд IRC.

Назад к блогу
Share:

Похожие статьи