自定义违禁词Advisor——AI 超级智能体—— 3 - AI 应用开发
自定义违禁词Advisor类
▼JAVA复制代码/** * 违禁词校验 Advisor * 在请求发送到 AI 模型之前检查用户输入是否包含违禁词 */ @Component public class ForbiddenWordsAdvisor implements CallAroundAdvisor, StreamAroundAdvisor { // 违禁词集合 private final Set<String> forbiddenWords = new HashSet<>(Arrays.asList( "赌博", "毒品", "色情", "暴力", "政治敏感", "违法", "犯罪", "自杀", "自残", "虐待", "歧视", "仇恨", "恐怖", "极端" // 可以根据需要添加更多违禁词 )); /** * 检查文本是否包含违禁词 * @param text 待检查的文本 * @return 如果包含违禁词,返回第一个匹配的违禁词;否则返回 null */ private String containsForbiddenWord(String text) { if (text == null || text.isEmpty()) { return null; } for (String word : forbiddenWords) { if (text.contains(word)) { return word; } } return null; } /** * 执行请求前的违禁词检查 * @param advisedRequest 原始请求 * @return 处理后的请求 * @throws IllegalArgumentException 如果发现违禁词 */ private AdvisedRequest before(AdvisedRequest advisedRequest) { String userText = advisedRequest.userText(); String forbiddenWord = containsForbiddenWord(userText); if (forbiddenWord != null) { throw new IllegalArgumentException( String.format("输入内容包含违禁词:%s,请修改后重试", forbiddenWord) ); } return advisedRequest; } @Override public AdvisedResponse aroundCall(AdvisedRequest advisedRequest, CallAroundAdvisorChain chain) { return chain.nextAroundCall(before(advisedRequest)); } @Override public Flux<AdvisedResponse> aroundStream(AdvisedRequest advisedRequest, StreamAroundAdvisorChain chain) { return chain.nextAroundStream(before(advisedRequest)); } @Override public int getOrder() { // 设置较高的优先级,确保在其他 Advisor 之前执行 return 1; } @Override public String getName() { return this.getClass().getSimpleName(); } }
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
