Tools
Wyszukiwanie narzędzi
Wyszukiwanie narzędzi to eksperymentalna funkcja agenta PI w OpenClaw. Daje agentom PI jeden zwięzły sposób odkrywania i wywoływania dużych katalogów narzędzi. Przydaje się, gdy uruchomienie ma wiele dostępnych narzędzi, ale model prawdopodobnie będzie potrzebował tylko kilku z nich.
Ta strona dokumentuje wyszukiwanie narzędzi PI w OpenClaw. Nie jest to natywne dla Codex
wyszukiwanie narzędzi ani powierzchnia narzędzi dynamicznych. Natywny dla Codex tryb kodu,
wyszukiwanie narzędzi, odroczone narzędzia dynamiczne i zagnieżdżone wywołania narzędzi są stabilnymi
powierzchniami harnessu Codex i nie zależą od tools.toolSearch.
Po włączeniu dla PI model domyślnie otrzymuje jedno narzędzie tool_search_code.
To narzędzie uruchamia krótki kod JavaScript w izolowanym podprocesie Node z
mostem openclaw.tools:
const hits = await openclaw.tools.search("create a GitHub issue");
const tool = await openclaw.tools.describe(hits[0].id);
return await openclaw.tools.call(tool.id, {
title: "Crash on startup",
body: "Steps to reproduce...",
});
Katalog może obejmować narzędzia OpenClaw, narzędzia pluginów, narzędzia MCP oraz narzędzia dostarczone przez klienta. Model nie widzi z góry każdego pełnego schematu. Zamiast tego przeszukuje zwięzłe deskryptory, opisuje wybrane narzędzie, gdy potrzebuje dokładnego schematu, i wywołuje to narzędzie przez OpenClaw.
Uruchomienia harnessu Codex nie otrzymują tych eksperymentalnych kontrolek wyszukiwania narzędzi OpenClaw. OpenClaw przekazuje możliwości produktu do Codex jako narzędzia dynamiczne, a Codex odpowiada za stabilny natywny tryb kodu, natywne wyszukiwanie narzędzi, odroczone narzędzia dynamiczne i zagnieżdżone wywołania narzędzi.
Jak działa tura
W czasie planowania osadzony runner PI buduje efektywny katalog dla uruchomienia:
- Rozwiązuje aktywną politykę narzędzi dla agenta, profilu, sandboxa i sesji.
- Wypisuje kwalifikujące się narzędzia OpenClaw i pluginów.
- Wypisuje kwalifikujące się narzędzia MCP przez runtime MCP sesji.
- Dodaje kwalifikujące się narzędzia klienta dostarczone dla bieżącego uruchomienia.
- Indeksuje zwięzłe deskryptory do wyszukiwania.
- Udostępnia modelowi most kodu PI albo strukturalne narzędzia awaryjne.
W czasie wykonywania każde rzeczywiste wywołanie narzędzia wraca do OpenClaw. Izolowany runtime Node
nie przechowuje implementacji pluginów, obiektów klienta MCP ani sekretów.
openclaw.tools.call(...) przechodzi przez most z powrotem do Gateway, gdzie
nadal obowiązują normalne zasady polityk, zatwierdzania, hooków, logowania i obsługi wyników.
Tryby
tools.toolSearch ma dwa tryby widoczne dla modelu:
code: udostępniatool_search_code, domyślny zwięzły most JavaScript.tools: udostępniatool_search,tool_describeitool_calljako zwykłe narzędzia strukturalne dla providerów, którzy nie powinni otrzymywać kodu.
Oba tryby używają tego samego katalogu i ścieżki wykonywania. Jedyna różnica to
kształt widoczny dla modelu. Jeśli bieżący runtime nie może uruchomić izolowanego podprocesu Node
trybu kodu, domyślny tryb code przechodzi na tools przed
kompaktowaniem katalogu.
Oba tryby są eksperymentalne. Preferuj bezpośrednie udostępnianie narzędzi dla małych katalogów narzędzi PI i preferuj natywne stabilne powierzchnie Codex dla uruchomień harnessu Codex.
Nie ma osobnej konfiguracji wyboru źródeł. Gdy wyszukiwanie narzędzi jest włączone, katalog obejmuje kwalifikujące się narzędzia OpenClaw, MCP i klienta po normalnym filtrowaniu polityk.
Dlaczego to istnieje
Duże katalogi są przydatne, ale kosztowne. Wysyłanie każdego schematu narzędzia do modelu powiększa żądanie, spowalnia planowanie i zwiększa ryzyko przypadkowego wyboru narzędzia.
Wyszukiwanie narzędzi zmienia kształt:
- narzędzia bezpośrednie: model widzi każdy wybrany schemat przed pierwszym tokenem
- tryb kodu wyszukiwania narzędzi: model widzi jedno zwięzłe narzędzie kodowe i krótki kontrakt API
- tryb narzędzi wyszukiwania narzędzi: model widzi trzy zwięzłe strukturalne narzędzia awaryjne
- podczas tury: model ładuje tylko schematy narzędzi, których faktycznie potrzebuje
Bezpośrednie udostępnianie narzędzi nadal jest właściwą wartością domyślną dla małych katalogów. Wyszukiwanie narzędzi sprawdza się najlepiej, gdy jedno uruchomienie może widzieć wiele narzędzi, zwłaszcza z serwerów MCP lub narzędzi aplikacji dostarczonych przez klienta.
API
openclaw.tools.search(query, options?)
Przeszukuje efektywny katalog dla bieżącego uruchomienia. Wyniki są zwięzłe i bezpieczne do ponownego umieszczenia w kontekście promptu.
const hits = await openclaw.tools.search("calendar event", { limit: 5 });
openclaw.tools.describe(id)
Ładuje pełne metadane dla jednego wyniku wyszukiwania, w tym dokładny schemat wejściowy.
const calendarCreate = await openclaw.tools.describe("mcp:calendar:create_event");
openclaw.tools.call(id, args)
Wywołuje wybrane narzędzie przez OpenClaw.
await openclaw.tools.call(calendarCreate.id, {
summary: "Planning",
start: "2026-05-09T14:00:00Z",
});
Strukturalny tryb awaryjny udostępnia te same operacje jako narzędzia:
tool_searchtool_describetool_call
Granica runtime
Most kodu działa w krótkotrwałym podprocesie Node. Podproces uruchamia się z włączonym trybem uprawnień Node, pustym środowiskiem, bez uprawnień do systemu plików ani sieci oraz bez uprawnień do podprocesów lub workerów. OpenClaw wymusza limit czasu ściennego w procesie nadrzędnym i zabija podproces po przekroczeniu limitu, także po kontynuacjach async.
Runtime udostępnia tylko:
console.log,console.warniconsole.erroropenclaw.tools.searchopenclaw.tools.describeopenclaw.tools.call
Normalne zachowanie OpenClaw nadal dotyczy końcowych wywołań:
- polityki zezwalania i odmawiania narzędzi
- ograniczenia narzędzi per agent i per sandbox
- bramkowanie tylko dla właścicieli
- hooki zatwierdzania
- hooki pluginu
before_tool_call - tożsamość sesji, logi i telemetria
Konfiguracja
Włącz wyszukiwanie narzędzi dla uruchomień PI z domyślnym mostem kodu:
openclaw config set tools.toolSearch true
Równoważny JSON:
{
tools: {
toolSearch: true,
},
}
Zamiast tego użyj strukturalnych narzędzi awaryjnych dla uruchomień PI:
{
tools: {
toolSearch: {
mode: "tools",
},
},
}
Dostosuj limit czasu trybu kodu i limity wyników wyszukiwania:
{
tools: {
toolSearch: {
mode: "code",
codeTimeoutMs: 10000,
searchDefaultLimit: 8,
maxSearchLimit: 20,
},
},
}
Wyłącz je:
{
tools: {
toolSearch: false,
},
}
Prompt i telemetria
Wyszukiwanie narzędzi zapisuje wystarczającą telemetrię, aby porównać je z bezpośrednim udostępnianiem narzędzi:
- łączna liczba bajtów zserializowanych narzędzi i promptu wysłanych do harnessu
- rozmiar katalogu i podział według źródeł
- liczba operacji wyszukiwania, opisu i wywołań
- końcowe wywołania narzędzi wykonane przez OpenClaw
- wybrane identyfikatory narzędzi i źródła
Logi sesji powinny umożliwiać odpowiedź na pytania:
- ile schematów narzędzi model zobaczył z góry
- ile operacji wyszukiwania i opisu wykonał
- które końcowe narzędzie zostało wywołane
- czy wynik pochodził z OpenClaw, MCP czy narzędzia klienta
Walidacja E2E
Runner E2E Gateway sprawdza obie ścieżki z harnessuem PI:
node --import tsx scripts/tool-search-gateway-e2e.ts
Tworzy tymczasowy fałszywy plugin z dużym katalogiem narzędzi, uruchamia mock providera OpenAI, uruchamia Gateway raz w trybie bezpośrednim i raz z włączonym wyszukiwaniem narzędzi, a następnie porównuje payloady żądań providera i logi sesji.
Regresja potwierdza:
- Tryb bezpośredni może wywołać narzędzie fałszywego pluginu.
- Wyszukiwanie narzędzi może wywołać to samo narzędzie fałszywego pluginu.
- Tryb bezpośredni udostępnia schematy narzędzi fałszywego pluginu bezpośrednio providerowi.
- Wyszukiwanie narzędzi udostępnia tylko zwięzły most.
- Payload żądania wyszukiwania narzędzi jest mniejszy dla dużego fałszywego katalogu.
- Logi sesji pokazują oczekiwane liczby wywołań narzędzi i telemetrię wywołań przez most.
Zachowanie przy błędach
Wyszukiwanie narzędzi powinno kończyć się bezpiecznie:
- jeśli narzędzie nie jest w efektywnej polityce, wyszukiwanie nie powinno go zwrócić
- jeśli wybrane narzędzie stanie się niedostępne,
tool_callpowinno się nie udać - jeśli polityka lub zatwierdzenie blokuje wykonanie, wynik wywołania powinien zgłosić tę blokadę zamiast ją omijać
- jeśli most kodu nie może utworzyć izolowanego runtime, użyj
mode: "tools"albo wyłącz wyszukiwanie narzędzi dla tego wdrożenia