Modelden otonom ajana: Responses API'nin bir bilgisayar ortamıyla güçlendirilmesi
Yazan: Bo Xu, Danny Zhang ve Rohit Arunachalam
Bugün, belirli görevlerde iyi performans gösteren modellerden, karmaşık iş akışlarını yürütebilen otonom ajanlara doğru bir geçiş yaşanıyor. Modele komut vererek, sadece eğitilmiş bilgi ve akıl yürütme kapasitesinden yararlanabilirsiniz. Ancak modele bir bilgisayar ortamı sağlarsanız; hizmet çalıştırma, API'lerden veri talep etme veya elektronik tablolar ya da raporlar gibi daha kullanışlı yapıtlar üretme gibi çok daha geniş bir kullanım alanını mümkün kılarsınız.
Otonom ajan geliştirmeye başladığınızda ise bazı pratik sorunlar ortaya çıkar: Ara dosyalar nereye yerleştirilecek, büyük tabloları komuta yapıştırmadan nasıl işleyeceksiniz, iş akışına güvenlik riski oluşturmadan ağ erişimi nasıl sağlanacak ve kendi iş akışı sisteminizi kurmadan zaman aşımı ile yeniden deneme süreçleri nasıl yönetilecek?
Geliştiricilerin kendi yürütme ortamlarını kurmasını beklemek yerine, gerçek dünya görevlerini güvenilir biçimde çalıştırabilmeleri için Responses API(yeni bir pencerede açılır)'yi bir bilgisayar ortamıyla destekleyen gerekli bileşenleri geliştirdik.
OpenAI'ın Responses API'si, shell aracı ve barındırılan kapsayıcı çalışma alanı birlikte, bu pratik sorunları çözmek için tasarlanmıştır. Model, adımları ve komutları önerir; platform ise bunları, girdiler ve çıktılar için bir dosya sistemi, isteğe bağlı yapılandırılmış depolama (örneğin, SQLite) ve kısıtlı ağ erişimi sunan izole bir ortamda çalıştırır.
Bu yazıda, otonom ajanlar için bir bilgisayar ortamını nasıl oluşturduğumuzu ayrıntılarıyla anlatacak ve bunun daha hızlı, daha tekrarlanabilir ve daha güvenli üretim iş akışlarında nasıl kullanılabileceğine dair ilk çıkarımlarımızı paylaşacağız.
İyi bir otonom ajan iş akışı, sağlam bir yürütme döngüsüyle başlar: model; dosya okuma ya da API üzerinden verilerin getirilmesi gibi bir işlem önerir; platform bu işlemi çalıştırır ve elde edilen sonuç bir sonraki adımın girdisi olur. Bu döngünün en basit halini göstermek için önce shell aracıyla başlayacağız; ardından kapsayıcı çalışma alanını, ağ erişimini, yeniden kullanılabilir becerileri ve bağlam sıkıştırmayı ele alacağız.
Shell aracını anlamak için, bir dil modelinin araçları genel olarak nasıl kullandığının anlaşılması faydalıdır. Buna bir fonksiyon çağırmak ya da bir bilgisayarla etkileşim kurmak gibi örnekler verilebilir. Eğitim sürecinde modele, araçların nasıl kullanıldığı ve bunun nasıl sonuçlar doğurduğu adım adım gösterilir. Bu sayede model, bir aracı ne zaman ve nasıl kullanacağına karar vermeyi öğrenir. "Bir aracı kullanmak" dediğimizde aslında model yalnızca bir araç çağrısı önerir. Bu çağrıyı kendi başına çalıştıramaz.
Shell aracı, modeli önemli ölçüde daha güçlü hale getirir. Komut satırı üzerinden bir bilgisayarla etkileşim kurarak metin aramadan API istekleri göndermeye kadar çok çeşitli görevleri yerine getirebilir. Yaygın Unix araçlarına dayanan shell aracımız, beklenen tüm temel işlevleri sunar; grep, curl ve awk gibi yardımcı araçlar hazır olarak bulunur.
Mevcut kod yorumlayıcımız yalnızca Python çalıştırabilirken, shell aracı çok daha geniş bir kullanım alanı sunar; örneğin, Go veya Java programlarını çalıştırabilir ya da bir Node.js sunucusu başlatabilir. Bu esneklik, modelin karmaşık otonom ajan görevlerini yerine getirmesini mümkün kılar.
Model tek başına yalnızca shell komutları önerebilir. Peki bu komutlar nasıl çalıştırılır? Bunun için bir orkestratöre ihtiyaç vardır. Orkestratör; model çıktısını alır, gerekli araç çağrılarını yapar ve görev tamamlanıncaya kadar araçlardan gelen yanıtları bir döngü içinde yeniden modele iletir.
Responses API, geliştiricilerin OpenAI modelleriyle etkileşim kurmasını sağlar. Özel araçlarla birlikte kullanıldığında Responses API, denetimi istemciye bırakır ve araçları çalıştırmak için istemcinin kendi donanım yapısını kurmasını gerektirir. Ancak bu API, model ile barındırılan araçlar arasında hazır orkestrasyon da sağlayabilir.
Responses API bir komut aldığında, model bağlamını oluşturur: kullanıcı istemi, önceki konuşma durumu ve araç talimatları bu bağlama dahildir. Shell yürütmesinin çalışabilmesi için komutta shell aracının kullanılacağının belirtilmesi gerekir. Ayrıca seçilen modelin shell komutları önermeye uygun şekilde eğitilmiş olması gerekir. GPT‑5.2 ve sonrası modeller bu amaçla eğitilmiştir. Model, tüm bu bağlamı kullanarak bir sonraki işleme karar verir. Shell yürütmesini seçerse, Responses API hizmetine bir veya daha fazla shell komutu getirir. API hizmeti bu komutları kapsayıcı çalışma ortamına iletir, shell çıktısını akış halinde geri alır ve bir sonraki isteğin bağlamı içinde modele aktarır. Model daha sonra sonuçları inceleyebilir, takip komutları verebilir veya nihai bir yanıt oluşturabilir. Responses API, model ek shell komutları önermeyi bırakıp bir tamamlanma döndürene kadar bu döngüyü sürdürür.
Responses API bir shell komutu çalıştırdığında, kapsayıcı hizmetiyle olan akış bağlantısını korur. Çıktı üretildikçe API bunu neredeyse gerçek zamanlı olarak modele iletir. Böylece model, daha fazla çıktı bekleyip beklememeye, yeni bir komut çalıştırmaya ya da nihai yanıta geçmeye karar verebilir.
Responses API, shell komutlarının çıktısını akış olarak iletir.
Model, tek bir adımda birden fazla shell komutu önerebilir ve Responses API bunları ayrı kapsayıcı oturumları üzerinden eşzamanlı olarak çalıştırabilir. Her oturum, çıktıyı bağımsız olarak akış halinde iletir; API de bu akışları çoklayarak bağlam içinde yapılandırılmış araç çıktıları olarak yeniden sunar. Başka bir deyişle, otonom ajan döngüsü; dosya arama, veri getirme ve ara sonuçları doğrulama gibi işleri paralel olarak yürütebilir.
Komut; dosya işlemleri ya da veri işleme içerdiğinde shell çıktısı çok büyüyebilir ve faydalı bir sinyal eklemeden bağlam bütçesini tüketebilir. Bunu denetim altında tutmak için model, her komut için bir çıktı üst sınırı belirler. Responses API bu sınırı uygular ve çıktının hem başını hem de sonunu koruyan, atlanan bölümleri ise açıkça işaretleyen sınırlı bir sonuç verir. Örneğin, çıktıyı 1000 karakterle sınırlayabilirsiniz; bu durumda baş ve son korunur:
başlangıçtaki metin ... 1000 karakter atlandı ... sondaki metin
Birlikte değerlendirildiğinde, eşzamanlı yürütme ve sınırlı çıktı; otonom ajan döngüsünü hem hızlı hem de bağlam açısından verimli kılar. Böylece model, ham terminal çıktılarıyla boğulmak yerine ilgili sonuçlar üzerinde akıl yürütmeyi sürdürebilir.
Otonom ajan döngülerinde karşılaşılan başlıca sorunlardan biri, bazı görevlerin uzun süre çalışabilmesidir. Bu tür uzun görevler bağlam penceresini hızla doldurur. Oysa bağlam penceresi, hem adımlar arasında hem de otonom ajanlar arasında sürekliliği korumak açısından kritik öneme sahiptir. Bir otonom ajanın bir beceriyi çağırdığını, yanıt aldığını, ardından araç çağrıları ve akıl yürütme özetleri eklediğini düşünün; sınırlı bağlam penceresi çok kısa sürede dolabilir. Otonom ajan çalışmayı sürdürürken önemli bağlamın kaybolmaması için, kritik ayrıntıları koruyup gereksiz olanları ayıklayan bir mekanizmaya ihtiyaç duyarız. Geliştiricilerin özel özetleme ya da durum taşıma sistemleri tasarlayıp sürdürmesini beklemek yerine, modelin çalışma biçimi ve eğitim yapısıyla uyumlu olacak şekilde Responses API'ye yerleşik bir sıkıştırma mekanizması ekledik.
En yeni modellerimiz, önceki konuşma durumunu analiz ederek önemli bilgileri koruyan, şifrelenmiş ve token açısından verimli bir temsil oluşturan bir sıkıştırma öğesi üretecek şekilde eğitilmiştir. Sıkıştırmadan sonra yeni bağlam penceresi, bu sıkıştırma öğesi ile önceki pencerenin yüksek değer taşıyan bölümlerinden oluşur. Bu sayede iş akışları, özellikle çok adımlı ve araç odaklı uzun oturumlarda, bağlam penceresi sınırları aşılsa bile tutarlı biçimde sürdürülebilir. Codex, uzun süren kodlama görevlerini ve yinelemeli araç kullanımını kalite kaybı yaşamadan sürdürebilmek için bu mekanizmaya dayanır.
Sıkıştırma, sunucu tarafında yerleşik olarak ya da bağımsız bir "/compact" uç noktası üzerinden kullanılabilir. Sunucu tarafındaki sıkıştırma, bir eşik belirlemenize olanak tanır; sistem de sıkıştırmanın ne zaman yapılacağını otomatik olarak yönetir. Böylece karmaşık istemci tarafı mantığına ihtiyaç kalmaz. Sistem, sıkıştırmadan önce küçük aşım paylarına izin vererek etkili girdi bağlam penceresini bir miktar genişletir. Böylece sınıra yakın talepler reddedilmek yerine işlenip sıkıştırılabilir. Model eğitimi geliştikçe, yerleşik sıkıştırma çözümü de her yeni OpenAI model sürümüyle birlikte gelişmeye devam eder.
Codex, bu sıkıştırma sistemi geliştirilirken yalnızca bir uygulama alanı değil, aynı zamanda erken kullanıcılarından biri olarak da katkı sağladı. Bir Codex örneği, sıkıştırma sınırına ulaştığında durumu incelemek için ikinci bir örnek devreye alınıyordu. Sonuçta Codex, bu sorun üzerinde çalışarak yerleşik ve etkili bir sıkıştırma sistemi geliştirilmesine katkı sağladı. Codex'in kendini inceleme ve iyileştirme yeteneği, OpenAI'da çalışmanın en ilgi çekici yönlerinden biri haline geldi. Çoğu araç, kullanıcıdan onu nasıl kullanacağını öğrenmesini bekler; Codex ise bizimle birlikte öğrenir.
Şimdi, durum ve kaynakları ele alalım. Kapsayıcı yalnızca komutların çalıştırıldığı bir ortam değildir; aynı zamanda model için bir çalışma bağlamı da sağlar. Kapsayıcının içinde dosyaları okuyabilir, veritabanlarını sorgulayabilir ve ağ politikası denetimleri altında harici sistemlere erişebilir.
Kapsayıcı bağlamının ilk bileşeni, kaynakların karşıya yüklenmesini, organize edilmesini ve yönetilmesini sağlayan dosya sistemidir. Modele, mevcut verilerin bir haritasını sunmak ve geniş, gürültülü taramalar yerine hedefe yönelik dosya işlemleri seçmesini kolaylaştırmak için kapsayıcı ve dosya(yeni bir pencerede açılır) API'leri geliştirdik.
Yaygın hatalı yaklaşımlardan biri, tüm girdileri doğrudan prompt bağlamına yüklemektir. Girdiler büyüdükçe komutun aşırı dolması hem maliyetli hale gelir hem de modelin bu içerikte yolunu bulmasını zorlaştırır. Daha iyi bir yaklaşım ise kaynakları aşamalı olarak kapsayıcı dosya sistemine yerleştirmek ve modelin, shell komutlarıyla neyi açacağına, ayrıştıracağına ya da dönüştüreceğine karar vermesini sağlamaktır. Tıpkı insanlar gibi modeller de düzenli yapılandırılmış bilgiyle daha iyi çalışır.
Kapsayıcı bağlamının ikinci bileşeni veritabanlarıdır. Pek çok durumda geliştiricilere, yapılandırılmış verileri SQLite gibi veritabanlarında saklamalarını ve sorgulamaları buradan yapmalarını öneriyoruz. Örneğin, tüm elektronik tabloyu komuta kopyalamak yerine modele tabloların açıklamasını (hangi sütunların bulunduğu ve bunların ne anlama geldiği gibi) verebilirsiniz. Böylece model, ihtiyaç duyduğu satırları doğrudan sorgulayabilir.
Örneğin, "Bu çeyrekte satışları düşen ürünler hangileri?" diye sorulduğunda model tüm tabloyu baştan sona taramak yerine yalnızca ilgili satırları sorgular. Bu yaklaşım daha hızlıdır, daha düşük maliyetlidir ve büyük veri kümeleri için daha iyi ölçeklenir.
Kapsayıcı bağlamının üçüncü bileşeni, ağ erişimidir ve bu, otonom ajan iş yüklerinin temel bir parçasını oluşturur. Otonom ajan iş akışı; canlı verilerin getirilmesini, harici API'lerin çağrılmasını veya paket yüklenmesini gerektirebilir. Aynı zamanda kapsayıcılara sınırsız internet erişimi vermek risklidir. Bu durum, bilgilerin harici web sitelerine sızmasına, hassas dahili ya da üçüncü taraf sistemlerle istemeden etkileşime girilmesine ve kimlik bilgisi sızıntısı ve veri dışa aktarımı risklerinin artmasına yol açabilir.
Otonom ajanların sağladığı faydayı azaltmadan bu riskleri ele almak için sidecar çıkış proxy'si kullanan, barındırılan kapsayıcılar geliştirdik. Tüm giden ağ talepleri; izin verilenler listeleri ve erişim denetimlerini uygulayan merkezi bir politika katmanından geçer. Bu yapı aynı zamanda trafiğin izlenebilir kalmasını da sağlar. Kimlik bilgileri için çıkış noktasında alan adı kapsamlı gizli anahtar enjeksiyonu kullanıyoruz. Model ve kapsayıcı yalnızca yer tutucuları görür. Gerçek gizli değerler, modelin görebileceği bağlamın dışında kalır ve yalnızca onaylanmış hedefler için uygulanır. Bu yaklaşım, doğrulanmış harici çağrılara izin verirken sızıntı riskini azaltır.
Shell komutları güçlüdür; ancak birçok görev, aynı çok adımlı kalıpları tekrar tekrar izler. Otonom ajanlar her seferinde iş akışını yeniden keşfetmek zorunda kalır; yeniden plan yapar, komutları yeniden çalıştırır ve kuralları yeniden öğrenir. Bu da tutarsız sonuçlara ve boşa harcanan yürütmelere yol açar. Otonom ajan becerileri(yeni bir pencerede açılır), bu kalıpları yeniden kullanılabilir ve birleştirilebilir yapı taşlarına dönüştürür. Somut olarak bir beceri, içinde "SKILL.md(yeni bir pencerede açılır)" dosyası bulunan bir klasör paketidir. Bu dosya, meta verileri ve talimatları içerir; ayrıca API tanımları ve arayüz bileşenleri gibi destekleyici kaynakları da kapsar.
Bu yapı, daha önce açıkladığımız çalışma zamanı mimarisiyle doğal biçimde örtüşür. Kapsayıcı, kalıcı dosyaları ve yürütme bağlamını sağlar; shell aracı ise yürütme arayüzünü sunar. Bu ikisi bir araya geldiğinde model, ihtiyaç duyduğunda shell komutlarıyla ("ls", "cat" vb.) beceri dosyalarını keşfedebilir, talimatları yorumlayabilir ve beceri komut dosyalarını aynı otonom ajan döngüsü içinde çalıştırabilir.
OpenAI platformunda becerileri yönetmek için API'ler(yeni bir pencerede açılır) sunuyoruz. Geliştiriciler, beceri klasörlerini versiyonlu paketler olarak karşıya yükleyip saklar; bu paketler daha sonra beceri kimliği ile yeniden çağrılabilir. Modele komut gönderilmeden önce Responses API, ilgili beceriyi yükler ve model bağlamına dahil eder. Bu süreç deterministiktir:
- Beceri meta verilerini (ad ve açıklama dahil) getirir.
- Beceri paketini getirir, kapsayıcıya kopyalar ve açar.
- Model bağlamını beceri meta verileri ve kapsayıcı yolu ile günceller.
Bir becerinin ilgili olup olmadığına karar verirken model, talimatlarını aşamalı olarak inceler ve komut dosyalarını kapsayıcı içindeki shell komutları aracılığıyla çalıştırır.
Kısacası: Responses API, orkestrasyon sağlar; shell aracı, yürütülebilir işlemler sağlar; barındırılan kapsayıcı, kalıcı çalışma zamanı bağlamı sağlar; beceriler, yeniden kullanılabilir iş akışı mantığını katmanlandırır ve sıkıştırma da bir otonom ajanın ihtiyaç duyduğu bağlamla uzun süre çalışmasını mümkün kılar.
Bu temel bileşenler sayesinde tek bir komut, doğru becerinin keşfedilmesinden verilerin getirilmesine, yerel yapılandırılmış bir duruma dönüştürülmesine, verimli biçimde sorgulanmasına ve kalıcı çıktılar üretilmesine kadar uzanan uçtan uca bir iş akışını başlatabilir.
Aşağıdaki diyagramda, bu sistemin canlı verilerden bir elektronik tablo oluştururken nasıl çalıştığı gösterilmektedir.
Responses API, otonom ajan tabanlı bir görevi orkestre eder
Shell aracını ve bilgisayar ortamını uçtan uca iş akışları için bir araya getirmeye yönelik ayrıntılı bir örnek için, bir becerinin paketlenmesini ve Responses API üzerinden çalıştırılmasını adım adım anlatan geliştirici blog yazımıza(yeni bir pencerede açılır) ve tarif kitabımıza(yeni bir pencerede açılır) göz atın.
Geliştiricilerin bu temel bileşenlerle neler oluşturacağını görmek için heyecanlıyız. Dil modelleri yalnızca metin, görsel ve ses üretmekle sınırlı kalmamalıdır. Platformumuzu, karmaşık ve gerçek dünya görevlerini ölçekli biçimde ele alabilecek şekilde geliştirmeyi sürdüreceğiz.


