Araçlar
Bir araç, AI’ın çağırabileceği adlandırılmış bir eylemdir ve yazılı girdilere sahiptir — örneğinsend_email(to, subject, body). Araçlar bir becerinin tools.ts dosyasında bildirilir ve uygulamanızın sunduğu araçlar için, bileşenlerinizden birinde bir HTTP rotası tarafından desteklenir. Bu sayfa araç sözleşmesinin tek kaynağıdır; Beceriler tools.ts dosyasının nerede bulunduğunu kapsar.
Araç bildirme
tools.ts dosyasındaki her giriş, sağlayıcı açısından güvenli bir name, kullanıcı dostu bir displayName, bir description, bir Zod input şeması ve Kazzle’nin çağırdığını belirten bir target içerir.
Hedefler
target, bir araç veya gerekli eylem düğmesi için yeniden kullanılabilir bir adrestir. Doğrudan bir AI araç çağrısı ve bir düğme tıklaması aynı hedef nesnesini kullanabilir, böylece her ikisi de aynı kodu çalıştırır.
HTTP hedefleri aynı istek alanlarını kullanır:
body: '${input}' yazın.
Referanslar
Kazzle, gönderimden önce HTTP hedefquery, headers, body ve url alanlarındaki referansları çözer:
${input}— tüm araç girdisi veya tüm düğme girdisi.${input.path}— girdiden iç içe bir değer.${env.NAME}— sahip olan uygulama bileşeninin bildirilenenv.collection+env.environmentdosyasından adlandırılmış bir ortam değişkeni.
${input.name} metni gerektiğinde $${input.name} kullanın.
İşleyici isteği
app hedefi için, hedef bileşende eşleşen rotayı ekleyin. body: '${input}' ile Kazzle, yazılı girdisini JSON gövdesi olarak gönderir:
app hedefleri ayrıca şunları alır:
Uygulama hedefleri
Authorization başlığını headers aracılığıyla ayarlayamaz; Kazzle bu başlığa sahiptir. İşleyici iş parçacığı vs Araçlar API’sini ayırt etmesi gerektiğinde @kazzle/app/tools dosyasından toolContext(req) ile bağlamı okuyun.
Eşleşen bir rotası olmayan bildirilen bir araç faydalı bir şey yapmaz — her ikisini birlikte ekleyin. tools.json desteklenmez; uygulama derleyicisi bir tane bulursa başarısız olur.
İşleyici yanıtı
Düz metin veya en fazla üç kanallı JSON döndürün:content— AI’ın okuduğu düz sonuç (modele beslenmiş). Gerekli.markdown— isteğe bağlı. Araç kartında işlenen kısa zengin metin özeti (react-markdown; ham HTML kaçırılır). Bir cümle, küçük bir liste, satır içi bir bağlantı için iyidir. Çıplak bir göreli yol, ölü önceden biçimlendirilmiş metin olarak işlenir — bağlantılar mutlak olmalıdır.embedUrl— isteğe bağlı. Uygulamanızın sunduğu mutlak URL; kart bunu korumalı bir iframe’de işler. Gerçek, tam genişlikli bir UI göstermenin yolu budur — bir bağlantı ekranı, bir pano, bir grafik. Uygulamanız sayfayı barındırır ve sahiptir, bu nedenle kendi arka ucunuz, tanımlama bilgileri ve OAuth’a karşı tamamen etkileşimli olabilir. Sürücüye hiçbir şey yazılmaz.
embedUrl markdown üzerinde kazanır. Her zaman anlamlı bir content tutun — AI’ın okuduğu budur.
Gerekli eylem
Bir uygulama aracı, bir kullanıcı (veya cihaz) eylemi gerektiğinde iş parçacığını duraklatabilir.type: 'action_required' ile bir kart başlığı ve düğmeleri döndürün. Yalnızca toolContext(req).source === 'thread' olduğunda geçerlidir — Araçlar API’sı üzerinde (source: 'api'), bunun yerine normal bir etki alanı hatası döndürün.
/chat/resume aracılığıyla devam eder. Eşleşen istemciler yazar düğmelerini görür; eşleşmeyen istemciler yine de Atla/İptal artı ” üzerinde devam et” seçeneğini görür. target olmayan bir düğme, input dosyasını araç sonucu olarak gönderir. Hedefi olan bir düğme önce bu hedefi çalıştırır, ardından hedef sonucunu araç sonucu olarak kullanır.
Zengin UI — uygulama tarafından barındırılan bir sayfayı gömün
Bir aracın sonucu görsel veya etkileşimli olduğunda (bir bağlantı ekranı, bir grafik, bir özet panosu), sayfayı bileşenlerinizden birinden sunun ve mutlak URL’siniembedUrl olarak döndürün. URL’yi enjekte edilen bileşen URL’sinden oluşturun — asla göreli bir yol değil.
embedUrl tercih edin: uygulamanız zaten sayfalar sunuyor, UI etkileşimli ve kodunuzla sürümlenmiş kalıyor ve hiçbir çağrı başına yapıt hiçbir yere yazılmıyor.