LeRobot documentation
Araçlar
Araçlar
LeRobot, politikalar içinde araç çağrılarını destekler — asistan mesajları, çalışma zamanının gerçek bir uygulamaya (TTS, denetleyici, kayıt tutucu, …) yönlendirdiği say(text="OK, starting now") gibi yapılandırılmış çağrılar üretebilir.
Bu sayfa şunları kapsar:
- Araç kataloğunun bulunduğu yer.
- Etiketleme hattının araç çağrısı atomlarını nasıl ürettiği.
- Kendi aracınızı nasıl eklersiniz.
Araçların nerede beyan edildiği
İki katman.
Katalog — OpenAI tarzı işlev şemalarının listesi — her veri setinde meta/info.json["tools"] konumundadır. Örnek:
{
"features": { "...": "..." },
"tools": [
{
"type": "function",
"function": {
"name": "say",
"description": "Speak a short utterance to the user via the TTS executor.",
"parameters": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "The verbatim text to speak."
}
},
"required": ["text"]
}
}
}
]
}Veri seti meta verisi erişimcisi üzerinden okuyun:
from lerobot.datasets.dataset_metadata import LeRobotDatasetMetadata
meta = LeRobotDatasetMetadata(repo_id="pepijn/super_poulain_final_annotations")
tools = meta.tools # list[dict] — OpenAI tool schemasVeri setinin info.json dosyası herhangi bir araç bildirmiyorsa, meta.tools lerobot.datasets.language modülündeki DEFAULT_TOOLS değerini döndürür — şu anda kanonik say şemasına sahip tek girişli bir liste. Bu sayede etiketlenmemiş veri setleri ve sohbet şablonu kullanıcıları herhangi bir yapılandırma gerektirmeden çalışmaya devam eder:
prompt_str = tokenizer.apply_chat_template(
sample["messages"],
tools=meta.tools, # works either way
add_generation_prompt=False,
tokenize=False,
)Uygulamalar — çalıştırılabilir Python — src/lerobot/tools/ altında, her araç için bir dosya olarak yer alacak. Çalışma zamanı yönlendirici ve standart say uygulaması (Kyutai’nin pocket-tts’ini saran) burada açıklanan katalog katmanının bir parçası değildir; bugün bu katman yalnızca şema depolamasını ve DEFAULT_TOOLS yedek sabitini içerir.
Satır başına araç çağrıları
Yukarıdaki katalog neyin çağrılabileceğini açıklar. Gerçek çağrı — fonksiyon adı ve argüman değerleri — language_events içindeki asistan atomlarında satır bazında saklanır:
{
"role": "assistant",
"content": null,
"style": null,
"timestamp": 12.4,
"camera": null,
"tool_calls": [
{ "type": "function",
"function": { "name": "say", "arguments": { "text": "On it." } } }
]
}Recipes, bunları tool_calls_from aracılığıyla işlenmiş mesajlara yerleştirir:
user_interjection_response:
bindings:
speech: "emitted_at(t, role=assistant, tool_name=say)"
messages:
- { role: user, content: "${task}", stream: high_level }
- {
role: assistant,
content: "${current_plan}",
stream: high_level,
target: true,
tool_calls_from: speech,
}Modelin eğitim hedefi, hem plan metnini ve say araç çağrısını içeren tek bir asistan turudur. Çıkarım sırasında çalışma zamanı, üretilen metni yapılandırılmış tool_calls biçimine geri ayrıştırır ve eşleşen uygulamaya yönlendirir.
Kendi aracınızı nasıl eklersiniz
Not: Aşağıdaki 2. ve 3. adımlar, bugün dağıtılan katalog katmanının bir parçası olmayan çalışma zamanı katmanını (
src/lerobot/tools/,Toolprotokolü,TOOL_REGISTRY,get_tools(meta)) tanımlar; bu modüller henüz ağaçta mevcut değil. Aracın, modelin çağrıyı oluşturabilmesi için sohbet şablonu tarafındanmeta.toolsaracılığıyla görünür hale gelmesi yalnızca 1. adım yeterlidir; çağrının çıkarım sırasında çalıştırılması ise çalışma zamanı katmanını gerektirir.
Üç adım. Somut örnek: politikanın, düzenli kontrol döngüsünün dışında ek bir gözlem yakalamak için çağırabileceği bir record_observation aracı.
Adım 1 — şemayı tanımlayın
Notlandırma hattını çalıştırmadan önce, dosyayı doğrudan disk üzerinde düzenleyerek meta/info.json["tools"] altında bir giriş ekleyin (korunacaktır).
{
"tools": [
{ "type": "function", "function": { "name": "say", "...": "..." } },
{
"type": "function",
"function": {
"name": "record_observation",
"description": "Capture a high-resolution still image for the user.",
"parameters": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Short label for the saved image."
}
},
"required": ["label"]
}
}
}
]
}Şema, OpenAI’nin fonksiyon çağırma (function-calling) sözleşmesini tam olarak takip eder, bu sayede sohbet şablonu onu yerel olarak (natively) işleyebilir.
Adım 2 — çağrıyı uygulayın
src/lerobot/tools/record_observation.py dosyasını oluşturun:
from .base import Tool
from typing import Any
RECORD_OBSERVATION_SCHEMA: dict[str, Any] = { "...": "..." } # mirrors the JSON above
class RecordObservationTool:
name = "record_observation"
schema = RECORD_OBSERVATION_SCHEMA
def __init__(self, schema: dict | None = None, output_dir: str = "."):
self.output_dir = output_dir
def call(self, arguments: dict) -> str:
label = arguments["label"]
# ... save the latest camera frame to <output_dir>/<label>.png ...
return f"saved {label}.png"Araç başına bir dosya, bağımlılıkların izole kalmasını sağlar — record_observation pillow çekebilirken say pocket-tts çeker. Yalnızca ihtiyaç duydukları araçları kuran kullanıcılar, ağır dolaylı bağımlılıklardan kaçınır.
Adım 3 — kaydedin
src/lerobot/tools/registry.py dosyasına ekleyin:
from .record_observation import RecordObservationTool
TOOL_REGISTRY["record_observation"] = RecordObservationToolBu kadar. Çalışma zamanında get_tools(meta), meta.tools içindeki her şemayı arar, eşleşen kayıtlı sınıfı örnekler ve yönlendiricinin (dispatcher) yönlendirebileceği bir ad → örnek sözlüğü döndürür.
Bir aracın uygulamasını yazmadan kullanmak istiyorsanız (örneğin yalnızca eğitim zamanı sohbet şablonu biçimlendirmesi için), yalnızca 1. adım yeterlidir — model yine de çağrıyı üretmeyi öğrenir. 2. ve 3. adımlar, çağrının çıkarım sırasında gerçekten çalıştırılması için gereklidir.
Update on GitHub