Inicio / Prompt Shield / Spring AI

Prompt Shield con Spring AI

Qué hace

Prompt Shield ofusca datos sensibles (DNI, email, teléfonos, IBAN) y desde la versión 1.1.1 también claves de API de 16 servicios populares (OpenAI, Anthropic, AWS, GitHub, Stripe...) antes de enviarlos a la IA, y restaura los valores originales en la respuesta.

Input: "Mi DNI es 12345678A y mi email es juan@example.com"

→ Se envía a la IA: "Mi DNI es ~REDACTED:DNI#a1b2c3~ y mi email es ~REDACTED:EMAIL#d4e5f6~"

→ Respuesta IA: "El DNI ~REDACTED:DNI#a1b2c3~ es válido"

→ Respuesta final: "El DNI 12345678A es válido"

Configuración

application.yml

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-4o-mini

prompt-shield:
  service-keys-enabled: true
  advisor:
    enabled: true
    inject-system-prompt: true
    restore-on-response: true

Código

@RestController
@RequestMapping("/api/ai")
public class AiController {

    private final ChatClient chatClient;

    public AiController(ChatClient.Builder builder, PromptShieldAdvisor advisor) {
        this.chatClient = builder
                .defaultAdvisors(advisor)
                .build();
    }

    @PostMapping("/chat")
    public AiResponse chat(@RequestBody AiRequest request) {
        String response = chatClient.prompt()
                .user(request.message())
                .call()
                .content();
        return new AiResponse(response);
    }
}

Probar

export OPENAI_API_KEY=tu-api-key
cd prompt-shield-example
mvn spring-boot:run

# En otra terminal:
curl -X POST http://localhost:8080/api/ai/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "Mi DNI es 12345678A"}'

¿Quieres el contexto completo (por qué existe, tipos de datos soportados, claves de API)? Lee el artículo completo de Prompt Shield.