Kurumsal veriler sürekli olarak değişiyor. Bu, yapay zeka (AI) sistemlerinin zamanla doğru kalmasını sağlamak için önemli zorluklar yaratıyor. Organizasyonlar, ajans AI sistemlerine giderek daha fazla güvendiğinden, bu sistemlerin sürekli olarak gelişen iş ihtiyaçları ve yeni verilerle uyumlu olmasını sağlamak kritik hale geliyor.
Bu yazı, veri döngüsü oluşturmanın nasıl yapılacağını NVIDIA NeMo mikro hizmetleri ile açıklıyor ve uçtan uca bir boru hattı kurmanın adımlarını hızlıca özetliyor.
NeMo mikro hizmetlerinin veri döngüsü oluşturma sırasında karşılaşılan çeşitli zorlukları nasıl aşabileceğine dair bilgi için NVIDIA NeMo Mikroservisleri Kullanarak AI Ajan Performansını Maksimize Etme başlıklı yazıya göz atın.
Neden Veri Döngüleri Ajans AI İçin Kritik?
Veri döngüsü kendini pekiştiren bir döngüdür. Kullanıcı etkileşimlerinden toplanan veriler, AI modellerini geliştirir; bu da daha iyi sonuçlar sunarak daha fazla kullanıcı çekilir. Daha fazla kullanıcı, daha fazla veri oluşturur ve bu da sistemin sürekli bir iyileşme döngüsü içinde gelişmesini sağlar. Bu, işyerinde deneyimlerin yakalanması ve geri bildirimlerin toplanmasına benzer.

Bu nedenle, uygulamaların sürekli olarak uyum sağlaması ve verimli kalması, ajans sisteminize veri döngüsü eklemenin temel motivasyonunu oluşturur.
Sürekli Adapte Olma İhtiyacı
Üretim ortamlarında, AI uygulamaları sürekli bir zorlukla karşı karşıya: model kayması. Örneğin, kullanıcı sorgularını uzman sistemlere yönlendiren bir AI ajanı düşünün. Bu sistemin girdileri, kullandığı araçlar ve yanıtları sürekli olarak gelişiyor. Bir mekanizma olmadan adapte olma yeteneği olmadığında, doğruluk kaçınılmaz olarak düşecektir. Bunun başlıca nedenleri şunlardır:
- Kurumsal bilgi tabanlarının ve belgelerin güncellenmesi
- Kullanıcı davranışlarının ve sorgu kalıplarının değişmesi
- Aracın API’lerinin ve yanıtlarının değişimi
Örneğin, müşteri sorularını bir SQL (PostgreSQL) veritabanına sorgulayarak yanıtlayan bir bankacılık büyük dil modeli (LLM) ajanı, kuruluşa yeni bir MongoDB veri seti eklenip yanıt formatı güncellendiğinde önemli zorluklarla karşılaşır. Yeniden eğitim olmadan, ajan eski veritabanı yapısına göre sorgular oluşturmaya devam eder, bu da başarısız sorgular ya da yanlış bilgilere yol açar. Bu, müşteri güvenini zedeler ve potansiyel uyum sorunları yaratır.
Verimlilik İçin Hazırlık Gereksinimi
Ajanlar daha karmaşık hale geldikçe, doğruluk ve geçerliliği sürdürmek de zorlaşır. Ayrıca, işlem hacimleri arttıkça, bu modelleri hizmet vermenin hesaplama maliyeti önemli ölçüde artar; bu yüzden verimlilik kritik bir endişe haline gelir. Bu, ajans AI sistemleri için özellikle sorunludur çünkü bu sistemler, genellikle akıl yürütme, planlama ve yürütme aşamaları için birden fazla çıkarım geçişi gerektirir; bu da basit tek geçişli çıkarım modellerine kıyasla hesaplama yükünü çarpıtır.
Bir ajan, çeşitli potansiyel eylemleri değerlendirmesi, birden fazla bilgi kaynağını sorgulaması ve çıktısını doğrulaması gerektiğinde, her etkileşim standart bir model çıkarımından 5 kat ila 10 kat daha fazla işlem gücü gerektirebilir; bu da kullanım yaygınlaştıkça altyapı maliyetlerini dramatik bir şekilde artırır.
Özelleştirme teknikleri kullanarak, daha küçük modelleri daha büyük modellerle aynı doğruluk seviyesine çıkarabilir, böylece gecikmeyi ve toplam sahip olma maliyetini (TCO) azaltabilirsiniz. Ayrıca daha yeni ve daha yetenekli modeller ortaya çıktıkça, bu modellerin (ve onların ince ayar yapılmış varyantlarının) sürekli olarak değerlendirilmesi, kullanıcı etkileşim verilerinin kullanımıyla sürdürülen performans ve uyum sağlama yeteneğini garanti eder.
NVIDIA NeMo Mikro Hizmetleri ile Veri Döngünüzü Güçlendirin
NVIDIA NeMo mikro hizmetleri, veri döngüleri oluşturmak için uçtan uca bir platform sunarak işletmelerin AI ajanlarını sürekli olarak en güncel bilgilerle optimize etmelerini sağlar.
Şekil 2’de, NVIDIA NeMo, kurumsal AI geliştiricilerin verileri geniş ölçekte kolayca derlemesine, yaygın ince ayar teknikleriyle LLM’leri özelleştirmesine, endüstri ve özel referans noktalarında sürekli olarak modelleri değerlendirmesine ve uygun ve temel çıktılar için koruma önlemleri almasına yardımcı olur.

NeMo Mikro Hizmetleri ile Ajan Araç Çağırma Örneği
NeMo mikro hizmetleri ile uçtan uca bir boru hattı oluşturma örneğini vermek için, ajanların araç çağırma yeteneğine bir göz atalım. Araç çağırma, LLM’lerin dış sistemlerle etkileşimde bulunmasını, programları çalıştırmasını ve eğitim verilerine erişemediği gerçek zamanlı bilgileri elde etmesini sağlar.

Etkin araç çağırma için, bir LLM’nin mevcut seçeneklerden doğru aracı seçmesi, doğal dil sorgularından uygun parametreleri çıkarması ve gerekirse birden fazla eylemi bir arada gerçekleştirmesi veya birden fazla aracı paralel olarak çağırması gerekir. Araçların sayısı ve karmaşıklığı arttıkça, özelleştirme doğru ve verimli kalmak için kritik hale gelir.
Llama 3.2 1B Instruct modelini xLAM veri seti (yaklaşık 60,000 araç çağırma örneği) üzerinde ince ayarlayarak, araç çağırma doğruluğunu Llama 3.1 70B Instruct modeline yakın bir seviyeye çıkarmak mümkündür ve böylece model boyutu %70 azaltılabilir.
Aşağıdaki bölümler, size hızlı bir genel bakış sunmak için ana adımları ana hatlarıyla çizmektedir. Tam öğretici için Jupyter not defterine göz atın.
Adım 1: NVIDIA NeMo Mikro Hizmetlerini Yayına Alma
NeMo mikro hizmetleri platformu, seçtiğiniz Kubernetes destekli bir sistem üzerinde dağıtılabilen Helm grafikleri biçimindedir. Başlamak için, en az iki NVIDIA GPU (NVIDIA A100 80 GB veya NVIDIA H100 80 GB) bulunan tek düğümlü bir NVIDIA GPU kümesi üzerinde minikube kullanabilirsiniz.
Adım 2: Veri Hazırlama
xLAM veri seti, NeMo Özelleştirici ile eğitim ve NeMo Değerlendirici ile test için uyumlu formatlara dönüştürülmektedir. Her veri örneği, bir kullanıcı sorgusu, mevcut araçların bir listesi (açıklamaları ve parametreleriyle birlikte) ve doğru yanıt (seçilen araç ve parametreler) içeren bir json nesnesi oluşturmaktadır. Ayrıca, eğitim, doğrulama ve test için veri bölümleri oluşturulur.
NeMo Özelleştirici için veri formatı aşağıda gösterilmektedir. messages
kullanıcı sorgusunu ve asistanın doğru yanıtını içermektedir, tools
ise seçim yapılacak mevcut araçların bir listesini içermektedir.
{
"messages": [
{
"role": "user",
"content": "Beta erişimi için canlı çekilişleri nerede bulabilirim?"
},
{
"role": "assistant",
"tool_calls": [
{
"id": "call_beta",
"type": "function",
"function": {
"name": "live_giveaways_by_type",
"arguments": {"type": "beta"}
}
}
]
}
],
"tools": [
{
"type": "function",
"function": {
"name": "live_giveaways_by_type",
"description": "Belirtilen türdeki çekilişleri GamerPower API'sinden al.",
"parameters": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Alınacak çekilişlerin türü (örneğin, oyun, ödül, beta).",
"default": "game"
}
},
"required": []
}
}
}
]
}
NeMo Değerlendirici bu formata çok benzerdir, ancak küçük bir farklılık vardır. Daha fazla bilgi için Jupyter not defterine başvurabilirsiniz.
Adım 3: Varlık Yönetimi
NVIDIA NeMo Varlık Mağazası mikro hizmeti, isim alanları, projeler, veri setleri ve modeller gibi organizasyonel varlıkları yöneterek, verimli kaynak yönetimi için hiyerarşik bir yapı sunar. Bu sayede, işbirliğini kolaylaştırır ve birden fazla kullanıcı arasında kaynak çatışmalarını önler. NVIDIA NeMo Veri Mağazası mikro hizmeti ise bu varlıklarla ilişkili dosyaları yönetir ve yükleme, indirme, ve sürüm kontrolü gibi işlemleri destekler.
Bu adımda, hazırlanan veri setleri NeMo Veri Mağazası’na Hugging Face Hub arayüzü (HfApi) ile entegrasyon ile yüklenir ve hem Varlık Mağazası hem de Veri Mağazası’na REST API çağrılarıyla kaydedilir. NeMo Özelleştirici ve Değerlendirici, girişleri için bu yolları referans alır.
Adım 4: Düşük Rang Adaptasyonu (LoRA) ile İnce Ayarlama
NeMo Özelleştirici, LoRA ince ayarlaması için Llama 3.2 1B Instruct modelini kullanır. Bir özelleştirme görevini tetiklemek ve görev durumunu izlemek için NeMo Özelleştirici uç noktasına REST API çağrıları yapılır. Eğitim parametreleri, diğer derin öğrenme eğitim görevleri gibi konfigüre edilebilir. Ayrıca, NeMo Özelleştirici, eğitim çalışmaları izlemek için Weights & Biases ile entegre olur.
headers = {"wandb-api-key": WANDB_API_KEY} if WANDB_API_KEY else None
training_params = {
"name": "llama-3.2-1b-xlam-ft",
"output_model": f"{NAMESPACE}/llama-3.1-8b-xlam-run1",
"config": BASE_MODEL,
"dataset": {"name": DATASET_NAME, "namespace" : NAMESPACE},
"hyperparameters": {
"training_type": "sft",
"finetuning_type": "lora",
"epochs": 2,
"batch_size": 16,
"learning_rate": 0.0001,
"lora": {
"adapter_dim": 32,
"adapter_dropout": 0.1
}
}
}
# Görevi tetikle
resp = requests.post(f"{NEMO_URL}/v1/customization/jobs", json=training_params, headers=headers)
customization = resp.json()
# Durumu izlemek için
JOB_ID = customization["id"]
# Çıkarım sorgularında kullanılacak modelin adı
CUSTOMIZED_MODEL = customization["output_model"]
Adım 5: Çıkarım
Model eğitildikten sonra, LoRA adaptörü NeMo Varlık Mağazası’na kaydedilir ve otomatik olarak NVIDIA NIM tarafından alınır. Modeli test etmek için, bir girdi göndererek NIM uç noktasına bağlanabilirsiniz.
inference_client = OpenAI(
base_url = f"{NIM_URL}/v1",
api_key = "None"
)
completion = inference_client.chat.completions.create(
model = CUSTOMIZED_MODEL,
messages = test_sample["messages"],
tools = test_sample["tools"],
tool_choice = 'auto',
temperature = 0.1,
top_p = 0.7,
max_tokens = 512,
stream = False
)
print(completion.choices[0].message.tool_calls)
Bunun sonucunda, aracı adı ve parametreleri içeren bir çıkış elde etmelisiniz:
[ChatCompletionMessageToolCall(id='chatcmpl-tool-bd3e4ee65e0641b7ae2285a9f82c7aae',
function=Function(arguments='{"type": "beta"}', name='live_giveaways_by_type'), type='function')]
Bu noktada, model, araç çağırma üzerindeki doğruluğunu nicelendirmek için değerlendirme sürecine hazırdır.
Adım 6: Değerlendirme
İnce ayar yapılmış model, NeMo Değerlendirici kullanılarak değerlendirilecek ve doğruluğu temel model ile karşılaştırılacaktır. function_name_accuracy
ve function_name_and_args_accuracy
gibi metrikler, araç çağırma yeteneğindeki iyileştirmeleri vurgular. Bu metrikler, isimlerin ve argümanların dize eşleşme doğruluğunu hesaplamaktadır.
Değerlendirme genellikle şu bölümlerden oluşur:
1. Değerlendirme yapılandırmasının oluşturulması: Bu, NeMo Değerlendiriciye, ne tür bir değerlendirme yapmak istediğinizi, kullanılacak veri seti sayısını ve daha fazlasını belirtir.
simple_tool_calling_eval_config = {
"type": "custom",
"tasks": {
"custom-tool-calling": {
"type": "chat-completion",
"dataset": {
"files_url": f"hf://datasets/{NAMESPACE}/{DATASET_NAME}/testing/xlam-test.jsonl",
"limit": 50
},
"params": {
"template": {
"messages": "{{ item.messages | tojson}}",
"tools": "{{ item.tools | tojson }}",
"tool_choice": "auto"
}
},
"metrics": {
"tool-calling-accuracy": {
"type": "tool-calling",
"params": {"tool_calls_ground_truth": "{{ item.tool_calls | tojson }}"}
}
}
}
}
}
2. Değerlendirme görevini tetiklemek: Bu, değerlendirme yapılandırmasını ve değerlendirilecek özel modeli (NIM) belirlemeyi içerir.
res = requests.post(
f"{NEMO_URL}/v1/evaluation/jobs",
json={
"config": simple_tool_calling_eval_config,
"target": {"type": "model", "model": CUSTOM_MODEL_NAME}
}
)
base_eval_job_id = res.json()["id"]
3. Değerlendirme metriklerini gözden geçirme: Değerlendirme görevi tamamlandığında, bu metrikleri incelemek de bir REST çağrısı gerektirir.
res = requests.get(f"{NEMO_URL}/v1/evaluation/jobs/{base_eval_job_id}/results")
ft_function_name_accuracy_score = res.json()["tasks"]["custom-tool-calling"]["metrics"]["tool-calling-accuracy"]["scores"]["function_name_accuracy"]["value"]
ft_function_name_and_args_accuracy = res.json()["tasks"]["custom-tool-calling"]["metrics"]["tool-calling-accuracy"]["scores"]["function_name_and_args_accuracy"]["value"]
Sağlanan gösterimnot defterini takip ederseniz, temel meta/llama-3.2-1B-instruct
modeline kıyasla önemli bir artış göreceksiniz. Yaklaşık olarak şöyle beklentiler oluşturabilirsiniz:
function_name_accuracy
: 12% ile 92% arasındafunction_name_and_args_accuracy
: 8% ile 72% arasında
Bu, bu görevde boyutu 70 kat daha büyük olan meta/llama-3.1-70B-instruct
modelinin doğruluğuna çok yakın bir sonuçtur.
Adım 7: Koruyucu Önlemler
Bu boru hattının son kısmı, özel model NIM’inize koruyucu önlemler eklemektir. Bu durumda, nvidia/llama-3.1-nemoguard-8b-content-safety
kullanarak içerik güvenliğini sağlıyoruz; bu, insan-LLM etkileşiminde, kullanıcı tarafından gönderilen mesajlarla LLM yanıtlarını güvenli veya güvensiz olarak sınıflandırır. Eğer içerik güvensizse, model ayrıca hangi kategorilerin ihlal edildiğiyle ilgili bir yanıt döndürmektedir.
Değerlendirme ile benzer şekilde, bu işlem şunları içerir:
1. Koruyucu yapılandırmasının oluşturulması ve kaydedilmesi: Model, tespit edilmesi gereken güvensiz kategorilere dair bilgi alır; aynı zamanda yanıt formatını belirtir.
data = {
"name": "toolcalling",
"namespace": "default",
"data": {
"models": [
{
"type": "content_safety",
"engine": "nim",
"model": "nvidia/llama-3.1-nemoguard-8b-content-safety"
}
],
"rails": {
"input": {
"flows": [
"content safety check input $model=content_safety"
]
},
"dialog": {
"single_call": {
"enabled": False
}
}
},
"prompts": [
{
"task": "content_safety_check_input $model=content_safety",
"messages": [
{
"type": "system",
"content": "Görev: Aşağıdaki konuşmadaki kullanıcı veya ajan mesajlarında, güvenlik politikamızın tahakkük ettirdiği kategorilere göre güvensiz içerik olup olmadığını kontrol et. Hem kullanıcı mesajı için hem de ajan yanıtı için güvenli veya güvensiz olarak bir derecelendirme yap. Eğer güvensiz içerik varsa, lütfen sağladığımız kategori listeye göre ihlal edilen kategorileri belirt.",
},
{
"type": "user",
"content": "{{ user_input }}"
}
],
"output_parser": "nemoguard_parse_prompt_safety",
"max_tokens": 50
}
]
},
}
# Koruyucu yapılandırmayı kaydet
response = requests.post(GUARDRAILS_URL, json=data)
2. LLM NIM çıkarım çağrısı öncesinde kullanıcı girişine koruyucu önlemlerin eklenmesi:
payload = {
"model": BASE_MODEL,
"messages": [
{
"role": "user",
"content": user_message
}
],
"guardrails": {
"config_id": "toolcalling"
},
"temperature": 0.2,
"top_p": 1
}
# Koruyucu önlemlerde güvensiz kullanıcı mesajını kontrol et
response = requests.post(f"{NEMO_URL}/v1/guardrail/checks", json=payload)
status = response.json()
if status == “success”:
# GÜVENLİ
… (Adım 5'teki gibi LLM çıkarım çağrınızı gerçekleştirin)
else:
# GÜVENSİZ
print(f"Güvenli bir giriş değil, koruyucu önlemler durumu {status} olarak sonuçlandı. Araç çağırma gerçekleştirilmeyecek.")
Başlayın
Bu yazıda belirtilen adımları takip ederek, model özelleştirme, çıkarım, değerlendirme ve koruyucu önlemleri kullanarak uçtan uca bir boru hattı oluşturabilirsiniz. Bu boru hattı, bir sürekli veri akışını işleyebilecek şekilde otomatikleştirildiğinde; periyodik olarak veya kayma tespit edildiğinde tetiklendiğinde, bir veri döngüsü oluşturursunuz. Bu kendini pekiştiren döngü, sisteminizin sürekli öğrenmesine, uyum sağlamasına ve gelişmesine olanak tanır; dolayısıyla zamanla sürdürülen performans iyileştirmeleri sağlar.
NVIDIA NeMo mikro hizmetleri artık genel kullanım için indirilebilir durumdadır. Mikro hizmetleri indirin ve bu yazıda sergilenen örneğe başlamak için öğretici not defterini ve ilişkili videoyu kullanın.
Daha fazla bilgi almak için NeMo mikro hizmetleri dokümantasyonuna bakabilirsiniz. NeMo mikro hizmetlerini üretim ortamında çalıştırmak için, 90 günlük deneme lisansı talep edebilirsiniz.