Ekim 15 2026

Agentic AI Döneminde GitLab: Kod Yazmaktan Sistem Yönetmeye Geçiş

Yazılım geliştirme dünyasında işler çok hızlı değişiyor. Dün sadece kod tamamlama araçlarına şaşırırken, bugün Agentic AI kavramı gündemimizin tam ortasına oturdu. Klasik yapay zeka araçları biz soru sorduğumuzda tek bir cevap üretirken, “ajan” tabanlı sistemler verilen bir hedef doğrultusunda plan yapıyor, kararlar alıyor, araçları kullanıyor ve işi uçtan uca bitiriyor. İşte bu noktada GitLab, sunduğu derinlemesine otomasyon ve DevOps entegrasyonuyla yeni nesil geliştirici platformları yarışında farklı bir kulvara göz kırpıyor.

Peki bu yeni dönem gerçekten yazılımcıların hayatını kolaylaştırıyor mu, yoksa pazarlama departmanlarının yeni bir cilası mı? GitLab Duo Workflow’u masaya yatırdık, test ettik ve neler vaat ettiğine yakından baktık.

“Agentic” Ne Demek ve Neden Birdenbire Önemli Oldu?

Kısa ve net bir benzetme yapalım: GitHub Copilot gibi ilk nesil asistanlar, yanınızda oturan ve siz kod yazarken bir sonraki satırı tahmin etmeye çalışan hevesli bir stajyer gibiydi. Agentic AI ise ona “Bu issue’daki bug’ı çöz, testleri çalıştır, pipeline geçerse bana merge request aç” dediğiniz ve gidip kahve içebildiğiniz bir çalışma arkadaşı modeli.

Yani sadece metin üretmiyor; dosya ağacını geziyor, terminalde komut çalıştırıyor, CI/CD çıktısını okuyor ve hata aldığında kendi kodunu tekrar düzeltiyor. GitLab’in bu alandaki hamlesi olan GitLab Duo Workflow, tam olarak bu mantık üzerine inşa edilmiş durumda.

[Görsel: GitLab Duo arayüzünde arka planda çalışan yapay zeka ajanının pipeline loglarını analiz ettiği ve önerilen çözüm adımlarını listelediği ekran]

Gerçek Bir Test: Gece Kırılan CI/CD Pipeline’ı

Bunu somut bir senaryoyla test ettik. Küçük bir Node.js mikroservisinde bilerek bir tip uyuşmazlığı ve kırık bir unit test bıraktık. Normalde geliştiricinin süreci bellidir: Pipeline fail olur, terminale gidilir, loglar taranır, hata bulunur, düzeltilip tekrar push edilir.

GitLab Duo’nun Root Cause Analysis (Kök Neden Analizi) ajanını devreye soktuğumuzda akış şöyle ilerledi:

# GitLab CI Runner çıktısı:
FAIL src/auth/token.spec.ts
● Test suite failed to run: Type 'string | undefined' is not assignable to type 'string'.

Ajan, hatanın satırını bulmakla kalmadı; ilgili commit geçmişini kontrol etti, ortam değişkenlerindeki eksik kontrolü fark etti ve doğrudan şu formatta bir düzeltme önerdi:

# Duo Workflow'un pipeline logundan çıkardığı otomatik çözüm:
- const token: string = process.env.AUTH_SECRET;
+ const token: string = process.env.AUTH_SECRET ?? '';

Buradaki kritik detay hız değil; bağlam (context). GitLab zaten kodunuzu, CI/CD pipeline’ınızı, issue listenizi ve güvenlik taramalarınızı tuttuğu için ajan harici bir araca göre çok daha fazla bağlama sahip. Ajan dışarıdan gelmiyor, deponun (repo) mutfağında yaşıyor.

Duo Workflow ile Çalışırken Neler Fark Ettik?

Kağıt üzerinde her şey kusursuz görünse de pratikte birkaç pürüz var. Her şeyden önce, bir ajana güvenip merge tuşuna basmak için henüz çok erken. Ajan bazen güvenlik açıklarını kapatırken uygulamanın iş mantığını (business logic) bozacak kestirme yollar seçebiliyor. Kodu incelerken gözünüzü dört açmanız şart.

[Görsel: GitLab Issue panosunda otomatik oluşturulan Merge Request ve ajan tarafından eklenen detaylı açıklama metni]

Artılar ve Eksiler

Platformu birkaç hafta boyunca gerçek projelerde gözlemledikten sonra çıkardığımız bilanço şu şekilde:

Özellik / Durum Artılar (+) Eksiler (-)
Entegrasyon CI/CD, Issue ve Security taramalarıyla tam entegre çalışır. Harici API bağlamaya gerek kalmaz. GitLab ekosistemine sıkı sıkıya bağımlıdır; lokal geliştirme ortamında esnekliği kısıtlıdır.
Hata Çözümü Pipeline hatalarını terminal loglarını okuyarak saniyeler içinde tespit eder. Karmaşık mimarilerde bazen yüzeysel çözümler önerip ana sorunu ıskalayabilir.
Gizlilik & Güvenlik Kod verileriniz modelleri eğitmek için kullanılmaz; kurumsal regülasyonlara uygundur. Özelleştirilmiş şirket içi modelleri GitLab SaaS üzerinde doğrudan çalıştırmak zordur.

Fiyatlandırma ve Cep Yakan Detaylar

Gelelim cüzdan kısmına. GitLab Duo özellikleri ne yazık ki tamamen ücretsiz sunulmuyor.

  • GitLab Duo Pro: Kullanıcı başına aylık $19 (Mevcut Premium veya Ultimate lisansınıza ek olarak ödenir). Kod tamamlama ve chat içerir.
  • GitLab Duo Enterprise: Kullanıcı başına aylık $39. Asıl “agentic” yetenekler, kök neden analizi ve güvenlik açığı giderme özellikleri bu pakette toplanmış.

Bütçesi kısıtlı ekipler veya bireysel geliştiriciler için bu rakamlar yüksek gelecektir. Peki ücretsiz veya açık kaynaklı alternatifler yok mu? Elbette var:

  • Aider: Terminalinizde çalışan, yerel Git deponuzla konuşan ve kendi kendine commit atan şahane bir açık kaynak CLI aracı.
  • Continue.dev: VS Code ve JetBrains için açık kaynaklı eklenti. Kendi API anahtarınızla (veya yerel Ollama modelleriyle) çalıştırabilirsiniz.
  • OpenDevin (All-Hands AI): GitLab Duo Workflow mantığını açık kaynak olarak inşa etmeyi hedefleyen, tarayıcı ve terminal kontrolü yapabilen topluluk projesi.

Geliştiriciler Bu Yeni Döneme Nasıl Hazırlanmalı?

Görünen köy kılavuz istemez: Önümüzdeki 2-3 yıl içinde vaktimizin çoğunu sıfırdan satır satır kod yazarak değil, ajanların yazdığı kodları denetleyerek (code review) geçireceğiz. Bu dönüşüme ayak uydurmak için şimdiden yapabileceğiniz üç şey var:

  1. Daha İyi Dokümantasyon Yazın: Ajanlar projenizin README’sini, CONTRIBUTING rehberini ve mimari şemalarını okuyarak kararlar alır. Bağlam ne kadar netse, ajanın çıktısı o kadar isabetli olur.
  2. Test Kapsamını Artırın: Kod yazan bir yapay zekanız varsa, o kodun doğruluğunu kanıtlayacak sağlam unit ve integration testlerine dünden daha çok ihtiyacınız var.
  3. Küçük Görevlerle Başlayın: Ajanlara doğrudan tüm mimariyi teslim etmek yerine; döküman güncelleme, bağımlılık versiyonu yükseltme ve kırık testleri onarma gibi rutin işleri devrederek sınırlarını öğrenin.

Son Söz

GitLab, Agentic AI dalgasını sadece bir sohbet kutusu eklemek olarak görmüyor; tüm DevOps döngüsünün beyni haline getirmeye çalışıyor. Henüz mükemmel değil, zaman zaman saçmalıyor ve fiyatı küçük ekipler için tuzlu. Ancak yazılım geliştirme süreçlerinin geleceği tam olarak burada şekilleniyor. İşi tamamen yapay zekaya bırakmak akıllıca değil; fakat bir ajanla birlikte çalışmayı öğrenmemek yakında büyük bir dezavantaja dönüşecek.

Category: Genel | LEAVE A COMMENT
Haziran 12 2026

Canlı Ortamda Kontrolden Çıkan Yapay Zeka Ajanları Nasıl Durdurulur? Agentic Rollback Stratejileri

Geleneksel mikroservisler çöktüğünde ne yapacağımızı çok iyi biliyoruz: OOMKilled logunu görürüz, Kubernetes pod’u yeniden başlatır, en kötü ihtimalle bir önceki kararlı imaja geri döneriz. Peki ya canlı ortamda kendi kendine tool çalıştıran, veritabanı şemalarını manipüle eden veya üçüncü parti API limitlerinizi saniyeler içinde eriten bir agentic ai sistemi kontrolden çıkarsa? LLM tabanlı otonom ajanların üretim ortamında yer aldığı bu yeni çağda, klasik incident response süreçleri yetersiz kalıyor. Bu yazıda, kontrolden çıkan otonom sistemleri anında dizginlemek için uygulayabileceğimiz pratik rollback strategies ve ai agent observability mimarilerini doğrudan kod ve konfigürasyon örnekleriyle ele alıyoruz.

Ajan Kaosu: Klasik Rollback Neden İşe Yaramaz?

Klasik bir deployment’ta rollback yaptığınızda, uygulamanın durumunu (state) değil, uygulamanın çalıştırdığı kodu geri alırsınız. Ancak ajanlarda durum farklıdır. Bir ajan kontrolden çıktığında sorun kodun kendisinde değil, ajanın o anki “çalışma belleğinde” (context/memory), aldığı otonom kararlarda ve bu kararlar doğrultusunda tetiklediği harici tool’lardadır.

Örneğin, bir müşteri ilişkileri ajanı düşünün. Bir prompt injection veya beklenmedik bir API yanıtı yüzünden sonsuz bir döngüye (hallucination cascade) girdi ve her döngüde veritabanına yeni kayıtlar ekleyip müşterilere SMS gönderiyor. Bu ajanın pod’unu restart etmek hiçbir işe yaramaz; çünkü ajan ayağa kalktığında veritabanındaki kirli state’i veya mesaj kuyruğundaki bekleyen görevleri okuyup kaldığı yerden çılgınlığına devam edecektir. Bize kod tabanlı değil, state ve ağ tabanlı müdahale mekanizmaları gerekiyor.

1. AI Agent Observability: Felaketi Erken Teşhis Etmek

Bir ajanın raydan çıktığını anlamak için geleneksel CPU/Memory metrikleri tek başına yetersizdir. CPU %10’dayken de bir ajan şirket kredi kartını limitsiz API çağrılarıyla eritiyor olabilir. İzlememiz gereken metrikler ajana özel olmalıdır:

  • Token Velocity (Saniyede Tüketilen Token): Beklenmedik bir şekilde tavan yapan token tüketimi, ajanın bir döngüye girdiğinin en net göstergesidir.
  • Tool Execution Depth (Araç Çağrı Derinliği): Bir ajanın tek bir kullanıcı isteğini çözmek için ardışık olarak çağırdığı araç (tool) sayısı sınırı aşmalıdır.
  • Semantic Drift (Anlamsal Sapma): Ajanın LLM’e gönderdiği sistem prompt’u ile LLM’den dönen yanıtların anlamsal benzerliğinin (cosine similarity) hızla düşmesi.

Aşağıdaki Prometheus metrik tanımı ve bir Python middleware örneğiyle, ajanın her tool çağrısını nasıl takip edebileceğimizi ve limiti aşanları nasıl engelleyeceğimizi görelim:

# Prometheus metriklerini expose etmek için örnek bir Python izleme katmanı
from prometheus_client import Counter, Histogram, Gauge
import time

# Metriklerin tanımlanması
AGENT_TOOL_CALLS = Counter('agent_tool_calls_total', 'Total number of tool executions', ['agent_id', 'tool_name'])
AGENT_LOOP_DEPTH = Gauge('agent_loop_depth', 'Current execution steps for a single task', ['agent_id', 'session_id'])
LLM_TOKEN_USAGE = Counter('llm_token_usage_total', 'Total tokens consumed', ['agent_id', 'token_type'])

class AgentSupervisor:
    def __init__(self, agent_id: str, max_allowed_steps: int = 10):
        self.agent_id = agent_id
        self.max_allowed_steps = max_allowed_steps

    def verify_step(self, session_id: str, current_step: int, tool_name: str):
        # Derinlik kontrolü
        AGENT_LOOP_DEPTH.labels(agent_id=self.agent_id, session_id=session_id).set(current_step)
        AGENT_TOOL_CALLS.labels(agent_id=self.agent_id, tool_name=tool_name).inc()
        
        if current_step > self.max_allowed_steps:
            # Kritik eşik aşıldı, alarm üret ve akışı kes
            raise RuntimeError(f"LIMIT_EXCEEDED: Agent {self.agent_id} exceeded maximum step depth of {self.max_allowed_steps} in session {session_id}!")

2. Acil Müdahale: Network Isolation ve Kill-Switch

Eğer bir ajan döngüye girdiyse ve veritabanını bozuyorsa, ilk yapılması gereken şey ajanın dış dünya ve LLM sağlayıcıları (OpenAI, Anthropic vb.) ile olan bağını kesmektir. SRE ekipleri için en hızlı aksiyon, Kubernetes seviyesinde uygulanacak dinamik bir acil durum ağ politikasıdır (NetworkPolicy).

Aşağıdaki Kubernetes NetworkPolicy örneği, etiketlenmiş ajan pod’larının dış dünyadaki LLM API’lerine (Egress) erişimini saniyeler içinde engellemek için kullanılabilir:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: isolate-rogue-agent
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: agentic-worker
      status: quarantine # Acil durumda bu etiketi set edeceğiz
  policyTypes:
  - Egress
  egress:
  # Sadece cluster içi DNS çözümlemesine izin ver, dış dünyaya giden tüm HTTP/HTTPS trafiğini engelle
  - to:
    - namespaceSelector: {}
      podSelector:
        matchLabels:
          k8s-app: kube-dns
    ports:
    - protocol: UDP
      port: 53

Bir olay anında (incident response sırasında), SRE mühendisi tek bir komutla ajanı karantinaya alabilir:

kubectl label pods -l app=agentic-worker status=quarantine --overwrite -n production

Bu komut çalıştırıldığı an, kural devreye girer. Ajanın LLM API’leri ile olan iletişimi kesilir. Ajan artık yeni kararlar alamayacağı için güvenli bir şekilde durma noktasına (halt state) gelir.

3. State Rollback: Event Sourcing Yaklaşımı

Ajanı durdurduk. Peki ya ajanın veritabanında yaptığı tahribat ne olacak? Örneğin, son 5 dakika içinde 100 farklı kullanıcının yetki tablosunu güncellediyse?

İşte bu yüzden, otonom kararlar alan ajan sistemlerinde doğrudan “State Mutation” yapmak yerine Event Sourcing kullanılması şarttır. Ajan doğrudan veritabanına yazmamalı; bunun yerine yapmak istediği eylemleri birer “Event” olarak fırlatmalıdır. Bu mimari bize olay anında Saga Pattern veya Compensating Transactions (Telafi Edici İşlemler) uygulama şansı verir.

Örnek bir Redis tabanlı event loglama ve geri alma mekanizması kurgulayalım:

import redis
import json

r = redis.Redis(host='localhost', port=6379, db=0)

def execute_agent_action(session_id: str, action_type: str, payload: dict):
    # Ajanın yaptığı her işlemi logla (Saga Log)
    event_id = r.incr(f"session:{session_id}:event_counter")
    event_data = {
        "event_id": event_id,
        "action_type": action_type,
        "payload": payload,
        "status": "executed"
    }
    # Event listesine ekle
    r.rpush(f"session:{session_id}:events", json.dumps(event_data))
    
    # Gerçek işlemi simüle et
    print(f"Executing: {action_type} with {payload}")

def rollback_session(session_id: str):
    # Geriye doğru telafi işlemlerini çalıştır (LIFO order)
    events = r.lrange(f"session:{session_id}:events", 0, -1)
    
    for event_raw in reversed(events):
        event = json.loads(event_raw)
        action_type = event["action_type"]
        payload = event["payload"]
        
        print(f"CRITICAL ROLLBACK: Reversing {action_type} for payload {payload}")
        if action_type == "CREATE_USER":
            # Kullanıcıyı sil veya pasife al
            print(f"Compensating: Deleting user {payload['user_id']}")
        elif action_type == "UPDATE_BALANCE":
            # Bakiyeyi eski haline getir
            print(f"Compensating: Restoring balance for account {payload['account_id']} by -{payload['amount']}")
            
    # Temizlik
    r.delete(f"session:{session_id}:events")

4. Dynamic Prompt Rollback (Sıcak Prompt Değişimi)

Bazen sorun sistem altyapısında değil, ajanın LLM’e gönderdiği “Sistem Prompt’u” üzerindeki mantık hatasıdır. Canlı ortamda ajanın kodunu yeniden deploy etmek (CI/CD pipeline beklemek) yerine, prompt’ları dinamik bir konfigürasyon deposundan (örneğin Consul, Spring Cloud Config veya Redis) beslemek gerekir.

Kritik bir hata anında, prompt versiyonunu saniyeler içinde eski haline (rollback) getirebilmeliyiz:

# Consul veya benzeri bir K/V store üzerinden prompt versiyonunu rollback etme
curl --request PUT \
  --data '{"version": "v1.2.0", "prompt": "You are a helpful assistant. Do NOT execute any DB mutations without direct human approval."}' \
  http://localhost:8500/v1/kv/agents/customer-support/system-prompt

Ajan kodunuz her yeni oturum açılışında bu dinamik değeri okuyacak şekilde tasarlanmalıdır. Böylece tek bir API çağrısıyla tüm ajanın davranış şemasını anında değiştirebilirsiniz.

Özet ve SRE Yol Haritası

Geleceğin DevOps dünyası, sadece statik kodların değil, kendi kararlarını veren dinamik ajanların yönetimi üzerine kuruluyor. Canlı ortamda huzurlu uyumak istiyorsanız, şu adımları üretim mimarinize şimdiden dahil edin:

  1. Ajanlarınızı izole namespace’lerde çalıştırın ve acil durumlar için ağ seviyesinde NetworkPolicy hazır bulundurun.
  2. Ajanların veritabanlarına doğrudan SQL çalıştırmasına asla izin vermeyin; bunun yerine gated tool calling (onay mekanizmaları) ve event-driven mimariler kullanın.
  3. Token-rate limits uygulayarak bütçenizi ve altyapınızı sonsuz döngülerden koruyun.
  4. Prometheus üzerinde agent_loop_depth metriği için acil durum alarmları kurun.
Category: Genel | LEAVE A COMMENT