Governance · только чтение по архитектуре
Политика — это код.
Не промпт.
SQAI относится к модели как к тому, чем она является: ненадёжному клиенту. Списки разрешений фиксируются в коде при создании инструмента, проверяются внутри процесса до любого выполнения и отсутствуют в протоколе модели. Системе нечего переубеждать.
IIСужение — полностью
Три слоя. Каждый только сужает.
Каждый ответ проходит одно и то же ограничение. Контракт с хеш-привязкой определяет, что существует. Ваша политика сужает это до разрешённого. Один типизированный запрос должен уместиться в обоих.
- 01
Контракт
4 778 возможностей в зафиксированной среде выполнения; 4 574 открыты агентам, все только для чтения. Остальные 204 исключены полностью — для модели они не существуют.
- 02
Ваша политика
Три списка разрешений — allowedSources, allowedFields для каждого источника, allowedFunctions — фиксируются при вызове createSQAI(). По умолчанию функции — «all-readonly».
- 03
Один запрос
Типизированный план, проверяемый по контракту, а затем по политике внутри процесса — до выполнения, не после.
allowedSourcesordersallowedFieldsregionrevenueunit_priceallowedFunctionsstats.medianfinance.npvQuerySpec 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Далее
Управляйте ответом.
Принесите схему и вопрос по соответствию. Мы покажем политику, которая на него отвечает.