CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-dev-langchain4j--langchain4j-bedrock

AWS Bedrock integration for LangChain4j enabling Java applications to interact with various LLM providers through a unified interface

Overview
Eval results
Files

use-cases.mddocs/features/guardrails/

Guardrail Use Cases

Common scenarios for using guardrails.

Content Safety

Block harmful, toxic, or inappropriate content.

BedrockGuardrailConfiguration contentFilter = BedrockGuardrailConfiguration.builder()
    .guardrailIdentifier("content-safety-guardrail")
    .guardrailVersion("1")
    .build();

BedrockChatModel model = BedrockChatModel.builder()
    .modelId("anthropic.claude-3-5-sonnet-20241022-v2:0")
    .defaultRequestParameters(
        BedrockChatRequestParameters.builder()
            .guardrailConfiguration(contentFilter)
            .build()
    )
    .build();

ChatResponse response = model.chat(request);

// Check for content violations
if (response.metadata() instanceof BedrockChatResponseMetadata metadata) {
    GuardrailAssessmentSummary summary = metadata.guardrailAssessmentSummary();
    if (summary != null) {
        for (GuardrailAssessment assessment : summary.inputAssessments()) {
            if (assessment.policy() == GuardrailAssessment.Policy.CONTENT &&
                assessment.action() == GuardrailAssessment.Action.BLOCKED) {
                throw new ContentViolationException("Inappropriate content detected");
            }
        }
    }
}

PII Protection

Detect and anonymize personally identifiable information.

BedrockGuardrailConfiguration piiDetector = BedrockGuardrailConfiguration.builder()
    .guardrailIdentifier("pii-protection")
    .guardrailVersion("1")
    .build();

ChatResponse response = model.chat(ChatRequest.builder()
    .messages(UserMessage.from("My email is john@example.com"))
    .parameters(
        BedrockChatRequestParameters.builder()
            .guardrailConfiguration(piiDetector)
            .build()
    )
    .build());

// Check for PII anonymization
if (response.metadata() instanceof BedrockChatResponseMetadata metadata) {
    GuardrailAssessmentSummary summary = metadata.guardrailAssessmentSummary();
    if (summary != null) {
        for (GuardrailAssessment assessment : summary.inputAssessments()) {
            if (assessment.policy() == GuardrailAssessment.Policy.SENSITIVE &&
                assessment.action() == GuardrailAssessment.Action.ANONYMIZED) {
                System.out.println("PII detected: " + assessment.name());
                // Response may contain: "My email is [EMAIL]"
            }
        }
    }
}

Topic Filtering

Block specific topics like financial advice, medical diagnosis, etc.

BedrockGuardrailConfiguration topicFilter = BedrockGuardrailConfiguration.builder()
    .guardrailIdentifier("topic-blocker")
    .guardrailVersion("1")
    .build();

try {
    ChatResponse response = model.chat(ChatRequest.builder()
        .messages(UserMessage.from("Should I invest in Bitcoin?"))
        .parameters(
            BedrockChatRequestParameters.builder()
                .guardrailConfiguration(topicFilter)
                .build()
        )
        .build());

    // Check if topic was blocked
    if (response.metadata() instanceof BedrockChatResponseMetadata metadata) {
        GuardrailAssessmentSummary summary = metadata.guardrailAssessmentSummary();
        if (summary != null) {
            for (GuardrailAssessment assessment : summary.inputAssessments()) {
                if (assessment.policy() == GuardrailAssessment.Policy.TOPIC &&
                    assessment.action() == GuardrailAssessment.Action.BLOCKED) {
                    System.out.println("I'm not able to provide investment advice.");
                }
            }
        }
    }
} catch (Exception e) {
    System.err.println("Topic blocked by guardrail");
}

Contextual Grounding

Ensure responses are grounded in provided context.

BedrockGuardrailConfiguration groundingChecker = BedrockGuardrailConfiguration.builder()
    .guardrailIdentifier("grounding-validator")
    .guardrailVersion("1")
    .build();

String context = "The company was founded in 2020 and has 50 employees.";

ChatResponse response = model.chat(ChatRequest.builder()
    .messages(
        SystemMessage.from("Use only the provided context: " + context),
        UserMessage.from("When was the company founded?")
    )
    .parameters(
        BedrockChatRequestParameters.builder()
            .guardrailConfiguration(groundingChecker)
            .build()
    )
    .build());

// Check grounding violations
if (response.metadata() instanceof BedrockChatResponseMetadata metadata) {
    GuardrailAssessmentSummary summary = metadata.guardrailAssessmentSummary();
    if (summary != null) {
        for (GuardrailAssessment assessment : summary.ouputAssessments()) {
            if (assessment.policy() == GuardrailAssessment.Policy.CONTEXT &&
                assessment.action() == GuardrailAssessment.Action.BLOCKED) {
                System.out.println("Response not grounded in provided context");
                // Model hallucinated information
            }
        }
    }
}

Multi-Stage Filtering

Apply different guardrails for different stages.

// Strict guardrail for user input
BedrockGuardrailConfiguration inputGuardrail = BedrockGuardrailConfiguration.builder()
    .guardrailIdentifier("strict-input-filter")
    .guardrailVersion("1")
    .build();

// Moderate guardrail for output
BedrockGuardrailConfiguration outputGuardrail = BedrockGuardrailConfiguration.builder()
    .guardrailIdentifier("moderate-output-filter")
    .guardrailVersion("1")
    .build();

// First pass: strict input filtering
ChatResponse response1 = model.chat(ChatRequest.builder()
    .messages(userInput)
    .parameters(
        BedrockChatRequestParameters.builder()
            .guardrailConfiguration(inputGuardrail)
            .build()
    )
    .build());

// Second pass: moderate output filtering
ChatResponse response2 = model.chat(ChatRequest.builder()
    .messages(response1.aiMessage())
    .parameters(
        BedrockChatRequestParameters.builder()
            .guardrailConfiguration(outputGuardrail)
            .build()
    )
    .build());

Environment-Based Guardrails

Use different guardrails for development vs. production.

String environment = System.getenv("ENVIRONMENT"); // "dev" or "prod"

BedrockGuardrailConfiguration guardrail;
if ("prod".equals(environment)) {
    guardrail = BedrockGuardrailConfiguration.builder()
        .guardrailIdentifier("production-guardrail")
        .guardrailVersion("1")  // Stable version
        .build();
} else {
    guardrail = BedrockGuardrailConfiguration.builder()
        .guardrailIdentifier("dev-guardrail")
        .guardrailVersion("DRAFT")  // Latest changes
        .build();
}

BedrockChatModel model = BedrockChatModel.builder()
    .modelId("anthropic.claude-3-5-sonnet-20241022-v2:0")
    .defaultRequestParameters(
        BedrockChatRequestParameters.builder()
            .guardrailConfiguration(guardrail)
            .build()
    )
    .build();

Related:

  • Configuration Guide
  • Handling Assessments
  • Guardrails Overview

Install with Tessl CLI

npx tessl i tessl/maven-dev-langchain4j--langchain4j-bedrock@1.11.0

docs

index.md

README.md

tile.json