Как работает база знаний
Заметки, файлы и веб-страницы, которые ИИ использует, когда предлагает ответы, пишет черновики писем и отвечает в ассистенте, хранящиеся для всего рабочего пространства, одного домена или одного адреса.
Что это
База знаний хранит то, что ИИ должен знать о вашем бизнесе и не может узнать из самой почты: цены, правила, часы работы, сведения о продуктах и то, как отвечает ваша команда. Вы добавляете заметки, файлы и веб-страницы, а ИИ читает нужные части каждый раз, когда пишет за вас.
На каждое рабочее пространство одно хранилище с тремя уровнями, так что ответ, верный только для одного бренда или одной команды, остаётся с ними. Её читают и меняют в приложении в разделе Рабочее пространство → База знаний, через REST API, из SDK и CLI, а также ассистент и MCP-клиенты.
Три уровня
Каждый элемент находится на одном уровне, своём scope. ИИ, который пишет от имени адреса, читает этот адрес, потом его домен, потом всё рабочее пространство, а когда два элемента расходятся, побеждает более конкретный.
| Уровень | `scope` | Читается для |
|---|---|---|
| Всё рабочее пространство | пусто | Каждый адрес в рабочем пространстве |
| Домен | @acme.com | Каждый адрес на этом домене, включая адреса, добавленные позже |
| Адрес | [email protected] | Только этот адрес |
- Адрес с плюсом читает и свой базовый адрес, поэтому
[email protected]использует то, что хранится для[email protected]. GET /knowledge/levelsперечисляет все уровни, которые вы видите, сколько элементов на каждом и можно ли вам менять там элементы.- Перенос домена в другое рабочее пространство переносит вместе с ним элементы, хранящиеся для него и его адресов.
Заметки, файлы и веб-страницы
- Заметка это текст, который вы пишете прямо на месте, до 20 000 символов, при желании в Markdown. Обычно она готова для ИИ за секунду-другую.
- Файл читается в текст в фоне: PDF, документы Word, таблицы (Excel, OpenDocument, Numbers и CSV), текст OpenDocument, HTML, XML, Markdown, простой текст, JSON и изображения (JPEG, PNG, WebP и SVG). Документ может весить до 20 МБ, а изображение до 10 МБ.
- Веб-страница загружается с публичного адреса
httpилиhttpsи читается в фоне, до 5 МБ. Уровень хранит страницу один раз, а обновление загружает её снова после изменений. - Из одного элемента сохраняется до 1 000 000 символов текста, и для поиска текст делится на фрагменты под его заголовками.
Элемент находится в queued, а затем в processing, пока его читают, в ready, когда ИИ может его использовать, и в failed с failure, где сказано почему, если прочитать его не удалось. Изменённый элемент возвращается в queued, и ИИ продолжает использовать его прежний текст, пока новый не будет готов. Обновление читает элемент заново и сбрасывает ошибку.
| Тариф | Элементы | Символы текста |
|---|---|---|
| Free | 50 | 1,000,000 |
| Starter | 500 | 10,000,000 |
| Business | 2,000 | 50,000,000 |
| Enterprise | 10,000 | 200,000,000 |
Элемент учитывается в лимите сразу после добавления, а его символы после того, как прочитан текст. Добавление сверх лимита отклоняется, а файл или страница, чей текст превысил бы его, сохраняется как неудачный. GET /knowledge/usage читает оба числа.
Как её использует ИИ
- Предложения ответа под последним сообщением цепочки читают уровни адреса, на который пришло сообщение.
- Черновик, написанный по описанию, в редакторе или через
POST /emails/compose, читает уровни адреса, с которого он уходит. Ответ перечисляет вsourcesэлементы, на которые он опирался. - Ассистент читает уровни открытой у вас цепочки или все уровни, которые вы видите, если ни одна не открыта, и может сам искать по базе знаний своим инструментом
searchKnowledge. - Ответ
GET /threads/{id}/reply-suggestionsперечисляет вsourcesэлементы, на которые опирались предложенные ответы.
Закреплённые заметки попадают в каждый промпт на своём уровне, до 2 000 символов с каждого уровня, подходят они к тому, что пишется, или нет. Остальное место, всего около 6 000 символов, отводится фрагментам, которые лучше всего подходят к запросу, найденным по смыслу и по словам. Если индекс не отвечает за мгновение, ИИ пишет без него, а не заставляет вас ждать.
ИИ указано считать то, что говорит база знаний, справочными данными, а не инструкциями, опускать то, что не относится к делу, и не упоминать базу знаний в том, что он пишет.
Как она растёт
Добавляйте элементы в приложении в разделе Рабочее пространство → База знаний или из кода через API, SDK и CLI. Ассистент и MCP-клиенты могут сохранить заметку или добавить ссылку, когда вы просите их что-то запомнить, а также менять, обновлять и удалять элементы. В чате приложения добавление, изменение и обновление элемента сначала спрашивают, если вы сами об этом не просили, а удаление всегда спрашивает.
Каждый элемент записывает в origin, откуда он пришёл: app, api, assistant или mcp, а в createdBy, кто его добавил.
Она растёт и сама. ИИ предлагает заметки из ответов, которые отправляет ваша команда, и отмечает вопросы, на которые пока ничто не отвечает, коннекторы поддерживают в актуальном виде целые сайты, карты сайтов, ленты и справочные центры, а ссылки можно перечитывать по расписанию. Ниже каждый из этих способов описан подробно.
Предложения из ваших ответов
Когда кто-то в рабочем пространстве отвечает в переписке, ИИ читает ответ и сообщение, на которое он отвечает, и предлагает из него до трёх фактов, которые подошли бы и для других людей, например цену, правило или срок доставки. Каждое предложение становится заметкой, которая ждёт проверки, на уровне домена, с которого отправлен ответ, или всего рабочего пространства, если этот домен ему не принадлежит. Факты, которые уже есть в базе знаний, пропускаются, и в день читается до 100 ответов.
Проверяйте их в приложении или через GET /knowledge/suggestions. Примите предложение, чтобы сохранить его как заметку, по пути изменив заголовок, текст, уровень или закрепление, или отклоните его. Тот же факт, предложенный снова, увеличивает occurrences, а не добавляет второе предложение, и отклонённое предложение больше не появляется.
Вопросы, на которые пока ничто не отвечает
Когда ИИ предлагает ответы на входящее сообщение, он также отмечает до трёх вещей, о которых отправитель спросил про бизнес и на которые не отвечают ни переписка, ни база знаний, например доставляете ли вы в его страну. Каждая становится вопросом на уровне домена, на который пришло сообщение, или всего рабочего пространства, если этот домен ему не принадлежит, а тот же вопрос, заданный снова, увеличивает occurrences, так что видно, какие задают чаще всего.
Ответьте на вопрос, и он станет заметкой: примите его с ответом в качестве текста, и его заголовком останется вопрос, если вы его не измените. С этого момента ИИ использует ответ всякий раз, когда возникает этот вопрос. Отклоните вопрос, на который не нужно отвечать, и он больше не будет отмечаться.
Дубликаты и противоречия
Каждый элемент при индексации сравнивается с самыми близкими элементами на всех уровнях и снова при каждом изменении. Два элемента, которые говорят почти одно и то же, отмечаются как duplicate. Два тесно связанных элемента, которые расходятся в факте, например в цене или сроке, отмечаются как conflict, с одной фразой о том, в чём расхождение. ИИ проверяет противоречия до 200 раз в день.
- Каждый элемент считает в
flagsоткрытые отметки, где он упомянут, аGET /knowledge/flagsперечисляет их, начиная с новых. - Чтобы снять отметку, измените или удалите один из двух элементов. Изменённый элемент сравнивается снова, как только проиндексирован.
- Отклоните отметку, если оба элемента в порядке как есть, и та же пара больше не будет отмечена по той же причине.
- Отметку видит только тот, кто может видеть оба элемента.
Коннекторы
Коннектор хранит в базе знаний много страниц из одного источника, каждую как элемент-ссылку на уровне коннектора, и поддерживает их в актуальном виде, когда источник меняется.
| Вид | Что читает |
|---|---|
| site | Указанную страницу и страницы, на которые она ссылается, на том же хосте и по тому же пути, без того, что запрещает robots.txt сайта |
| sitemap | Каждую страницу из карты сайта или индекс карт сайта и до 5 его карт |
| feed | Записи ленты RSS или Atom |
| zendesk | Опубликованные статьи справочного центра Zendesk по его адресу, например https://example.zendesk.com |
- Первая синхронизация начинается в течение минуты. Затем он синхронизируется снова каждые 7 дней, или каждые 1 или 30 дней, или только когда вы запрашиваете синхронизацию, которая тоже начинается в течение минуты.
- Он хранит до 25 страниц или столько, сколько вы укажете, до 200, а его элементы учитываются в квоте тарифа. Синхронизация перестаёт добавлять страницы, как только квота исчерпана.
- Каждая синхронизация добавляет новые страницы, перечитывает изменившиеся и удаляет элементы страниц, которых больше нет в источнике.
- Страница, которую вы сами добавили как ссылку на том же уровне, остаётся за этим элементом, а удаление коннектора убирает только те элементы, которые добавил он.
- Если перенести коннектор на другой уровень, его элементы переедут вместе с ним.
Ссылки, которые остаются актуальными
Ссылку можно перечитывать автоматически каждые 1, 7 или 30 дней: задайте refreshDays при добавлении или позже. Если страница изменилась, её новый текст заменяет старый, как только прочитан, а до тех пор ИИ использует старый текст. nextRefreshAt показывает, когда её прочитают в следующий раз, а страницу, которую не удалось загрузить, пробуют снова на следующий день.
Сохранение заметки из переписки
ИИ может прочитать переписку и составить одну заметку из фактов, которые снова понадобятся команде, без личных данных и того, что важно только для этой переписки. Ничего не сохраняется, пока вы этого не захотите: прочитайте черновик, измените его как угодно и сохраните как заметку, которая записывает в threadId переписку, из которой она взята.
Черновик предлагает уровень: домен, на который пришла переписка, если вы можете добавлять туда элементы, иначе всё рабочее пространство или адрес. Каждый черновик стоит одно действие ИИ. Из кода составляйте черновик через POST /knowledge/drafts, которому нужен threads:read в дополнение к knowledge:write, и сохраняйте через POST /knowledge/notes с тем же threadId.
Переупорядочивание результатов поиска
Поиск находит фрагменты по смыслу и по словам. Отправьте rerank: true с POST /knowledge/search, и ИИ дополнительно прочитает 25 лучших фрагментов и расставит их в том порядке, который лучше всего отвечает на вопрос, отбросив бесполезные. Это добавляет секунду-другую и стоит одно действие ИИ, поэтому выполняется только по вашему запросу. reranked в ответе показывает, произошло ли это, а если не успевает вовремя, фрагменты сохраняют обычный порядок.
Статистика использования
GET /knowledge/stats показывает, как ИИ использовал базу знаний за последние 30 дней или, по вашему запросу, до 90.
- Сколько раз предложенный ответ, черновик, ассистент или поиск что-то нашли, сколько раз искали и ничего не нашли, и долю удачных поисков, по дням.
- Где происходили эти использования:
compose,reply,chat,toolиsearch. - Самые используемые элементы и сколько готовых элементов не использовалось ни разу. У каждого элемента есть свой счётчик
usesиlastUsedAtс последним использованием. - Сколько предложений и вопросов ждут проверки и сколько отметок открыто.
Как выключить обучение
Настройка рабочего пространства knowledgeLearning по умолчанию включена. Выключите её через PATCH /settings и { "knowledgeLearning": false }, и ИИ перестанет читать отправленные ответы в поисках фактов для предложений, перестанет отмечать вопросы из входящей почты и перестанет проверять элементы на противоречия. Дубликаты по-прежнему отмечаются, а то, что уже предложено, остаётся, чтобы вы приняли или отклонили это.
Кто может её читать и менять
- Чтение требует
knowledge:read, а изменениеknowledge:write, которое включает чтение. Встроенные роли Admin, Member и Developer могут менять элементы, Viewer может их читать, а Billing до них не достаёт. - Чтобы изменить элемент, нужен доступ к каждому адресу, который охватывает его уровень: всё рабочее пространство требует всех адресов, домен весь домен, а адрес этот адрес. Ключ или приложение, ограниченные определёнными адресами, могут менять элементы только на этих адресах или на доменах, которые они держат целиком.
- Тот, кто ограничен определёнными адресами, читает элементы всего рабочего пространства и элементы своих адресов и их доменов. Ассистент и инструменты MCP, действующие от его имени, добавляют и меняют элементы только на адресах, с которых он может отправлять.
Конфиденциальность
- Текст каждого элемента зашифрован при хранении: содержимое заметки, текст, прочитанный из файла или страницы, и каждый фрагмент. Слова, которые сравнивает поиск по словам, хранятся как хеши с ключом, а не как слова.
- Файлы превращаются в текст, а веб-страницы читает OpenEmail. В политике конфиденциальности перечислены все службы, которые обрабатывают ваши данные.
- Для поиска по смыслу каждый фрагмент и каждый вопрос превращаются в вектор: список чисел, описывающий, о чём они. Векторы хранятся незашифрованными рядом с зашифрованным текстом, как и при поиске по смыслу в почте.
- Фрагменты, которые использует промпт, уходят в модель ИИ, которая пишет ответ, черновик или реплику, как и остальная часть промпта.
- Удаление элемента сразу убирает его файл, текст и фрагменты. База знаний входит в экспорт рабочего пространства, а удаление рабочего пространства удаляет и её.
- Пока обучение включено, модель ИИ читает каждый ответ, отправленный в переписке, вместе с сообщением, на которое он отвечает, чтобы предлагать заметки, и читает два тесно связанных элемента, чтобы проверить их на противоречие. Настройка
knowledgeLearningвыключает и то и другое.
Из кода, терминала и агентов
Всё перечисленное есть в REST API под /knowledge, в SDK как openemail.knowledge (TypeScript) и client.knowledge (Python, Ruby и PHP), в CLI как openemail knowledge и в инструментах MCP. Ключу нужен knowledge:read, чтобы читать, и knowledge:write, чтобы менять элементы.