Kontrol perusahaan dan kepercayaan27 Oktober 2026Flatkey Team

Panduan API Penyensoran PII (2026): Perbandingan AWS, Google Cloud, Azure, dan Presidio untuk Aplikasi LLM

API penyensoran PII menemukan dan menyamarkan data pribadi dalam teks. Bandingkan Amazon Comprehend, Google Sensitive Data Protection, Azure Language PII, dan Presidio, lengkap dengan kode, satuan harga, hasil deteksi nyata, dan alur penyensoran untuk LLM.

Panduan API Penyensoran PII (2026): Perbandingan AWS, Google Cloud, Azure, dan Presidio untuk Aplikasi LLM

Panduan API Penyensoran PII (2026): Perbandingan AWS, Google Cloud, Azure, dan Presidio untuk Aplikasi LLM

API penyensoran PII menerima teks, menemukan data pribadi seperti nama, email, nomor telepon, nomor kartu, dan nomor identitas resmi, lalu mengembalikan lokasi data tersebut atau salinan teks yang datanya telah disamarkan, diganti, atau ditokenisasi. Bagi tim produk AI, fungsi utamanya adalah menghapus atau melakukan pseudonimisasi data pribadi sebelum prompt, dokumen, dan log dikirim ke LLM pihak ketiga. Empat opsi yang paling sering dievaluasi adalah Amazon Comprehend DetectPiiEntities, Google Cloud Sensitive Data Protection (sebelumnya Cloud DLP), deteksi PII Azure Language, dan Microsoft Presidio yang bersifat sumber terbuka.

Panduan ini membandingkan endpoint, autentikasi, dukungan bahasa, satuan harga, dan format keluaran, disertai contoh yang dapat dijalankan menggunakan data sintetis. Panduan ini juga menyajikan hasil deteksi nyata dari pengujian Presidio lokal, termasuk data yang terlewat dan positif palsu yang perlu Anda antisipasi. Semua detail penyedia telah diperiksa berdasarkan dokumentasi resmi pada 27 Oktober 2026.

Flatkey tidak menyediakan API penyensoran PII bawaan. Pola di bawah ini dijalankan di layanan Anda sendiri sebelum permintaan dikirim melalui gateway model apa pun, termasuk Flatkey. Untuk aspek kebijakan dari masalah yang sama, baca panduan kebijakan penyensoran API AI kami.

Penyensoran, masking, deteksi entitas, dan tokenisasi: apa bedanya?

Teknik Hasil yang dikembalikan Dapat dipulihkan? Penggunaan umum
Deteksi entitas Jenis entitas, skor keyakinan, dan offset karakter Tidak berlaku (teks tidak diubah) Menentukan tindakan untuk setiap entitas; mengaudit data yang mengalir
Penyensoran Teks dengan PII yang dihapus atau diganti dengan label seperti [PERSON_1] Tidak Prompt ke LLM eksternal, log, analitik
Masking Teks dengan karakter yang disembunyikan, seperti ***********1111 Tidak Tampilan dukungan pelanggan yang memerlukan sebagian nilai
Tokenisasi / pseudonimisasi Teks dengan PII yang diganti dengan token konsisten atau nilai terenkripsi Ya, dengan kunci atau tabel pemetaan Alur kerja LLM yang harus mengembalikan nilai asli ke dalam jawaban
Penyensoran tingkat field Field yang sudah diketahui (seperti email dalam JSON) dihapus atau diganti berdasarkan skema Tergantung Payload terstruktur yang field berisi PII-nya sudah diketahui

Untuk data terstruktur, aturan tingkat field lebih cepat dan lebih andal daripada model apa pun. Gunakan API deteksi PII untuk teks bebas: pesan chat, tiket dukungan, transkrip, dan dokumen.

Perbandingan API penyensoran PII (Oktober 2026)

Amazon Comprehend Google Sensitive Data Protection Azure Language PII Microsoft Presidio
Jenis API terkelola API terkelola API terkelola (juga tersedia dalam container) Sumber terbuka, dihosting sendiri
Pemanggilan utama DetectPiiEntities projects.content.deidentify analyze-text dengan PiiEntityRecognition AnalyzerEngine + AnonymizerEngine
Langsung mengembalikan teks yang telah disensor Tidak, mengembalikan offset (gunakan offset untuk menyensor) Ya Ya (redactedText) Ya
Tokenisasi yang dapat dipulihkan Tidak Ya (transformasi berbasis kriptografi) Tidak Ya (operator encrypt / decrypt)
Dukungan bahasa untuk PII Inggris dan Spanyol Banyak infoTypes, sebagian khusus negara tertentu Beberapa bahasa sesuai dokumentasi Tergantung model NLP yang Anda muat
Batas input / satuan 100 KB per permintaan; ditagih per 100 karakter, minimum 3 unit Ditagih per GiB; minimum 1 KB per permintaan Ditagih per rekaman teks Sumber daya komputasi Anda
Kuota gratis 50K unit (5M karakter) per API per bulan selama 12 bulan 1 GiB pertama per bulan untuk inspeksi 5,000 rekaman teks per bulan (paket gratis) Perangkat lunak gratis
Data keluar dari jaringan Anda Ya (AWS) Ya (Google Cloud) Ya, kecuali Anda menjalankan container Tidak

Sumber: Dokumentasi PII Amazon Comprehend, harga Comprehend, dokumentasi deidentifikasi Google, harga Sensitive Data Protection, gambaran umum Azure PII, harga Azure Language, dan dokumentasi Presidio, semuanya diperiksa pada 27 Oktober 2026.

Berapa biayanya?

  • Amazon Comprehend: Dalam contoh Detect PII dari AWS, 10,000 komentar pelanggan yang masing-masing berisi 550 karakter dihitung sebagai 6 unit per permintaan, sehingga 60,000 unit dengan tarif $0.0001 per unit dikenai biaya $6 (harga Comprehend, contoh 7). Permintaan pendek ditagih dengan minimum 3 unit (300 karakter), jadi menggabungkan pesan-pesan kecil dalam satu batch dapat menghemat biaya.
  • Google Sensitive Data Protection: inspeksi konten gratis untuk 1 GiB pertama per bulan, lalu $3.00 per GiB, turun menjadi $2.00 per GiB untuk volume yang lebih tinggi; tarif transformasi tercantum sebesar $2.00 per GiB, lalu $1.00. Setiap permintaan ditagih minimum 1 KB.
  • Azure Language: deteksi PII ditagih per rekaman teks, dengan 5,000 rekaman teks gratis per bulan pada paket gratis. Tarif paket berbayar tercantum di halaman harga Azure untuk wilayah Anda.
  • Presidio: tanpa biaya lisensi; Anda membayar sumber daya komputasi untuk menjalankan penganalisis dan model NLP.

Amazon Comprehend: DetectPiiEntities

Comprehend mendeteksi PII dalam teks berbahasa Inggris atau Spanyol. DetectPiiEntities mengembalikan Type, Score, BeginOffset, dan EndOffset untuk setiap entitas; input maksimum adalah 100 KB teks UTF-8 (referensi API). API ini tidak mengembalikan teks yang telah disensor, jadi Anda harus mengganti sendiri bagian teks yang terdeteksi.

import boto3

comprehend = boto3.client("comprehend", region_name="us-east-1")
text = "Hi, I'm Dana Whitfield. Email dana.whitfield@example.com or call 212-555-0187."

resp = comprehend.detect_pii_entities(Text=text, LanguageCode="en")

# Replace from the end so earlier offsets stay valid
redacted = text
for e in sorted(resp["Entities"], key=lambda e: e["BeginOffset"], reverse=True):
    if e["Score"] >= 0.5:
        redacted = redacted[:e["BeginOffset"]] + f"[{e['Type']}]" + redacted[e["EndOffset"]:]
print(redacted)

Autentikasi menggunakan kredensial AWS standar (peran IAM, SSO, atau kunci akses) dengan izin comprehend:DetectPiiEntities.

Google Cloud Sensitive Data Protection: content.deidentify

API Google melakukan inspeksi dan transformasi dalam satu pemanggilan. Anda memilih infoTypes (seperti EMAIL_ADDRESS dan PHONE_NUMBER) serta transformasinya: replaceWithInfoTypeConfig, redactConfig, characterMaskConfig, atau pseudonimisasi berbasis kriptografi (dokumentasi deidentifikasi).

curl -X POST \
  "https://dlp.googleapis.com/v2/projects/$PROJECT_ID/content:deidentify" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "item": {"value": "Email dana.whitfield@example.com or call 212-555-0187."},
    "inspectConfig": {
      "infoTypes": [{"name": "EMAIL_ADDRESS"}, {"name": "PHONE_NUMBER"}, {"name": "PERSON_NAME"}]
    },
    "deidentifyConfig": {
      "infoTypeTransformations": {
        "transformations": [{"primitiveTransformation": {"replaceWithInfoTypeConfig": {}}}]
      }
    }
  }'

item.value dalam respons berisi teks seperti Email [EMAIL_ADDRESS] or call [PHONE_NUMBER]. Google menyarankan agar Anda hanya mencantumkan infoTypes yang dibutuhkan, karena pemindaian dengan kumpulan default menambah latensi.

Azure Language: pengenalan entitas PII

Endpoint analyze-text Azure mengembalikan entitas sekaligus field redactedText. Parameter redactionPolicies mengontrol keluaran, misalnya entityMask untuk label atau characterMask untuk tanda bintang (referensi REST).

curl -X POST "$AZURE_LANGUAGE_ENDPOINT/language/:analyze-text?api-version=2026-05-01" \
  -H "Ocp-Apim-Subscription-Key: $AZURE_LANGUAGE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "PiiEntityRecognition",
    "parameters": {"redactionPolicies": [{"policyKind": "entityMask"}]},
    "analysisInput": {"documents": [
      {"id": "1", "language": "en", "text": "My name is John Doe My phone number is 424 878 9192"}
    ]}
  }'

Contoh respons dalam dokumentasi Microsoft mengembalikan "redactedText": "My name is [PERSON_1] My phone number is [PHONENUMBER_1]", beserta kategori, offset, panjang, dan skor keyakinan setiap entitas. Azure juga mendukung deteksi PII untuk percakapan dan dokumen, serta menyediakan container untuk menjalankan model di lingkungan Anda sendiri.

Versi Node.js

const res = await fetch(
  `${process.env.AZURE_LANGUAGE_ENDPOINT}/language/:analyze-text?api-version=2026-05-01`,
  {
    method: "POST",
    headers: {
      "Ocp-Apim-Subscription-Key": process.env.AZURE_LANGUAGE_KEY,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      kind: "PiiEntityRecognition",
      parameters: { redactionPolicies: [{ policyKind: "entityMask" }] },
      analysisInput: {
        documents: [{ id: "1", language: "en", text: "Call Dana at 212-555-0187." }],
      },
    }),
  }
);
const data = await res.json();
console.log(data.results.documents[0].redactedText);

Microsoft Presidio: penyensoran PII sumber terbuka

Presidio berjalan sepenuhnya di infrastruktur Anda sendiri. Penganalisisnya menggabungkan pengenalan entitas bernama berbasis NLP, ekspresi reguler, checksum, dan kata-kata kontekstual; penganonimnya menerapkan operator seperti replace, mask, redact, hash, dan encrypt. Dokumentasinya secara tegas menyatakan bahwa deteksi otomatis tidak dapat menjamin semua data sensitif ditemukan, jadi siapkan perlindungan tambahan.

Kami memasang Presidio (analyzer 2.2.365 dengan model en_core_web_lg dari spaCy) dan menjalankannya pada kalimat sintetis berikut:

Hai, saya Dana Whitfield. Kirim email ke dana.whitfield@example.com atau telepon 212-555-0187. Kartu 4111 1111 1111 1111, SSN 078-05-1120. Pesanan #A-77231 dikirim ke 42 Elm Street.

from presidio_analyzer import AnalyzerEngine
from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import OperatorConfig

text = ("Hi, I'm Dana Whitfield. Email dana.whitfield@example.com or call 212-555-0187. "
        "Card 4111 1111 1111 1111, SSN 078-05-1120. Order #A-77231 ships to 42 Elm Street.")

results = AnalyzerEngine().analyze(text=text, language="en")
for r in sorted(results, key=lambda r: r.start):
    print(r.entity_type, repr(text[r.start:r.end]), round(r.score, 2))

out = AnonymizerEngine().anonymize(
    text=text,
    analyzer_results=results,
    operators={
        "DEFAULT": OperatorConfig("replace", {"new_value": "<REDACTED>"}),
        "PERSON": OperatorConfig("replace", {"new_value": "<PERSON>"}),
        "EMAIL_ADDRESS": OperatorConfig("replace", {"new_value": "<EMAIL>"}),
        "CREDIT_CARD": OperatorConfig("mask", {"masking_char": "*", "chars_to_mask": 15, "from_end": False}),
    },
)
print(out.text)

Apa yang terdeteksi dan apa yang terlewat

Teks Terdeteksi sebagai Skor Penilaian
Dana Whitfield PERSON 0.85 Benar
dana.whitfield@example.com EMAIL_ADDRESS 1.0 Benar
example.com (di dalam email) URL 0.5 Positif palsu, tumpang tindih dengan email
212-555-0187 PHONE_NUMBER 0.4 Benar, tetapi tingkat keyakinannya rendah
4111 1111 1111 1111 CREDIT_CARD 1.0 Benar (checksum tervalidasi)
078-05-1120 PHONE_NUMBER 0.4 Salah jenis: ini adalah contoh SSN tidak valid yang dikenal luas, sehingga pengenal SSN menolaknya
Elm Street LOCATION 0.85 Sebagian benar; nomor rumah "42" tetap tertinggal dalam teks
A-77231 (ID pesanan) tidak terdeteksi Tidak berlaku Terlewat: pengenal bisnis memerlukan aturan khusus

Tiga pelajaran dari pengujian kecil ini:

  1. Ambang batas menentukan kompromi antara data yang terlewat dan deteksi yang tidak relevan. Saat kami menjalankan ulang dengan score_threshold=0.5, nomor telepon (skor 0.4) tidak disertakan dalam hasil deteksi dan tetap tidak tersensor. Sesuaikan ambang batas per jenis entitas, bukan secara global.
  2. Pengenal internal Anda memerlukan pengenal khusus. Penambahan PatternRecognizer untuk \bA-\d{5}\b dengan skor 0.6 berhasil mendeteksi ID pesanan. Nilai berformat SSN yang realistis (536-90-4399) terdeteksi sebagai US_SSN dengan skor 0.85.
  3. Tokenisasi yang dapat dipulihkan berfungsi. Penggunaan operator encrypt dengan kunci 128-bit serta DeanonymizeEngine dengan decrypt memulihkan teks asli secara persis.

Alur penyensoran PII untuk aplikasi LLM

Pola umum untuk produk AI adalah menyensor, memanggil model, lalu memulihkan nilai yang perlu dilihat pengguna:

  1. Terapkan aturan field terlebih dahulu. Hapus atau ganti field PII yang sudah diketahui dari payload terstruktur berdasarkan skema.
  2. Deteksi dalam teks bebas. Jalankan API PII atau Presidio pada pesan, tiket, dan dokumen.
  3. Lakukan pseudonimisasi secara konsisten. Ganti setiap entitas dengan placeholder yang konsisten (<PERSON_1>) dan simpan pemetaannya di layanan Anda, jangan pernah di dalam prompt.
  4. Panggil LLM dengan teks yang telah disensor.
  5. Pulihkan placeholder dalam keluaran model hanya jika pengguna diizinkan melihat nilai aslinya.
  6. Catat versi yang telah disensor dan jumlah entitas ke log, bukan versi aslinya.
import os, re
from openai import OpenAI
from presidio_analyzer import AnalyzerEngine

analyzer = AnalyzerEngine()
client = OpenAI(api_key=os.environ["FLATKEY_API_KEY"], base_url="https://router.flatkey.ai/v1")

def non_overlapping(results, min_score=0.35):
    kept = []
    # prefer higher scores, then longer spans; drop anything overlapping a kept span
    for r in sorted(results, key=lambda r: (-r.score, -(r.end - r.start))):
        if r.score >= min_score and all(r.end <= k.start or r.start >= k.end for k in kept):
            kept.append(r)
    return sorted(kept, key=lambda r: r.start, reverse=True)

def pseudonymize(text):
    mapping, counters = {}, {}
    for r in non_overlapping(analyzer.analyze(text=text, language="en")):
        counters[r.entity_type] = counters.get(r.entity_type, 0) + 1
        token = f"<{r.entity_type}_{counters[r.entity_type]}>"
        mapping[token] = text[r.start:r.end]
        text = text[:r.start] + token + text[r.end:]
    return text, mapping

ticket = "Customer Dana Whitfield (dana.whitfield@example.com) says order A-77231 never arrived."
safe, mapping = pseudonymize(ticket)
reply = client.chat.completions.create(
    model="claude-haiku-5-5",
    messages=[{"role": "user", "content": f"Draft a short apology email for this ticket:\n{safe}"}],
).choices[0].message.content
for token, value in mapping.items():  # restore only on your side
    reply = reply.replace(token, value)
print(reply)

Langkah non_overlapping penting: tanpanya, URL yang terdeteksi di dalam alamat email akan merusak hasil penggantian. Dengan langkah ini, tiket pengujian kami menjadi Customer <PERSON_1> (<EMAIL_ADDRESS_1>) says order A-77231 never arrived. ID pesanan masih lolos, sehingga pengenal khusus dari bagian sebelumnya perlu diterapkan di lingkungan produksi. Penganonim bawaan Presidio menangani tumpang tindih ini untuk Anda.

Penanganan kegagalan dan pengujian

Risiko Mitigasi
Timeout atau error 5xx pada API PII Blokir pengiriman saat terjadi kegagalan: jangan kirim teks yang belum disensor ke LLM; masukkan ke antrean dan coba lagi
Deteksi dengan tingkat keyakinan rendah Ambang batas per entitas; tinjau sampel setiap minggu
Bahasa tidak didukung Deteksi bahasa terlebih dahulu; PII AWS Comprehend hanya mendukung bahasa Inggris dan Spanyol
Pengenal bisnis (ID pesanan, nomor akun) Pengenal regex khusus atau aturan field
Positif palsu yang merusak makna Daftar pengecualian untuk nama produk dan alamat publik
PII dalam keluaran model Jalankan deteksi pada respons sebelum mencatatnya ke log atau menampilkannya kepada pengguna lain
Log berisi data asli Catat hanya teks yang telah disensor dan jumlah entitas

Buat kumpulan pengujian berlabel berisi pesan sintetis yang menyerupai lalu lintas nyata Anda, termasuk nama dari berbagai budaya, format telepon internasional, dan format ID internal Anda. Ukur recall per jenis entitas sebelum peluncuran dan setelah setiap perubahan aturan.

Memilih API penyensoran PII

  • Sudah menggunakan AWS dan teks berbahasa Inggris atau Spanyol: Amazon Comprehend sederhana dan murah untuk volume kecil.
  • Membutuhkan tokenisasi yang dapat dipulihkan sebagai layanan terkelola, atau banyak pengenal khusus negara tertentu: Google Sensitive Data Protection.
  • Membutuhkan teks yang telah disensor secara langsung, PII dalam percakapan atau dokumen, atau container di infrastruktur lokal: Azure Language PII.
  • Data tidak boleh keluar dari jaringan Anda, atau Anda memerlukan kendali penuh atas aturan: Presidio, dengan pengenal khusus dan evaluasi Anda sendiri.

Banyak tim menggabungkannya: Presidio atau aturan field di jalur pemrosesan utama, dan API terkelola untuk pemindaian dokumen secara batch.

Penerapannya bersama Flatkey

Flatkey adalah gateway model: satu kunci dan endpoint yang kompatibel dengan OpenAI untuk banyak LLM. Flatkey tidak mendeteksi atau menyensor PII untuk Anda, jadi jalankan penyensoran di aplikasi Anda sebelum permintaan keluar dari layanan, seperti pada alur di atas. Dokumentasi enterprise Flatkey menjelaskan kebijakan tanpa retensi konten permintaan, yang mengurangi paparan tetapi tidak menggantikan penyensoran. Bacaan terkait: kebijakan penyensoran API AI, pengelolaan kunci API yang aman, pelacakan biaya LLM, dan katalog model Flatkey.

FAQ

Apa itu API penyensoran PII?

API ini mendeteksi data pribadi dalam teks, seperti nama, email, nomor telepon, dan nomor identitas, lalu mengembalikan lokasi data tersebut atau versi teks yang datanya telah dihapus, disamarkan, atau diganti.

Apa API penyensoran PII terbaik?

Tergantung stack dan data Anda. Amazon Comprehend cocok untuk teks berbahasa Inggris dan Spanyol di AWS, Google Sensitive Data Protection paling unggul untuk tokenisasi yang dapat dipulihkan dan banyak infoTypes, Azure langsung mengembalikan teks yang telah disensor dan dapat berjalan dalam container, sedangkan Presidio paling cocok jika data harus tetap berada di jaringan Anda.

Apakah ada API penyensoran PII gratis?

Presidio adalah perangkat lunak sumber terbuka yang gratis. Layanan terkelola memiliki kuota gratis: AWS Comprehend mencakup 50K unit (5M karakter) per API per bulan selama 12 bulan, 1 GiB pertama inspeksi Google per bulan gratis, dan paket gratis Azure mencakup 5,000 rekaman teks per bulan.

Haruskah saya menyensor PII sebelum mengirim prompt ke ChatGPT, Claude, atau API LLM lainnya?

Ya, jika model tidak membutuhkan nilai aslinya. Lakukan pseudonimisasi nama, detail kontak, dan ID, kirim placeholder ke model, lalu pulihkan nilainya di layanan Anda sendiri jika pengguna membutuhkannya.

Bisakah PII yang telah disensor dipulihkan?

Penyensoran sederhana dan masking tidak dapat dipulihkan. Tokenisasi atau pseudonimisasi berbasis enkripsi dapat dipulihkan dengan kunci atau tabel pemetaan, yang harus Anda simpan dengan aman dan terpisah dari data yang telah disensor.

Seberapa akurat API deteksi PII?

Tidak ada yang sempurna. Dalam pengujian Presidio kami, sebuah nomor telepon hanya mendapat skor 0.4 dan sebuah ID pesanan terlewat hingga kami menambahkan aturan khusus. Ukur recall menggunakan data sintetis Anda sendiri dan blokir pengiriman saat detektor mengalami error.

Apakah Flatkey menyensor PII?

Tidak. Flatkey meneruskan permintaan ke model; penyensoran harus dilakukan di aplikasi Anda sebelum permintaan dikirim.