Skip to content

andrgol12-sys/rag-knowledge-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telegram RAG Bot - Две версии (OpenAI и ProxyAPI)

Полноценный проект с двумя вариантами Telegram-бота с RAG-функциональностью.

📋 Содержание

🎯 Описание проекта

Два полноценных Telegram-бота с RAG (Retrieval-Augmented Generation) функциональностью:

RAG - технология, объединяющая поиск информации в базе знаний с генерацией текста на основе языковых моделей. Боты могут находить релевантную информацию в документах и использовать её для формирования точных ответов.

Возможности ботов:

RAG-запросы - поиск и ответы на основе базы знаний ✅ Обработка изображений - извлечение текста с фото (Vision) ✅ Векторный поиск - быстрый семантический поиск через FAISS ✅ Индексация документов - автоматическое обновление базы знаний ✅ Память разговоров - контекстные ответы с учетом истории (до 10 сообщений) ✅ Логирование - полное отслеживание всех операций

🔄 Различия между версиями

Версия 1: OpenAI (bot_openai/)

Подход: Прямое использование официального OpenAI SDK

Преимущества:

  • Простота использования
  • Официальная поддержка
  • Автоматическая обработка ошибок
  • Встроенные retry механизмы

Технологии:

from openai import OpenAI
client = OpenAI(api_key=OPENAI_API_KEY)
response = client.embeddings.create(...)

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

  • Работа напрямую с OpenAI API
  • Нужна стабильная и проверенная библиотека
  • Не требуется кастомизация запросов

Версия 2: ProxyAPI (bot_proxy/)

Подход: HTTP запросы к OpenAI-совместимому endpoint

Преимущества:

  • Работа с любыми OpenAI-совместимыми API
  • Полный контроль над HTTP запросами
  • Возможность использования локальных моделей
  • Легкая отладка и мониторинг
  • Добавление кастомных headers

Технологии:

import requests
response = requests.post(
    f"{PROXY_API_URL}/embeddings",
    headers={"Authorization": f"Bearer {PROXY_API_KEY}"},
    json={"model": EMBED_MODEL, "input": text}
)

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

  • Работа с ProxyAPI или альтернативными провайдерами
  • Нужен контроль над HTTP запросами
  • Использование локально развернутых моделей
  • Необходима детальная отладка

📁 Структура проекта

rag_bot/
├── bot_openai/                    # Версия с OpenAI SDK
│   ├── bot.py                     # Главный файл бота
│   ├── config.py                  # Конфигурация
│   ├── requirements.txt           # Зависимости
│   ├── .env.example              # Пример настроек
│   └── rag/                       # RAG компоненты
│       ├── __init__.py
│       ├── embedder.py           # Создание эмбеддингов
│       ├── vectorstore.py        # FAISS хранилище
│       ├── retriever.py          # Поиск документов
│       └── pipeline.py           # RAG пайплайн
│
├── bot_proxy/                     # Версия с ProxyAPI
│   ├── bot.py                     # Главный файл бота
│   ├── config.py                  # Конфигурация
│   ├── requirements.txt           # Зависимости
│   ├── .env.example              # Пример настроек
│   └── rag/                       # RAG компоненты
│       ├── __init__.py
│       ├── embedder.py           # Создание эмбеддингов (HTTP)
│       ├── vectorstore.py        # FAISS хранилище
│       ├── retriever.py          # Поиск документов
│       └── pipeline.py           # RAG пайплайн (HTTP)
│
├── data/                          # Данные
│   └── docs/                      # Документы для индексации
│       ├── sample1.txt           # Пример: RAG в поддержке
│       └── sample2.txt           # Пример: RAG в HR
│
└── README.md                      # Эта документация

🚀 Установка и настройка

Требования

  • Python 3.10 или выше
  • Telegram Bot Token (получить у @BotFather)
  • OpenAI API Key или ProxyAPI credentials

Шаг 1: Клонирование и установка зависимостей

Для версии OpenAI:

cd rag_bot/bot_openai
pip install -r requirements.txt

Для версии ProxyAPI:

cd rag_bot/bot_proxy
pip install -r requirements.txt

Шаг 2: Настройка переменных окружения

Для bot_openai - создайте файл .env:

# Telegram Bot Token (получить у @BotFather)
TELEGRAM_TOKEN=your_telegram_bot_token_here

# OpenAI API Key (https://platform.openai.com/api-keys)
OPENAI_API_KEY=your_openai_api_key_here

Для bot_proxy - создайте файл .env:

# Telegram Bot Token (получить у @BotFather)
TELEGRAM_TOKEN=your_telegram_bot_token_here

# ProxyAPI Settings
PROXY_API_URL=https://api.proxyapi.ru/openai/v1
PROXY_API_KEY=your_proxy_api_key_here

Шаг 3: Подготовка документов

  1. Добавьте свои .txt файлы в директорию data/docs/
  2. Или используйте предоставленные примеры (sample1.txt, sample2.txt)

▶️ Запуск ботов

Запуск OpenAI версии:

cd rag_bot/bot_openai
python bot.py

Запуск ProxyAPI версии:

cd rag_bot/bot_proxy
python bot.py

Первый запуск

После запуска бота:

  1. Найдите бота в Telegram по username
  2. Отправьте команду /start
  3. Выполните команду /ingest для индексации документов
  4. Начните задавать вопросы!

💬 Использование

Основные команды

Команда Описание
/start Приветствие и основная информация
/help Подробная справка по использованию
/ask <вопрос> Задать вопрос с RAG-поиском
/ingest Переиндексировать базу знаний
/stats Показать статистику системы и истории
/clear Очистить историю разговора
/test (только proxy) Проверить подключение к API

Способы взаимодействия

1. Текстовые запросы

Просто напишите вопрос боту:

Что такое RAG и как он работает?

Бот автоматически:

  • Найдет релевантные документы в базе знаний
  • Учтет историю предыдущих сообщений для контекста
  • Сформирует контекст
  • Сгенерирует ответ на основе найденной информации

2. Команда /ask

Явный RAG-запрос:

/ask Как применяется RAG в поддержке клиентов?

3. Обработка изображений

Отправьте фото (скриншот, документ, картинку с текстом):

  • Без подписи: Бот извлечет текст с изображения
  • С подписью: Бот извлечет текст И ответит на ваш вопрос, используя RAG

Пример:

[Прикрепите фото документа]
Подпись: Объясни что это значит

📚 Примеры работы

Пример 1: Простой RAG-запрос

Запрос:

Какие преимущества RAG в HR-процессах?

Ответ бота:

💡 Ответ:
RAG в HR-процессах предоставляет следующие преимущества:

Для HR-отдела:
• Сокращение времени на обработку типовых запросов на 70%
• Возможность фокусироваться на стратегических задачах
• Единообразие в предоставлении информации

Для сотрудников:
• Доступ к информации 24/7
• Мгновенные ответы на вопросы
• Конфиденциальность запросов

Для компании:
• Снижение операционных затрат HR-отдела
• Повышение удовлетворенности сотрудников
• Улучшение опыта онбординга

📚 Источники: sample2.txt

Пример 2: Обработка изображения

Действие: Отправка скриншота с текстом + подпись "Что это означает?"

Ответ бота:

📄 Текст с изображения:
[Извлеченный текст из изображения]

💡 Ответ на ваш вопрос:
[Объяснение на основе извлеченного текста и базы знаний]

📚 Источники: sample1.txt, sample2.txt

Пример 3: Контекстный разговор с памятью

Диалог:

👤 Пользователь: Что такое RAG?

🤖 Бот: RAG (Retrieval-Augmented Generation) - это технология, которая 
объединяет поиск информации в базе знаний с генерацией ответов...
📚 Источники: sample1.txt

👤 Пользователь: А где это используется?

🤖 Бот: RAG (о котором мы говорили выше) активно используется в:
- Службах поддержки клиентов для автоматизации ответов
- HR-отделах для помощи сотрудникам
- Технической документации для быстрого поиска...
📚 Источники: sample1.txt, sample2.txt

👤 Пользователь: Как это помогает HR?

🤖 Бот: В HR-процессах RAG помогает автоматизировать ответы на 
типовые вопросы сотрудников о политиках компании, льготах...
📚 Источники: sample2.txt

👤 Пользователь: /stats

🤖 Бот:
📊 Статистика RAG-системы

Ваш контекст:
• Сообщений в истории: 3

👤 Пользователь: /clear

🤖 Бот: 🧹 История очищена!
Удалено 3 сообщений из контекста.
Начинаем разговор с чистого листа!

Описание:

  • Бот помнит контекст последних 10 сообщений
  • Понимает местоимения и отсылки к предыдущим вопросам ("это", "там", "как вы сказали")
  • /clear очищает историю для начала новой темы
  • /stats показывает количество сообщений в памяти

Пример 4: Индексация документов

Команда: /ingest

Ответ бота:

✅ Индексация завершена успешно!

📊 Статистика:
• Документов: 2
• Векторов: 2
• Размерность: 1536

Бот готов к работе! Задавайте вопросы. 💬

Пример 4: Статистика

Команда: /stats

Ответ бота:

📊 Статистика RAG-системы

Состояние базы знаний:
✅ Загружена

Данные:
• Документов: 2
• Векторов: 2
• Размерность: 1536

Модели:
• Чат: gpt-4o-mini
• Vision: gpt-4o-mini
• Эмбеддинги: text-embedding-3-small

Файлы:
• Индекс: ✅
• Метаданные: ✅

🔧 Технические детали

Архитектура RAG-системы

Пользователь → Telegram Bot
                    ↓
                RAG Pipeline
                    ↓
        ┌───────────┴───────────┐
        ↓                       ↓
    Embedder              Retriever
        ↓                       ↓
    OpenAI/Proxy         VectorStore (FAISS)
        ↓                       ↓
    Embeddings            Search Results
        └───────────┬───────────┘
                    ↓
            Context Formation
                    ↓
            LLM (GPT-4o-mini)
                    ↓
            Answer Generation
                    ↓
            Response to User

Компоненты системы

1. Embedder (embedder.py)

Преобразует текст в векторные представления (embeddings).

OpenAI версия:

  • Использует OpenAI SDK
  • Модель: text-embedding-3-small
  • Размерность: 1536

ProxyAPI версия:

  • HTTP POST запросы
  • OpenAI-совместимый формат
  • Поддержка кастомных endpoints

2. VectorStore (vectorstore.py)

Хранит и ищет векторные представления документов.

Технология: FAISS (Facebook AI Similarity Search)

  • Быстрый поиск похожих векторов
  • IndexFlatL2 - евклидова метрика
  • Сохранение на диск (.faiss + .json)

3. Retriever (retriever.py)

Извлекает релевантные документы по запросу.

Процесс:

  1. Преобразование запроса в эмбеддинг
  2. Поиск Top-K похожих векторов
  3. Формирование контекста из найденных документов

4. Pipeline (pipeline.py)

Координирует работу всех компонентов.

Процесс RAG:

  1. Получение запроса пользователя
  2. Поиск релевантных документов (Retrieval)
  3. Формирование промпта с контекстом (Augmented)
  4. Генерация ответа моделью (Generation)

Используемые модели

Модель Назначение Стоимость (OpenAI)
text-embedding-3-small Создание эмбеддингов $0.02 / 1M tokens
gpt-4o-mini Генерация ответов $0.15 / 1M input tokens
gpt-4o-mini Vision (обработка изображений) $0.15 / 1M input tokens

Настройки RAG

В файле config.py:

# Количество релевантных документов для контекста
TOP_K_RESULTS = 3

# Максимальная длина контекста
MAX_CONTEXT_LENGTH = 3000

# Модели
EMBED_MODEL = "text-embedding-3-small"
CHAT_MODEL = "gpt-4o-mini"
VISION_MODEL = "gpt-4o-mini"

Логирование

Все операции логируются в файл bot.log:

LOG_LEVEL = "INFO"  # DEBUG, INFO, WARNING, ERROR

Логи включают:

  • Все запросы пользователей
  • Результаты поиска документов
  • Обращения к API
  • Ошибки и исключения

🔐 Безопасность

Рекомендации:

  1. Не коммитьте файлы .env в репозиторий
  2. Используйте .gitignore для защиты секретов
  3. Ограничьте доступ к команде /ingest (только администраторы)
  4. Логируйте все действия для аудита
  5. Регулярно обновляйте зависимости

Пример .gitignore:

# Environment variables
.env
*.env

# FAISS indexes
*.faiss
metadata.json

# Logs
*.log

# Python
__pycache__/
*.py[cod]
*$py.class
.venv/
venv/

🐛 Решение проблем

Проблема: "База знаний не загружена"

Решение: Выполните команду /ingest для индексации документов

Проблема: "Ошибка при обращении к API"

Решение:

  1. Проверьте API ключи в .env файле
  2. Проверьте баланс аккаунта OpenAI/ProxyAPI
  3. Для ProxyAPI: используйте /test для проверки подключения

Проблема: "Документы не найдены"

Решение:

  1. Убедитесь что .txt файлы находятся в data/docs/
  2. Проверьте кодировку файлов (должна быть UTF-8)
  3. Проверьте путь DOCS_PATH в config.py

Проблема: "Ошибка импорта модулей"

Решение:

pip install -r requirements.txt --upgrade

📈 Масштабирование

Для больших баз знаний:

  1. Используйте IVF индексы в FAISS:
# В vectorstore.py
self.index = faiss.IndexIVFFlat(quantizer, dimension, nlist)
  1. Разбивайте большие документы:
# Chunk size ~500-1000 слов
MAX_CHUNK_SIZE = 3000
  1. Используйте async операции:
# Для параллельной обработки запросов
import aiohttp

🤝 Вклад в проект

Проект открыт для улучшений:

  • Добавление поддержки других форматов документов (PDF, DOCX)
  • Реализация re-ranking для улучшения поиска
  • Добавление кэширования ответов
  • Интеграция с другими LLM провайдерами
  • Улучшение обработки изображений

📝 Лицензия

Этот проект предоставлен в образовательных целях.

🔗 Полезные ссылки


Создано с ❤️ для демонстрации RAG технологии

About

AI-powered Telegram assistant with RAG, semantic search, FAISS vector storage and image understanding. Demonstrates how LLMs answer using external knowledge instead of memorization.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages