Skip to main content

Privacy Sanitization

Редактируйте, токенизируйте или блокируйте секреты через privacy-sanitization.

Используйте privacy-sanitization, чтобы санитизировать секреты до того, как /v1/chat/completions дойдёт до модели. Выбирайте redact, если нужен читаемый замаскированный текст, tokenize, если нужны стабильные placeholders в рамках одного запроса, и block, если запрос нужно остановить до выполнения. Для общей security и data-handling policy смотрите Security.

Отправьте минимальный запрос

request.json
{
  "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

Сравните один input во всех трёх режимах
Compare sk-live-prod-123 and sk-live-staging-456. In the next step, use sk-live-prod-123 again.

redact

redact
Compare [SECRET:API_KEY] and [SECRET:API_KEY]. In the next step, use [SECRET:API_KEY] again.

tokenize

tokenize
Compare [TOKEN_1] and [TOKEN_2]. In the next step, use [TOKEN_1] again.

block

block
Request rejected before model execution.
  • Выбирайте redact, когда промпт после санитизации должен остаться читаемым.
  • Выбирайте tokenize, когда в одном запросе нужны стабильные скрытые placeholders для повторных ссылок на секрет.
  • Выбирайте block, когда продолжать даже с санитизированным контентом небезопасно.

redact сохраняет запрос читаемым, но схлопывает идентичность секрета. tokenize тоже скрывает значение, но сохраняет различимость секретов внутри того же санитизированного запроса.

Используйте tokenize, чтобы сохранить идентичность скрытого значения внутри одного санитизированного запроса, а не для форматирования или восстановления истории чата.

Проверьте ограничения до rollout

  • mode обязателен.
  • Public privacy-sanitization на default /v1/chat/completions stateless: санитизация выполняется на входе запроса и не хранит 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.json
{
  "plugins": [
    {
      "id": "privacy-sanitization",
      "mode": "redact"
    }
  ]
}

Authenticated-запросы также могут активировать privacy-sanitization из saved plugin settings. Считайте request payload request-level контрактом, но не единственным источником активации, если включена plugin settings policy.

Чтобы отключить request-level activation для одного запроса:

  1. Уберите privacy-sanitization из plugins, если не используете saved plugin defaults.
  2. Если saved plugin settings могут автоактивировать плагин, передайте enabled: false или выключите saved default.
  3. Если saved plugin settings зафиксированы policy, request-level overrides могут быть отклонены.

Используйте плагин из SDK

Типы запросов в OpenAI SDK не моделируют GonkaGate-specific plugins. Передавайте поле через runtime-specific escape hatch.

TypeScript

Используйте // @ts-expect-error или свою обёртку вокруг undocumented request fields.

privacy-sanitization.ts
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.

privacy-sanitization.py
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.
Была ли эта страница полезной?