OpenGuardrails Java Client — A Context-Aware AI Safety Guardrails System Powered by LLMs.
OpenGuardrails is a context-aware AI safety guardrail system based on large language models (LLMs). It understands conversational context to perform intelligent safety detection. Unlike traditional keyword-based methods, our guardrail interprets deep semantic meaning and contextual relationships within conversations.
- 🧠 Context Awareness – Based on LLM-powered conversational understanding, not simple batch detection
- 🔍 Prompt Injection Detection – Identifies malicious prompt injections and jailbreak attacks
- 📋 Content Compliance Detection – Ensures compliance with fundamental security requirements for generative AI services
- 🔐 Sensitive Data Leakage Prevention – Detects and prevents the leakage of personal or enterprise-sensitive information
- 🧩 User-Level Blocking Policy – Supports risk identification and blocking strategies at the user level
- 🖼️ Multimodal Detection – Supports image content safety detection
- 🛠️ Easy Integration – Compatible with the OpenAI API format; integrate with just one line of code
- ⚡ OpenAI-Style API – Familiar interface design for quick adoption
- 🚀 Sync/Async Support – Supports both synchronous and asynchronous modes to meet diverse application needs
- Java 8 or later
- Maven 3.6+ or Gradle 6.0+
Add the dependency to your pom.xml:
<dependency>
<groupId>com.openguardrails</groupId>
<artifactId>openguardrails</artifactId>
<version>3.0.0</version>
</dependency>Add the dependency to your build.gradle:
implementation 'com.openguardrails:openguardrails:3.0.0'import com.openguardrails.OpenGuardrailsClient;
import com.openguardrails.model.*;
// Initialize client
OpenGuardrailsClient client = new OpenGuardrailsClient("your-api-key");
// Check user input
GuardrailResponse result = client.checkPrompt("User input text");
System.out.println(result.getOverallRiskLevel()); // Safe / Low / Medium / High
System.out.println(result.getSuggestAction()); // Allow / Block / Substitute
// Check input with user ID (optional)
GuardrailResponse result2 = client.checkPrompt("User input text", "user-123");
// Context-based response checking
GuardrailResponse ctxResult = client.checkResponseCtx(
"Teach me to cook",
"I can teach you how to make simple home dishes"
);
System.out.println(ctxResult.getOverallRiskLevel());
System.out.println(ctxResult.getSuggestAction());
// With user ID (optional)
GuardrailResponse ctxResult2 = client.checkResponseCtx(
"Teach me to cook",
"I can teach you how to make simple home dishes",
"user-123"
);import java.util.Arrays;
import java.util.List;
// Detect full conversation context — core feature
List<Message> messages = Arrays.asList(
new Message("user", "User’s question"),
new Message("assistant", "Assistant’s response"),
new Message("user", "Follow-up question")
);
GuardrailResponse result = client.checkConversation(messages);
// Check detection result
if (result.isSafe()) {
System.out.println("Conversation is safe");
} else if (result.isBlocked()) {
System.out.println("Conversation has risks — block it");
} else if (result.hasSubstitute()) {
System.out.println("Suggested safe answer: " + result.getSuggestAnswer());
}
// With user ID (optional)
GuardrailResponse result2 = client.checkConversation(messages, "OpenGuardrails-Text", "user-123");import com.openguardrails.AsyncOpenGuardrailsClient;
import java.util.concurrent.CompletableFuture;
// Async client
AsyncOpenGuardrailsClient asyncClient = new AsyncOpenGuardrailsClient("your-api-key");
// Async prompt check
CompletableFuture<GuardrailResponse> future = asyncClient.checkPromptAsync("User question");
// Option 1: Block until complete
GuardrailResponse result = future.get();
System.out.println(result.getOverallRiskLevel());
// Option 2: Use callback (recommended)
asyncClient.checkPromptAsync("User question")
.thenAccept(result -> {
System.out.println("Async check completed:");
System.out.println("Risk Level: " + result.getOverallRiskLevel());
System.out.println("Suggested Action: " + result.getSuggestAction());
})
.exceptionally(throwable -> {
System.err.println("Check failed: " + throwable.getMessage());
return null;
});
// Async conversation detection
List<Message> messages = Arrays.asList(
new Message("user", "User question"),
new Message("assistant", "Assistant answer")
);
asyncClient.checkConversationAsync(messages)
.thenAccept(result -> {
if (result.isSafe()) {
System.out.println("Conversation is safe");
} else {
System.out.println("Conversation risks: " + result.getAllCategories());
}
});
asyncClient.close(); // Remember to close resourcesVersion 2.3.0 introduces multimodal detection — analyzing both text and image semantics for safety assessment.
import com.openguardrails.OpenGuardrailsClient;
import com.openguardrails.model.GuardrailResponse;
import java.util.Arrays;
import java.util.List;
OpenGuardrailsClient client = new OpenGuardrailsClient("your-api-key");
// Local image
GuardrailResponse result = client.checkPromptImage(
"Is this image safe?",
"/path/to/image.jpg"
);
System.out.println(result.getOverallRiskLevel());
System.out.println(result.getSuggestAction());
// Image URL
result = client.checkPromptImage(
"", // prompt optional
"https://example.com/image.jpg"
);
// Multiple images
List<String> images = Arrays.asList(
"/path/to/image1.jpg",
"https://example.com/image2.jpg",
"/path/to/image3.png"
);
result = client.checkPromptImages("Are these images safe?", images);
System.out.println(result.getOverallRiskLevel());
// With user ID (optional)
result = client.checkPromptImage(
"Is this image safe?",
"/path/to/image.jpg",
"OpenGuardrails-VL",
"user-123"
);
result = client.checkPromptImages(
"Are these images safe?",
images,
"OpenGuardrails-VL",
"user-123"
);// Sync client
try (OpenGuardrailsClient client = new OpenGuardrailsClient("your-api-key")) {
GuardrailResponse result = client.checkPrompt("User question");
System.out.println(result.getOverallRiskLevel());
}
// Async client
try (AsyncOpenGuardrailsClient asyncClient = new AsyncOpenGuardrailsClient("your-api-key")) {
CompletableFuture<GuardrailResponse> future = asyncClient.checkPromptAsync("User question");
GuardrailResponse result = future.get();
System.out.println(result.getOverallRiskLevel());
}// Default config
OpenGuardrailsClient client = new OpenGuardrailsClient("your-api-key");
// Custom config
OpenGuardrailsClient client = new OpenGuardrailsClient(
"your-api-key",
"https://api.openguardrails.com/v1",
30, // timeout in seconds
3 // max retries
);Checks the safety of a single prompt.
GuardrailResponse checkPrompt(String content)
GuardrailResponse checkPrompt(String content, String model)Parameters:
content(String): Content to checkmodel(String, optional): Model name (default:"OpenGuardrails-Text")
Checks the safety of a conversation (recommended).
GuardrailResponse checkConversation(List<Message> messages)
GuardrailResponse checkConversation(List<Message> messages, String model)Checks the API service health.
Map<String, Object> healthCheck()Retrieves available models.
Map<String, Object> getModels()AsyncOpenGuardrailsClient asyncClient = new AsyncOpenGuardrailsClient("your-api-key");
AsyncOpenGuardrailsClient asyncClient = new AsyncOpenGuardrailsClient(
"your-api-key",
"https://api.openguardrails.com/v1",
30,
3
);Asynchronously checks a single prompt.
CompletableFuture<GuardrailResponse> checkPromptAsync(String content)
CompletableFuture<GuardrailResponse> checkPromptAsync(String content, String model)Asynchronously checks conversation safety.
CompletableFuture<GuardrailResponse> checkConversationAsync(List<Message> messages)
CompletableFuture<GuardrailResponse> checkConversationAsync(List<Message> messages, String model)Asynchronously checks API health.
CompletableFuture<Map<String, Object>> healthCheckAsync()Asynchronously retrieves model list.
CompletableFuture<Map<String, Object>> getModelsAsync()public class Message {
private String role; // "user", "system", "assistant"
private String content; // message content
public Message(String role, String content)
// getters/setters...
}public class GuardrailResponse {
private String id;
private GuardrailResult result;
private String overallRiskLevel;
private String suggestAction;
private String suggestAnswer;
private Double score; // 检测置信度分数 (v2.4.1新增)
public boolean isSafe()
public boolean isBlocked()
public boolean hasSubstitute()
public List<String> getAllCategories()
public Double getScore()
}public class GuardrailResult {
private ComplianceResult compliance;
private SecurityResult security;
private DataResult data; // Added in v2.4.0
}public class ComplianceResult {
private String riskLevel;
private List<String> categories;
}
public class DataResult {
private String riskLevel;
private List<String> categories; // Detected sensitive data types
}{
"id": "guardrails-xxx",
"result": {
"compliance": {
"risk_level": "Safe",
"categories": []
},
"security": {
"risk_level": "Safe",
"categories": []
},
"data": {
"risk_level": "Safe",
"categories": []
}
},
"overall_risk_level": "Safe",
"suggest_action": "Allow",
"suggest_answer": null
}import com.openguardrails.exception.*;
try {
GuardrailResponse result = client.checkPrompt("test content");
System.out.println(result);
} catch (AuthenticationException e) {
System.err.println("Authentication failed — check API key: " + e.getMessage());
} catch (RateLimitException e) {
System.err.println("Rate limit exceeded — try again later: " + e.getMessage());
} catch (ValidationException e) {
System.err.println("Invalid input: " + e.getMessage());
} catch (NetworkException e) {
System.err.println("Network error: " + e.getMessage());
} catch (OpenGuardrailsException e) {
System.err.println("API error: " + e.getMessage());
}OpenGuardrailsException– Base exceptionAuthenticationException– Authentication failedRateLimitException– Rate limit exceededValidationException– Invalid input parametersNetworkException– Network errors
String userContent = "User-generated content...";
GuardrailResponse result = client.checkPrompt(userContent);
if (!result.isSafe()) {
System.out.println("Unsafe content: " + result.getAllCategories());
}List<Message> conversation = Arrays.asList(
new Message("user", "User question"),
new Message("assistant", "Assistant response")
);
GuardrailResponse result = client.checkConversation(conversation);
if ("Substitute".equals(result.getSuggestAction()) && result.getSuggestAnswer() != null) {
return result.getSuggestAnswer();
} else if (result.isBlocked()) {
return "Sorry, I can’t answer that.";
}import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BatchContentChecker {
private final OpenGuardrailsClient client;
private final ExecutorService executor;
public BatchContentChecker(String apiKey) {
this.client = new OpenGuardrailsClient(apiKey);
this.executor = Executors.newFixedThreadPool(10);
}
public CompletableFuture<GuardrailResponse> checkAsync(String content) {
return CompletableFuture.supplyAsync(() -> {
try {
return client.checkPrompt(content);
} catch (Exception e) {
throw new RuntimeException(e);
}
}, executor);
}
public void close() {
client.close();
executor.shutdown();
}
}@Configuration
public class OpenGuardrailsConfig {
@Value("${openguardrails.api-key}")
private String apiKey;
@Value("${openguardrails.base-url:https://api.openguardrails.com/v1}")
private String baseUrl;
@Bean
public OpenGuardrailsClient openguardrailsClient() {
return new OpenGuardrailsClient(apiKey, baseUrl, 30, 3);
}
}
@Service
public class ContentModerationService {
@Autowired
private OpenGuardrailsClient openguardrailsClient;
public boolean isContentSafe(String content) {
try {
GuardrailResponse response = openguardrailsClient.checkPrompt(content);
return response.isSafe();
} catch (Exception e) {
log.error("Content check failed", e);
return false;
}
}
}- Use Contextual Detection: Prefer
checkConversationovercheckPromptfor more accurate results. - Resource Management: Always close clients using try-with-resources or manually.
- Exception Handling: Implement robust retry and fallback logic.
- Connection Reuse: Reuse the same
OpenGuardrailsClientinstance for better performance. - Tuning: Adjust timeout and retry parameters as needed.
- Logging: Log all detection results for auditing and improvement.
OpenGuardrailsClient is thread-safe and can be shared across threads.
Apache 2.0