Веб-Поиск и Автообучение RAG Base (_auto_learn)

Плагин WebSearchPlugin (app/plugins/web_search.py) объединяет оперативный поиск актуальной информации в интернете со службой автоматического пополнения базы знаний RAG.

sequenceDiagram autonumber actor User as Пользователь participant LLM as LLM Model participant Plugin as WebSearchPlugin participant BG as Фоновая Задача _auto_learn participant SubAgent as Суб-Агент kb_auto_learn participant Judge as LLM-Судья kb_relevance_guard participant KB as Сервис save_text_to_kb participant Worker as RAG Worker Container User->>LLM: "Каковы последние новости ИИ за 2026 год?" LLM->>Plugin: Вызов инструмента search_web("новости ИИ 2026") Plugin-->>LLM: Результаты поиска (snippet + URL + изображения) LLM-->>User: Ответ пользователю с актуальными фактами Note over Plugin, Worker: Фоновый процесс Автообучения RAG (_auto_learn) Plugin->>BG: Запуск асинхронного фонового таска BG->>SubAgent: Передача сырых результатов поиска SubAgent-->>BG: Сжатая статья в формате Markdown BG->>Judge: Проверка статьи на тему бота (save_relevance_topic) alt Тема Релевантна (RELEVANT) Judge-->>BG: Подтверждение (YES) BG->>KB: Вызов save_text_to_knowledge_base() KB->>KB: Сохранение .md файла в data/uploads/bot_{id}/ KB->>KB: Вставка PENDING записи в documents_bot_{id} KB->>Worker: Сигнал на индексацию Worker->>Worker: Генерация векторных эмбеддингов TEI Note over Worker: База знаний обновлена без участия человека! else Не Релевантно (NOT RELEVANT) Judge-->>BG: Отклонение (NO) Note over BG: Отмена сохранения (Fail-Closed Guard) end

Инструменты Веб-Поиска

Инструмент Назначение Провайдеры / Особенности
search_web(query, max_results, include_images) Живой поиск в веб Tavily API, Ollama Search, Mock Provider. При include_images=True возвращает медиа-альбом картинок.
fetch_url(url, max_chars) Скачивание и парсинг веб-страницы web_fetch.py: парсер Trafilatura + Jina Reader fallback. Защита от SSRF.
save_to_knowledge_base(content, title) Прямое сохранение от ИИ Ручной вызов моделью (ограничен списком разрешенных пользователей save_allowed_user_ids).

Безопасность и Судейство (kb_relevance_guard)

Для предотвращения засорения базы знаний спамом или мусорными статьями в цепочку встроен LLM-судья:

  1. save_relevance_topic: Тематический фильтр, задаваемый администратором в настройках бота.
  2. Проверка фильтра: LLM-судья оценивает статью на соответствие описанию бота (bot_description) и тематике.
  3. Fail-Closed принцип: В случае любой ошибки сети, таймаута или сомнительного качества статьи сохранение отменяется.