Спросите помощника
0/400
Вопрос обрабатывается ИИ-сервисом и сохраняется для улучшения ответов. Не вводите персональные данные.

    ИИ-помощник сайта

    Сайт может отвечать посетителям на вопросы по собственной базе знаний. Для этого нужны две вещи: каталог assistant/ в проекте и элемент `Assistant` на странице.

    Помощник — возможность REEEL-сайта: вопрос уходит на адрес самого сайта, и отвечает сервер, который раздаёт сайт. У экспортированного в статику сайта и в превью редактора отвечать некому.

    Каталог assistant/

    assistant/
      assistant.json            темы, лимиты, следующие шаги, запасной путь
      prompt.md                 кто такой помощник, словами владельца
      knowledge/<язык>/**.md    по чему он отвечает

    Сайт этот каталог не раздаёт : с адреса сайта наружу идут только data/** и страницы.

    Но тайником он от этого не становится. assistant/ — такие же файлы проекта, как остальные: они синхронизируются на платформу, и её адрес выдачи содержимого ( /content/{projectId}/… ) отдаёт любой синхронизированный файл тому, кто знает идентификатор проекта и прошёл выдачу доступа, — а она рассчитана на установленные приложения, не на проверку личности. Секретов сюда не кладите : ни в prompt.md , ни в assistant.json , ни в каталог.

    Обязательна только база. Каталог с одним knowledge/ — рабочий помощник.

    База знаний

    Обычные markdown-файлы.

    • По каталогу на язык ( knowledge/ru/ , knowledge/en/ ): посетителю отвечают по базе языка, на котором он спросил; если такой базы нет — по базе языка сайта по умолчанию.
    • Файлы прямо в knowledge/ : одна база на всех.

    Помощник отвечает только тем, что написано в базе . Каждое утверждение опирается на дословную цитату из прочитанного раздела; чего в базе нет, того он не скажет.

    Документ и страница

    Документ считается страницей по своему же пути:

    Документ Страница
    knowledge/ru/project/domains.md /project/domains
    knowledge/ru/project/index.md или README.md /project
    knowledge/ru/index.md /

    Под утверждением стоит ссылка на эту страницу и на заголовок раздела. Если такой страницы на сайте нет, источник называется без ссылки. Другую страницу документу назначает links .

    Те же файлы могут быть страницами: страница, которая рисует текст через `Markdown src:` из assistant/knowledge/ , — одновременно и страница, и запись в базе.

    Markdown src:$"assistant/knowledge/${strings.effectiveLocale}/project/domains.md"

    assistant.json

    Все поля необязательны.

    {
      "topics": "Тарифы, оплата и публикация Acme.",
      "limits": {
        "questionChars": 400,
        "claims": 5,
        "perVisitorPerDay": 30,
        "offTopicBeforePause": 3,
        "pauseMinutes": 30
      },
      "actions": [
        {
          "id": "support",
          "title": { "ru": "Написать в поддержку", "en": "Write to support" },
          "url": "/help",
          "when": "документация не решает вопрос посетителя"
        }
      ],
      "fallback": {
        "text": { "ru": "Спросите нас напрямую.", "en": "Ask us directly." },
        "action": "support"
      },
      "messages": { "paused": { "ru": "На сегодня всё — позвоните нам." } },
      "links": { "pricing.md": "tiers" },
      "transcripts": true
    }
    Поле Что
    topics Для чего помощник, словами. Вопрос вне этого — «не по теме»
    limits.questionChars Длина вопроса. По умолчанию и не больше 500
    limits.claims Сколько утверждений в ответе. По умолчанию и не больше 5
    limits.perVisitorPerDay Вопросов на посетителя в сутки. По умолчанию 50, не больше 200
    limits.offTopicBeforePause Сколько вопросов не по теме до паузы. По умолчанию 3
    limits.pauseMinutes Длина паузы. По умолчанию 30
    actions Следующие шаги: id , title , url , when
    fallback Что сказать и какой шаг предложить, когда ответа нет
    messages Свои формулировки состояний: offTopic , notFound , paused , unavailable , consentRequired
    links Документ → страница, если страница не по пути документа
    transcripts false — хранить стоимость вопроса, но не его слова

    Текст можно задать одной строкой на все языки или объектом по языкам.

    Лимиты владелец только ужесточает. Потолки платформы — предел; число больше потолка читается как потолок.

    Следующие шаги

    Помощник не только отвечает, но и подводит к действию: записаться, скачать, написать в поддержку. when — единственное, что читает модель; она называет id , а подпись и адрес посетителю показываются из этого файла . Ссылок модель не пишет, и шага, которого нет в списке, предложить не может.

    Сценарии и каталог: карточки в ответе

    Часть ответов лучше показать, чем пересказать: тариф, услугу, товар, раздел сайта. Для этого у помощника есть сценарии — в assistant.json :

    "scenarios": [
      { "id": "tiers", "when": "посетитель выбирает тариф", "catalog": "tiers" }
    ]

    и каталог записей рядом с базой знаний — assistant/catalog/tiers.json :

    [
      {
        "id": "studio",
        "about": "для команд от пяти человек, с общим доступом",
        "title": { "ru": "Студия", "en": "Studio" },
        "text": { "ru": "Для команд от пяти человек.", "en": "For teams of five or more." },
        "price": 4900,
        "image": "data/images/studio.png",
        "url": "/tier#studio"
      }
    ]
    Поле сценария Что это
    id Имя сценария: латиница, цифры, - , _
    when Когда его показывать — словами, для модели
    catalog Имя файла в assistant/catalog/ без .json . Не указан — берётся id
    kind Вид блока в ответе, по нему страница выбирает макет. По умолчанию card ; text занят
    Поле записи Что это
    id Обязателен, уникален в каталоге
    about Заметка для модели : по ней она выбирает запись. Посетителю не показывается. Нет — берётся title
    остальное Поля карточки, как их назовёте: текст (один или по языкам), число, да/нет

    Как это работает:

    • Модель видит список: сценарий, его when и по строке на запись — идентификатор и about . Больше ничего: ни цен, ни картинок, ни адресов.
    • В ответе она называет идентификаторы записей. Сервер сверяет их со списком и подставляет поля из каталога на языке посетителя. Идентификатор, которого в каталоге нет, отбрасывается.
    • В одном ответе не больше шести карточек. Карточки могут идти вместе с утверждениями или сами по себе.
    • Список записей уходит модели перед каждым вопросом, поэтому каталог держите небольшим: до 12 сценариев, до 60 записей в каждом.
    • Картинки кладите в data/** : каталог assistant/ наружу не раздаётся.
    • Сценарий с ошибкой (нет файла каталога, файл не разбирается, вид text ) пропускается, а помощник продолжает работать без него.

    Как нарисовать карточку на странице — в описании элемента `Assistant` .

    prompt.md

    Инструкция владельца: кто такой помощник и как он говорит. Секретов сюда не кладите — модель можно уговорить пересказать сказанное ей.

    Что помощник делает сам

    • Отвечает только по темам сайта. Вопрос не по теме получает мягкий отказ; после нескольких таких посетитель ставится на паузу, и ему предлагают fallback .
    • Требует согласия. Без него вопрос не уходит со страницы.
    • Проверяет незнакомца. После первого вопроса — невидимая проверка «я не бот»; посетителя, который её прошёл, больше не спрашивают.
    • Помнит посетителя по cookie , которую сам выставляет. Скрипт страницы её не видит, чужой сайт предъявить не может.

    Включение

    Каталог assistant/ — заявка, а не разрешение: помощник появляется у сайта, когда платформа включила его для проекта.

    Разговоры

    Если владелец не запретил ( transcripts: false ), вопросы и ответы сохраняются для улучшения базы: видно, о чём спрашивают и чего в базе не хватает. Об этом посетителю нужно сказать рядом с полем вопроса и в политике сайта.

    menu_baseline