Веб-Поиск и Автообучение RAG Base (_auto_learn)
Веб-Поиск и Автообучение 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-судья:
save_relevance_topic: Тематический фильтр, задаваемый администратором в настройках бота.- Проверка фильтра: LLM-судья оценивает статью на соответствие описанию бота (
bot_description) и тематике. - Fail-Closed принцип: В случае любой ошибки сети, таймаута или сомнительного качества статьи сохранение отменяется.