Privacy Sanitization
Редактируйте, токенизируйте или блокируйте секреты через privacy-sanitization.
Используйте privacy-sanitization, чтобы санитизировать секреты до того, как /v1/chat/completions дойдёт до модели. Выбирайте redact, если нужен читаемый замаскированный текст, tokenize, если нужны стабильные placeholders в рамках одного запроса, и block, если запрос нужно остановить до выполнения. Для общей security и data-handling policy смотрите Security.
Отправьте минимальный запрос
{
"model": "qwen/qwen3-235b-a22b-instruct-2507-fp8",
"messages": [
{
"role": "user",
"content": "Summarize this incident note, but hide apiKey=sk-live-demo-123456 and DATABASE_URL=postgres://app:super-secret@db.internal:5432/gonkagate."
}
],
"plugins": [
{
"id": "privacy-sanitization",
"mode": "redact"
}
]
}Ожидаемый результат: запрос продолжается уже с санитизированным input, а покрытые фрагменты не уходят в модель в raw-виде.
Выберите режим
| Режим | Что меняется до выполнения | Что получает модель | Лучше всего подходит для | Не подходит, когда |
|---|---|---|---|---|
redact | Покрытые фрагменты заменяются общей маской или меткой редактирования. | Санитизированный текст с читаемыми placeholders. | Публичного чата, support-промптов и операторских сценариев, где текст после санитизации должен оставаться читаемым. | Модели нужно различать повторяющиеся скрытые значения внутри одного запроса. |
tokenize | Покрытые фрагменты заменяются стабильными placeholders. | Санитизированный текст со стабильными токенами, который сохраняет различимость скрытых значений внутри этого запроса. | Одиночных запросов, где один и тот же скрытый фрагмент встречается несколько раз и модели нужно удержать эти ссылки. | Человекочитаемых промптов или сценариев, которые позже ждут server-managed history или session restore. |
block | Запрос отклоняется до выполнения модели. | Ничего. Выполнение модели не начинается. | Строгого compliance, no-risk flows и случаев, где продолжать даже с санитизированным контентом небезопасно или вводит в заблуждение. | UX-путей, где пользователь ожидает автоматическую санитизацию и продолжение. |
Сравните один input во всех трёх режимах
Строки placeholders ниже показаны только как пример. Точный вид замен остаётся implementation-defined.
Input
Compare sk-live-prod-123 and sk-live-staging-456. In the next step, use sk-live-prod-123 again.redact
Compare [SECRET:API_KEY] and [SECRET:API_KEY]. In the next step, use [SECRET:API_KEY] again.tokenize
Compare [TOKEN_1] and [TOKEN_2]. In the next step, use [TOKEN_1] again.block
Request rejected before model execution.- Выбирайте
redact, когда промпт после санитизации должен остаться читаемым. - Выбирайте
tokenize, когда в одном запросе нужны стабильные скрытые placeholders для повторных ссылок на секрет. - Выбирайте
block, когда продолжать даже с санитизированным контентом небезопасно.
redact сохраняет запрос читаемым, но схлопывает идентичность секрета. tokenize тоже скрывает значение, но сохраняет различимость секретов внутри того же санитизированного запроса.
Используйте tokenize, чтобы сохранить идентичность скрытого значения внутри одного санитизированного запроса, а не для форматирования или восстановления истории чата.
Проверьте ограничения до rollout
modeобязателен.- Public
privacy-sanitizationна default/v1/chat/completionsstateless: санитизация выполняется на входе запроса и не хранит privacy state между запросами. redact,tokenizeиblockработают и в streaming-, и в non-streaming запросах.- Не рассчитывайте на
_gonka.privacy.history_writeback,event: gonka.input_patch, raw restore вtool_callsили любой другой client-visible путь восстановления истории. - Не опирайтесь на history или session state на этом default public surface.
- Этот public managed profile ориентирован на секреты. По умолчанию он не обещает широкую generic PII redaction.
privacy-sanitizationсейчас несовместим с built-in web search, включаяplugins: [{ "id": "web" }]иmodel: "...:online". Выбирайте один path на запрос.- Authenticated-запросы также могут унаследовать saved plugin settings, если включена plugin settings policy.
Включите или выключите плагин
Request-level opt-in работает, когда:
pluginsвключаетid="privacy-sanitization"modeравенredact,tokenizeилиblock- для этой записи выполняется
enabled !== false
{
"plugins": [
{
"id": "privacy-sanitization",
"mode": "redact"
}
]
}Authenticated-запросы также могут активировать privacy-sanitization из saved plugin settings. Считайте request payload request-level контрактом, но не единственным источником активации, если включена plugin settings policy.
Чтобы отключить request-level activation для одного запроса:
- Уберите
privacy-sanitizationизplugins, если не используете saved plugin defaults. - Если saved plugin settings могут автоактивировать плагин, передайте
enabled: falseили выключите saved default. - Если saved plugin settings зафиксированы policy, request-level overrides могут быть отклонены.
Используйте плагин из SDK
Типы запросов в OpenAI SDK не моделируют GonkaGate-specific plugins. Передавайте поле через runtime-specific escape hatch.
TypeScript
Используйте // @ts-expect-error или свою обёртку вокруг undocumented request fields.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.gonkagate.com/v1",
apiKey: "gp-your-api-key"
});
const response = await client.chat.completions.create({
model: "qwen/qwen3-235b-a22b-instruct-2507-fp8",
messages: [
{
role: "user",
content:
"Summarize this incident note, but hide Authorization: Bearer demo-secret-token and DATABASE_URL=postgres://app:super-secret@db.internal:5432/gonkagate."
}
],
// @ts-expect-error undocumented request field for an OpenAI-compatible backend
plugins: [{ id: "privacy-sanitization", mode: "redact" }]
});
console.log(response.choices[0]?.message?.content);Python
Передавайте undocumented request fields через extra_body.
from openai import OpenAI
client = OpenAI(
base_url="https://api.gonkagate.com/v1",
api_key="gp-your-api-key"
)
response = client.chat.completions.create(
model="qwen/qwen3-235b-a22b-instruct-2507-fp8",
messages=[
{
"role": "user",
"content": "Summarize this incident note, but hide apiKey=sk-live-demo-123456."
}
],
extra_body={
"plugins": [{"id": "privacy-sanitization", "mode": "redact"}]
}
)
print(response.choices[0].message.content)Обработайте частые ошибки
| Условие | Результат | Что делать |
|---|---|---|
privacy-sanitization комбинируется с built-in web search (plugins: [{ id: "web" }] или model: "...:online") | Обычно это HTTP 400 invalid_request_error с кодом web_search_privacy_sanitization_not_supported. Если built-in web search недоступен, вместо этого запрос может вернуть HTTP 503 server_error с кодом web_search_unavailable. | Выбирайте один path на запрос: built-in web grounding или privacy sanitization. |
| Privacy sidecar недоступен | HTTP 503 privacy_sanitization_unavailable; raw prompt upstream не отправляется | Считайте это fail-closed поведением. Не рассчитывайте на passthrough. |
mode: "block" обнаруживает покрытый фрагмент | Запрос отклоняется до выполнения модели | Покажите это как ожидаемый control path и дайте caller исправить input или выбрать другой режим. |
См. также
- Plugins Overview для сравнения поведения плагинов и saved defaults.
- Web Search для отдельного built-in grounding path. Сейчас он несовместим с
privacy-sanitization, поэтому выбирайте один path на запрос. - Chat Completions API reference для точной схемы plugin fields.
- Security для общей security и data-handling policy.