Знания и онтология¶
Процессы пакета спрашивают базу знаний (recall), пишут в неё (remember) и
ведут в ней проекцию дела (memory); наблюдатели интеграций отдают ей снимки
внешних систем. Чтобы эти записи были типизированы и проверяемы, пакет объявляет
онтологию — виды сущностей и связи между ними — и говорит, на какие онтологии
опирается. Статья для автора пакета: как описать онтологию видом KnowledgePack,
объявить её в манифесте, включить установкой и не пустить в граф персональные
данные. Обоснование — TAI-ADR-0056 (база знаний компании), TAI-ADR-0062 (п.5).
Память доступна пакету только через ядро: запросы процессов, снимки наблюдателей и
ctx.knowledge скиллов идут в Control Plane, а он — в память. Прямого обращения к
сервису памяти у пакета нет.
Где что лежит¶
| Что | Где | Кто задаёт |
|---|---|---|
| Онтология пакета | knowledge-packs/<имя>.yaml, вид KnowledgePack |
автор пакета |
| На какие онтологии опирается пакет | Package.spec.knowledge: [имя@версия] |
автор пакета |
| Какие онтологии включены для пространства работы | Installation.spec.knowledge |
установка — это топология |
Онтология пакета — KnowledgePack¶
# knowledge-packs/claims.yaml
apiVersion: taimen.ai/v1
kind: KnowledgePack
key: claims
spec:
name: claims
version: 1
description: Claims of customers and their resolution
extends: ["default@1"]
kinds:
- kind: claim
title: Claim
naturalKey: "claim:<source>:<id>"
attributes:
type: object
properties:
subject: {type: string, title: Subject}
severity: {type: string, enum: [low, medium, high]}
openedOn: {type: string, format: date}
searchable: {fields: [subject]}
relations:
- relation: filed_by
title: Filed by
fromKinds: [claim]
toKinds: [legal_entity]
cardinality: one
package-sdk add KnowledgePack claims пишет заготовку с одним видом.
Поле spec |
Что задаёт |
|---|---|
name |
имя онтологии без префикса, ^[a-z0-9][a-z0-9._-]{0,63}$; совпадает с key объекта (check: knowledge_pack_key) |
version |
целое от 1. Зарегистрированная версия неизменна: правка описания — новая версия |
scope |
common (по умолчанию) — общий реестр; tenant — онтология арендатора |
extends |
до 10 онтологий имя@версия, на виды которых ссылаются связи и профили этой; базовая не меняется |
kinds[] |
вид: kind, title, description, naturalKey (шаблон с плейсхолдерами или JSON Schema строки), attributes (JSON Schema), searchable: {fields} — атрибуты для поиска по смыслу, aliases, kindAliases, idPatterns |
relations[] |
связь: relation, title, fromKinds, toKinds, temporal (по умолчанию true), cardinality (one или many) |
profiles[] |
атрибуты вида этой или другой онтологии; с when: {attr, equals} — только у сущностей, где атрибут равен значению |
expiry[] |
кому (role) и за сколько дней (leadDays, 1–365) ставить задачу об истечении validUntil вида |
Полная форма — sdk/package-sdk/schema/v1/knowledge-pack.schema.json.
- Сроки действия — по соглашению атрибуты
validFromиvalidUntil(format: date). - Своё поверх базового. Онтология класса или вертикали добавляет только свои виды и связи, а атрибуты чужого вида описывает профилем, не переобъявляя его. Сущность, которая уже есть в базе, из нового источника сводится с ней по естественному ключу.
extendsдолжна называть онтологию из этого пакета, егоrequiresили онтологию памяти платформыdefault@1, иначеcheck—knowledge_extends_unknown. Вdefault@1уже есть организация (legal_entity), продукт (product), договор (contract), решение (decision) и другие базовые виды — своя онтология ссылается на них, а не переобъявляет. Онтология другого пакета — через егоrequires.- Одна онтология
имя@версияв двух пакетах установки допустима только одинаковой, иначеknowledge_pack_conflict.
Объявить опору пакета¶
Манифест называет онтологии, на которые опираются процессы и правила пакета:
check собирает виды и связи из memory, recall, remember и контекста шагов
процессов пакета и сверяет их с объявленными онтологиями:
| Код | Уровень | Когда |
|---|---|---|
knowledge_undeclared |
предупреждение | процессы обращаются к памяти, а spec.knowledge нет |
knowledge_unknown |
ошибка | онтология из spec.knowledge не объявлена KnowledgePack ни в пакете, ни в его requires (кроме default@1) |
knowledge_term_unknown |
ошибка | вида или связи процесса нет ни в одной из объявленных онтологий (с их extends); предупреждение, если содержимое части онтологий не видно — их extends вне пакетов. default@1 сверяется со снимком, который несёт SDK |
knowledge_extends_unknown |
ошибка | extends называет онтологию, которой нет |
knowledge_pack_key |
ошибка | key объекта не совпадает со spec.name |
knowledge_pack_conflict |
ошибка | та же имя@версия в другом пакете с другим содержимым |
Связь rel сущностей дела в memory.entities — предикат факта о деле, а не связь
онтологии: её check не сверяет.
Регистрация и включение¶
Онтологии — отдельная секция knowledge единого плана установки. Она применяется
после каталога и объектов ядра: сначала регистрируются версии, которых на стенде ещё
нет, затем пространствам работы включаются наборы:
# packages.yaml — файл установки
apiVersion: taimen.ai/v1
kind: Installation
key: production
spec:
packages: [claims]
knowledge:
- workspace: ${CLAIMS_WORKSPACE_ID} # корень дерева workspace
packs: ["default@1", "claims@1"]
strict: true
| Шаг | Вызов | Правила |
|---|---|---|
| Регистрация версии | POST /api/v1/knowledge/packs |
общую онтологию регистрирует администратор платформы из CP_KNOWLEDGE_PACK_ADMINS, онтологию арендатора (scope: tenant) — право knowledge.packs.manage; владельца-namespace подставляет ядро. plan читает версию со стенда: нет её — регистрация в плане; есть, но виды или связи в пакете другие — план не строится: «поднимите version» |
| Включение | PUT /api/v1/workspaces/{id}/knowledge-packs |
право workspaces.manage, только на корне дерева workspace (422 workspace_not_root), только закреплённые ссылки имя@версия (422 pack_version_required) |
- Запрос включения заменяет набор целиком. Перечисляйте в
packsвсё, что нужно пространству, включаяdefault@1. Несколько записей для одного workspace сливаются в один набор. planпоказывает итоговый набор рядом с текущим (сейчас: …) и не включает пространство, где набор и строгость уже такие.strict: true— строгий режим памяти: записи вне видов включённых онтологий отвергаются, а не принимаются как есть. Строгость, заданная хоть в одной записи workspace, действует на весь его набор.- Онтология арендатора включается ссылкой
tenant:<имя>@<версия>и видна только в namespace арендатора и деревьях под ним. - Включаемая онтология, которой нет в пакетах установки, должна уже быть на стенде:
checkпредупреждает о такой.
Как пакет пользуется знаниями¶
| Кто | Как | Статья |
|---|---|---|
| Процесс | memory (проекция дела), шаги recall и remember, контекст шагов, регламенты |
Процессы и база знаний |
| Наблюдатель | ctx.snapshot(Snapshot(source, snapshot_id, entities, relations, pack, scope)) — снимок внешней системы, ядро сверяет его с графом |
Интеграции |
| Скилл | ctx.knowledge.recall, query, preview и apply со stateToken, document |
Скиллы пакета |
Снимок и запись идут от имени агента или личности процесса: им нужно право
observations.write, а наблюдателю со снимками — workspace в разделе work описания.
Шаблоны загрузки¶
Таблицы, через которые люди загружают записи вида, не пишутся руками: генератор строит их из JSON Schema атрибутов вида. Поэтому описание вида — это и шаблон:
titleиdescriptionсвойства — заголовок и подсказка колонки;type,format,enum— проверка значения,required— обязательность;- колонки ключа — из плейсхолдеров
naturalKey, колонки связей — из связей, у которых вид стоит вfromKinds.
Форма уточнения подачи шаблона (заголовки, порядок, подсказки, примеры,
дополнительные запрещённые колонки) — sdk/package-sdk/schema/v1/knowledge-template.schema.json;
колонок, которых нет в схеме вида, уточнение не добавляет.
Персональные данные¶
- Атрибут с персональными данными физического лица допустим только с пометкой
x-personal-data: allowed; такие значения не попадают в промпты ИИ. - Шаблоны загрузки запрещают колонки с персональными данными (ФИО, паспорт, СНИЛС,
дата рождения, адрес, телефон, e-mail) и то, что пакет добавил в
forbiddenColumns. ctx.llmскиллов заменяет персональные данные в промпте маркером[ПДн:вид]до вызова модели.- Проектируйте онтологию так, чтобы человек был ролью или организацией, а не сущностью с персональными данными: связь «обращение подал» ведёт к юрлицу, а не к контактному лицу.
Типичные проблемы¶
| Симптом | Причина и решение |
|---|---|
plan: «онтология … уже зарегистрирована, а kinds в пакете другие — … поднимите version» |
правка видов или связей онтологии без новой version |
403 на регистрации общей онтологии |
применяющий не в CP_KNOWLEDGE_PACK_ADMINS — зарегистрировать от администратора платформы или сделать онтологию арендатора (scope: tenant) |
422 workspace_not_root |
Installation.spec.knowledge называет не корень дерева workspace |
| после включения пропали виды другой онтологии | набор заменяется целиком — в packs не перечислили её |
check: knowledge_term_unknown |
процесс обращается к виду или связи, которых нет в spec.knowledge — добавить онтологию или поправить вид |
| запись в память отвергнута в строгом режиме | вид записи не входит во включённые онтологии |
См. также¶
- Процессы и база знаний
- Интеграции — снимки знаний наблюдателем
- Модель знаний
- Контекст задачи и память