会員登録すると
学習することができます。
会員登録する(無料)
学習することができます。
登録済みの方はこちら
ログイン
学ぶ目的
引数を信用しない
input_schema は形を決めますが、中身の妥当性までは保証しません。実行する前に自分で確かめます。
function validateCity(city) {
if (typeof city !== "string") throw new Error("都市名は文字列で渡してください");
const trimmed = city.trim();
if (trimmed.length === 0) throw new Error("都市名が空です");
if (trimmed.length > 50) throw new Error("都市名が長すぎます");
return trimmed;
}
応答が返ってこない場合に備える
相手のサーバーが遅いと、こちらの処理も止まります。AbortSignal.timeout で上限を決めます。
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
失敗の種類で対応を変える
| 状況 | 対応 |
|---|---|
| 通信エラー・5xx(相手側の一時的な不調) | 少し待って1〜2回やり直す |
| 429(呼びすぎ) | 待ってからやり直す。間隔を空ける |
| 4xx(こちらの指定が間違い) | やり直さない。エラーとして返す |
| 中身が空 | やり直さない。「見つからない」と返す |
やり直してよいのは時間が解決する失敗だけです。引数が間違っているのに再試行すると、同じ失敗を繰り返して料金と時間を使います。
ツールに渡してよいもの・いけないもの
ツールの結果はそのままAIに送られます。送ってよい情報かどうかを、渡す前に決めます。
- 渡さない: APIキー、アクセストークン、パスワード、他人の個人情報
- 絞る: 応答全体ではなく、必要なキーだけを抜き出して返す
さきほどの getWeather が気温と時刻だけを返しているのは、このためです。APIの応答をまるごと返すと、余計な情報まで送ることになります。
このレクチャーで学ぶこと
- 引数の検証を自分で行う理由
- タイムアウトとリトライの判断基準
- ツールの結果に含めてはいけないもの
質問
まだ質問は投稿されていません。
質問投稿
ログイン後に質問の投稿ができます。