Unda ujumuishaji wa zana (API)

Ujumuishaji wa zana ni endpoint ya HTTP inayoweza kutumika tena ambayo ejenti inaweza kuita wakati wa simu. Unaipa ThunderPhone maelezo ya JSON-schema ya zana pamoja na URL ya endpoint; ejenti huamua lini ya kuiita kulingana na mazungumzo, na ThunderPhone hutuma ombi la HTTP linalotoka kutoka kwenye seva zake na kurudisha jibu kwa ejenti.

Mwongozo huu unaelekeza uundaji wa zana ya kutafuta hali ya hewa hatua kwa hatua.

Muundo wa zana

Sehemu mbili:

  1. Schema — ufafanuzi wa function wa mtindo wa OpenAI ({type: "function", function: {name, description, parameters}}) unaoieleza LLM zana hufanya nini na hukubali hoja zipi.
  2. Endpoint — URL ambayo seva za ThunderPhone huiita wakati LLM inapoamua kutumia zana. Ombi ni JSON POST yenye hoja zilizochaguliwa na LLM kama mwili wa ombi.

1. Chagua mkakati wa uhifadhi

Ndani ya ejenti

Ambatisha zana ya matumizi ya mara moja kwenye orodha ya tools ya ejenti. Ni rahisi, lakini haiwezi kutumika tena.

Ujumuishaji uliohifadhiwa

Hifadhi zana kama ujumuishaji unaoweza kutumika tena na uiunganishe kutoka kwa ejenti wengi. Inapendekezwa kwa kitu chochote kinachotumika zaidi ya mara moja.

Mwongozo huu unatumia njia ya ujumuishaji uliohifadhiwa.

2. Unda ujumuishaji

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" }
    ]
  }'

Hifadhi id iliyorejeshwa (UUID).

3. Jaribu endpoint katika sandbox

Kabla ya kuunganisha ujumuishaji na ejenti, tuma ombi lililotiwa sahihi kutoka kwenye seva za ThunderPhone ili kuthibitisha muunganisho:

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, ...}"
}

Jaribio hili pia huimarisha kinga za SSRF za ThunderPhone — maombi kwa localhost au masafa binafsi ya IP hurudisha 400 code=url_not_allowed.

4. Unganisha muunganisho na ejenti

Ambatisha kupitia integration_ids unapounda au kusasisha ejenti:

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-..."]
  }'

Unaweza kuunganisha miunganisho mingi kwa ejenti moja. prompt ya ejenti inaweza kuzirejelea kwa jina — "tumia get_weather mpigaji simu anapouliza kuhusu hali ya hewa" — au inaweza kuzigundua kwa njia isiyo ya moja kwa moja kutoka kwenye maelezo ya schema.

5. Tekeleza endpoint

Ejenti inapoitisha zana, ThunderPhone hutuma POST yenye sahihi kwa endpoint_url yako:

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"}

Seva yako hujibu kwa JSON ambayo hurudishwa kwa LLM:

{"temperature_f": 64, "condition": "Partly cloudy", "wind_mph": 8}

LLM hupokea jibu hilo na kumwambia mpigaji simu muhtasari unaoeleweka kwa binadamu.

6. Jaribu mzunguko

Endesha kipindi cha mic dhidi ya ejenti na uulize swali linaloshughulikiwa na zana yako ("Hali ya hewa ikoje katika 94110?"). Nakala ya mazungumzo ya simu inaonyesha mzunguko mzima:

{
  "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." }
  ]
}

Unaweza kupata hii kupitia GET /v1/calls/{call_id}/transcript; mtiririko ghafi wa matukio (wenye muda wa kila ingizo na mipangilio ya sauti) uko kwenye GET /v1/calls/{call_id}/history.

Changamoto za kawaida

Ejenti haiiti zana

LLM huamua kulingana na maelezo ya zana. Ikiwa swali la mpigaji simu halilingani na maelezo, modeli haitaitisha zana. Fanya maelezo yawe mahususi zaidi (ongeza visawe vya kawaida na miundo ya maneno) au itaje wazi katika prompt ya ejenti ("Mpigaji simu anapouliza kuhusu hali ya hewa, tumia get_weather.").

Zana inarudisha data nyingi sana

Majibu yanayozidi 6 kB hukatwa katika onyesho la awali la nakala ya mazungumzo. Rudisha sehemu ambazo LLM inahitaji pekee — si rekodi yako nzima.

Muda wa kusubiri umeisha

Endpoint za zana zina muda chaguomsingi wa kusubiri wa sekunde 10. Ikiwa unahitaji muda mrefu zaidi, ishughulikie kwa njia ya asincroni: rudisha {"status": "pending", "request_id": "..."} na wasilisha matokeo kupitia mwito tofauti wa zana.

Utoaji wa matoleo

Kila PATCH ya muunganisho huunda marekebisho mapya. Kagua GET /v1/integrations/{id}/versions ili kuona nani alibadilisha nini. Ukivunja schema ya zana, unaweza kurejesha nyuma mwenyewe kwa kufanya PATCH ya snapshot ya zamani.


Hatua zinazofuata