ガードレール
TsgcAIGuardrails は、アプリケーションと言語モデルの間に位置します。個人データはリクエストがアプリケーションを出る前にプレースホルダーに置き換えられ、回答では元に戻されます。ツールは名前で許可、拒否、承認要求が設定され、構造化された回答は JSON スキーマで検証されます。
TsgcAIGuardrails は、アプリケーションと言語モデルの間に位置します。個人データはリクエストがアプリケーションを出る前にプレースホルダーに置き換えられ、回答では元に戻されます。ツールは名前で許可、拒否、承認要求が設定され、構造化された回答は JSON スキーマで検証されます。
AI 機能を本番運用する前に必要なルールを 1 つのコンポーネントにまとめました。TsgcAIChat.Guardrails に割り当てると、チャットのすべてのリクエストと、そのチャット上のエージェントのすべての実行が、どのプロバイダーが応答しても同じルールに従います。
TsgcAIGuardrails
PII マスキング、ツールルール、回答の検証
Windows、macOS、Linux、iOS、Android
エディション。TsgcAIGuardrails は sgcAI、sgcWebSockets Enterprise、All-Access に含まれ、TsgcAIChat と同じエディションです。2026.11.0 の新機能です。sgcAI は単体で完結しており、コンポーネントの土台となる sgcWebSockets Core ランタイムを含みます。Delphi 7 から Delphi 13 と C++ Builder で利用できます。
マスキングを有効にし、許可するツールと拒否するツールを列挙し、スキーマを設定して、ガードレールをチャットに割り当てます。
uses
sgcAI, sgcAI_Chat, sgcAI_Guardrails;
procedure TForm1.ProtectChat;
var
vText, vError: string;
begin
// personal data never leaves the application
sgcAIGuardrails1.PII.Enabled := True;
sgcAIGuardrails1.PII.CustomPatterns.Add('EmployeeId=EMP-####');
// read and search tools are allowed, deleting never is
sgcAIGuardrails1.AllowedTools.Add('read_*');
sgcAIGuardrails1.AllowedTools.Add('search_*');
sgcAIGuardrails1.DeniedTools.Add('*delete*');
sgcAIGuardrails1.ToolApproval := aigaNotReadOnly;
// structured answers must match the schema
sgcAIGuardrails1.Schema.Enabled := True;
sgcAIGuardrails1.Schema.JSONSchema := '{"type":"object","properties":' +
'{"price":{"type":"number","minimum":0}},"required":["price"]}';
sgcAIChat1.Guardrails := sgcAIGuardrails1;
sgcAIAgent1.Chat := sgcAIChat1; // the agent follows the same tool rules
vText := sgcAIGuardrails1.Redact('Mail bob@example.com, call +34 600 111 222');
Memo1.Lines.Add(vText); // Mail [EMAIL_1], call [PHONE_1]
Memo1.Lines.Add(sgcAIGuardrails1.Restore(vText)); // the original text
if not sgcAIGuardrails1.ValidateJSON('{"price":"cheap"}',
sgcAIGuardrails1.Schema.JSONSchema, vError) then
Memo1.Lines.Add(vError); // $.price: expected number
end;
最もよく使うメンバーです。
PII.Enabled を有効にすると、メールアドレス、電話番号、カード番号(Luhn 検査)、IBAN(mod 97 検査)、IPv4 および IPv6 アドレスが、リクエストの送信前に [EMAIL_1] のようなプレースホルダーに置き換えられ、PII.RestoreInAnswers が有効な間は回答で元に戻されます。PII.Kinds で対象の種類を選択します。
PII.CustomPatterns は、独自の識別子を Name=Pattern の形式で追加します。# は数字、@ は英字、? は任意の 1 文字、* は単語の残りを表します。たとえば EmployeeId=EMP-#### は [EMPLOYEEID_1] になります。
AllowedTools と DeniedTools は、* ワイルドカードを含むツール名を受け取り、大文字小文字を区別せずに比較します。拒否された名前は常に優先されます。拒否されたツールはモデルに提示されず、モデルがそれでも呼び出した場合は再度拒否されます。OnToolBlocked は、すべての拒否をその理由とともに通知します。
ToolApproval は、実行前に TsgcAIAgent.OnToolApproval で承認を求めるツールを決めます。値は aigaNone、aigaNotReadOnly(既定値)、aigaAll のいずれかです。
Schema.Enabled を有効にすると、構造化された回答が Schema.JSONSchema に対して検証されます。検証項目は type、required、properties、additionalProperties、enum、const、minimum、maximum、長さ、項目数です。違反があると $.price: expected number のようなパスとともに OnSchemaViolation が発生し、チャットは回答を保存せずにエラーを報告します。
Redact、Restore、ValidateJSON、IsToolAllowed は、チャットなしで単独でも使えます。ClearRedactions は、プレースホルダーの対応表を消去します。
このコンポーネントが利用するサービスとプロトコルの一次情報です。