Nesta página, descrevemos como limpar comandos e respostas em detalhes. O Model Armor oferece um conjunto de filtros para proteger seus aplicativos de IA. O Model Armor verifica comandos e respostas de acordo com os níveis de confiança de triagem configurados.
Antes de começar
Crie um modelo seguindo as instruções em Criar modelos.
Receber as permissões necessárias
Para receber as permissões necessárias para limpar comandos e respostas, peça ao administrador que conceda a você os seguintes papéis do IAM no Model Armor:
- Usuário do Model Armor (
roles/modelarmor.user) - Leitor do Model Armor (
roles/modelarmor.viewer)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
No projeto que contém o modelo da Proteção de Dados Sensíveis, conceda os papéis
Usuário da DLP (roles/dlp.user)
e Leitor da DLP (roles/dlp.reader)
ao agente de serviço criado como parte da etapa de Proteção de Dados Sensíveis avançada de
Criar modelos.
Pule esta etapa se o modelo da Proteção de Dados Sensíveis estiver no mesmo projeto do modelo do Model Armor.
gcloud projects add-iam-policy-binding SDP_PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role=roles/dlp.user gcloud projects add-iam-policy-binding SDP_PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role=roles/dlp.reader
Substitua:
SDP_PROJECT_ID: o ID do projeto a que o modelo avançado da Proteção de dados sensíveis pertence.PROJECT_NUMBER: o número do projeto a que o modelo pertence.
Ativar APIs
É necessário ativar a API Model Armor antes de usar o Model Armor.
Console
Ative a API Model Armor.
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.Selecione o projeto em que você quer ativar o Model Armor.
gcloud
Antes de começar, siga estas etapas usando a Google Cloud CLI com a API Model Armor:
No console do Google Cloud , ative o Cloud Shell.
Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
Defina a substituição do endpoint de API usando a CLI gcloud.
Definir a substituição do endpoint de API usando a CLI gcloud
Esta etapa só é necessária se você estiver usando a CLI gcloud para ativar a API Model Armor. É necessário definir manualmente a substituição do endpoint de API para garantir que a CLI gcloud roteie corretamente as solicitações para o serviço Model Armor.
Execute o comando a seguir para definir o endpoint de API do serviço Model Armor.
gcloud config set api_endpoint_overrides/modelarmor "https://modelarmor.LOCATION.rep.googleapis.com/"
Substitua LOCATION pela região em que você quer usar o
Model Armor.
Limpar comandos
Higienize os comandos para evitar entradas maliciosas e garantir que comandos seguros e adequados sejam enviados aos seus LLMs.
Comandos de texto
O Model Armor higieniza os comandos de texto analisando o texto e aplicando diferentes filtros para identificar e reduzir possíveis ameaças.
REST
Use o comando a seguir para limpar um comando de texto no Model Armor.
curl -X POST \
-d '{"userPromptData":{"text":"[UNSAFE TEXT]"}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
Substitua:
PROJECT_ID: o ID do projeto para o modelo.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.
Isso resulta na seguinte resposta. Observe que MATCH_FOUND está na categoria
"Conteúdo perigoso".
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "malicious_uris": { "maliciousUriFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "rai": { "raiFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "raiFilterTypeResults": { "sexually_explicit": { "matchState": "NO_MATCH_FOUND" }, "hate_speech": { "matchState": "NO_MATCH_FOUND" }, "harassment": { "matchState": "NO_MATCH_FOUND" }, "dangerous": { "matchState": "MATCH_FOUND" } } } }, "pi_and_jailbreak": { "piAndJailbreakFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND" } }, "sdp": { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } } } } } }
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Go e instale o SDK do Model Armor para Go.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento em C# e instale o SDK do Model Armor para C#.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Model Armor para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Model Armor para Node.js.
PHP
Para executar esse código, primeiro configure um ambiente de desenvolvimento PHP e instale o SDK do Model Armor para PHP.
Python
Para executar esse código, configure um ambiente de desenvolvimento Python e instale o SDK do Model Armor para Python.
Isso resulta na seguinte resposta.
sanitization_result { filter_match_state: MATCH_FOUND filter_results { key: "rai" value { rai_filter_result { execution_state: EXECUTION_SUCCESS match_state: MATCH_FOUND rai_filter_type_results { key: "dangerous" value { confidence_level: HIGH match_state: MATCH_FOUND } } } } } filter_results { key: "pi_and_jailbreak" value { pi_and_jailbreak_filter_result { execution_state: EXECUTION_SUCCESS match_state: MATCH_FOUND confidence_level: HIGH } } } filter_results { key: "malicious_uris" value { malicious_uri_filter_result { execution_state: EXECUTION_SUCCESS match_state: NO_MATCH_FOUND } } } filter_results { key: "csam" value { csam_filter_filter_result { execution_state: EXECUTION_SUCCESS match_state: NO_MATCH_FOUND } } } invocation_result: SUCCESS }
Práticas recomendadas para higienizar comandos na IA conversacional
Ao usar o Model Armor para limpar entradas em um aplicativo de IA conversacional,
é importante entender o que incluir no campo userPromptData
para o método SanitizeUserPrompt.
Limpe cada entrada do usuário separadamente: chame a API
SanitizeUserPromptpara cada nova mensagem recebida do usuário. Isso garante que cada parte da entrada do usuário seja analisada em busca de possíveis ameaças antes de ser processada pelo LLM. O campouserPromptDataprecisa conter apenas o conteúdo da última mensagem do usuário na conversa atual.Não inclua o histórico de conversas: evite concatenar todo o histórico de chat no campo
userPromptData.Não inclua comandos do sistema: o comando do sistema não deve ser incluído no campo
userPromptData. O Model Armor se concentra em detectar ameaças apenas em entradas fornecidas pelo usuário.
Remover informações sensíveis de comandos de texto com a detecção de vários idiomas ativada
Ative a detecção de vários idiomas por solicitação definindo a flag
enableMultiLanguageDetection como true para cada solicitação individual.
Se quiser, especifique o idioma de origem para ter resultados mais precisos.
- Se você não especificar o idioma de origem, o Model Armor vai detectar automaticamente o idioma para oferecer suporte a vários idiomas.
- Se você especificar o idioma de origem, o Model Armor vai usar esse idioma para avaliar o comando de texto e não vai realizar a detecção automática de idioma.
Use o comando a seguir para limpar um comando de texto no Model Armor com a detecção multilíngue ativada no nível da solicitação.
curl -X POST \ -d '{"userPromptData":{"text":"[UNSAFE TEXT]"}, "multiLanguageDetectionMetadata": { "enableMultiLanguageDetection": true , "sourceLanguage": "jp"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
Substitua:
PROJECT_ID: o ID do projeto para o modelo.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.
Comandos com imagens
Para ativar a triagem de imagens, defina
a modalidade nos metadados do modelo.
É possível configurar modalidades em modelos novos e atuais.
Se você especificar uma única modalidade (IMAGE ou TEXT), o Model Armor vai ignorar a outra e retornar EXECUTION_SKIPPED. Defina explicitamente o campo byteDataType como IMAGE e forneça a imagem codificada em base64 no formato compatível no campo byteData.
Use o comando a seguir para limpar um comando que contém uma imagem.
curl -X POST \ -d "$(jq -n \ --arg data "$(base64 -w 0 -i IMAGE)" \ '{userPromptData: {byteItem: {byteDataType: "IMAGE", byteData: $data}}}')" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
Substitua:
PROJECT_ID: o ID do projeto que contém o modelo.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.IMAGE: a imagem em um formato compatível.
O resultado parecido com este:
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "sdp": { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND" } } } }, } }
Editar imagens
No modo avançado da Proteção de Dados Sensíveis, o Model Armor encobre imagens somente se você tiver configurado filtros com um modelo de inspeção e um modelo de desidentificação da Proteção de Dados Sensíveis. Para mais informações, consulte Definir configurações da Proteção de dados sensíveis. Configure a edição de imagens no modelo de remoção de identificação.
Ao usar o modo avançado da Proteção de Dados Sensíveis, o BASIC_AUTH_HEADERinfoType pode ser informado nos resultados da detecção mesmo que não esteja incluído explicitamente no modelo de inspeção configurado.
O exemplo a seguir mostra a configuração do filtro com a ocultação de dados sensíveis ativada.
{ "filterConfig": { "sdpSettings": { "advancedConfig": { "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/TEMPLATE_ID", "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/TEMPLATE_ID" } } } }
Substitua:
PROJECT_ID: o ID do projeto que contém o modelo.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.
Isso resulta na seguinte resposta.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "sdp": { "sdpFilterResult": { "redactResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "redactedImage": "[REDACTED_IMAGE]", "findings": [ { "infoType": "EMAIL_ADDRESS", "likelihood": "LIKELY", "location": { "contentLocations": [ { "imageFindingLocation": { "boundingBox": { "top": 16, "left": 121, "width": 620, "height": 90 } } } ] } } ] } } } } } }
Limpar comandos de texto de streaming
Os métodos de streaming do Model Armor higienizam comandos e respostas em tempo real como streams de texto, sem esperar que todo o conteúdo fique disponível. Essa capacidade é especialmente útil para aplicativos que processam grandes payloads de texto ou que exigem interações de baixa latência com LLMs.
Use estes métodos para ativar o streaming:
- StreamSanitizeUserPrompt: transmite e higieniza o texto fornecido pelo usuário.
- StreamSanitizeModelResponse: transmite e higieniza o texto gerado pelo LLM.
O Model Armor oferece os seguintes modos de transmissão:
- Modo bufferizado:coleta todos os blocos transmitidos e os processa juntos como uma única unidade.
- Modo em tempo real:processa cada bloco individualmente à medida que é recebido, fornecendo feedback contínuo.
O Model Armor oferece suporte a tokens ilimitados ao usar o modo de streaming em tempo real, enquanto o modo armazenado em buffer está sujeito a limites de tokens.
O streaming funciona da seguinte maneira:
- Entrada em partes: seu aplicativo envia texto para o Model Armor em partes menores (pedaços) em vez de enviar todo o corpo do texto de uma vez.
- Processamento em tempo real: o Model Armor processa esses blocos à medida que chegam e aplica os filtros de segurança configurados no seu modelo.
- Feedback contínuo: dependendo do modo (em tempo real ou armazenado em buffer), o Model Armor retorna resultados por parte processada ou depois que todas as partes são recebidas.
Use o comando a seguir para limpar um comando de texto de streaming.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Go e instale o SDK do Model Armor para Go.
package main
import (
"context"
"fmt"
"io"
"log"
modelarmor "cloud.google.com/go/modelarmor/apiv1beta"
modelarmorpb "cloud.google.com/go/modelarmor/apiv1beta/modelarmorpb"
"google.golang.org/api/option"
"google.golang.org/protobuf/encoding/protojson"
)
func main() {
ctx := context.Background()
// Define variables for project, location, and template ID
projectID := "YOUR_PROJECT_ID"
location := "LOCATION_ID"
templateID := "YOUR_TEMPLATE_ID"
// 1. Create the client with the custom regional endpoint.
opts := option.WithEndpoint("modelarmor.us-central1.rep.googleapis.com:443")
c, err := modelarmor.NewClient(ctx, opts)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
defer c.Close()
// 2. Start the StreamSanitizeUserPrompt bidirectional stream.
stream, err := c.StreamSanitizeUserPrompt(ctx)
if err != nil {
log.Fatalf("failed to initialize stream: %v", err)
}
// 3. Use a goroutine to send the requests.
go func() {
// Define the user prompt data
userPromptData := &modelarmorpb.DataItem{
DataItem: &modelarmorpb.DataItem_Text{
// Specify the user prompt.
Text: "This is a sample user prompt",
},
}
// Create the request object
req := &modelarmorpb.SanitizeUserPromptRequest{ // Use fmt.Sprintf to construct the resource name
Name: fmt.Sprintf("projects/%s/locations/%s/templates/%s", projectID, location, templateID),
UserPromptData: userPromptData,
}
reqs := []*modelarmorpb.SanitizeUserPromptRequest{req}
for _, r := range reqs {
if err := stream.Send(r); err != nil {
log.Printf("Failed to send request: %v", err)
return
}
}
stream.CloseSend()
}()
// 4. Iterate over the responses from the stream.
for {
resp, err := stream.Recv()
if err == io.EOF {
break
}
if err != nil {
log.Fatalf("failed to receive response: %v", err)
}
// Marshal the proto message to a formatted JSON string
b, _ := protojson.MarshalOptions{
Multiline: true,
Indent: " ",
}.Marshal(resp)
// Results can be consumed or assigned here in production workflows
}
}
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento em C# e instale o SDK do Model Armor para C#.
using Google.Api.Gax.Grpc;
using Google.Cloud.ModelArmor.V1Beta;
using Grpc.Core;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
public class StreamSanitizeUserPromptExample
{
public static async Task Main(string[] args)
{
try
{
await RunStreamSanitizeUserPromptExample();
}
catch (Exception e)
{
Console.WriteLine($"An error occurred: {e}");
}
}
public static async Task RunStreamSanitizeUserPromptExample()
{
string projectId = "YOUR_PROJECT_ID";
string location = "LOCATION_ID";
string templateId = "YOUR_TEMPLATE_ID";
var promptChunks = new List<string>
{
"This is the first part of the user prompt. ",
"This is the second part. ",
"And this is the final part."
};
// Construct the regional REP endpoint (without port)
string regionalEndpoint = $"modelarmor.{location}.rep.googleapis.com";
Console.WriteLine($"Using endpoint: {regionalEndpoint}");
// Initialize the Model Armor client using Application Default Credentials.
var client = new ModelArmorClientBuilder
{
Endpoint = regionalEndpoint
}.Build();
// Construct the resource name.
var resourceName = TemplateName.FromProjectLocationTemplate(projectId, location, templateId);
// Get the bi-directional streaming call object
using var stream = client.StreamSanitizeUserPrompt();
Console.WriteLine("Sending requests...");
// --- Send First Request ---
var firstRequest = new SanitizeUserPromptRequest
{
Name = resourceName.ToString(),
UserPromptData = new DataItem { Text = promptChunks[0] },
StreamingMode = StreamingMode.Buffered // Or StreamingMode.Realtime
};
await stream.WriteAsync(firstRequest);
Console.WriteLine($"Sent chunk 1: \"{promptChunks[0]}\"");
// --- Send Subsequent Requests ---
for (int i = 1; i < promptChunks.Count; i++)
{
var subsequentRequest = new SanitizeUserPromptRequest
{
Name = resourceName.ToString(),
UserPromptData = new DataItem { Text = promptChunks[i] }
};
await stream.WriteAsync(subsequentRequest);
Console.WriteLine($"Sent chunk {i + 1}: \"{promptChunks[i]}\"");
}
// Signal that the client has finished sending requests.
await stream.WriteCompleteAsync();
Console.WriteLine("Client finished sending.");
// --- Receive Responses ---
Console.WriteLine("Receiving responses...");
// This loop waits for responses until the server closes the stream.
while (await stream.GetResponseStream().MoveNextAsync())
{
SanitizeUserPromptResponse response = stream.GetResponseStream().Current;
if (response.SanitizationResult != null)
{
var result = response.SanitizationResult;
Console.WriteLine("Received response:");
Console.WriteLine($" Match State: {result.FilterMatchState}");
Console.WriteLine($" Invocation Result: {result.InvocationResult}");
}
else
{
Console.WriteLine("Received empty response.");
}
}
Console.WriteLine("Stream finished and closed.");
}
}
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Model Armor para Java.
package com.example.armor;
import com.google.api.gax.rpc.BidiStream;
import com.google.cloud.modelarmor.v1beta.DataItem;
import com.google.cloud.modelarmor.v1beta.ModelArmorClient;
import com.google.cloud.modelarmor.v1beta.ModelArmorSettings;
import com.google.cloud.modelarmor.v1beta.SanitizationResult;
import com.google.cloud.modelarmor.v1beta.SanitizeUserPromptRequest;
import com.google.cloud.modelarmor.v1beta.SanitizeUserPromptResponse;
import com.google.cloud.modelarmor.v1beta.StreamingMode;
import com.google.cloud.modelarmor.v1beta.TemplateName;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
public class StreamSanitizeUserPrompt {
public static void main(String[] args) {
try {
streamSanitizeUserPromptExample();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void streamSanitizeUserPromptExample()
throws IOException, InterruptedException, ExecutionException {
// Specify the Google Project ID.
String projectId = "YOUR_PROJECT_ID";
// Specify the location ID. For example, us-central1.
String locationId = "LOCATION_ID";
// Specify the template ID.
String templateId = "YOUR_TEMPLATE_ID";
String customApiEndpoint = "modelarmor.us-central1.rep.googleapis.com:443";
List<String> promptChunks = Arrays.asList(
"This is the first part of the user prompt. ",
"This is the second part. ",
"And this is the final part."
);
// ModelArmorSettings is now properly imported and recognized here
try (
ModelArmorClient modelArmorClient = ModelArmorClient.create(
ModelArmorSettings.newBuilder()
.setEndpoint(customApiEndpoint)
.build()
)
) {
BidiStream<SanitizeUserPromptRequest, SanitizeUserPromptResponse> stream =
modelArmorClient.streamSanitizeUserPromptCallable().call();
String resourceName = TemplateName.of(projectId, locationId, templateId).toString();
// --- Send First Request ---
SanitizeUserPromptRequest firstRequest = SanitizeUserPromptRequest.newBuilder()
.setName(resourceName)
.setUserPromptData(DataItem.newBuilder().setText(promptChunks.get(0)))
.setStreamingMode(StreamingMode.STREAMING_MODE_BUFFERED)
.build();
stream.send(firstRequest);
// --- Send Subsequent Requests ---
for (int i = 1; i < promptChunks.size(); i++) {
SanitizeUserPromptRequest subsequentRequest = SanitizeUserPromptRequest.newBuilder()
.setName(resourceName)
.setUserPromptData(DataItem.newBuilder().setText(promptChunks.get(i)))
.build();
stream.send(subsequentRequest);
}
stream.closeSend();
// --- Receive Responses ---
for (SanitizeUserPromptResponse response : stream) {
if (response.hasSanitizationResult()) {
SanitizationResult result = response.getSanitizationResult();
// Results can be consumed or assigned here in production workflows
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Model Armor para Node.js.
const { ModelArmorClient } = require('@google-cloud/modelarmor').v1beta;
async function streamSanitizeUserPromptExample() {
const projectId = 'YOUR_PROJECT_ID';
const location = 'LOCATION_ID';
const templateId = 'YOUR_TEMPLATE_ID';
const promptChunks = [
'This is the first part of the user prompt. ',
'This is the second part. ',
'And this is the final part.'
];
// Construct the regional REP endpoint
const regionalEndpoint = `modelarmor.${location}.rep.googleapis.com`;
console.log(`Using endpoint: ${regionalEndpoint}`);
// Initialize the Model Armor client with options
const modelArmorClient = new ModelArmorClient({
apiEndpoint: regionalEndpoint,
});
const resourceName = `projects/${projectId}/locations/${location}/templates/${templateId}`;
try {
// Obtain the bidirectional stream object
const stream = modelArmorClient.streamSanitizeUserPrompt();
// Setup events for receiving responses
stream.on('data', (response) => {
if (response.sanitizationResult) {
const result = response.sanitizationResult;
console.log('Received response:');
console.log(` Match State: ${result.filterMatchState}`);
console.log(` Invocation Result: ${result.invocationResult}`);
} else {
console.log('Received empty response.');
}
});
stream.on('error', (err) => {
console.error('Stream error occurred:', err);
});
stream.on('end', () => {
console.log('Stream finished and closed.');
});
console.log('Sending requests...');
// --- Send First Request ---
const firstRequest = {
name: resourceName,
userPromptData: {
text: promptChunks[0]
},
streamingMode: 'STREAMING_MODE_BUFFERED' // Or 'STREAMING_MODE_REALTIME'
};
stream.write(firstRequest);
console.log(`Sent chunk 1: "${promptChunks[0]}"`);
// --- Send Subsequent Requests ---
for (let i = 1; i < promptChunks.length; i++) {
const subsequentRequest = {
name: resourceName,
userPromptData: {
text: promptChunks[i]
}
};
stream.write(subsequentRequest);
console.log(`Sent chunk ${i + 1}: "${promptChunks[i]}"`);
}
// Signals gRPC end-of-writing from client
stream.end();
console.log('Client finished sending.');
} catch (e) {
console.error('Error during stream initialization:', e);
}
}
// Execute logic
streamSanitizeUserPromptExample();
```
PHP
Para executar esse código, primeiro configure um ambiente de desenvolvimento PHP e instale o SDK do Model Armor para PHP.
use Google\ApiCore\ApiException;
use Google\ApiCore\BidiStream;
use Google\Cloud\ModelArmor\V1beta\Client\ModelArmorClient;
use Google\Cloud\ModelArmor\V1beta\DataItem;
use Google\Cloud\ModelArmor\V1beta\SanitizeUserPromptRequest;
use Google\Cloud\ModelArmor\V1beta\SanitizeUserPromptResponse;
use Google\Cloud\ModelArmor\V1beta\StreamingMode;
use Google\Cloud\ModelArmor\V1beta\FilterMatchState;
use Google\Cloud\ModelArmor\V1beta\InvocationResult;
function stream_sanitize_user_prompt_example()
{
$projectId = 'YOUR_PROJECT_ID';
$location = 'LOCATION_ID';
$templateId = 'YOUR_TEMPLATE_ID';
$promptChunks = [
"This is the first part of the user prompt. ",
"This is the second part. ",
"And this is the final part."
];
// Construct the regional REP endpoint (without port)
$regionalEndpoint = sprintf('modelarmor.%s.rep.googleapis.com', $location);
echo "Using endpoint: " . $regionalEndpoint . PHP_EOL;
try {
// Initialize the Model Armor client
$modelArmorClient = new ModelArmorClient([
'apiEndpoint' => $regionalEndpoint,
]);
// Construct the resource name.
$resourceName = sprintf('projects/%s/locations/%s/templates/%s', $projectId, $location, $templateId);
// Get a stream object for the StreamSanitizeUserPrompt API method.
$stream = $modelArmorClient->streamSanitizeUserPrompt();
echo "Sending requests..." . PHP_EOL;
// --- Send First Request ---
$firstRequest = (new SanitizeUserPromptRequest())
->setName($resourceName)
->setUserPromptData((new DataItem())->setText($promptChunks[0]))
->setStreamingMode(StreamingMode::STREAMING_MODE_BUFFERED); // Or STREAMING_MODE_REALTIME
$stream->write($firstRequest);
echo "Sent chunk 1: \"" . $promptChunks[0] . "\"" . PHP_EOL;
// --- Send Subsequent Requests ---
for ($i = 1; $i < count($promptChunks); $i++) {
$subsequentRequest = (new SanitizeUserPromptRequest())
->setName($resourceName)
->setUserPromptData((new DataItem())->setText($promptChunks[$i]));
$stream->write($subsequentRequest);
echo "Sent chunk " . ($i + 1) . ": \"" . $promptChunks[$i] . "\"" . PHP_EOL;
}
// Signal that the client has finished sending requests.
$stream->closeWrite();
echo "Client finished sending." . PHP_EOL;
// --- Receive Responses ---
echo "Receiving responses..." . PHP_EOL;
/** @var SanitizeUserPromptResponse $response */
foreach ($stream->closeWriteAndReadAll() as $response) {
if ($response->hasSanitizationResult()) {
$result = $response->getSanitizationResult();
echo "Received response:" . PHP_EOL;
echo " Match State: " . FilterMatchState::name($result->getFilterMatchState()) . PHP_EOL;
echo " Invocation Result: " . InvocationResult::name($result->getInvocationResult()) . PHP_EOL;
} else {
echo "Received empty response." . PHP_EOL;
}
}
echo "Stream finished and closed." . PHP_EOL;
} catch (ApiException $e) {
echo "Error during streaming: " . $e->getMessage() . PHP_EOL;
foreach ($e->getMetadata() as $key => $value) {
echo $key . ": " . print_r($value, true) . PHP_EOL;
}
} catch (Exception $e) {
echo "An unexpected error occurred: " . $e->getMessage() . PHP_EOL;
} finally {
if (isset($modelArmorClient)) {
$modelArmorClient->close();
}
}
}
stream_sanitize_user_prompt_example();
Python
Para executar esse código, configure um ambiente de desenvolvimento Python e instale o SDK do Model Armor para Python.
from google.cloud import modelarmor_v1beta
def sample_stream_sanitize_user_prompt():
# Create a client
client = modelarmor_v1beta.ModelArmorClient(transport="grpc", client_options = {"api_endpoint" : "modelarmor.us-central1.rep.googleapis.com"})
# Specify the Google Project ID.
project_id = "YOUR_PROJECT_ID"
# Specify the location ID. For example, us-central1.
location = "LOCATION_ID"
# Specify the template ID.
template_id = "YOUR_TEMPLATE_ID"
template_name = client.template_path(project_id, location, template_id)
# Initialize request argument(s)
user_prompt_data = modelarmor_v1beta.DataItem()
# Specify the user prompt.
user_prompt_data.text = "This is a sample user prompt"
request = modelarmor_v1beta.SanitizeUserPromptRequest(
name=template_name,
user_prompt_data=user_prompt_data,
)
# This method expects an iterator which contains
# 'modelarmor_v1beta.SanitizeUserPromptRequest' objects
# Here we create a generator that yields a single `request` for
# demonstrative purposes.
requests = [request]
def request_generator():
for request in requests:
yield request
# Make the request
stream = client.stream_sanitize_user_prompt(requests=request_generator())
# Handle the response
for response in stream:
# Results can be consumed or assigned here in production workflows
sample_stream_sanitize_user_prompt()
Considere o seguinte ao higienizar um comando ou uma resposta de texto de streaming:
- Para higienizar o conteúdo de maneira eficaz, verifique se os blocos individuais não excedem os limites de token.
- Os métodos de streaming do Model Armor só aceitam entradas de texto, não anexos como imagens e arquivos.
- Use o ID de correlação para rastrear registros de limpeza de streaming de uma determinada solicitação.
- Os métodos de streaming do Model Armor não oferecem suporte à desidentificação da Proteção de Dados Sensíveis.
Comandos baseados em arquivos
Para limpar um comando armazenado em um arquivo, forneça o conteúdo do arquivo no formato base64. O Model Armor não detecta automaticamente o tipo de arquivo. Você precisa definir explicitamente o campo byteDataType para indicar o formato do arquivo. Se o campo estiver faltando ou não for especificado, a solicitação vai falhar. Os valores possíveis de byteDataType são PLAINTEXT_UTF8, PDF, WORD_DOCUMENT, EXCEL_DOCUMENT, POWERPOINT_DOCUMENT, TXT e CSV.
A desidentificação da Proteção de Dados Sensíveis não é compatível com comandos baseados em arquivos.
REST
curl -X POST \ -d "$(jq -n \ --arg data "$(base64 -w 0 -i sample.pdf)" \ '{userPromptData: {byteItem: {byteDataType: "FILE_TYPE", byteData: $data}}}')" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
Substitua:
PROJECT_ID: o ID do projeto a que o modelo pertence.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.FILE_TYPE: o formato do arquivo de entrada.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Go e instale o SDK do Model Armor para Go.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento em C# e instale o SDK do Model Armor para C#.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Model Armor para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Model Armor para Node.js.
PHP
Para executar esse código, primeiro configure um ambiente de desenvolvimento PHP e instale o SDK do Model Armor para PHP.
Python
Para executar esse código, configure um ambiente de desenvolvimento Python e instale o SDK do Model Armor para Python.
Configuração básica da Proteção de Dados Sensíveis
O Model Armor se integra à Proteção de Dados Sensíveis para evitar a exposição acidental de informações particulares. Crie um modelo com as configurações básicas da Proteção de Dados Sensíveis ativadas. A Proteção de Dados Sensíveis básica ajuda a filtrar um conjunto fixo de infoTypes da Proteção de Dados Sensíveis.
Os seguintes infoTypes da Proteção de Dados Sensíveis são verificados no comando em todas as regiões:
CREDIT_CARD_NUMBER: um número de cartão de crédito tem de 12 a 19 dígitos. Ele é usado para transações de pagamento em todo o mundo.FINANCIAL_ACCOUNT_NUMBER: um número que se refere a uma conta financeira específica, por exemplo, um número de conta bancária ou um número de conta de aposentadoria.GCP_CREDENTIALS:credenciais da conta de serviço Google Cloud . Credenciais que podem ser usadas para fazer a autenticação com {api_client_lib_name} e contas de serviço.GCP_API_KEY: Google Cloud chave de API. Uma string criptografada usada ao chamar APIs Google Cloud que não precisam acessar dados particulares do usuário.PASSWORD: senhas de texto não criptografado em configurações, códigos e outros textos.
Os seguintes infoTypes extras da Proteção de Dados Sensíveis são verificados no comando para regiões localizadas nos EUA:
US_SOCIAL_SECURITY_NUMBER: O Número da Previdência Social (SSN, na sigla em inglês) dos Estados Unidos é um número de nove dígitos emitido para cidadãos, residentes permanentes e temporários. Este detector não fará a correspondência com números compostos apenas por zeros em qualquer grupo de dígitos (isto é, 000-##-####, ###-00-#### ou ###-##-0000), com 666 no primeiro grupo de dígitos ou que começam com 9.US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER: um Número de Identificação do Contribuinte Individual (ITIN) dos Estados Unidos é um tipo de Número de Identificação Fiscal (TIN) emitido pelo Internal Revenue Service (IRS). O ITIN é um número de processamento fiscal disponível somente para determinados estrangeiros não residentes e residentes, seus cônjuges e dependentes que não podem ter um Número de Previdência Social (SSN).
Confira um exemplo de configuração básica da Proteção de Dados Sensíveis:
gcloud
gcloud model-armor templates create TEMPLATE_ID \ --location=LOCATION \ --project=PROJECT_ID \ --basic-config-filter-enforcement=enabled
Substitua:
TEMPLATE_ID: o ID do modelo.LOCATION: o local do modelo.
REST
export FILTER_CONFIG_SDP_BASIC='{ "filterConfig": { "sdpSettings": { "basicConfig": { "filterEnforcement": "ENABLED" } } } }' curl -X PATCH \ -d "$FILTER_CONFIG_SDP_BASIC" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID?updateMask=filterConfig.sdpSettings.basicConfig.filterEnforcement"
Substitua:
PROJECT_ID: o ID do projeto a que o modelo pertence.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Go e instale o SDK do Model Armor para Go.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento em C# e instale o SDK do Model Armor para C#.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Model Armor para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Model Armor para Node.js.
PHP
Para executar esse código, primeiro configure um ambiente de desenvolvimento PHP e instale o SDK do Model Armor para PHP.
Python
Para executar esse código, configure um ambiente de desenvolvimento Python e instale o SDK do Model Armor para Python.
Use o modelo criado para analisar seus comandos. Veja um exemplo:
curl -X POST \ -d '{"userPromptData":{"text":"can you remember my ITIN : ###-##-####"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
Substitua:
PROJECT_ID: o ID do projeto a que o modelo pertence.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.
Este exemplo retorna a seguinte resposta:
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": [ { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "findings": [ { "infoType": "US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER", "likelihood": "LIKELY", "location": { "byteRange": { "start": "26", "end": "37" }, "codepointRange": { "start": "26", "end": "37" } } } ] } } } ] } }
Configuração avançada da Proteção de Dados Sensíveis
O Model Armor verifica os comandos e respostas do LLM usando a configuração avançada da Proteção de Dados Sensíveis. Assim, você pode usar recursos da Proteção de Dados Sensíveis além dos infoTypes oferecidos na configuração básica da Proteção de Dados Sensíveis.
Para usar o filtro avançado da Proteção de Dados Sensíveis no Model Armor, os modelos da Proteção de Dados Sensíveis precisam estar no mesmo local da nuvem que o modelo do Model Armor.
gcloud
gcloud model-armor templates create TEMPLATE_ID \ --location=LOCATION \ --advanced-config-inspect-template="path/to/template" \
Substitua:
TEMPLATE_ID: o ID do modelo.LOCATION: o local do modelo.
REST
export FILTER_CONFIG_SDP_ADV='{ "filterConfig": { "sdpSettings": { "advancedConfig": { "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address", "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address" } } } }' curl -X POST \ -d "$FILTER_CONFIG_SDP_ADV" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID?updateMask=filterConfig.sdpSettings.advancedConfig"
Substitua:
PROJECT_ID: o ID do projeto a que o modelo pertence.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.
Este exemplo retorna a seguinte resposta:
{ "name": "projects/PROJECT_ID/locations/LOCATION/templates/all-filters-test", "createTime": "2024-12-16T17:08:19.626693819Z", "updateTime": "2024-12-16T17:08:19.626693819Z", "filterConfig": { "sdpSettings": { "advancedConfig": { "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address", "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address" } } } }
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento em C# e instale o SDK do Model Armor para C#.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Go e instale o SDK do Model Armor para Go.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Model Armor para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Model Armor para Node.js.
PHP
Para executar esse código, primeiro configure um ambiente de desenvolvimento PHP e instale o SDK do Model Armor para PHP.
Python
Para executar esse código, configure um ambiente de desenvolvimento Python e instale o SDK do Model Armor para Python.
Use o modelo criado para analisar seus comandos. Veja um exemplo:
curl -X POST \ -d '{"userPromptData":{"text":"is there anything malicious running on 1.1.1.1?"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
Substitua:
PROJECT_ID: o ID do projeto a que o modelo pertence.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.
Este exemplo retorna a seguinte resposta:
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": [ { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, { "sdpFilterResult": { "deidentifyResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "data": { "text": "is there anything malicious running on [IP_ADDRESS]?" }, "transformedBytes": "7", "infoTypes": ["IP_ADDRESS"] } } } ] } }
Para informações sobre solicitações e respostas de edição de imagens, consulte Editar imagens.
Limpar resposta do modelo
Às vezes, os LLMs podem gerar respostas prejudiciais. Para reduzir os riscos associados ao uso de LLMs nos seus aplicativos, é importante higienizar as respostas deles.
Confira um exemplo de comando para limpar uma resposta do modelo no Model Armor.
REST
curl -X POST \
-d '{"modelResponseData":{"text":"IP address of the current network is ##.##.##.##"}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeModelResponse"
Substitua:
PROJECT_ID: o ID do projeto a que o modelo pertence.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.Este exemplo retorna a seguinte resposta:
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "rai": { "raiFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "raiFilterTypeResults": { "dangerous": { "confidenceLevel": "MEDIUM_AND_ABOVE", "matchState": "MATCH_FOUND" }, "sexually_explicit": { "matchState": "NO_MATCH_FOUND" }, "hate_speech": { "matchState": "NO_MATCH_FOUND" }, "harassment": { "matchState": "NO_MATCH_FOUND" } } } }, "pi_and_jailbreak": { "piAndJailbreakFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "malicious_uris": { "maliciousUriFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, } } }
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento em C# e instale o SDK do Model Armor para C#.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Go e instale o SDK do Model Armor para Go.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Model Armor para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Model Armor para Node.js.
PHP
Para executar esse código, primeiro configure um ambiente de desenvolvimento PHP e instale o SDK do Model Armor para PHP.
Python
Para executar esse código, configure um ambiente de desenvolvimento Python e instale o SDK do Model Armor para Python.
Higienizar a resposta do modelo com a detecção multilíngue ativada
Ative a detecção de vários idiomas por solicitação definindo a flag
enableMultiLanguageDetection como true para cada resposta individual.
Se quiser, especifique o idioma de origem para ter resultados mais precisos.
- Se você não especificar o idioma de origem, o Model Armor vai detectar automaticamente o idioma para oferecer suporte a vários idiomas.
- Se você especificar o idioma de origem, o Model Armor vai usar esse idioma para avaliar a resposta do modelo e não vai realizar a detecção automática de idioma.
curl -X POST \ -d '{"modelResponseData":{"text":"[UNSAFE TEXT]"}, "multiLanguageDetectionMetadata": { "enableMultiLanguageDetection": true , "sourceLanguage": "jp"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeModelResponse"
Substitua:
PROJECT_ID: o ID do projeto a que o modelo pertence.LOCATION: o local do modelo.TEMPLATE_ID: o ID do modelo.
Limpar a resposta do modelo em todos os projetos
Para ativar o gerenciamento centralizado da segurança de IA, as organizações geralmente armazenam modelos do Model Armor em um projeto dedicado (projeto A: TEMPLATE_PROJECT_ID), enquanto os aplicativos são executados em projetos separados (projeto B).
Para permitir que uma conta de serviço (CALLER_SERVICE_ACCOUNT) do projeto B acesse um modelo no projeto A, adicione uma vinculação de política do IAM ao projeto de modelo.
Para conceder as permissões necessárias entre projetos, execute o seguinte comando:
gcloud projects add-iam-policy-binding TEMPLATE_PROJECT_ID \ --member='serviceAccount:CALLER_SERVICE_ACCOUNT' \ --role='roles/modelarmor.user'
Substitua:
TEMPLATE_PROJECT_ID: o ID do projeto em que o modelo está hospedado.CALLER_SERVICE_ACCOUNT: a conta de serviço do projeto que faz a solicitação de API.
A seguir
- Saiba mais sobre o Model Armor.
- Saiba mais sobre as configurações mínimas do Model Armor.
- Saiba mais sobre os modelos do Model Armor.
- Resolver problemas do Model Armor.