メインコンテンツまでスキップ

Prompt privacy

個人情報を含む prompt が AI agent の model に届く前に拒否します。

Prompt Privacy を使用する理由

ユーザーが customer record を support agent に貼り付け、苦情を要約するよう依頼したとします。この prompt は model provider に送信され、conversation history に保存され、その後のすべての turn で再利用されます。agent 自身の instructions ではこれを取り消せません。model が拒否できる時点では、すでに data を読み取っているためです。

Prompt privacy は turn を入口で停止します。prompt は agent の model が認識する前にスクリーニングされ、PII を含む prompt は完全に拒否されます。

Backend code
await this.squid.ai().agent('support-agent').updatePii({
onDetect: 'reject',
});

概要

prompt privacy を有効にすると、agent が実行される前に、すべての incoming prompt が小型で高速な classifier model によりスクリーニングされます。prompt に選択した情報が含まれる場合、その turn は拒否されます。

  • prompt は agent の model に送信されません。
  • answer は生成されず、chat quota も消費されません。ただし、screening call 自体は AI spend として計測されます。
  • conversation history には何も書き込まれないため、次の turn は前の state から開始します。
  • caller は、PII_DETECTED_IN_PROMPT から始まる error を受け取ります。

PII guardrail との違い

Prompt privacy は disablePii guardrailの inbound counterpart であり、両者は異なる問題を解決します。

pii(このページ)guardrails.disablePii
方向Inbound: ユーザーが送信する内容Outbound: agent が回答する内容
メカニズムagent 実行前に classifier が prompt をスクリーニングするagent の system prompt 内の instruction
一致時turn が拒否されるmodel に情報を除外するよう求める
agent の model に届くか?いいえはい

data が model に一切届いてはならない場合は pii を使用します。agent に回答させつつ personal data を reply に含めないようにしたい場合は disablePii を使用します。両方を同時に有効化できます。

クイックスタート

screening は 1 回の call で有効化できます。configuration は保存済み agent に存在するため、すべての caller に適用されます。

Backend code
// Refuse any prompt containing an email address or a national identity number
await this.squid
.ai()
.agent('support-agent')
.updatePii({
onDetect: 'reject',
entities: ['email', 'ssn'],
});

拒否された prompt は throw される error として表示されるため、agent を呼び出す場所で処理します。

Backend code
try {
const answer = await this.squid.ai().agent('support-agent').ask(userPrompt);
return answer;
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
if (message.includes('PII_DETECTED_IN_PROMPT')) {
return 'Please remove any personal details from your question and try again.';
}
throw error;
}

Configuration

すべての設定は agent の pii option の下にあります。

FieldTypeDefault説明
onDetect'off' or 'reject''off''reject' は PII を含む prompt を拒否します。'off' は screening を完全に無効化します。
entitiesentity kind の arrayすべての kindスクリーニング対象にする情報の kind。
customRulesstring の arrayなしplain language で記述する、business 固有の情報。
allowListstring の arrayなしPII として決して扱わない exact value。
classifierModelmodel 名gpt-5.6-lunascreening を実行する model。

updatePiiupdateGuardrails と同様に、agent の既存設定を置き換えるのではなく merge します。merge は shallow です。entitiescustomRulesallowList などの array field は append されず、全体が置き換えられます。

Entity kind

Kind一致する内容
emailEmail address
phoneNumberPhone number
creditCardPayment card number
ssn米国の Social Security Number などの national identity number
ibanIBAN などの bank account number
passportPassport およびその他の travel document number

entities を未設定のままにすると、すべての kind をスクリーニングします。customRules のみに依存するには、empty array に設定します。entities が空で custom rule も設定されていない場合、スクリーニング対象がないため classifier は呼び出されず、すべての prompt が通過します。

Custom rule

model が prompt を読むため、custom rule は pattern ではなく description として記述します。注意深い読者が文から認識できるものであれば機能します。custom rule が一致した場合、拒否メッセージと audit entry は built-in kind ではなく rule text 自体を報告します。

Backend code
await this.squid.ai().agent('support-agent').updatePii({
onDetect: 'reject',
customRules: [
'internal case numbers like CASE-12345',
'employee IDs, which are always six digits prefixed with E',
'any reference to a customer contract number',
],
});

Allow list

本来は flag される shared かつ non-personal な value は allow list に追加します。

Backend code
await this.squid
.ai()
.agent('support-agent')
.updatePii({
onDetect: 'reject',
allowList: ['support@example.com', '+1-800-555-0100'],
});

コアコンセプト

Screening は context 内で判断される

model が prompt を読むため、value は偶然一致する形式ではなく、prompt がそれを何として説明しているかに基づいて分類されます。SSN 113-772-1098 と記述された number は phone number に似た形式ですが、周囲の text がそのように示しているため ssn として報告されます。

Policy は request ごとに override できない

pii は保存済み agent から読み取られます。個別の ask または chat call の options で渡した pii value は無視されるため、caller は agent owner が有効にした screening を無効にできません。

拒否は Redact された Prompt で Audit される

agent で audit logging が有効な場合、拒否された turn も記録されますが、保存される prompt では一致したすべての value が [REDACTED] に置き換えられます。entry は一致した kind により tag 付けされ、value 自体で tag 付けされることはありません。そのため audit trail には、拒否の原因となった data を再掲することなく、request がなぜ拒否されたかが記録されます。

Screening は Fail-closed である

classifier に到達できない場合、screening されていない状態で通過させるのではなく、turn は PII_SCREENING_UNAVAILABLE で拒否されます。PII を拒否するよう設定された agent が、暗黙的に拒否を停止することはありません。

Error Handling

Error意味対処方法
PII_DETECTED_IN_PROMPTprompt に PII が含まれていたため拒否されました。message には一致した kind が一覧表示されます。一致した custom rule は rule text によって報告されます。personal detail を除外して再送信するよう user に依頼します。
PII_SCREENING_UNAVAILABLEclassifier に到達できなかったため、prompt が拒否されました。retry します。継続する場合は、設定済みの classifierModel が利用可能か確認します。

いずれも answer が生成される前に、ask および chat call から throw されます。

ベストプラクティス

  • 必要なものだけをスクリーニングしてください。 有効な agent はすべて、自身の model より先に prompt ごとに 1 回の classifier call を実行します。これにより各 turn に latency が追加され、app に請求される model spend が発生します。entities を絞り込んでも call 自体はなくならないため、default ではなく意図的に有効化するものとして扱ってください。
  • user に次に何をすべきか伝えてください。 PII_DETECTED_IN_PROMPT は一致した kind を示します。これを具体的なメッセージ(「credit card number を削除してください」)にする方が、一般的な失敗メッセージよりはるかに有用です。
  • 境界を理解してください。 Prompt privacy は prompt を対象とします。connector result または knowledge base content を通じて model に到達する data はスクリーニングされないため、end-to-end の保証として user に説明しないでください。
  • 共有 value 用の allow list を維持してください。 support address や public phone number は、通常の質問でも screen にかかる可能性があります。
  • 両方向が重要な場合は outbound guardrail と組み合わせてください。 personal data を model に渡さないために pii を有効化し、answer に含めないために guardrails.disablePii を有効化します。

Studio で Prompt Privacy を設定する

Squid Console を介して agent の prompt privacy を設定するには、次の手順に従います。

  1. 左 sidebar の Agent Studio tab に移動します
  2. 設定する agent を選択します
  3. Settings tab をクリックします
  4. Agent Guardrails の下にある Prompt Privacy section まで scroll します
  5. Reject prompts containing PII をオンにします。toggle をオンにすると、残りの option が表示されます
  6. Information to reject で、screening したくない kind を解除します。feature をオンにした時点ではすべて選択されています
  7. (任意)Custom PII rules field に 1 行につき 1 つの custom rule を追加します

allowListclassifierModel の設定には Studio control がありません。SDK または REST API を通じて設定してください。