[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-979d592d-18da-4b82-bffa-9025ce53b3f1":3,"$fW4JhsPM6kqZ1NCBUdd62pqDZMKZFOqU4Z9ofHlsln7s":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"979d592d-18da-4b82-bffa-9025ce53b3f1","azure-ai-contentsafety-java","使用Azure AI内容安全SDK for Java构建内容审核应用程序。","cat_coding_devops","mod_coding","sickn33,coding","---\nname: azure-ai-contentsafety-java\ndescription: \"Build content moderation applications using the Azure AI Content Safety SDK for Java.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Azure AI Content Safety SDK for Java\n\nBuild content moderation applications using the Azure AI Content Safety SDK for Java.\n\n## Installation\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-ai-contentsafety\u003C\u002FartifactId>\n    \u003Cversion>1.1.0-beta.1\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n## Client Creation\n\n### With API Key\n\n```java\nimport com.azure.ai.contentsafety.ContentSafetyClient;\nimport com.azure.ai.contentsafety.ContentSafetyClientBuilder;\nimport com.azure.ai.contentsafety.BlocklistClient;\nimport com.azure.ai.contentsafety.BlocklistClientBuilder;\nimport com.azure.core.credential.KeyCredential;\n\nString endpoint = System.getenv(\"CONTENT_SAFETY_ENDPOINT\");\nString key = System.getenv(\"CONTENT_SAFETY_KEY\");\n\nContentSafetyClient contentSafetyClient = new ContentSafetyClientBuilder()\n    .credential(new KeyCredential(key))\n    .endpoint(endpoint)\n    .buildClient();\n\nBlocklistClient blocklistClient = new BlocklistClientBuilder()\n    .credential(new KeyCredential(key))\n    .endpoint(endpoint)\n    .buildClient();\n```\n\n### With DefaultAzureCredential\n\n```java\nimport com.azure.identity.DefaultAzureCredentialBuilder;\n\nContentSafetyClient client = new ContentSafetyClientBuilder()\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .endpoint(endpoint)\n    .buildClient();\n```\n\n## Key Concepts\n\n### Harm Categories\n| Category | Description |\n|----------|-------------|\n| Hate | Discriminatory language based on identity groups |\n| Sexual | Sexual content, relationships, acts |\n| Violence | Physical harm, weapons, injury |\n| Self-harm | Self-injury, suicide-related content |\n\n### Severity Levels\n- Text: 0-7 scale (default outputs 0, 2, 4, 6)\n- Image: 0, 2, 4, 6 (trimmed scale)\n\n## Core Patterns\n\n### Analyze Text\n\n```java\nimport com.azure.ai.contentsafety.models.*;\n\nAnalyzeTextResult result = contentSafetyClient.analyzeText(\n    new AnalyzeTextOptions(\"This is text to analyze\"));\n\nfor (TextCategoriesAnalysis category : result.getCategoriesAnalysis()) {\n    System.out.printf(\"Category: %s, Severity: %d%n\",\n        category.getCategory(),\n        category.getSeverity());\n}\n```\n\n### Analyze Text with Options\n\n```java\nAnalyzeTextOptions options = new AnalyzeTextOptions(\"Text to analyze\")\n    .setCategories(Arrays.asList(\n        TextCategory.HATE,\n        TextCategory.VIOLENCE))\n    .setOutputType(AnalyzeTextOutputType.EIGHT_SEVERITY_LEVELS);\n\nAnalyzeTextResult result = contentSafetyClient.analyzeText(options);\n```\n\n### Analyze Text with Blocklist\n\n```java\nAnalyzeTextOptions options = new AnalyzeTextOptions(\"I h*te you and want to k*ll you\")\n    .setBlocklistNames(Arrays.asList(\"my-blocklist\"))\n    .setHaltOnBlocklistHit(true);\n\nAnalyzeTextResult result = contentSafetyClient.analyzeText(options);\n\nif (result.getBlocklistsMatch() != null) {\n    for (TextBlocklistMatch match : result.getBlocklistsMatch()) {\n        System.out.printf(\"Blocklist: %s, Item: %s, Text: %s%n\",\n            match.getBlocklistName(),\n            match.getBlocklistItemId(),\n            match.getBlocklistItemText());\n    }\n}\n```\n\n### Analyze Image\n\n```java\nimport com.azure.ai.contentsafety.models.*;\nimport com.azure.core.util.BinaryData;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\n\u002F\u002F From file\nbyte[] imageBytes = Files.readAllBytes(Paths.get(\"image.png\"));\nContentSafetyImageData imageData = new ContentSafetyImageData()\n    .setContent(BinaryData.fromBytes(imageBytes));\n\nAnalyzeImageResult result = contentSafetyClient.analyzeImage(\n    new AnalyzeImageOptions(imageData));\n\nfor (ImageCategoriesAnalysis category : result.getCategoriesAnalysis()) {\n    System.out.printf(\"Category: %s, Severity: %d%n\",\n        category.getCategory(),\n        category.getSeverity());\n}\n```\n\n### Analyze Image from URL\n\n```java\nContentSafetyImageData imageData = new ContentSafetyImageData()\n    .setBlobUrl(\"https:\u002F\u002Fexample.com\u002Fimage.jpg\");\n\nAnalyzeImageResult result = contentSafetyClient.analyzeImage(\n    new AnalyzeImageOptions(imageData));\n```\n\n## Blocklist Management\n\n### Create or Update Blocklist\n\n```java\nimport com.azure.core.http.rest.RequestOptions;\nimport com.azure.core.http.rest.Response;\nimport com.azure.core.util.BinaryData;\nimport java.util.Map;\n\nMap\u003CString, String> description = Map.of(\"description\", \"Custom blocklist\");\nBinaryData resource = BinaryData.fromObject(description);\n\nResponse\u003CBinaryData> response = blocklistClient.createOrUpdateTextBlocklistWithResponse(\n    \"my-blocklist\", resource, new RequestOptions());\n\nif (response.getStatusCode() == 201) {\n    System.out.println(\"Blocklist created\");\n} else if (response.getStatusCode() == 200) {\n    System.out.println(\"Blocklist updated\");\n}\n```\n\n### Add Block Items\n\n```java\nimport com.azure.ai.contentsafety.models.*;\nimport java.util.Arrays;\n\nList\u003CTextBlocklistItem> items = Arrays.asList(\n    new TextBlocklistItem(\"badword1\").setDescription(\"Offensive term\"),\n    new TextBlocklistItem(\"badword2\").setDescription(\"Another term\")\n);\n\nAddOrUpdateTextBlocklistItemsResult result = blocklistClient.addOrUpdateBlocklistItems(\n    \"my-blocklist\",\n    new AddOrUpdateTextBlocklistItemsOptions(items));\n\nfor (TextBlocklistItem item : result.getBlocklistItems()) {\n    System.out.printf(\"Added: %s (ID: %s)%n\",\n        item.getText(),\n        item.getBlocklistItemId());\n}\n```\n\n### List Blocklists\n\n```java\nPagedIterable\u003CTextBlocklist> blocklists = blocklistClient.listTextBlocklists();\n\nfor (TextBlocklist blocklist : blocklists) {\n    System.out.printf(\"Blocklist: %s, Description: %s%n\",\n        blocklist.getName(),\n        blocklist.getDescription());\n}\n```\n\n### Get Blocklist\n\n```java\nTextBlocklist blocklist = blocklistClient.getTextBlocklist(\"my-blocklist\");\nSystem.out.println(\"Name: \" + blocklist.getName());\n```\n\n### List Block Items\n\n```java\nPagedIterable\u003CTextBlocklistItem> items = \n    blocklistClient.listTextBlocklistItems(\"my-blocklist\");\n\nfor (TextBlocklistItem item : items) {\n    System.out.printf(\"ID: %s, Text: %s%n\",\n        item.getBlocklistItemId(),\n        item.getText());\n}\n```\n\n### Remove Block Items\n\n```java\nList\u003CString> itemIds = Arrays.asList(\"item-id-1\", \"item-id-2\");\n\nblocklistClient.removeBlocklistItems(\n    \"my-blocklist\",\n    new RemoveTextBlocklistItemsOptions(itemIds));\n```\n\n### Delete Blocklist\n\n```java\nblocklistClient.deleteTextBlocklist(\"my-blocklist\");\n```\n\n## Error Handling\n\n```java\nimport com.azure.core.exception.HttpResponseException;\n\ntry {\n    contentSafetyClient.analyzeText(new AnalyzeTextOptions(\"test\"));\n} catch (HttpResponseException e) {\n    System.out.println(\"Status: \" + e.getResponse().getStatusCode());\n    System.out.println(\"Error: \" + e.getMessage());\n    \u002F\u002F Common codes: InvalidRequestBody, ResourceNotFound, TooManyRequests\n}\n```\n\n## Environment Variables\n\n```bash\nCONTENT_SAFETY_ENDPOINT=https:\u002F\u002F\u003Cresource>.cognitiveservices.azure.com\u002F\nCONTENT_SAFETY_KEY=\u003Cyour-api-key>\n```\n\n## Best Practices\n\n1. **Blocklist Delay**: Changes take ~5 minutes to take effect\n2. **Category Selection**: Only request needed categories to reduce latency\n3. **Severity Thresholds**: Typically block severity >= 4 for strict moderation\n4. **Batch Processing**: Process multiple items in parallel for throughput\n5. **Caching**: Cache blocklist results where appropriate\n\n## Trigger Phrases\n\n- \"content safety Java\"\n- \"content moderation Azure\"\n- \"analyze text safety\"\n- \"image moderation Java\"\n- \"blocklist management\"\n- \"hate speech detection\"\n- \"harmful content filter\"\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,190,1836,"2026-05-16 13:05:07",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"编程开发","coding","mdi-code-braces","代码生成、调试、审查，提升开发效率",2,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"DevOps","devops","mdi-cog-outline","CI\u002FCD、容器化、部署运维",3,162,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"513460c0-ebff-49e4-8201-24d8c0f817fe","1.0.0","azure-ai-contentsafety-java.zip",2669,"uploads\u002Fskills\u002F979d592d-18da-4b82-bffa-9025ce53b3f1\u002Fazure-ai-contentsafety-java.zip","772d664bdaf161cab7749078f191f1d1ae5a1ecd8fd4f13617d6d09408674d0c","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":8062}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]