Laravel AI SDK’nin en iyi özelliklerinden biri, kullanıcıları belirli bir sağlayıcıya mahkum etmemesidir. OpenAI’yi Anthropic ile değiştirmek, Gemini’yi üzerinden bir düşme durumu eklemek mümkün; tek değişiklikle ajans kodunuz aynı kalıyor. Ancak bu durum, ajansınızın web’de gezinti yapması gerektiğinde geçerli değil.
Sağlayıcı bağımsızlık vaadinin bir eksikliği var
Sağlayıcı bağımsızlık vaadinin bir eksikliği var
SDK, ajansların web’e erişimini sağlamak için iki araç sunuyor: WebSearch ve WebFetch. Kullanışlılar, birkaç satır kod ile ajansınız arama yapabilir veya bir sayfayı alabilir. Ancak bunlar SDK’nın birleşik katmanına gerçekten dahil değildir; kullandığınız AI sağlayıcısı tarafından yerel olarak uygulanmıştır. Bu nedenle, bunların kullanılabilirliği tamamen seçtiğiniz modelle alakalıdır.
WebSearch, Anthropic, OpenAI, Gemini ve OpenRouter üzerinde çalışırken, WebFetch yalnızca Anthropic ve Gemini ile işlevseldir. Yani, Groq, DeepSeek, Mistral veya xAI gibi bir geri dönüş zinciri ayarladıysanız ve içlerinden biri aktif sağlayıcı haline gelirse, ajansınız sessizce web tarama yeteneğini kaybeder. Bu, bir hata veya uyarı mesajı olmayan, kaynağı almayı durduran bir ajanstır.
Bu durum, üretim aşamasında keşfedilmesi zor bir durumdur. Bir oran sınırı veya kesinti sorununu aşmak için özel olarak bir geri dönüş zinciri oluşturmuşsunuzdur, ancak bir geri sağlayıcınızın sessizce hiçbir yeteneği olmadığını anlamak zordur.
Çalışsa bile bu pek derin değil
Çalışsa bile bu pek derin değil
Sağlayıcı problemine bir kenara bırakın. WebSearch ve WebFetch‘in her ikisi de mevcut bir sağlayıcıda çalışıyorsa, aldığınız geri dönüşler hamdır: arama sonuçları ya da modelin kendi başına işlem yapması gereken alınmış sayfa içeriği. Bir şematik yapı yoktur. Kesin bir alıntı takibi yoktur. Ajansınızın yapılandırılmış, kaynaklı bir yanıt döndürmesini isterseniz, bu akıl yürütme, kontrol edebileceğiniz veya test edebileceğiniz bir katmanda değil, modelin kendi içsel akıl yürütmesi içinde gerçekleşir.
Birçok kullanım durumu için bu yeterli olacaktır. Ancak yanıtın savunulabilir veya tekrarlanabilir olması gereken durumlar için, bir araştırma asistanı, rekabet raporu veya kullanıcıların “bu nereden geldi?” diye sorabilecekleri her şey için bu yeterli olmayacaktır.
Aracı kendiniz, aktif olan sağlayıcıdan bağımsız bir altyapıda oluşturun
Aracı kendiniz, aktif olan sağlayıcıdan bağımsız bir altyapıda oluşturun
Çözüm, sağlayıcıya özgü web araçlarına güvenmeyi bırakmak ve ajansınıza API desteği olan özel bir araç vermektir. Laravel AI SDK’daki Tool sınıfı tam da bunun içindir.
juststeveking/tabstack size bunun için gerekli istemciyi sağlar. agent()->research() yöntemi, bir soruyu alır, birden fazla kaynaktan arama yapar, bir yanıt sentezler ve alıntılarla birlikte bir raporu tek bir çağrıda geri akıtır.
Paket Laravel entegrasyonu ile birlikte gelmediği için, ilk adım bunu bir hizmet sağlayıcısında bağlamaktır:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use JustSteveKing\Tabstack\Tabstack;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->singleton(Tabstack::class, fn () => Tabstack::make(
apiKey: config(),
));
}
}
Şimdi anahtarı config/services.php‘ye ekleyin:
'tabstack' => [
=> env(),
],
Aracın kendisi. Bu, agent()->research()‘i sarar ve ajansa kaynakları listelenmiş bir rapor sunar:
namespace App\Ai\Tools;
use Illuminate\Contracts\JsonSchema\JsonSchema;
use JustSteveKing\Tabstack\Requests\AgentResearch;
use JustSteveKing\Tabstack\Requests\ResearchMode;
use JustSteveKing\Tabstack\Tabstack;
use Laravel\Ai\Contracts\Tool;
use Laravel\Ai\Tools\Request;
use Stringable;
class WebResearch implements Tool
{
public function __construct(
private readonly Tabstack $tabstack,
) {}
public function description(): Stringable|string
{
return ;
}
public function handle(Request $request): Stringable|string
{
$result = $this->tabstack->agent()->research(
params: new AgentResearch(
query: $request[],
mode: ResearchMode::Fast,
),
)->result();
$sources = collect($result->metadata->get(, []))
->map(fn ($page) => {$page[]{$page[]
->implode(");
return $result->report$sources
}
public function schema(JsonSchema $schema): array
{
return [
=> $schema->string()
->required()
->description(),
];
}
}
Uygulama, akışı bitene kadar engel teşkil eder ve size bir ResearchResult tipinde geri döner. Eğer gelişimi olaylar üzerinden takip etmek isterseniz, istemci ayrıca ->each() ve ham yineleme sağlar; ancak bir araç çağrısı için bloklama sonucu genellikle istediğiniz şeydir.
Aracı diğer araçlar gibi doğrudan ajansa entegre edin:
namespace App\Ai\Agents;
use App\Ai\Tools\WebResearch;
use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Contracts\HasTools;
use Laravel\Ai\Promptable;
class MarketAnalyst implements Agent, HasTools
{
use Promptable;
public function instructions(): string
{
return ;
}
public function tools(): iterable
{
return [
app(WebResearch::class),
];
}
}
Artık sağlayıcıları istediğiniz gibi değiştirebilirsiniz:
$response = (new MarketAnalyst)->prompt(
,
provider: [Lab::OpenAI, Lab::Anthropic, Lab::Groq],
);
Ajansın web araştırma yeteneği, bu üç sağlayıcıdan hangisinin isteğe yanıt verdiğine bağlı değildir. Araç sizin; hangi model çağırsa da aynı şekilde çalışır.
Neden bu, ham bir alımdan da daha iyi
Neden bu, ham bir alımdan da daha iyi
Belirli bir bilinen URL’ye WebFetch ile benzer bir şey yapılamaz. Ancak bu yalnızca hangi sayfanın yanıtı içerdiğini zaten biliyorsanız işe yarar. /research, bilinen bir kaynağı olmayan bir soruya, doğru kaynakları seçip okumaya ve bir yanıtı sentezlemeye göre inşa edilmiştir. Bu, sadece bir sayfayı almaktan farklı bir işleme sahiptir ve bunun SDK’nın yerleşik araçları neden denemediği bu yüzden anlaşılmaktadır.
Ana mesaj
Ana mesaj
Laravel AI SDK’nın sağlayıcı bağımsızlığı, en iyi özelliklerinden biridir; ta ki kullanmadığınız bir aracın buna dahil olmadığını fark edene kadar. Web erişimi, ajansın hangi modelin isteğe yanıt verdiğine bağlı olarak kaybolmamalıdır. Kendi geliştirici olduğunuz bir Tool sınıfı oluşturarak bunu API ile desteklemenin yanı sıra, mevcut sağlayıcının sunduguna güvenmek yerine, bu vaadi bozmadan sürdürür.
Laravel AI SDK ile ajanslar geliştiriyorsanız ve böyle bir araca ihtiyaç duyuyorsanız, öncelikle juststeveking/tabstack’ın Packagist’ten indirilmesini öneriyorum.
Kaynak: Orijinal Makale


