Izdelajte integracijo orodja (API)
Integracija orodja je vnovič uporabljiv končni točki HTTP, ki ju lahko agent pokliče med klicem. ThunderPhoneu posredujete opis orodja v obliki sheme JSON ter URL končne točke; agent se na podlagi pogovora odloči, kdaj jo bo poklical, ThunderPhone pa s svojih strežnikov izvede odhodno zahtevo HTTP in odgovor vrne agentu.
Ta vodnik prikazuje celoten postopek izdelave orodja za pridobivanje vremenskih podatkov.
Zgradba orodja
Dva dela:
- Shema — definicija funkcije v slogu OpenAI
(
{type: "function", function: {name, description, parameters}}), ki LLM-ju pove, kaj orodje počne in katere argumente sprejema. - Končna točka — URL, ki ga strežniki ThunderPhone pokličejo, ko se LLM odloči uporabiti orodje. Zahteva je JSON POST z argumenti, ki jih izbere LLM, v telesu zahteve.
1. Izberite strategijo shranjevanja
Enkratno orodje pripnite polju tools agenta. Preprosto, vendar
ni vnovič uporabljivo.
Orodje shranite kot vnovič uporabljivo integracijo in ga povežite z več agenti. Priporočeno za vse, kar uporabite več kot enkrat.
Ta vodnik uporablja pot shranjene integracije.
2. Ustvarite integracijo
curl -X POST https://api.thunderphone.com/v1/integrations \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Weather API",
"spec": {
"type": "function",
"function": {
"name": "get_weather",
"description": "Return the current weather for a zip code.",
"parameters": {
"type": "object",
"properties": {
"zip": { "type": "string", "description": "5-digit US ZIP code" }
},
"required": ["zip"]
}
}
},
"endpoint_url": "https://api.example.com/weather",
"endpoint_method": "GET",
"headers": [
{ "key": "X-Api-Key", "value": "your-provider-key" }
]
}'
Shranite vrnjeni id (UUID).
3. Preizkusite končno točko v peskovniku
Preden integracijo povežete z agentom, s strežnikov ThunderPhone pošljite podpisano zahtevo, da potrdite povezljivost:
curl -X POST https://api.thunderphone.com/v1/integrations/test-request \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.example.com/weather?zip=94110",
"method": "GET",
"headers": { "X-Api-Key": "your-provider-key" }
}'
{
"ok": true,
"status": 200,
"elapsed_ms": 187,
"response_headers": { "content-type": "application/json" },
"response_preview": "{\"temperature_f\": 64, ...}"
}
Ta preizkus tudi utrdi zaščite ThunderPhone pred SSRF — zahteve za localhost ali zasebne obsege IP vrnejo 400 code=url_not_allowed.
4. Povežite integracijo z agentom
Integracijo pripnite prek integration_ids, ko ustvarjate ali posodabljate agenta:
curl -X PATCH https://api.thunderphone.com/v1/agents/12 \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"integration_ids": ["f9b5a1a4-..."]
}'
Z enim agentom lahko povežete več integracij. Poziv agenta se lahko
nanje sklicuje po imenu — »uporabite get_weather, ko klicatelj vpraša
o vremenskih razmerah« — ali pa jih lahko implicitno odkrije iz opisov
sheme.
5. Implementirajte končno točko
Ko agent prikliče orodje, ThunderPhone pošlje podpisano zahtevo POST na
vaš endpoint_url:
POST /weather HTTP/1.1
Host: api.example.com
X-Api-Key: your-provider-key
X-ThunderPhone-Signature: <HMAC-SHA256 hex>
X-ThunderPhone-Call-ID: 987654321
Content-Type: application/json
{"zip": "94110"}
Vaš strežnik odgovori z zapisom JSON, ki se posreduje nazaj LLM-ju:
{"temperature_f": 64, "condition": "Partly cloudy", "wind_mph": 8}
LLM obdela ta odgovor in klicatelju glasovno poda razumljiv povzetek.
6. Preizkusite celoten potek
Zaženite sejo z mikrofonom za agenta in postavite vprašanje, ki ga obravnava vaše orodje (»Kakšno je vreme v 94110?«). Prepis klica prikazuje celoten potek:
{
"call_id": 987654321,
"transcripts": [
{ "role": "user",
"content": "What's the weather in 94110?" },
{ "role": "tool_call",
"content": "{\"tool_call\": \"get_weather\", \"arguments\": {\"zip\": \"94110\"}}" },
{ "role": "tool_response",
"content": "{\"tool_name\": \"get_weather\", \"response\": {\"temperature_f\": 64, \"condition\": \"Partly cloudy\"}}" },
{ "role": "agent",
"content": "It's 64 degrees and partly cloudy." }
]
}
To lahko pridobite prek
GET /v1/calls/{call_id}/transcript;
neobdelani tok dogodkov (s časovnimi podatki za posamezne vnose in odmiki zvoka) je na voljo prek
GET /v1/calls/{call_id}/history.
Pogoste težave
Agent nikoli ne prikliče orodja
LLM se odloča na podlagi opisa orodja. Če se vprašanje klicatelja
ne ujema z opisom, model ne bo priklical orodja. Izboljšajte opis
(dodajte pogoste sopomenke in formulacije) ali ga izrecno navedite
v pozivu agenta (»Ko klicatelj vpraša o vremenu, uporabite get_weather.«).
Orodje vrne preveč podatkov
Odgovori, večji od 6 kB, so v predogledu prepisa skrajšani. Vrnite samo polja, ki jih LLM potrebuje — ne celotne vrstice.
Časovne omejitve
Končne točke orodij imajo privzeto časovno omejitev 10 sekund. Če potrebujete več časa,
obravnavajte zahtevo asinhrono: vrnite {"status": "pending", "request_id": "..."}
in rezultat posredujte prek ločenega klica orodja.
Različice
Vsak PATCH integracije ustvari novo revizijo. Preglejte
GET /v1/integrations/{id}/versions,
da vidite, kdo je kaj spremenil. Če pokvarite shemo orodja, lahko
spremembo ročno povrnete tako, da z ukazom PATCH znova uporabite starejši posnetek.