共用方式為


內容篩選概觀

Azure OpenAI 包含與核心模型搭配運作的內容篩選系統,包括映射產生模型。 此系統的運作方式是透過一組分類模型來執行提示和完成,其設計目的是偵測並防止有害內容的輸出。 內容篩選系統會偵測並針對輸入提示和輸出完成中的特定類別的潛在有害內容採取動作。 API 設定和應用程式設計的變化可能會影響結果生成,因此影響篩選行為。

重要

內容篩選系統並未套用至經由 Azure OpenAI 中的音訊模型(如 Whisper)處理的提示和完成,這些模型屬於 Azure AI Foundry 模型。 深入瞭解 Azure OpenAI 中的音訊模型

除了內容篩選系統之外,Azure OpenAI 還會執行監視,以偵測可能違反適用產品條款之方式來建議使用服務的內容和/或行為。 如需瞭解和減輕應用程式相關風險的詳細資訊,請參閱 Azure OpenAI 的透明度附註。 如需如何處理數據以進行內容篩選和濫用監視的詳細資訊,請參閱 Azure OpenAI 的數據、隱私權和安全性

本節中的文章提供內容篩選類別、篩選嚴重性層級及其可設定性,以及應用程式設計和實作中要考慮的API案例的相關信息。

附註

針對內容篩選目的,不會儲存任何提示或完成。 未經您的同意,不會使用任何提示語或完成選項來訓練、重新訓練或提升內容篩選系統。 如需詳細資訊,請參閱 數據、隱私權和安全性

內容篩選類型

Azure OpenAI 中整合的內容篩選系統包含:

  • 類神經多類別分類模型,旨在偵測和篩選有害內容;模型涵蓋四個類別 (仇恨、性相關、暴力和自殘),跨四個安全性層級 (安全、低、中和高)。 偵測到嚴重性層級為「安全」的內容會在註釋中標記,但不受限於篩選且無法設定。
  • 其他選用類模型,旨在偵測越獄風險和文字和程序碼的已知內容;這些模型是二進位分類器,會標幟使用者或模型行為是否符合越獄攻擊,或符合已知的文字或原始程式碼。 您可以選用這些模型,但受保護的材料代碼模型的使用可能需要符合客戶版權承諾的涵蓋範圍。

篩選類別

下表摘要說明 Azure OpenAI 的內容篩選系統所支援的風險類別。

類別 描述
仇恨和公平性 仇恨和公平相關的傷害是指攻擊或使用歧視性語言的任何內容,以根據這些群組的特定區分屬性參考個人或身分識別群組。

其中包括 (但不限於):
  • 種族、人種、國籍
  • 性別認同群體和表現
  • 性傾向
  • 宗教
  • 個人外貌和體型
  • 身心障礙狀態
  • 騷擾和欺淩
兩性 性相關描述與生理器官和生殖器、情愛關係和性行為、以性愛或親暱詞彙描繪行為相關的語言,包括描繪為違反個人意願的侵犯或強迫性暴力行為。 

 其中包括 (但不限於):
  • 粗俗內容
  • 賣淫
  • 裸體和色情
  • 濫用
  • 剝削兒童行為、兒童虐待、兒童性誘拐
暴力 暴力描述意圖損害、傷害、毀壞或殺害某人或某物的身體動作有關的語言;描述武器、槍枝和相關器械。

其中包括 (但不限於):
  • 武器
  • 霸淩和恐嚇
  • 恐怖主義和暴力極端主義
  • 跟蹤騷擾
自我傷害 自殘是指與刻意傷害、損害、毀壞自己身體或自我傷害行為有關的語言。

其中包括 (但不限於):
  • 飲食失調
  • 霸淩和恐嚇
使用者提示攻擊 使用者提示是為了引發生成式 AI 模型展示原本被定型要避免的行為或打破系統訊息中設定的規則所用的使用者提示。 此類攻擊可能會因複雜的角色扮演到輕微顛覆安全目標而異。
間接攻擊 間接攻擊又稱為間接提示攻擊或跨網域提示插入攻擊,是潛在的弱點,其中第三方將惡意指示放在生成式 AI 系統可以存取和處理的文件內。 需要 檔案內嵌和格式設定
踏實2 根據性偵測會標記大型語言模型 (LLM) 的文字回應是否以使用者所提供的來源素材為根據。 未經證實的資料是指 LLM 產生的內容與來源資料不符、或不準確的情況。 需要 檔案內嵌和格式設定
文字的受保護材料1 文字受保護材料描述已知的文字內容 (例如歌曲歌詞、文章、食譜和選取的 Web 內容),這些內容可由大型語言模型輸出。
程序代碼的受保護數據 受保護的程式碼是指那些與公眾存放庫中的一組原始程式碼相匹配的源代碼,可以由大型語言模型在沒有適當引用來源存放庫的情況下輸出。

1 如果您是文字內容的擁有者,且想要提交文字內容以進行保護, 請提出要求

2 無法在非串流案例中使用;僅適用於串流案例。 下列區域支援地面偵測:美國中部、美國東部、法國中部和加拿大東部

案例詳細資料

內容篩選系統偵測到有害的內容時,如果提示被視為不適當,您會在 API 呼叫上收到錯誤,否則回應上的 finish_reason 會是 content_filter,以指出已篩選某些完成項目。 建置您的應用程式或系統時,您會想要考慮這些案例,其中會篩選完成 API 傳回的內容,這可能會導致內容不完整。 您對這項資訊採取動作的方式將會是應用程式特定的。 以下要點可歸納該行為:

  • 依篩選類別和嚴重性層級分類的提示會傳回 HTTP 400 錯誤。
  • 非串流完成呼叫在內容被過濾時不會傳回任何內容。 finish_reason 值設為 content_filter。 在少數案例下,若回應較長,可以傳回部分結果。 在這些案例中,finish_reason 會更新。
  • 在串流完成呼叫過程中,區段完成後將立即回傳給使用者。 服務會繼續串流處理,直到到達停止權杖、長度,或偵測到分類為篩選分類和嚴重性層級的內容為止。

案例:您傳送要求多個輸出的非串流完成呼叫;在篩選的類別和嚴重性層級未分類任何內容

下表概述內容篩選可以顯示的各種方式:

HTTP 回應碼 回應行為
200 在所有產生如所設定通過篩選時,不會將內容仲裁詳細資料新增至回應。 每個產生的 finish_reason 將會是 stop 或 length。

要求承載範例:

{
    "prompt":"Text example", 
    "n": 3,
    "stream": false
}

範例回應 JSON:

{
    "id": "example-id",
    "object": "text_completion",
    "created": 1653666286,
    "model": "davinci",
    "choices": [
        {
            "text": "Response generated text",
            "index": 0,
            "finish_reason": "stop",
            "logprobs": null
        }
    ]
}

情節:API 呼叫會要求多個回應 (N>1) 且至少篩選一個回應

HTTP 回應碼 回應行為
200 篩選的產生會有 finish_reasoncontent_filter 值。

要求承載範例:

{
    "prompt":"Text example",
    "n": 3,
    "stream": false
}

範例回應 JSON:

{
    "id": "example",
    "object": "text_completion",
    "created": 1653666831,
    "model": "ada",
    "choices": [
        {
            "text": "returned text 1",
            "index": 0,
            "finish_reason": "length",
            "logprobs": null
        },
        {
            "text": "returned text 2",
            "index": 1,
            "finish_reason": "content_filter",
            "logprobs": null
        }
    ]
}

情節:不適當的輸入提示會傳送至完成 API (進行串流或非串流處理)

HTTP 回應碼 回應行為
400 當提示如設定觸發內容篩選時,API 呼叫會失敗。 修改提示,然後再試一次。

要求承載範例:

{
    "prompt":"Content that triggered the filtering model"
}

範例回應 JSON:

"error": {
    "message": "The response was filtered",
    "type": null,
    "param": "prompt",
    "code": "content_filter",
    "status": 400
}

案例:您進行串流完成呼叫;在篩選的類別和嚴重性層級未分類任何輸出內容

HTTP 回應碼 回應行為
200 在此案例中,呼叫會以完整產生來重新串流,而每個產生的回應所用的 finish_reason 將會是「長度」或「停止」。

要求承載範例:

{
    "prompt":"Text example",
    "n": 3,
    "stream": true
}

範例回應 JSON:

{
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1653670914,
    "model": "ada",
    "choices": [
        {
            "text": "last part of generation",
            "index": 2,
            "finish_reason": "stop",
            "logprobs": null
        }
    ]
}

案例:您進行串流完成呼叫來要求多個完成,且至少篩選出一部分的輸出內容

HTTP 回應碼 回應行為
200 針對指定的世代索引,世代的最後一個區塊會包含非空 finish_reason 值。 當生成過程被篩選時,該值是 content_filter

要求承載範例:

{
    "prompt":"Text example",
    "n": 3,
    "stream": true
}

範例回應 JSON:

 {
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1653670515,
    "model": "ada",
    "choices": [
        {
            "text": "Last part of generated text streamed back",
            "index": 2,
            "finish_reason": "content_filter",
            "logprobs": null
        }
    ]
}

情境:內容篩選系統在完成後不會運作

HTTP 回應碼 回應行為
200 如果內容篩選系統已關閉或無法及時完成作業,在沒有內容篩選的情況下,您的要求仍會完成。 您可以在 content_filter_results 物件中尋找錯誤訊息,以判斷未套用的篩選。

要求承載範例:

{
    "prompt":"Text example",
    "n": 1,
    "stream": false
}

範例回應 JSON:

{
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1652294703,
    "model": "ada",
    "choices": [
        {
            "text": "generated text",
            "index": 0,
            "finish_reason": "length",
            "logprobs": null,
            "content_filter_results": {
                "error": {
                    "code": "content_filter_error",
                    "message": "The contents are not filtered"
                }
            }
        }
    ]
}

最佳作法

在應用程式設計過程中,請考慮下列最佳做法來提供應用程式的正面體驗,同時將潛在損害降至最低:

  • 決定您想要如何處理使用者傳送的提示包含分類在篩選類別和嚴重性層級的內容,或以其他方式誤用您的應用程式的情況。
  • 檢查 finish_reason 以查看是否有篩選完成。
  • 檢查 content_filter_results 中沒有錯誤物件 (表示內容篩選未執行)。
  • 如果您在標註模式中使用受保護材料程式碼模型,請在應用程式中顯示程式碼時顯示引文 URL。