Governance · только чтение по архитектуре

Политика — это код.
Не промпт.

SQAI относится к модели как к тому, чем она является: ненадёжному клиенту. Списки разрешений фиксируются в коде при создании инструмента, проверяются внутри процесса до любого выполнения и отсутствуют в протоколе модели. Системе нечего переубеждать.

4 574возможностей в контракте — все только для чтения
6разрешений в политике приложения
1типизированный запрос на исполнение

IIСужение — полностью

Три слоя. Каждый только сужает.

Каждый ответ проходит одно и то же ограничение. Контракт с хеш-привязкой определяет, что существует. Ваша политика сужает это до разрешённого. Один типизированный запрос должен уместиться в обоих.

  1. 01

    Контракт

    4 778 возможностей в зафиксированной среде выполнения; 4 574 открыты агентам, все только для чтения. Остальные 204 исключены полностью — для модели они не существуют.

  2. 02

    Ваша политика

    Три списка разрешений — allowedSources, allowedFields для каждого источника, allowedFunctions — фиксируются при вызове createSQAI(). По умолчанию функции — «all-readonly».

  3. 03

    Один запрос

    Типизированный план, проверяемый по контракту, а затем по политике внутри процесса — до выполнения, не после.

Слой 01 · Контракт4 574 открыто · только чтение
Слой 02 · Ваша политика6 разрешений
allowedSourcesorders
allowedFieldsregionrevenueunit_price
allowedFunctionsstats.medianfinance.npv
Слой 03 · Один запрос1 типизированный план

QuerySpec v1 · median(revenue) by region · policy ✓

contract_hash sha256:79f1c5a6c7164e7e9e1750e70a5c03292fa87eb52d8148a740c06695924be9a1

Только сужение.

Политика может уменьшить поверхность; расширить её нельзя ничем. Укажите возможность, которую контракт не открывает, — createSQAI() выбросит unsupported_operation при создании, и приложение завершится с ошибкой прежде, чем к нему подключится агент.

Входные данные инструмента модели не содержат поля allowed*. Политика не входит в протокол, поэтому ни промпт, ни инъекция не могут её расширить.

IIIПолитика в коде

Написано однажды. Проверяется всегда.

Большинство инструментов управления находятся рядом с путём данных и наблюдают за ним. Политика SQAI находится внутри пути: три списка разрешений в конструкторе, применяемые внутри процесса перед каждым выполнением.

const sqai = createSQAI({
  sources: { orders },

  // policy — fixed here, invisible to the model
  allowedSources: ['orders'],
  allowedFields: {
    orders: ['region', 'revenue', 'unit_price'],
  },
  // functions default: 'all-readonly'
  allowedFunctions: [
    'stats.median', 'finance.npv',
  ],
});
allowedSources
Зарегистрированные источники, которые план может указывать. Всё остальное возвращает policy_denied_source.
allowedFields
Столбцы для каждого источника. План, обращающийся к любому другому столбцу, возвращает policy_denied_field.
allowedFunctions
Функции только для чтения, которые план может вызывать, — по умолчанию «all-readonly». Всё за пределами возвращает policy_denied_function.
tool input
Не содержит поля allowed*. Модель никогда не видит политику и не может передать более широкую.

Журнал отказов

Отказы — это данные, а не исключения. Каждый несёт стабильный код, доступный агенту, и ни один не допускает повтора, поэтому цикл не может «износить» политику.

при создании

unsupported_operation

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

при выполнении запроса

policy_denied_source

План указывает источник за пределами allowedSources.

policy_denied_field

План обращается к столбцу за пределами allowedFields этого источника.

policy_denied_function

План вызывает функцию за пределами allowedFunctions.

source: "sqai"каждый отказ политики возвращается как структурированный, неповторяемый результат. Инструменты никогда не бросают исключений.

IVХранение

Результаты хранятся под контролем.

Полный набор результатов никогда не попадает в контекст модели. Он помещается в управляемое хранилище и адресуется по id; модель получает объявленную выборку.

Хранилище результатов

Управляемое хранилище · TTL 15 мин

result_id
16 случайных байт, base64url. Непредсказуемый, никогда не последовательный.
authorization
Привязан к тенанту. Чужой тенант получает result_not_found — хранилище не подтверждает существование записи.
ttl
15 минут. После этого запись удаляется.
capacity
Не более 256 результатов — 64 МБ суммарно, 16 МБ на тенант.

Хранилище держит результат. Модель читает выборку и сообщает об этом.

Ограничения контекста модели

defaultLimit100лимит строк, применяемый если план его не задаёт
maxExecutionRows1 000жёсткий потолок строк для любого выполнения
maxRowsToModel25максимум строк, передаваемых в контекст модели
maxCellsToModel250максимум ячеек, передаваемых в контекст модели
maxBytesToModel32 000максимум байт данных результата, передаваемых модели

Усечение всегда объявляется в результате. Неполные строки не передаются — строка приходит целиком или не приходит вовсе.

Аудит

17%организаций способны восстановить полную последовательность вызовов инструментов агента постфактум

GDPR Article 30 и SOC 2 CC7.2 требуют именно таких записей.

Каждый ответ SQAI уже содержит всё необходимое для восстановления:

plan_hash · invocation_hash · computation_hash · contract_hash

Воспроизведение — это поиск, а не расследование. Принцип воспроизведения

VIВопросы

Управление: прямые ответы

Может ли модель расширить собственный доступ?

Нет. Политика фиксируется в момент вызова createSQAI() и проверяется внутри процесса до выполнения. Входные данные инструмента модели не содержат поля allowed*, поэтому в протоколе нет механизма расширения — запрос за пределами политики возвращает структурированный результат policy_denied.

Режим только для чтения — это флаг, который можно обойти?

Это не флаг. Открытый контракт содержит 4 574 возможности только для чтения; путь записи отсутствует по конструкции, а не отключён. Инъекция в промпт может изменить запрос модели — но не добавить возможности в зафиксированный контракт.

Какие записи доступны для проверки по GDPR Article 30 или SOC 2 CC7.2?

Каждый результат содержит plan_hash, invocation_hash, computation_hash и contract_hash. Точное вычисление можно воспроизвести и верифицировать по этим хешам спустя любое время.

Где хранятся данные результата после запроса?

В хранилище результатов с авторизацией по тенанту: идентификаторы — 16 случайных байт, записи истекают через 15 минут, хранилище ограничено 64 МБ суммарно и 16 МБ на тенант. Контекст модели получает не более 25 строк, 250 ячеек и 32 000 байт — усечение всегда объявляется.

VIIДалее

Управляйте ответом.

Принесите схему и вопрос по соответствию. Мы покажем политику, которая на него отвечает.