Sukurkite įrankio integraciją (API)
įrankio integracija yra pakartotinai naudojamas HTTP galinis taškas, kurį agentas gali iškviesti pokalbio metu. Pateikiate ThunderPhone įrankio JSON schemos aprašą ir galinio taško URL; agentas pagal pokalbį nusprendžia, kada jį iškviesti, o ThunderPhone iš savo serverių siunčia išeinantį HTTP prašymą ir grąžina atsakymą agentui.
Šiame vadove žingsnis po žingsnio sukursite orų paieškos įrankį.
Įrankio sandara
Dvi dalys:
- Schema — OpenAI stiliaus funkcijos apibrėžimas
(
{type: "function", function: {name, description, parameters}}), nurodantis LLM, ką įrankis daro ir kokius argumentus priima. - Galinis taškas — URL, kurį ThunderPhone serveriai iškviečia, kai LLM nusprendžia naudoti įrankį. Prašymas yra JSON POST, o jo turinį sudaro LLM pasirinkti argumentai.
1. Pasirinkite saugojimo strategiją
Pridėkite vienkartinį įrankį prie agento tools masyvo. Paprasta, tačiau
nepakartotinai naudojama.
Išsaugokite įrankį kaip pakartotinai naudojamą integraciją ir susiekite jį su daugeliu agentų. Rekomenduojama viskam, kas naudojama daugiau nei vieną kartą.
Šiame vadove naudojamas išsaugotos integracijos būdas.
2. Sukurkite integraciją
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" }
]
}'
Išsaugokite grąžintą id (UUID).
3. Išbandykite galinį tašką smėlio dėžėje
Prieš susiedami integraciją su agentu, siųskite pasirašytą prašymą iš ThunderPhone serverių, kad patvirtintumėte ryšį:
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, ...}"
}
Šis testas taip pat sustiprina ThunderPhone SSRF apsaugas — prašymai į
localhost arba privačius IP diapazonus grąžina 400 code=url_not_allowed.
4. Susiekite integraciją su agentu
Pridėkite naudodami integration_ids, kai kuriate arba atnaujinate agentą:
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-..."]
}'
Su vienu agentu galite susieti daug integracijų. Agento nurodyme galite
jas nurodyti pagal pavadinimą — „naudokite get_weather, kai skambinantysis klausia
apie oro sąlygas“ — arba agentas gali jas netiesiogiai aptikti pagal
schemos aprašus.
5. Įdiekite galinį tašką
Kai agentas iškviečia įrankį, ThunderPhone siunčia pasirašytą POST užklausą į
jūsų 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"}
Jūsų serveris atsako JSON duomenimis, kurie perduodami atgal LLM:
{"temperature_f": 64, "condition": "Partly cloudy", "wind_mph": 8}
LLM apdoroja šį atsakymą ir žodžiu pateikia skambinančiajam suprantamą santrauką.
6. Išbandykite ciklą
Paleiskite mikrofono sesiją su agentu ir užduokite klausimą, kurį apdoroja jūsų įrankis („Kokie orai 94110?“). Skambučio nuoraše rodomas visas užklausos ir atsakymo ciklas:
{
"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." }
]
}
Jį galite gauti naudodami
GET /v1/calls/{call_id}/transcript;
neapdorotų įvykių srautas su kiekvieno įrašo laiko informacija ir garso poslinkiais pasiekiamas adresu
GET /v1/calls/{call_id}/history.
Dažnos klaidos
Agentas niekada neiškviečia įrankio
LLM sprendžia pagal įrankio aprašą. Jei skambinančiojo
klausimas neatitinka aprašo, modelis neiškvies
įrankio. Patikslinkite aprašą (pridėkite dažnų sinonimų ir
formuluočių) arba aiškiai paminėkite jį agento nurodyme („Kai
skambinantysis klausia apie orus, naudokite get_weather.“).
Įrankis grąžina per daug duomenų
Atsakymai, didesni nei 6 kB, nuorašo peržiūroje yra sutrumpinami. Grąžinkite tik tuos laukus, kurių reikia LLM, o ne visą duomenų eilutę.
Laukimo laiko viršijimas
Įrankių galiniai taškai turi numatytąjį 10 sekundžių laukimo laiką. Jei reikia ilgesnio,
apdorokite asinchroniškai: grąžinkite {"status": "pending", "request_id": "..."}
ir pateikite rezultatą naudodami atskirą įrankio iškvietimą.
Versijavimas
Kiekvienas integracijos PATCH sukuria naują redakciją. Peržiūrėkite
GET /v1/integrations/{id}/versions,
kad sužinotumėte, kas ką pakeitė. Jei sugadinate įrankio schemą, galite
rankiniu būdu grąžinti ankstesnę momentinę kopiją naudodami PATCH.
Tolesni veiksmai
CRUD, perkėlimas, versijų istorija.
Visa JSON schemos gramatika ir pasirašyto galinio taško sutartis.
Taikykite žiniatinklio kablio parašo modelį įrankių galiniams taškams.
Peržiūrėkite visą įrankio iškvietimo eigą nuo pradžios iki pabaigos.