Loo tööriistaintegratsioon (API)
tööriistaintegratsioon on korduskasutatav HTTP-lõpp-punkt, mida agent saab kõne ajal kutsuda. Annad ThunderPhone'ile tööriista JSON-skeemi kirjelduse ja lõpp-punkti URL-i; agent otsustab vestluse põhjal, millal seda kutsuda, ning ThunderPhone teeb oma serveritest väljamineva HTTP-päringu ja tagastab vastuse agendile.
See juhend näitab ilmaotsingu tööriista loomist algusest lõpuni.
Tööriista ülesehitus
Kaks osa:
- Skeem — OpenAI stiilis funktsioonimääratlus
(
{type: "function", function: {name, description, parameters}}), mis ütleb LLM-ile, mida tööriist teeb ja milliseid argumente see kasutab. - Lõpp-punkt — URL, mida ThunderPhone'i serverid kutsuvad, kui LLM otsustab tööriista kasutada. Päring on JSON POST, mille sisuks on LLM-i valitud argumendid.
1. Vali salvestusstrateegia
Lisa ühekordne tööriist agendi massiivi tools. Lihtne, kuid
mitte korduskasutatav.
Salvesta tööriist korduskasutatava integratsioonina ja seo see mitme agendiga. Soovitatav kõige jaoks, mida kasutatakse rohkem kui üks kord.
See juhend kasutab salvestatud integratsiooni teed.
2. Loo integratsioon
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" }
]
}'
Salvesta tagastatud id (UUID).
3. Testi lõpp-punkti liivakastis
Enne integratsiooni agendiga sidumist saada ThunderPhone'i serveritest allkirjastatud päring, et kontrollida ühenduvust:
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, ...}"
}
See test tugevdab ka ThunderPhone'i SSRF-kaitseid — localhosti või privaatsete
IP-vahemike päringud tagastavad 400 code=url_not_allowed.
4. Seo integratsioon häälagendiga
Lisa integration_ids häälagendi loomisel või värskendamisel:
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-..."]
}'
Ühe häälagendiga saad siduda mitu integratsiooni. Häälagendi viibas saad
neile nime järgi viidata — „kasuta get_weather, kui helistaja küsib
ilmaolude kohta” — või võib häälagent need skeemikirjelduste põhjal
kaudselt tuvastada.
5. Rakenda endpoint
Kui häälagent kutsub tööriista välja, saadab ThunderPhone sinu
endpoint_url-ile allkirjastatud POST-päringu:
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"}
Sinu server vastab JSON-iga, mis edastatakse tagasi LLM-ile:
{"temperature_f": 64, "condition": "Partly cloudy", "wind_mph": 8}
LLM töötleb vastuse ja annab helistajale sellest loomulikus keeles kokkuvõtte.
6. Testi töövoogu
Käivita häälagendi vastu mikrofoni seanss ja küsi küsimus, mida sinu tööriist käsitleb („Milline on ilm sihtnumbriga 94110 piirkonnas?”). Kõne transkriptsioon näitab kogu päringu-vastuse tsüklit:
{
"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." }
]
}
Selle saad pärida kaudu
GET /v1/calls/{call_id}/transcript;
toorsündmuste voog (koos iga kirje ajastuse ja heli nihetega) asub aadressil
GET /v1/calls/{call_id}/history.
Levinud vead
Häälagent ei kutsu tööriista välja
LLM otsustab tööriista kirjelduse põhjal. Kui helistaja küsimus ei vasta
kirjeldusele, ei kutsu mudel tööriista välja. Täpsusta kirjeldust (lisa
levinud sünonüüme ja sõnastusi) või maini seda häälagendi viibas selgelt
(„Kui helistaja küsib ilma kohta, kasuta get_weather.”).
Tööriist tagastab liiga palju andmeid
Üle 6 kB vastused kärbitakse transkriptsiooni eelvaates. Tagasta ainult väljad, mida LLM vajab — mitte kogu oma rida.
Aegumised
Tööriistade endpointidel on vaikimisi 10-sekundiline ajalõpp. Kui vajad
rohkem aega, töötle seda asünkroonselt: tagasta {"status": "pending", "request_id": "..."}
ja edasta tulemus eraldi tööriistakutse kaudu.
Versioonimine
Iga integratsiooni PATCH loob uue redaktsiooni. Vaata
GET /v1/integrations/{id}/versions,
et näha, kes mida muutis. Kui rikud tööriista skeemi, saad käsitsi
tagasi pöörduda, PATCH-ides vanema hetktõmmise tagasi.
Järgmised sammud
CRUD, ülekanne, versiooniajalugu.
Täielik JSON-skeemi grammatika ja allkirjastatud lõpp-punkti leping.
Rakenda tööriista lõpp-punktidele webhooki allkirja mustrit.
Vaata tööriistakutse täielikku edasi-tagasi käiku.