Pemfilteran konten

Penting

Sistem pemfilteran konten tidak diterapkan ke perintah dan penyelesaian yang diproses oleh model Whisper di Azure OpenAI Service. Pelajari selengkapnya tentang model Whisper di Azure OpenAI.

Azure OpenAI Service menyertakan sistem pemfilteran konten yang berfungsi bersama model inti. Sistem ini bekerja dengan menjalankan perintah dan penyelesaian melalui ansambel model klasifikasi yang bertujuan mendeteksi dan mencegah output konten berbahaya. Sistem pemfilteran konten mendeteksi dan mengambil tindakan pada kategori tertentu dari konten yang berpotensi berbahaya dalam perintah input dan penyelesaian output. Variasi dalam konfigurasi API dan desain aplikasi dapat memengaruhi penyelesaian dan dengan demikian memfilter perilaku.

Model pemfilteran konten untuk kategori kebencian, seksual, kekerasan, dan bahaya diri telah dilatih dan diuji secara khusus pada bahasa berikut: Inggris, Jerman, Jepang, Spanyol, Prancis, Italia, Portugis, dan Cina. Namun, layanan ini dapat bekerja dalam banyak bahasa lain, tetapi kualitasnya mungkin bervariasi. Dalam semua kasus, Anda harus melakukan pengujian Anda sendiri untuk memastikan bahwa itu berfungsi untuk aplikasi Anda.

Selain sistem pemfilteran konten, Layanan Azure OpenAI melakukan pemantauan untuk mendeteksi konten dan/atau perilaku yang menyarankan penggunaan layanan dengan cara yang mungkin melanggar ketentuan produk yang berlaku. Untuk informasi selengkapnya tentang memahami dan mengurangi risiko yang terkait dengan aplikasi Anda, lihat Catatan Transparansi untuk Azure OpenAI. Untuk informasi selengkapnya tentang cara data diproses untuk pemfilteran konten dan pemantauan penyalahgunaan, lihat Data, privasi, dan keamanan untuk Azure OpenAI Service.

Bagian berikut memberikan informasi tentang kategori pemfilteran konten, tingkat keparahan pemfilteran dan konfigurasinya, dan skenario API untuk dipertimbangkan dalam desain dan implementasi aplikasi.

Kategori pemfilteran konten

Sistem pemfilteran konten yang terintegrasi dalam Layanan Azure OpenAI berisi:

  • Model klasifikasi multi-kelas neural yang bertujuan mendeteksi dan memfilter konten berbahaya; model mencakup empat kategori (kebencian, seksual, kekerasan, dan bahaya diri) di empat tingkat keparahan (aman, rendah, sedang, dan tinggi). Konten yang terdeteksi pada tingkat keparahan 'aman' diberi label dalam anotasi tetapi tidak tunduk pada pemfilteran dan tidak dapat dikonfigurasi.
  • Model klasifikasi opsional lainnya yang bertujuan mendeteksi risiko jailbreak dan konten yang diketahui untuk teks dan kode; model ini adalah pengklasifikasi biner yang menandai apakah perilaku pengguna atau model memenuhi syarat sebagai serangan jailbreak atau cocok dengan teks atau kode sumber yang diketahui. Penggunaan model ini bersifat opsional, tetapi penggunaan model kode bahan yang dilindungi mungkin diperlukan untuk cakupan Komitmen Hak Cipta Pelanggan.

Kategori bahaya

Kategori Deskripsi
Kebencian dan keadilan Bahaya terkait kebencian dan keadilan mengacu pada konten apa pun yang menyerang atau menggunakan bahasa pejoratif atau diskriminatif dengan mengacu pada seseorang atau kelompok Identitas berdasarkan atribut pembeda tertentu dari kelompok-kelompok ini termasuk tetapi tidak terbatas pada ras, etnis, kebangsaan, kelompok identitas gender dan ekspresi, orientasi seksual, agama, status imigrasi, status kemampuan, penampilan pribadi, dan ukuran tubuh. 

Kewajaran dikhawatirkan dengan memastikan bahwa sistem AI memperlakukan semua kelompok orang secara setara tanpa berkontribusi pada ketidaksetaraan masyarakat yang ada. Mirip dengan ujaran kebencian, kewajaran terkait bahaya engsel setelah perlakuan berbeda terhadap kelompok Identitas.  
Seksual Seksual menggambarkan bahasa yang terkait dengan organ dan alat kelamin anatomi, hubungan romantis, tindakan yang digambarkan dalam istilah erotis atau kasih sayang, kehamilan, tindakan seksual fisik, termasuk yang digambarkan sebagai penyerangan atau tindakan kekerasan seksual paksa terhadap kehendak, prostitusi, pornografi, dan penyalahgunaan seseorang.  
Kekerasan Kekerasan menjelaskan bahasa yang terkait dengan tindakan fisik yang dimaksudkan untuk menyakiti, melukai, merusak, atau membunuh seseorang atau sesuatu; menjelaskan senjata, senjata dan entitas terkait, seperti manufaktur, asosiasi, undang-undang, dll.
Melukai Diri Sendiri Melukai diri sendiri menggambarkan bahasa yang terkait dengan tindakan fisik yang dimaksudkan untuk melukai, melukai, merusak tubuh seseorang, atau membunuh diri sendiri.
Risiko Jailbreak Serangan Jailbreak adalah Perintah Pengguna yang dirancang untuk memprovokasi model AI Generatif ke dalam perilaku pameran yang dilatih untuk menghindari atau melanggar aturan yang ditetapkan dalam Pesan Sistem. Serangan tersebut dapat bervariasi dari peran yang rumit hingga subversi yang halus dari tujuan keselamatan.
Bahan Yang Dilindungi untuk Teks* Teks materi yang dilindungi menjelaskan konten teks yang diketahui (misalnya, lirik lagu, artikel, resep, dan konten web yang dipilih) yang dapat dihasilkan oleh model bahasa besar.
Bahan yang Dilindungi untuk Kode Kode materi yang dilindungi menjelaskan kode sumber yang cocok dengan sekumpulan kode sumber dari repositori publik, yang dapat dihasilkan oleh model bahasa besar tanpa kutipan repositori sumber yang tepat.

* Jika Anda adalah pemilik materi teks dan ingin mengirimkan konten teks untuk perlindungan, ajukan permintaan.

Konten teks

Peringatan

Tab Definisi tingkat keparahan dalam dokumen ini berisi contoh konten berbahaya yang mungkin mengganggu beberapa pembaca.

Konten gambar

Peringatan

Tab Definisi tingkat keparahan dalam dokumen ini berisi contoh konten berbahaya yang mungkin mengganggu beberapa pembaca.

Konfigurasi (pratinjau)

Konfigurasi pemfilteran konten default diatur untuk memfilter pada ambang keparahan sedang untuk keempat kategori bahaya konten untuk perintah dan penyelesaian. Itu berarti bahwa konten yang terdeteksi pada tingkat keparahan sedang atau tinggi difilter, sementara konten yang terdeteksi pada tingkat keparahan rendah tidak difilter oleh filter konten. Fitur konfigurasi tersedia dalam pratinjau dan memungkinkan pelanggan untuk menyesuaikan pengaturan, secara terpisah untuk permintaan dan penyelesaian, untuk memfilter konten untuk setiap kategori konten pada tingkat keparahan yang berbeda seperti yang dijelaskan dalam tabel di bawah ini:

Tingkat keparahan difilter Dapat dikonfigurasi untuk perintah Dapat dikonfigurasi untuk penyelesaian Deskripsi
Rendah, sedang, tinggi Ya Ya Konfigurasi pemfilteran paling ketat. Konten yang terdeteksi pada tingkat keparahan rendah, sedang, dan tinggi difilter.
Sedang, tinggi Ya Ya Pengaturan awal. Konten yang terdeteksi pada tingkat keparahan rendah tidak difilter, konten pada sedang dan tinggi difilter.
Sangat Penting Ya Ya Konten yang terdeteksi pada tingkat keparahan rendah dan sedang tidak difilter. Hanya konten pada tingkat keparahan tinggi yang difilter.
Tidak ada filter Jika disetujui* Jika disetujui* Tidak ada konten yang difilter terlepas dari tingkat keparahan yang terdeteksi. Memerlukan persetujuan*.

* Hanya pelanggan yang telah disetujui untuk pemfilteran konten yang dimodifikasi yang memiliki kontrol pemfilteran konten penuh dan dapat menonaktifkan sebagian atau sepenuhnya filter konten. Kontrol pemfilteran konten tidak berlaku untuk filter konten untuk DALL-E (pratinjau) atau GPT-4 Turbo dengan Visi (pratinjau). Terapkan untuk filter konten yang dimodifikasi menggunakan formulir ini: Tinjauan Akses Terbatas Azure OpenAI: Pemfilteran Konten yang Dimodifikasi (microsoft.com).

Pelanggan bertanggung jawab untuk memastikan bahwa aplikasi yang mengintegrasikan Azure OpenAI mematuhi Kode Etik.

Konfigurasi pemfilteran konten dibuat dalam Sumber Daya di Azure AI Studio, dan dapat dikaitkan dengan Penyebaran. Pelajari selengkapnya tentang konfigurasi di sini.

Detail skenario

Ketika sistem pemfilteran konten mendeteksi konten berbahaya, Anda menerima kesalahan pada panggilan API jika perintah dianggap tidak pantas, atau finish_reason pada respons akan content_filter menandakan bahwa beberapa penyelesaian difilter. Saat membuat aplikasi atau sistem, Anda harus memperhitungkan skenario ini di mana konten yang dikembalikan oleh API Penyelesaian difilter, yang mungkin mengakibatkan konten yang tidak lengkap. Cara Anda bertindak atas informasi ini akan menjadi aplikasi khusus. Perilaku dapat diringkas dalam poin-poin berikut:

  • Perintah yang diklasifikasikan berdasarkan kategori yang difilter dan tingkat keparahan akan menghasilkan kesalahan HTTP 400.
  • Panggilan penyelesaian non-streaming tidak akan mengembalikan konten apa pun saat konten difilter. Nilai finish_reason akan diatur ke content_filter. Dalam kasus yang jarang terjadi dengan respons yang lebih panjang, hasil parsial dapat dikembalikan. Dalam kasus ini, finish_reason akan diperbarui.
  • Untuk panggilan penyelesaian streaming, segmen akan dikembalikan ke pengguna setelah selesai. Layanan akan melanjutkan streaming hingga mencapai token berhenti, panjang, atau ketika konten yang diklasifikasikan pada kategori yang difilter dan tingkat keparahan terdeteksi.

Skenario: Anda mengirim panggilan penyelesaian non-streaming yang meminta beberapa output; tidak ada konten yang diklasifikasikan pada kategori dan tingkat keparahan yang difilter

Tabel di bawah ini menguraikan berbagai cara untuk kemunculan pemfilteran konten:

Kode respons HTTP Perilaku respons
200 Dalam kasus ketika semua generasi meneruskan filter seperti yang dikonfigurasi, tidak ada detail kon mode tenda rasi yang ditambahkan ke respons. finish_reason untuk setiap generasi akan berhenti atau panjang.

Contoh payload permintaan:

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

Contoh respons JSON:

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

Skenario: Panggilan API Anda meminta beberapa respons (N>1) dan setidaknya salah satu respons difilter

Kode respons HTTP Perilaku respons
200 Generasi yang difilter akan memiliki finish_reason nilai content_filter.

Contoh payload permintaan:

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

Contoh respons 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
        }
    ]
}

Skenario: Perintah input yang tidak pantas dikirim ke API penyelesaian (baik untuk streaming atau non-streaming)

Kode respons HTTP Perilaku respons
400 Panggilan API gagal saat perintah memicu filter konten seperti yang dikonfigurasi. Ubah perintah dan coba lagi.

Contoh payload permintaan:

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

Contoh respons JSON:

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

Skenario: Anda melakukan panggilan penyelesaian streaming; tidak ada konten output yang diklasifikasikan pada kategori dan tingkat keparahan yang difilter

Kode respons HTTP Perilaku respons
200 Dalam hal ini, panggilan akan mengalir kembali dengan generasi penuh dan finish_reason akan menjadi 'panjang' atau 'berhenti' untuk setiap respons yang dihasilkan.

Contoh payload permintaan:

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

Contoh respons JSON:

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

Skenario: Anda melakukan panggilan penyelesaian streaming yang meminta beberapa penyelesaian dan setidaknya sebagian konten output difilter

Kode respons HTTP Perilaku respons
200 Untuk indeks generasi tertentu, potongan terakhir pembuatan menyertakan nilai non-null finish_reason . Nilainya adalah content_filter ketika pembuatan difilter.

Contoh payload permintaan:

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

Contoh respons 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
        }
    ]
}

Skenario: Sistem pemfilteran konten tidak berjalan pada penyelesaian

Kode respons HTTP Perilaku respons
200 Jika sistem pemfilteran konten tidak berfungsi atau tidak dapat menyelesaikan operasi tepat waktu, permintaan Anda akan tetap selesai tanpa pemfilteran konten. Anda dapat menentukan bahwa pemfilteran tidak diterapkan dengan mencari pesan kesalahan di content_filter_result objek.

Contoh payload permintaan:

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

Contoh respons JSON:

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

Anotasi

Filter konten

Ketika anotasi diaktifkan seperti yang ditunjukkan dalam cuplikan kode di bawah ini, informasi berikut dikembalikan melalui API untuk kategori kebencian dan keadilan, seksual, kekerasan, dan bahaya diri:

  • kategori pemfilteran konten (kebencian, seksual, kekerasan, self_harm)
  • tingkat keparahan (aman, rendah, sedang atau tinggi) dalam setiap kategori konten
  • status pemfilteran (benar atau salah).

Model opsional

Model opsional dapat diaktifkan dalam anotasi (mengembalikan informasi saat konten ditandai, tetapi tidak difilter) atau mode filter (mengembalikan informasi saat konten ditandai dan difilter).

Ketika anotasi diaktifkan seperti yang ditunjukkan pada cuplikan kode di bawah ini, informasi berikut dikembalikan oleh API untuk model opsional: risiko jailbreak, teks bahan yang dilindungi, dan kode bahan yang dilindungi:

  • kategori (jailbreak, protected_material_text, protected_material_code),
  • terdeteksi (benar atau salah),
  • difilter (benar atau salah).

Untuk model kode material yang dilindungi, informasi tambahan berikut dikembalikan oleh API:

  • contoh kutipan repositori GitHub publik tempat cuplikan kode ditemukan
  • lisensi repositori.

Saat menampilkan kode di aplikasi Anda, kami sangat menyarankan agar aplikasi juga menampilkan contoh kutipan dari anotasi. Kepatuhan terhadap lisensi yang dikutip mungkin juga diperlukan untuk cakupan Komitmen Hak Cipta Pelanggan.

Anotasi saat ini tersedia dalam versi 2024-02-01 GA API dan di semua versi pratinjau mulai dari 2023-06-01-preview untuk Penyelesaian dan Penyelesaian Obrolan (model GPT). Cuplikan kode berikut menunjukkan cara menggunakan anotasi:

# os.getenv() for the endpoint and key assumes that you are using environment variables.

import os
from openai import AzureOpenAI
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-03-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT") 
    )

response = client.completions.create(
    model="gpt-35-turbo-instruct", # model = "deployment_name".
    prompt="{Example prompt where a severity level of low is detected}" 
    # Content that is detected at severity level medium or high is filtered, 
    # while content detected at severity level low isn't filtered by the content filters.
)

print(response.model_dump_json(indent=2))

Output

{ 
  "choices": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "protected_material_code": { 
          "citation": { 
            "URL": " https://github.com/username/repository-name/path/to/file-example.txt", 
            "license": "EXAMPLE-LICENSE" 
          }, 
          "detected": true,
          "filtered": false 
        }, 
        "protected_material_text": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "finish_reason": "stop", 
      "index": 0, 
      "message": { 
        "content": "Example model response will be returned ", 
        "role": "assistant" 
      } 
    } 
  ], 
  "created": 1699386280, 
  "id": "chatcmpl-8IMI4HzcmcK6I77vpOJCPt0Vcf8zJ", 
  "model": "gpt-35-turbo-instruct", 
  "object": "text.completion",
  "usage": { 
    "completion_tokens": 40, 
    "prompt_tokens": 11, 
    "total_tokens": 417 
  },  
  "prompt_filter_results": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "jailbreak": { 
          "detected": false, 
          "filtered": false 
        }, 
        "profanity": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "prompt_index": 0 
    } 
  ]
} 

Untuk detail tentang titik akhir REST API inferensi untuk Azure OpenAI dan cara membuat Obrolan dan Penyelesaian, ikuti panduan referensi REST API Layanan Azure OpenAI. Anotasi dikembalikan untuk semua skenario saat menggunakan versi API pratinjau apa pun mulai dari 2023-06-01-preview, serta versi 2024-02-01GA API .

Contoh skenario: Perintah input yang berisi konten yang diklasifikasikan pada kategori yang difilter dan tingkat keparahan dikirim ke API penyelesaian

{
    "error": {
        "message": "The response was filtered due to the prompt triggering Azure Content management policy. 
                   Please modify your prompt and retry. To learn more about our content filtering policies
                   please read our documentation: https://go.microsoft.com/fwlink/?linkid=21298766",
        "type": null,
        "param": "prompt",
        "code": "content_filter",
        "status": 400,
        "innererror": {
            "code": "ResponsibleAIPolicyViolation",
            "content_filter_result": {
                "hate": {
                    "filtered": true,
                    "severity": "high"
                },
                "self-harm": {
                    "filtered": true,
                    "severity": "high"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered":true,
                    "severity": "medium"
                }
            }
        }
    }
}

Streaming konten

Bagian ini menjelaskan pengalaman dan opsi streaming konten Azure OpenAI. Dengan persetujuan, Anda memiliki opsi untuk menerima konten dari API seperti yang dihasilkan, alih-alih menunggu potongan konten yang telah diverifikasi untuk meneruskan filter konten Anda.

Default

Sistem pemfilteran konten terintegrasi dan diaktifkan secara default untuk semua pelanggan. Dalam skenario streaming default, konten penyelesaian di-buffer, sistem pemfilteran konten berjalan pada konten yang di-buffer, dan - tergantung pada konfigurasi pemfilteran konten - konten dikembalikan kepada pengguna jika tidak melanggar kebijakan pemfilteran konten (default Microsoft atau konfigurasi pengguna kustom), atau segera diblokir dan mengembalikan kesalahan pemfilteran konten, tanpa mengembalikan konten penyelesaian berbahaya. Proses ini diulang hingga akhir aliran. Konten sepenuhnya diperiksa sesuai dengan kebijakan pemfilteran konten sebelum dikembalikan kepada pengguna. Konten tidak dikembalikan token-by-token dalam hal ini, tetapi dalam "potongan konten" dari ukuran buffer masing-masing.

Filter yang dimodifikasi asinkron

Pelanggan yang telah disetujui untuk filter konten yang dimodifikasi dapat memilih filter yang dimodifikasi asinkron sebagai opsi tambahan, memberikan pengalaman streaming baru. Dalam hal ini, filter konten dijalankan secara asinkron, dan konten penyelesaian segera dikembalikan dengan pengalaman streaming token demi token yang lancar. Tidak ada konten yang di-buffer, yang memungkinkan latensi nol.

Pelanggan harus menyadari bahwa meskipun fitur ini meningkatkan latensi, ini adalah trade-off terhadap keamanan dan pemeriksaan real-time dari bagian output model yang lebih kecil. Karena filter konten dijalankan secara asinkron, pesan con mode tenda ration dan sinyal pelanggaran kebijakan tertunda, yang berarti beberapa bagian konten berbahaya yang sebaliknya akan segera difilter dapat ditampilkan kepada pengguna.

Anotasi: Anotasi dan pesan con mode tenda ration terus dikembalikan selama aliran. Kami sangat menyarankan Anda menggunakan anotasi di aplikasi Anda dan menerapkan mekanisme keamanan konten AI tambahan, seperti meredaksi konten atau mengembalikan informasi keamanan tambahan kepada pengguna.

Sinyal pemfilteran konten: Sinyal kesalahan pemfilteran konten tertunda. Jika terjadi pelanggaran kebijakan, kebijakan dikembalikan segera setelah tersedia, dan aliran dihentikan. Sinyal pemfilteran konten dijamin dalam jendela ~1.000 karakter konten yang melanggar kebijakan.

Persetujuan untuk pemfilteran konten yang dimodifikasi diperlukan untuk akses ke filter yang dimodifikasi asinkron. Aplikasi dapat ditemukan di sini. Untuk mengaktifkannya di Azure OpenAI Studio, ikuti panduan cara memfilter konten untuk membuat konfigurasi pemfilteran konten baru, dan pilih Filter Modifikasi Asinkron di bagian Streaming.

Perbandingan mode pemfilteran konten

Bandingkan Streaming - Default Streaming - Filter Yang Dimodifikasi Asinkron
Keadaan GA Pratinjau Umum
Kelayakan Semua pelanggan Pelanggan disetujui untuk pemfilteran konten yang dimodifikasi
Cara mengaktifkan Diaktifkan secara default, tidak ada tindakan yang diperlukan Pelanggan yang disetujui untuk pemfilteran konten yang dimodifikasi dapat mengonfigurasinya langsung di Azure OpenAI Studio (sebagai bagian dari konfigurasi pemfilteran konten, diterapkan pada tingkat penyebaran)
Modalitas dan ketersediaan Teks; semua model GPT Teks; semua model GPT kecuali gpt-4-vision
Pengalaman streaming Konten di-buffer dan dikembalikan dalam gugus Latensi nol (tanpa buffering, filter berjalan secara asinkron)
Sinyal pemfilteran konten Sinyal pemfilteran langsung Sinyal pemfilteran tertunda (hingga ~1.000 kenaikan karakter)
Konfigurasi pemfilteran konten Mendukung pengaturan filter default dan yang ditentukan pelanggan (termasuk model opsional) Mendukung pengaturan filter default dan yang ditentukan pelanggan (termasuk model opsional)

Anotasi dan respons sampel

Perintahkan pesan anotasi

Ini sama dengan anotasi default.

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { ... } 
        } 
    ], 
    "choices": [], 
    "usage": null 
} 

Pesan token penyelesaian

Pesan penyelesaian segera diteruskan. Tidak ada moderasi yang dilakukan terlebih dahulu, dan tidak ada anotasi yang disediakan pada awalnya.

data: { 
    "id": "chatcmpl-7rAJvsS1QQCDuZYDDdQuMJVMV3x3N", 
    "object": "chat.completion.chunk", 
    "created": 1692905411, 
    "model": "gpt-35-turbo", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "delta": { 
                "content": "Color" 
            } 
        } 
    ], 
    "usage": null 
} 

Pesan anotasi

Bidang teks akan selalu menjadi string kosong, menunjukkan tidak ada token baru. Anotasi hanya akan relevan dengan token yang sudah dikirim. Mungkin ada beberapa pesan anotasi yang mengacu pada token yang sama.

"start_offset" dan "end_offset" merupakan offset granularitas rendah dalam teks (dengan 0 pada awal permintaan) untuk menandai teks mana yang relevan dengan anotasi.

"check_offset" mewakili berapa banyak teks yang telah dimoderasi sepenuhnya. Ini adalah batas bawah eksklusif pada "end_offset" nilai anotasi di masa depan. Ini tidak menurun.

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "content_filter_results": { ... }, 
            "content_filter_raw": [ ... ], 
            "content_filter_offsets": { 
                "check_offset": 44, 
                "start_offset": 44, 
                "end_offset": 198 
            } 
        } 
    ], 
    "usage": null 
} 

Aliran respons sampel (meneruskan filter)

Di bawah ini adalah respons penyelesaian obrolan nyata menggunakan filter yang dimodifikasi asinkron. Perhatikan bagaimana anotasi perintah tidak diubah, token penyelesaian dikirim tanpa anotasi, dan pesan anotasi baru dikirim tanpa token—sebaliknya dikaitkan dengan offset filter konten tertentu.

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "What is color?"}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_annotations":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Color"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" is"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" a"}}],"usage":null} 

... 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":44,"start_offset":44,"end_offset":198}}],"usage":null} 

... 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","delta":{}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":506,"start_offset":44,"end_offset":571}}],"usage":null} 

data: [DONE] 

Aliran respons sampel (diblokir oleh filter)

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "Tell me the lyrics to \"Hey Jude\"."}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_filter_results":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Hey"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" Jude"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":","}}],"usage":null} 

... 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35- 

turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" better"}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":"content_filter","content_filter_results":{"protected_material_text":{"detected":true,"filtered":true}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: [DONE] 

Penting

Ketika pemfilteran konten dipicu untuk perintah dan "status": 400 diterima sebagai bagian dari respons mungkin ada biaya untuk permintaan ini karena permintaan dievaluasi oleh layanan. Biaya juga akan terjadi ketika "status":200 diterima dengan "finish_reason": "content_filter". Dalam hal ini, perintah tidak memiliki masalah, tetapi penyelesaian yang dihasilkan oleh model terdeteksi melanggar aturan pemfilteran konten yang menghasilkan penyelesaian yang difilter.

Praktik terbaik

Sebagai bagian dari desain aplikasi Anda, pertimbangkan praktik terbaik berikut untuk memberikan pengalaman positif dengan aplikasi Anda sambil meminimalkan potensi bahaya:

  • Tentukan bagaimana Anda ingin menangani skenario di mana pengguna Anda mengirim perintah yang berisi konten yang diklasifikasikan pada kategori dan tingkat keparahan yang difilter atau menyalahgunakan aplikasi Anda.
  • Periksa finish_reason untuk melihat apakah penyelesaian difilter.
  • Periksa apakah tidak ada objek kesalahan dalam content_filter_result (menunjukkan bahwa filter konten tidak berjalan).
  • Jika Anda menggunakan model kode material yang dilindungi dalam mode anotasi, tampilkan URL kutipan saat Anda menampilkan kode di aplikasi Anda.

Langkah berikutnya