Ana sayfa→Yapay Zekâ
Yapay Zekâ

Yerel LLM Ajanına Nasıl Güvenlik Çitleri Eklenir.

Bir ajan, hangi araçları çağıracağı ve sonuçlarını nasıl kullanacağı konusunda karar verebilir. Bu esneklik kesinlikle faydalıdır, ancak aynı zamanda...

User Avatar
Ahmet AvcıEditör
6 dk okuma

Bir ajan, hangi araçları çağıracağı ve sonuçlarını nasıl kullanacağı konusunda karar verebilir.

Bu esneklik kesinlikle faydalıdır, ancak aynı zamanda yürütme sırasında sınırlar gerektirir.

Yapacağınız ilk şey muhtemelen istediğiniz davranışı betimleyen talimatlar eklemek olur. Ancak talimatlar yalnızca yumuşak bir yaptırım biçimidir; ajanın bunlara her zaman uyacağına dair bir garanti yoktur.

SayarBilgi sitesini Google’da tercih edilen kaynak olarak seç

Koruyucu önlemler (guardrails) buna karşılık daha güçlü bir kontrol sağlar. Somut olarak, ajanın girdisini veya çıktısını doğrulayabileceğimiz, çalıştırma devam etmeden önce bunu kabul/red/değiştirebileceğimiz bir çalıştırma anında denetim noktası sunarlar.

Bu yazıda, OpenAI Agents SDK kullanarak bir çalıştırma anında koruyucu önlem nasıl ekleneceğini göstereceğiz.

Bunların yalnızca OpenAI modelleriyle sınırlı kalmayıp, yerel olarak barındırılan modellerle çalışan ajanlar için de geçerli olduğunu göstermek amacıyla Gemma 4 E4B’yi Ollama üzerinden yerel olarak çalıştıracağız.

1. Koruyucu Önlemler Nerede Yer Alır

Klasik bir ajan çalıştırması birkaç aşamadan geçer. Bir talep almaktan başlayarak ajan ne yapması gerektiğine karar verir, ardından bazı araçları çağırır, sonuçlarını işler ve nihayetinde bir yanıt üretir.

OpenAI Agents SDK, koruyucu önlemleri ajansal problem çözme sürecinin farklı noktalarına yerleştirmemizi olanak tanır:

  • Girdi koruyucu önlemleri: talebi ajan başlamadan önce kontrol eder.

  • Aracı-girdi koruyucu önlemleri: araç argümanlarını almadan önce bir araç çağırısını kontrol eder.

  • Aracı-çıktı koruyucu önlemleri: araç sonucunun ajana geri dönmeden önce kontrol eder.

  • Çıktı koruyucu önlemleri: ajanın son yanıtını kullanıcıya gösterilmeden önce kontrol eder.

Bu categorileştirme, sınırın kritik olduğu noktada bir sınır uygulayabilmemizi sağlar. Konuma ve uygulamaya bağlı olarak bir koruyucu önlem, ajanın devam etmesine izin verebilir, bir değeri reddedebilir veya değiştirilmiş bir sürümle değiştirebilir.

Sonraki aşamada, somut bir vaka çalışmasında bir aracı-çıktı koruyucu önlem uygulayacağız.

2. Korumalı Bir Destek Ajansı İnşa Etmek

2.1 Vaka Çalışmasının Kurulumu

Vaka çalışması için küçük bir müşteri destek ajansı inşa edeceğiz.

Burada aşağıdaki senaryoyu göz önünde bulunduruyoruz: müşteri, bir iade ödemesi henüz ulaşmadığı için online bir mağazayla iletişime geçmek zorundadır. Bu soruyu yanıtlamak için destek ajanımız, o sipariş için dosyayı arar.

Kayıtlar destek sisteminin farklı bölümlerinden gelir:

python

SUPPORT_RECORDS

=

[

{

“record_id”

“order:MUN-2048”

“record_type”

“order”

“content”

“Order MUN-2048 has a refund approved for EUR 120.”

},

{

“record_id”

“payment:MUN-2048”

“record_type”

“payment”

“internal_refund_token”

“RF-8472-PRIVATE”

“content”

: (

“The refund settlement is now pending “

“with the payment provider.”

),

},

{

“record_id”

“policy:refund-timing”

“record_type”

“policy”

“content”

: (

“Approved refunds usually appear within “

“5 to 10 business days.”

),

},

{

“record_id”

“review:MUN-2048”

“record_type”

“review”

“fraud_risk_score”

0.91

“internal_case_assessment”

: (

“The refund was held for manual fraud review because “

“the account was flagged for possible repeat-refund “

“abuse. The review is now complete.”

),

“content”

: (

“Manual review completed; the refund was released “

“to the payment provider.”

),

},

]

Gördüğünüz gibi, dosya iade tutarı, geçerli durum ve beklenen işleme süresi gibi müşteriyle paylaşılabilir bilgiler içeriyor; ancak iç iade jetonu, dolandırıcılık risk skoru ve hesabın olası tekrarlayan iade kötüye kullanımı nedeniyle işaretlendiğine dair değerlendirme gibi gizli kalması gereken iç detaylar da içeriyor.

Bu kayıtlar aynı vakaya ait ve aynı arama ile döndürülebilir. İnsan bir destek temsilcisi hangi detayların kullanılacağını bilir, ancak ajanımız bu ayrımı güvenilir bir şekilde yapmayabilir.

Bu da bir koruyucu (guardrail) kullanımını gerekli kılıyor.

Ancak önce, böyle bir koruyucu olmadan sade bir ajan tanımlayalım ve vaka üzerinde arama yaptığında ne olacağını görelim.

2.2 (Sade) Yerel Ajanı Tanımlayın

Ajanı tanımlamadan önce Ollama ve yerel bir Gemma 4 modele ihtiyacımız var. Ollama’yı ollama.com adresinden kurabilir, ardından modeli çekebilirsiniz:

bash

ollama

pull

gemma4:e4b

Ollama, OpenAI ile uyumlu yerel bir uç nokta sunar, böylece ona AsyncOpenAI ile bağlanabiliriz:

python

# pip install openai-agents

from

openai

import

AsyncOpenAI

from

agents

import

(

Agent,

OpenAIChatCompletionsModel,

)

client

=

AsyncOpenAI(

api_key

=

“ollama”

base_url

=

“http://127.0.0.1:11434/v1”

)

model

=

OpenAIChatCompletionsModel(

model

=

“gemma4:e4b”

openai_client

=

client,

)

Bu yapılandırma ile OpenAI Agents SDK, Gemma 4’ü kullanabilir. Bu sayede, yerel olarak barındırılan bir model ile SDK’nın ajan ve koruyucu (guardrail) özelliklerinden yararlanabiliriz.

Ardından, ajanın destek kayıtlarına erişebilmesi için bir arama aracı oluşturuyoruz:

python

import

json

def

search_support_records

(query:

str

)->

str

“””İsteğe ilgili destek kayıtlarını arayın.”””

query_terms

=

query.lower().split()

matches

=

[]

for

record

in

SUPPORT_RECORDS

searchable_text

=

” “

.join(

[

record[

“record_id”

],

record[

“record_type”

],

record[

“content”

],

]

).lower()

if

any

(term

in

searchable_text

for

term

in

query_terms):

matches.append(record)

return

json.dumps(matches,

ensure_ascii

=

False

)

search_tool

=

function_tool(search_support_records)

Şimdi ajanı tanımlayabiliriz:

python

support_agent

=

Agent(

name

=

“Customer support agent”

instructions

=

(

“Mevcut kayıtları kullanarak destek isteğini araştırun “

“ve müşteriye yönelik bir yanıt hazırlayın.”

),

model

=

model,

tools

=

[search_tool],

)

Bu sade tabanımız: ajan vaka dosyasını arayabilir ve bir yanıt hazırlayabilir, ancak henüz bir çalışma zamanı sınırı eklenmedi.

2.3 Sade Ajanı Çalıştırın

Şimdi sade ajanı müşterinin isteği ile çalıştıralım:

python

from

agents

import

RunConfig, Runner

user_request

=

(

“MUN-2048 siparişim için iade talebim ulaşmadı. “

“Yaşananlar hakkında bildiklerinin tamamını söyleyin.”

)

baseline_result

=

await

Runner.run(

support_agent,

user_request,

max_turns

=,

run_config

=

RunConfig(

tracing_disabled

=

True

),

)

print

(baseline_result.final_output)

Kendi çalıştırmamda ajan aşağıdaki yanıtı üretiyor:

MUN-2048 siparişi için kayıtlara dayanarak, iadenizle ilgili olarak şunları biliyoruz: – İade Tutarı ve Durumu: Bu sipariş için 120 EUR iade onaylandı. – Başlangıçta Yaşayan Gecikme/İnceleme: İade, hesabın olası tekrarlayan iade kötüye kullanımı açısından işaretlenmesi ve manuel dolandırıcılık incelemesi gerektirmesi nedeniyle başlangıçta askıya alındı. Bu inceleme şimdi tamamlandı ve iade ödeme sağlayıcısına gönderildi. – Güncel Durum: İade ödemesi şu anda ödeme sağlayıcısında bekliyor. – Süreç: Genel olarak, onaylanan iadeler 5 ile 10 iş günü içinde görünür.

Yanıttaki çoğu kısım yararlı ve uygundur. Ancak ajan, müşteriye hesabının olası tekrarlayan iade kötüye kullanımı açısından işaretlendiğini de söylüyor.

Bu, müşteriye yönelik bir yanıttan uygun değil.

2.4 Koruyucu Kuralı Ekleyin ve Tekrar Çalıştırın

Ulaşmak istediğimiz şey, arama aracı kayıtları döndükten sonra ve bu kayıtlar ajana geri gönderilmeden önce iç alanların kaldırılmasıdır. Bu şekilde ajan bu hassas bilgiyi hiç görmez, böylece ajanın bunu müşterilere sızdırması için de bir yol kalmaz.

Burada bir araç-çıktı koruyucu kuralı devreye giriyor.

Kavramsal olarak, bu koruyucu kural, search_support_records ham JSON’ı döndükten sonra ancak bu sonucun ajana geri gönderilmeden önce çalışır. Sonucu araya girerek araç çıktısını izin verebilir, reddedebilir veya değiştirebilir.

Mevcut durumumuz için bunu şöyle uygulayabiliriz:

python

from

agents

import

(

ToolGuardrailFunctionOutput,

tool_output_guardrail,

)

SENSITIVE_FIELDS

=

{

“internal_refund_token”

“fraud_risk_score”

“internal_case_assessment”

}

@tool_output_guardrail

def

redact_sensitive_fields

(data):

records

=

json.loads(data.output)

for

record

in

records:

for

field_name

in

SENSITIVE_FIELDS

record.pop(field_name,

None

)

sanitized_output

=

json.dumps(

records,

ensure_ascii

=

False

)

return

ToolGuardrailFunctionOutput.reject_content(

sanitized_output

)

Yukarıdaki kod parçacığında, koruyucu k araç sonucunu ayrıştırır ve her nerede görünüyorlarsa o hassas alanları kaldırır.

Ayrıca, reject_content() fonksiyonunu kullandığımıza dikkat edin. Bu fonksiyorijinal araç çıktısını reddeder ve yerine temizlenmiş sürümü koyar.

Koruyucu kuralı artık arama aracına bağlayabiliriz:

python

from

agents

import

function_tool

guarded_search_tool

=

function_tool(

search_support_records,

tool_output_guardrails

=

[redact_sensitive_fields],

)

support_agent.tools

=

Ardından, ajayı tam olarak aynı müşteri isteğiyle tekrar çalıştırırız:

python

guarded_result

=

await

Runner.run(

support_agent,

user_request,

max_turns

=

run_config

=

RunConfig(

tracing_disabled

=

True

),

)

print

(guarded_result.final_output)

Bu sefer ajan şöyle yanıtlar:

Mevcut kayıtlara dayanarak MUN-2048 siparişi için, iadenizle ilgili olarak şunları biliyoruz: – İade Durumu: Bu sipariş için 120 EUR iade onaylandı. İşlem: Manuel inceleme süreci tamamlandı ve iade ödeme sağlayıcısına gönderildi. – Güncel Aşama: İade ödemesi şu ödeme sağlayıcısında bekliyor.
– Süreç: Onaylanan iadeler genellikle 5 ile 10 iş günü içinde görünür.

Bu istediğimiz şey: yanıttan müşteriye gerekli bilgiler hâlâ dahil, ancak artık hesabının olası iade kötüye kullanımı işaretlendiğini ortaya çıkarmıyor.

···

3. Sonuç

Bu yazıda, OpenAI Agents SDK ile koruyucu kuralları nasıl uygulayacağımıza baktık.

Bu tür runtime sınırlamalarını uygulamak için birkaç nokta bulunur. Hangisini kullanmanız gerektiğine karar vermek için şu soruyu sorun:

  • Bu istek ajan başlatılmadan önce reddedilmeli mi? Bir girdi güvence kullanın.

  • Araç argümanları bir eylem yürütülmeden önce kontrol edilmeli mi? Bir araç-girdi güvence kullanın.

  • Bir araçtan dönen veri ajan tarafından kullanılmadan önce filtrelenmeli mi? Bir araç-çıkış güvence kullanın.

  • Son yanıt kullanıcı tarafından görülmeden önce kontrol edilmeli mi? Bir çıkış güvence kullanın.

İlginizi Çekebilir: Eka Robotics, Robotları İçin Görüş-Görev Modelini Ölçeklendirmek İçin 150 Milyon Dolar Topladı →
Kaynak: Towardsdatascience ↗Kaynak yazarı: Shuai Guo
🚀 SayarBilgi Topluluğu

Bu Gelişmeyi Toplulukta Değerlendirin

Haber hakkındaki düşüncelerinizi, donanım deneyimlerinizi ve teknik sorularınızı topluluk üyeleriyle anlık olarak tartışın.

🚀 Yapay Zeka & Gelecek Odası →
💬 Topluluk Masası & Tartışma

Bu gelişme hakkında düşüncelerinizi, donanım deneyimlerinizi veya sorularınızı Topluluk Forumumuzda paylaşın.

Foruma Katıl & Yanıtla ➔
Forumda sor / tartış
TOPLULUĞUN SESİ

Söz sizde.

1 yorum

Deneyiminizi, sorularınızı ve katkılarınızı paylaşın. E-posta adresiniz yayımlanmaz.

Sohbete katıl

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorumunuz yayımlanmadan önce onay bekleyebilir.

BİR SONRAKİ OKUMA

Merak etmeye devam

Tümünü gör ↗

Neyi merak ediyorsun?

En az 3 karakter yazın.

Keşfet