GNL
Dokümanlar menüsü
Core · Ücretsiz@gnldev/processors

Semantik tool-arama (toolSearch)

Onlarca/yüzlerce tool arasından son user mesajına embedding benzerliğiyle en alakalı topK tool'u seçen processor; seçim ctx.step ile journal'lanır → resume/replay'de embed yeniden çağrılmaz.

Ne işe yarar / ne zaman kullanılır#

Bir agent'ın onlarca ya da yüzlerce tool'u olduğunda hepsini modele göstermek iki soruna yol açar: bağlam şişer (token maliyeti) ve seçim kalitesi düşer. toolSearch bir processTools processor'ıdır: son user mesajını bir sorgu sinyali olarak alır, tool adı+açıklamalarını embedding'e çevirir, kosinüs benzerliğiyle en alakalı topK aracı seçer, sonra modeli yalnızca onlarla koşturur — zaten kayıtlı araçların üstünde semantik arama ToolSearchProcessor/Skills semantik tool-arama paritesidir.

Seçim non-deterministiktir (embed çağrısı içerir) — bu yüzden seçilen tool adları ctx.step ile journal'lanır. Resume/replay'de embed yeniden çağrılmaz; model tam olarak aynı tool alt kümesini görür. Journal'daki seçimde artık var olmayan tool adları sessizce atlanır (tool seti değişse bile replay kırılmaz).

Kullanım#

Processor'ı createGnl'in ortak processors:'ına ya da tek bir agent'a verin. Güvenli-taraf davranışı: sorgu sinyali yoksa ya da tool sayısı zaten topK'yi aşmıyorsa daraltma yapmaz (hepsi görünür kalır).

toolSearch processor
import { toolSearch } from '@gnldev/processors';

const gnl = createGnl({
  storage,
  processors: [
    toolSearch({
      embed,            // text number[] (wires into the AI SDK embed)
      topK: 8,          // how many of the most relevant tools to show the model (default 8)
      always: ['final'],// always included (never scored, never counted toward topK)
      minScore: 0.2,    // anything below this similarity is dropped even if it would fit in topK
    }),
  ],
  agents: { assistant: { model, tools: bigToolset /* 100+ tool */ } },
});

Determinizm ve güvenli taraf#

Seçim ctx.step('tool-search', ...) içinde koşar → journal'a yalnız nihai tool adları yazılır. Eşit skorda tool adına göre stabil sıralama uygulanır (tekrar-üretilebilirlik).processTools yüzeyi bu iş için async'e genişletildi ve ctx.input eklendi — geriye dönük uyumlu.

İpucu
always ile her zaman görünmesi gereken çekirdek araçları (ör. bir final/tamamla tool'u) skorlamanın dışında tutarsınız; bunlar topK bütçesini harcamaz.

API referansı#

fntoolSearch

(ToolSearchOptions) → Processor. processTools içinde son user mesajına en yakın topK tool'u seçer; seçim journal'lı.

typeToolSearchOptions

{ embed, topK?=8, always?, minScore? } — embed zorunlu; always skorlanmaz, minScore eşiği eler.

typeProcessor

@gnldev/durable processor sözleşmesi; toolSearch processTools kancasını uygular.