Перейти к содержанию

AI search agent в n8n: как отвечать по базе знаний, показывать источники и не выдумывать

Обновлено: 2026-05-29

Открыть мой план

Короткий ответ

AI search agent в n8n — это агент, который ищет информацию в базе знаний, документации, runbook-ах, CRM notes или внутренних источниках и формирует ответ только на основе найденного контекста. В отличие от простого RAG-чата, search agent может выбирать tool, применять metadata filters, проверять права доступа, задавать уточняющий вопрос и возвращать no_answer, если источника нет. Production-схема: query normalization → permission context → retrieval → source filtering → answer generation with citations → faithfulness check → fallback/escalation → logging/evaluation.

Когда нужен search agent

Search agent нужен, когда пользователи задают вопросы не по одной странице, а по большой базе: “как настроить webhook за Cloudflare?”, “почему RAG отвечает старым текстом?”, “какой runbook при Redis unavailable?”, “что делать, если клиент просит возврат?”. Обычный keyword search часто не находит ответ из-за разных формулировок. RAG помогает найти похожие chunks, а агент добавляет логику: какие источники разрешены, нужно ли уточнение, какой tool вызвать, можно ли отвечать.

Но search agent не должен заменять source of truth. Если вопрос “какой статус заказа ORD-1042?”, нужно идти в API/CRM, а не искать похожий документ. Если вопрос “какая цена по договору?”, нужен CRM/ERP с правами доступа. Vector search подходит для знаний, инструкций и объяснений, но не для актуальных транзакционных данных.

Архитектура workflow

  1. Trigger — Chat Trigger, Slack, Telegram, Webhook или internal UI.
  2. Query normalizer — очищает вопрос, определяет язык, intent, entities.
  3. Permission context — роль пользователя, team, customer_id, access level.
  4. Source router — выбирает knowledge base: public docs, internal runbooks, customer docs, CRM notes.
  5. Retriever — vector store, keyword search или hybrid search.
  6. Metadata filter — audience, product, language, version, status, access_level.
  7. Rerank / source selection — оставляет самые полезные chunks.
  8. Answer generator — отвечает только по переданным источникам.
  9. Faithfulness check — проверяет, есть ли ответ в sources.
  10. No-answer/fallback — уточнить вопрос, показать ссылки или эскалировать.
  11. Logging/evals — сохраняет query, retrieved sources, answer, feedback.

Если убрать permission context, агент может ответить публичному пользователю внутренним runbook-ом. Если убрать no-answer, он будет выдумывать.

Как индексировать базу знаний

Search agent хорош настолько, насколько хорош индекс. Для каждой страницы/документа храните metadata:

{
  "source_id": "playbook_webhook_production_checklist",
  "url": "https://nodbot.ru/playbooks/webhook-production-checklist/",
  "title": "Webhook production checklist",
  "audience": "public",
  "product": "n8n",
  "topic": "webhook",
  "language": "ru",
  "status": "published",
  "updated_at": "2026-05-29",
  "access_level": "public",
  "chunk_id": "playbook_webhook_production_checklist#h2-response-mode"
}

Metadata не менее важна, чем embedding. Она позволяет не смешивать устаревшие документы, внутренние инструкции, разные продукты и языки.

Как выбирать retrieval strategy

Тип вопроса Лучший поиск
“почему webhook не работает после активации” vector/hybrid
“страница /ai/rag-refresh/” exact URL/keyword
“заказ ORD-1042” API/SQL
“что делать при Redis down” vector + topic filter
“какие документы доступны клиенту X” permissioned SQL + vector
“последний статус сделки” CRM API

Хороший search agent умеет выбрать не только “искать в vector store”, но и “это точный запрос, нужен API”.

Prompt для ответа с источниками

Запретите агенту отвечать по памяти модели. Он должен использовать только sources.

Ты отвечаешь только на основе блока SOURCES.
Если ответа нет в SOURCES, верни no_answer и предложи уточнение.
Каждое важное утверждение должно иметь source_id.
Не используй знания модели для фактов о продукте, ценах, SLA и настройках.
Если источники противоречат друг другу, укажи конфликт и выбери более свежий updated_at.

Output schema:

{
  "answer": "Короткий ответ пользователю",
  "sources": [
    { "source_id": "ai_rag_refresh#h2-stale-index", "url": "https://nodbot.ru/ai/rag-refresh/" }
  ],
  "confidence": 0.82,
  "no_answer": false,
  "needs_escalation": false,
  "follow_up_question": null
}

Если sources пустой, answer не должен быть обычным ответом. Это no-answer.

No-answer policy

No-answer — это не провал, а защита качества. Агент должен честно сказать, что не нашёл подтверждённый источник, если:

  • retrieval вернул нерелевантные chunks;
  • источники противоречат;
  • документ устарел;
  • вопрос требует private data без прав;
  • пользователь спрашивает про цену/договор/статус, а source of truth не подключён;
  • вопрос не относится к базе.

Хороший no-answer:

{
  "no_answer": true,
  "answer": "В доступной базе нет подтверждённой инструкции по этому сценарию. Могу уточнить продукт и окружение или передать вопрос специалисту.",
  "follow_up_question": "Вы спрашиваете про self-hosted n8n, n8n Cloud или другой сервис?",
  "needs_escalation": false
}

Плохой no-answer: “Я не знаю”. Пользователю нужен следующий шаг.

Permissions и безопасность

Search agent должен фильтровать источники до генерации ответа. Нельзя сначала дать модели все chunks, а потом попросить “не показывай внутреннее”. Если пользователь public, retrieval должен искать только access_level=public. Если сотрудник support, можно добавить internal runbooks. Если запрос относится к клиенту, нужно проверить customer_id.

Минимальный permission context:

{
  "user_id": "u_1042",
  "role": "support_agent",
  "allowed_access_levels": ["public", "internal_support"],
  "customer_id": null,
  "locale": "ru-RU"
}

Для публичного чата вообще не индексируйте internal secrets в тот же vector store без строгой фильтрации.

Как проверять качество retrieval

Нужно тестировать не только финальный answer, но и sources. Если retrieval вернул плохие chunks, хороший ответ невозможен.

Eval case:

{
  "question": "Почему webhook работает в test URL, но не работает после активации workflow?",
  "expected_sources": ["webhook_production_checklist", "diagnostics_webhook"],
  "forbidden_sources": ["telegram_ai_bot", "billing_payment"],
  "must_contain": ["production URL", "активировать workflow"],
  "must_not_contain": ["создайте новый Telegram bot"]
}

Метрики:

  • top-k source recall;
  • source precision;
  • answer faithfulness;
  • citation accuracy;
  • no-answer accuracy;
  • stale source rate;
  • permission violation count;
  • latency;
  • cost.

Как отвечать с цитатами без перегруза

Пользователю не нужен список из 12 chunks. Дайте короткий ответ и 2–4 источника. Внутри системы храните chunk_id, но в UI показывайте заголовок/URL. Если ответ операционный, добавьте steps. Если ответ справочный, добавьте summary и ссылки.

Пример:

{
  "answer": "Для production webhook в n8n нужно использовать Production URL, а не Test URL. Workflow должен быть активирован, а WEBHOOK_URL корректно настроен за reverse proxy.",
  "steps": [
    "Проверьте, активирован ли workflow",
    "Сравните Test URL и Production URL",
    "Проверьте WEBHOOK_URL и proxy headers"
  ],
  "sources": [
    { "title": "Webhook production checklist", "url": "/playbooks/webhook-production-checklist/" },
    { "title": "Diagnostics: webhook", "url": "/diagnostics/webhook/" }
  ]
}

Типовые ошибки

  1. Нет metadata filters. Агент смешивает внутренние и публичные документы.
  2. Ответ без sources. Невозможно проверить факты.
  3. Vector store вместо API. Статусы заказов и сделок нужно брать из source of truth.
  4. Слишком большие chunks. Ответы становятся размытыми.
  5. Нет no-answer. Агент начинает заполнять пробелы фантазией.
  6. Не тестируется stale index. Документы обновились, а vector store остался старым.