ಟೂಲ್ ಏಕೀಕರಣವನ್ನು ನಿರ್ಮಿಸಿ (API)
ಟೂಲ್ ಏಕೀಕರಣವು ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ HTTP ಎಂಡ್ಪಾಯಿಂಟ್ ಆಗಿದ್ದು, ಏಜೆಂಟ್ ಕರೆಯ ಸಮಯದಲ್ಲಿ ಅದನ್ನು ಆಹ್ವಾನಿಸಬಹುದು. ನೀವು ThunderPhone ಗೆ ಟೂಲ್ನ JSON-ಸ್ಕೀಮಾ ವಿವರಣೆಯನ್ನು ಹಾಗೂ ಎಂಡ್ಪಾಯಿಂಟ್ URL ಅನ್ನು ನೀಡುತ್ತೀರಿ; ಸಂಭಾಷಣೆಯ ಆಧಾರದ ಮೇಲೆ ಅದನ್ನು ಯಾವಾಗ ಕರೆಯಬೇಕೆಂದು ಏಜೆಂಟ್ ನಿರ್ಧರಿಸುತ್ತದೆ ಮತ್ತು ThunderPhone ತನ್ನ ಸರ್ವರ್ಗಳಿಂದ ಹೊರಹೋಗುವ HTTP ವಿನಂತಿಯನ್ನು ಮಾಡಿ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಏಜೆಂಟ್ಗೆ ಹಿಂತಿರುಗಿಸುತ್ತದೆ.
ಈ ಮಾರ್ಗದರ್ಶಿಯು ಹವಾಮಾನ-ಹುಡುಕಾಟ ಟೂಲ್ ಅನ್ನು ಆರಂಭದಿಂದ ಅಂತ್ಯದವರೆಗೆ ನಿರ್ಮಿಸುವ ಕ್ರಮವನ್ನು ವಿವರಿಸುತ್ತದೆ.
ಟೂಲ್ನ ರಚನೆ
ಎರಡು ಭಾಗಗಳು:
- ಸ್ಕೀಮಾ — OpenAI-ಶೈಲಿಯ ಫಂಕ್ಷನ್ ವ್ಯಾಖ್ಯಾನ
(
{type: "function", function: {name, description, parameters}}) ಇದು ಟೂಲ್ ಏನು ಮಾಡುತ್ತದೆ ಮತ್ತು ಅದು ಯಾವ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಎಂಬುದನ್ನು LLM ಗೆ ತಿಳಿಸುತ್ತದೆ. - ಎಂಡ್ಪಾಯಿಂಟ್ — LLM ಟೂಲ್ ಬಳಸಲು ನಿರ್ಧರಿಸಿದಾಗ ThunderPhone ನ ಸರ್ವರ್ಗಳು ಕರೆಯುವ URL. ವಿನಂತಿಯು JSON POST ಆಗಿದ್ದು, LLM ಆಯ್ಕೆಮಾಡಿದ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳು ಅದರ ಬಾಡಿಯಾಗಿರುತ್ತವೆ.
1. ಸಂಗ್ರಹಣಾ ಕಾರ್ಯತಂತ್ರವನ್ನು ಆಯ್ಕೆಮಾಡಿ
ಏಕ-ಬಳಕೆಯ ಟೂಲ್ ಅನ್ನು ಏಜೆಂಟ್ನ tools ಅರೇಗೆ ಲಗತ್ತಿಸಿ. ಸರಳ, ಆದರೆ
ಮರುಬಳಕೆ ಮಾಡಲಾಗುವುದಿಲ್ಲ.
ಟೂಲ್ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಏಕೀಕರಣವಾಗಿ ಸಂಗ್ರಹಿಸಿ ಮತ್ತು ಅದನ್ನು ಹಲವು ಏಜೆಂಟ್ಗಳಿಂದ ಲಿಂಕ್ ಮಾಡಿ. ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಬಾರಿ ಬಳಸುವ ಯಾವುದಕ್ಕೂ ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ.
ಈ ಮಾರ್ಗದರ್ಶಿಯು ಉಳಿಸಿದ-ಏಕೀಕರಣ ಮಾರ್ಗವನ್ನು ಬಳಸುತ್ತದೆ.
2. ಏಕೀಕರಣವನ್ನು ರಚಿಸಿ
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" }
]
}'
ಹಿಂತಿರುಗಿದ id ಅನ್ನು (ಒಂದು UUID) ಉಳಿಸಿಕೊಳ್ಳಿ.
3. ಎಂಡ್ಪಾಯಿಂಟ್ ಅನ್ನು ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ನಲ್ಲಿ ಪರೀಕ್ಷಿಸಿ
ಏಕೀಕರಣವನ್ನು ಏಜೆಂಟ್ಗೆ ಲಿಂಕ್ ಮಾಡುವ ಮೊದಲು, ಸಂಪರ್ಕವನ್ನು ದೃಢೀಕರಿಸಲು ThunderPhone ನ ಸರ್ವರ್ಗಳಿಂದ ಸಹಿ ಮಾಡಿದ ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸಿ:
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, ...}"
}
ಈ ಪರೀಕ್ಷೆಯು ThunderPhone ನ SSRF ರಕ್ಷಣೆಗಳನ್ನೂ ಬಲಪಡಿಸುತ್ತದೆ — localhost ಅಥವಾ
ಖಾಸಗಿ IP ಶ್ರೇಣಿಗಳಿಗೆ ಮಾಡುವ ವಿನಂತಿಗಳು 400 code=url_not_allowed ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತವೆ.
4. ಏಜೆಂಟ್ಗೆ ಇಂಟಿಗ್ರೇಶನ್ ಅನ್ನು ಲಿಂಕ್ ಮಾಡಿ
ನೀವು ಏಜೆಂಟ್ ಅನ್ನು ರಚಿಸುವಾಗ ಅಥವಾ ನವೀಕರಿಸುವಾಗ integration_ids ಮೂಲಕ ಲಗತ್ತಿಸಿ:
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-..."]
}'
ನೀವು ಒಂದು ಏಜೆಂಟ್ಗೆ ಹಲವು ಇಂಟಿಗ್ರೇಶನ್ಗಳನ್ನು ಲಿಂಕ್ ಮಾಡಬಹುದು. ಏಜೆಂಟ್ನ prompt ಅವುಗಳನ್ನು ಹೆಸರಿನ ಮೂಲಕ ಉಲ್ಲೇಖಿಸಬಹುದು — ಕಾಲರ್ ಹವಾಮಾನ ಪರಿಸ್ಥಿತಿಗಳ ಬಗ್ಗೆ ಕೇಳಿದಾಗ get_weather ಬಳಸಿ — ಅಥವಾ ಸ್ಕೀಮಾ ವಿವರಣೆಗಳಿಂದ ಅವುಗಳನ್ನು ಸೂಚ್ಯವಾಗಿ ಕಂಡುಹಿಡಿಯಬಹುದು.
5. ಎಂಡ್ಪಾಯಿಂಟ್ ಅನ್ನು ಅಳವಡಿಸಿ
ಏಜೆಂಟ್ ಟೂಲ್ ಅನ್ನು ಕರೆಯುವಾಗ, ThunderPhone ನಿಮ್ಮ endpoint_url ಗೆ ಸಹಿ ಮಾಡಿದ POST ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ:
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"}
ನಿಮ್ಮ ಸರ್ವರ್ LLM ಗೆ ಮರಳಿ ಒದಗಿಸಲಾಗುವ JSON ನೊಂದಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತದೆ:
{"temperature_f": 64, "condition": "Partly cloudy", "wind_mph": 8}
LLM ಆ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಸ್ವೀಕರಿಸಿ ಕಾಲರ್ಗೆ ಮಾನವಸಹಜ ಸಾರಾಂಶವನ್ನು ಹೇಳುತ್ತದೆ.
6. ಲೂಪ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಿ
ಏಜೆಂಟ್ ವಿರುದ್ಧ ಮೈಕ್ ಸೆಷನ್ ಅನ್ನು ಚಲಾಯಿಸಿ ಮತ್ತು ನಿಮ್ಮ ಟೂಲ್ ನಿರ್ವಹಿಸುವ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಿ ("94110 ರಲ್ಲಿ ಹವಾಮಾನ ಹೇಗಿದೆ?"). ಕರೆಯ ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್ ಸಂಪೂರ್ಣ ಸುತ್ತು ಪ್ರಯಾಣವನ್ನು ತೋರಿಸುತ್ತದೆ:
{
"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." }
]
}
ನೀವು ಇದನ್ನು
GET /v1/calls/{call_id}/transcript ಮೂಲಕ ಪಡೆಯಬಹುದು;
ಪ್ರತಿ ನಮೂದಿನ ಸಮಯ ಮತ್ತು ಆಡಿಯೊ ಆಫ್ಸೆಟ್ಗಳನ್ನು ಒಳಗೊಂಡ ಕಚ್ಚಾ ಈವೆಂಟ್ ಸ್ಟ್ರೀಮ್
GET /v1/calls/{call_id}/history ನಲ್ಲಿ ಇದೆ.
ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳು
ಏಜೆಂಟ್ ಟೂಲ್ ಅನ್ನು ಎಂದಿಗೂ ಕರೆಯುವುದಿಲ್ಲ
LLM ಟೂಲ್ನ ವಿವರಣೆಯ ಆಧಾರದಲ್ಲಿ ನಿರ್ಧರಿಸುತ್ತದೆ. ಕಾಲರ್ನ ಪ್ರಶ್ನೆಯು ವಿವರಣೆಗೆ ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ, ಮಾದರಿಯು ಟೂಲ್ ಅನ್ನು ಕರೆಯುವುದಿಲ್ಲ. ವಿವರಣೆಯನ್ನು ಹೆಚ್ಚು ನಿಖರಗೊಳಿಸಿ (ಸಾಮಾನ್ಯ ಸಮಾನಾರ್ಥಕ ಪದಗಳು ಮತ್ತು ವಾಕ್ಯರಚನೆಗಳನ್ನು ಸೇರಿಸಿ) ಅಥವಾ ಏಜೆಂಟ್ prompt ನಲ್ಲಿ ಅದನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಉಲ್ಲೇಖಿಸಿ ("ಕಾಲರ್ ಹವಾಮಾನದ ಬಗ್ಗೆ ಕೇಳಿದಾಗ, get_weather ಬಳಸಿ.").
ಟೂಲ್ ಅತಿಯಾಗಿ ಡೇಟಾವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ
6 kB ಗಿಂತ ಹೆಚ್ಚಿನ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್ ಪೂರ್ವವೀಕ್ಷಣೆಯಲ್ಲಿ ಮೊಟಕುಗೊಳಿಸಲಾಗುತ್ತದೆ. LLM ಗೆ ಅಗತ್ಯವಿರುವ ಫೀಲ್ಡ್ಗಳನ್ನು ಮಾತ್ರ ಹಿಂತಿರುಗಿಸಿ — ನಿಮ್ಮ ಸಂಪೂರ್ಣ ದಾಖಲೆಯನ್ನು ಅಲ್ಲ.
ಕಾಲಾವಧಿ ಮೀರಿಕೆಗಳು
ಟೂಲ್ ಎಂಡ್ಪಾಯಿಂಟ್ಗಳು 10-ಸೆಕೆಂಡಿನ ಡೀಫಾಲ್ಟ್ ಕಾಲಾವಧಿ ಮೀರಿಕೆಯನ್ನು ಹೊಂದಿರುತ್ತವೆ. ನಿಮಗೆ ಹೆಚ್ಚು ಸಮಯ ಬೇಕಾದರೆ, ಅದನ್ನು ಅಸಿಂಕ್ರೋನಸ್ ಆಗಿ ನಿರ್ವಹಿಸಿ: {"status": "pending", "request_id": "..."} ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ
ಮತ್ತು ಪ್ರತ್ಯೇಕ ಟೂಲ್ ಕರೆಯ ಮೂಲಕ ಫಲಿತಾಂಶವನ್ನು ಒದಗಿಸಿ.
ಆವೃತ್ತಿ ನಿರ್ವಹಣೆ
ಪ್ರತಿ ಇಂಟಿಗ್ರೇಶನ್ PATCH ಹೊಸ ಪರಿಷ್ಕರಣೆಯನ್ನು ರಚಿಸುತ್ತದೆ. ಯಾರು ಏನನ್ನು ಬದಲಾಯಿಸಿದ್ದಾರೆ ಎಂಬುದನ್ನು ನೋಡಲು
GET /v1/integrations/{id}/versions
ಪರಿಶೀಲಿಸಿ. ನೀವು ಟೂಲ್ನ ಸ್ಕೀಮಾವನ್ನು ಹಾಳುಮಾಡಿದರೆ, ಹಳೆಯ ಸ್ನ್ಯಾಪ್ಶಾಟ್ ಅನ್ನು ಮತ್ತೆ PATCH ಮಾಡುವ ಮೂಲಕ ಕೈಯಾರೆ ಹಿಂತಿರುಗಿಸಬಹುದು.