iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
自我挑戰組

跟 AI Agent 變成好朋友系列 第 22

【Day22】AI Agent 魔法詠唱 - ContentFilter Service

  • 分享至 

  • xImage
  •  

ContentFilterService,會用來審查使用者輸入的內容,確保其系統安全性且與回應內容與飲料主題相關。主要功能分為四個部分:

  1. 禁用詞彙檢查

    服務初始化時,會建立 forbiddenWords 集合,包含中英文常見的髒話或是不適當的詞彙。當 filterContent 方法收到輸入後,會將內容皆轉為小寫,逐一比對 forbiddenWords 中的值,若有命中則直接回傳「輸入包含不當內容」訊息,並標示檢查未通過。

    // 檢查禁用詞彙
    String lowerInput = cleanedInput.toLowerCase();
    for (String forbiddenWord : forbiddenWords) {
        if (lowerInput.contains(forbiddenWord.toLowerCase())) {
            return new ContentFilterResult(false, "輸入包含禁用詞彙", cleanedInput);
        }
    }
    
  2. 敏感詞彙檢查

    同理,sensitiveWords 集合包含一些較為敏感的詞彙。若輸入內容包含這些詞彙,則回傳「輸入包含敏感內容,請重新輸入」,避免不適當或爭議話題。

    // 檢查敏感詞彙
    for (String sensitiveWord : sensitiveWords) {
        if (lowerInput.contains(sensitiveWord.toLowerCase())) {
            return new ContentFilterResult(false, "輸入包含敏感內容,請重新輸入", cleanedInput);
        }
    }
    
  3. URL 與 Email 過濾

    另外,也利用正則表達式 urlPattern 和 emailPattern,將輸入中的網址和電子郵件替換為「[已移除連結]」和「[已移除郵箱]」,防止外部連結或個資洩漏。

    // 移除 URL 和 Email
    cleanedInput = urlPattern.matcher(cleanedInput).replaceAll("[已移除超連結]");
    cleanedInput = emailPattern.matcher(cleanedInput).replaceAll("[已移除電子信箱]");
    
  4. 飲料相關性判斷

    而 isDrinkRelated 方法會檢查內容是否包含飲料品項、口味、心情、時間、場合、季節等關鍵字(中英文皆有),若無相關詞且內容長度超過 10 字,則回傳「請輸入與飲品、心情或口味相關的內容」。若內容很短(10 字以內),也會讓它直接通過。

    // 檢查是否與飲品相關
    if (!isDrinkRelated(cleanedInput)) {
        return new ContentFilterResult(false, 
            "請輸入與飲品、心情或口味相關的內容", cleanedInput);
    }
    
    private boolean isDrinkRelated(String input) {
        Set<String> drinkKeywords = new HashSet<>(Arrays.asList(
            // 飲品類型
            "咖啡", "茶", "奶茶", "果汁", "汽水", "酒", "水", "飲料", "飲品",
            "coffee", "tea", "juice", "soda", "drink", "beverage",
    
            // 口味和特徵
            "甜", "酸", "苦", "辣", "鹹", "香", "濃", "淡", "熱", "冰", "溫",
            "sweet", "sour", "bitter", "hot", "cold", "warm", "strong", "light",
    
            // 心情相關
            "開心", "難過", "累", "疲憊", "放鬆", "興奮", "冷靜", "煩躁", "壓力",
            "happy", "sad", "tired", "relaxed", "excited", "calm", "stressed",
    
            // 時間和場合
            "早上", "下午", "晚上", "夜晚", "工作", "休息", "聚會", "約會",
            "morning", "afternoon", "evening", "night", "work", "rest", "party",
    
            // 季節和天氣
            "春天", "夏天", "秋天", "冬天", "熱", "冷", "雨天", "晴天",
            "spring", "summer", "autumn", "winter", "hot", "cold", "rainy", "sunny"
        ));
    
        String lowerInput = input.toLowerCase();
        for (String keyword : drinkKeywords) {
            if (lowerInput.contains(keyword.toLowerCase())) {
                return true;
            }
        }
    
        // 如果輸入很短,也考慮通過
        return input.length() <= 10;
    }
    

最後,如果所有檢查都順利通過,就會回傳「內容通過檢查」,並將過濾後的內容傳送給 AI Agent。這樣就能過濾一些不適當、敏感或含有個資的輸入字元,提升安全性與主題一致性。


參考資料:

  1. 《廣告友善內容規範》 - YouTube說明
  2. YouTube《社群規範》

上一篇
【Day21】AI Agent 魔法詠唱 - 建立 Service
系列文
跟 AI Agent 變成好朋友22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言