Gunakan Model Armor dengan LangChain untuk meningkatkan keamanan aplikasi AI Anda dengan secara proaktif menyaring perintah dan respons LLM. Untuk membantu mencegah input berbahaya, verifikasi keamanan konten, dan terapkan kebijakan keamanan secara konsisten di seluruh aplikasi AI Anda, tambahkan Model Armor ke alur kerja LangChain Anda.
Sebelum memulai
Sebelum menerapkan kode, selesaikan langkah-langkah penyiapan Google Cloud berikut:
- Pilih atau buat project dan aktifkan penagihan.
- Aktifkan Model Armor API di project Anda.
- Siapkan autentikasi menggunakan
gcloudatau dengan menetapkan variabel lingkunganGOOGLE_APPLICATION_CREDENTIALS. - Pastikan akun layanan Anda memiliki peran Pengguna Model Armor
(
roles/modelarmor.user). Untuk mengelola template, Anda memerlukan peran Admin Model Armor(roles/modelarmor.admin) - Buat template di konsol Google Cloud .
Dapat dijalankan
Untuk menggunakan Model Armor dengan LangChain, Anda memerlukan dua runnable utama yang sesuai dengan antarmuka LangChain standar.
ModelArmorSanitizePromptRunnable: Komponen ini menyaring input pengguna (perintah) sebelum mencapai LLM. Deteksi input berbahaya atau pelanggaran kebijakan.ModelArmorSanitizeResponseRunnable: Komponen ini menyaring output yang dihasilkan oleh LLM sebelum ditampilkan kepada pengguna. Setiap modifikasi yang dilakukan pengguna pada respons setelah pemeriksaan keamanan utama tidak difilter dan akan sampai kepada Anda dalam keadaan mentah.
Instal paket Python yang diperlukan
Instal paket Python berikut:
langchain-google-communityversi 3.0.4 atau yang lebih barulangchain-google-genai
pip install langchain-google-community langchain-google-genai
Pola penggunaan
Anda dapat menggunakan Model Armor dengan LangChain baik dengan penggabungan dasar atau menggunakan middleware.
Perantaian dasar
Cara paling umum untuk menggunakan Model Armor adalah dengan menggabungkan sanitizer perintah, model, dan sanitizer respons menggunakan operator pipe LangChain Expression Language (LCEL).
from langchain_google_community.model_armor import (
ModelArmorSanitizePromptRunnable,
ModelArmorSanitizeResponseRunnable,
)
from langchain_google_genai import ChatGoogleGenerativeAI
# Initialize Model Armor runnables
sanitize_prompt = ModelArmorSanitizePromptRunnable(
project="PROJECT_ID",
location="LOCATION",
template_id="TEMPLATE_ID",
fail_open="SANITIZE_PROMPT_ERROR_HANDLING"
)
sanitize_response = ModelArmorSanitizeResponseRunnable(
project="PROJECT_ID",
location="LOCATION",
template_id="TEMPLATE_ID",
fail_open="SANITIZE_RESPONSE_ERROR_HANDLING"
)
# Initialize the model
llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash", <var>...</var>)
# Build the chain
chain = sanitize_prompt | llm | sanitize_response
# Invoke
try:
result = chain.invoke("<var>YOUR_USER_PROMPT_HERE</var>")
print(result)
except ValueError as e:
print(f"Content blocked: {e}")
Ganti kode berikut:
PROJECT_ID: Google Cloud Project ID Anda.LOCATION: lokasi template.TEMPLATE_ID: ID template Model Armor yang dibuat di Sebelum memulai.SANITIZE_PROMPT_ERROR_HANDLING: boolean yang mengontrol penanganan error untukModelArmorSanitizePromptRunnable;TrueatauFalse.SANITIZE_RESPONSE_ERROR_HANDLING: boolean yang mengontrol penanganan error untukModelArmorSanitizeResponseRunnable;TrueatauFalse.Saat menangani error, Model Armor berperilaku sebagai berikut:
True: mencatat peringatan, tetapi mengizinkan konten lolos meskipun risiko terdeteksi.False: memunculkanValueErrordan memblokir eksekusi saat konten tidak aman terdeteksi.
Middleware untuk agen
Untuk agen LangChain yang menggunakan alat, Anda dapat menggunakan ModelArmorMiddleware. Middleware
ini menerapkan runnable sanitizer yang relevan pada berbagai
titik interaksi yang dilalui agen LangChain saat menggunakan alat.
from langchain.agents import create_agent
from langchain.tools import tool
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_google_community.model_armor import (
ModelArmorMiddleware,
ModelArmorSanitizePromptRunnable,
ModelArmorSanitizeResponseRunnable,
)
# Create Model Armor sanitizers (same configuration as earlier sections)
prompt_sanitizer = ModelArmorSanitizePromptRunnable(
project="PROJECT_ID",
location="LOCATION",
template_id="TEMPLATE_ID",
fail_open="SANITIZE_PROMPT_ERROR_HANDLING",
)
response_sanitizer = ModelArmorSanitizeResponseRunnable(
project="PROJECT_ID",
location="LOCATION",
template_id="TEMPLATE_ID",
fail_open="SANITIZE_RESPONSE_ERROR_HANDLING",
)
# Wrap them in the official Model Armor middleware
model_armor_middleware = ModelArmorMiddleware(
prompt_sanitizer=prompt_sanitizer,
response_sanitizer=response_sanitizer,
)
# --- Create agent with Model Armor middleware ---
agent = create_agent(
model="SOME_GEMINI_VERSION",
tools=[],
middleware=[model_armor_middleware],
)
Ganti kode berikut:
PROJECT_ID: Google Cloud Project ID Anda.LOCATION: lokasi template.TEMPLATE_ID: ID template Model Armor yang dibuat di Sebelum memulai.SANITIZE_PROMPT_ERROR_HANDLING: boolean yang mengontrol penanganan error untukModelArmorSanitizePromptRunnable;TrueatauFalse.SANITIZE_RESPONSE_ERROR_HANDLING: boolean yang mengontrol penanganan error untukModelArmorSanitizeResponseRunnable;TrueatauFalse.Saat menangani error, Model Armor berperilaku sebagai berikut:
True: mencatat peringatan, tetapi mengizinkan konten lolos meskipun risiko terdeteksi.False: memunculkanValueErrordan memblokir eksekusi saat konten tidak aman terdeteksi.
Konfigurasi ini memastikan bahwa meskipun agen mengeksekusi penalaran multi-langkah atau penggunaan alat, input dan output akan disaring.
Pemeriksaan dokumen
Anda dapat menggunakan runnable Model Armor untuk
memeriksa dokumen yang diupload
sebelum memprosesnya. Hal ini penting untuk alur kerja seperti perangkuman, yang dokumen sumbernya mungkin berisi konten berbahaya tersembunyi. Anda dapat memuat
konten file dan meneruskannya melalui ModelArmorSanitizePromptRunnable
sebelum mengirimkannya ke LLM.
Penanganan peristiwa kustom
Untuk kemampuan pengamatan, runnable mengirimkan peristiwa on_model_armor_finding saat konten tidak aman terdeteksi. Anda dapat melampirkan handler callback kustom untuk mencatat detail tertentu (seperti temuan dan konten) atau memicu pemberitahuan tanpa mengganggu alur aplikasi.
from langchain_core.callbacks import BaseCallbackHandler
class SecurityHandler(BaseCallbackHandler):
def on_custom_event(self, name, data, **kwargs):
if name == "on_model_armor_finding":
print(f"Alert: {data['findings']} detected in {data['template_id']}")
# Attach to config
chain.invoke(user_input, config={"callbacks": [SecurityHandler()]})