fetch() ハンドラーの使用
非常に一般的なユースケースは、LLMに関数呼び出しを介してAPI呼び出しを実行する能力を提供することです。
この例では、LLMは次の5日間の天気予報を取得します。
そのために、getWeather関数が定義され、ツールとしてLLMに渡されます。
getWeather関数は、リクエストからユーザーの位置情報を抽出し、WorkersのFetch APIを介して外部天気APIを呼び出し、結果を返します。
import { runWithTools } from '@cloudflare/ai-utils';
type Env = { AI: Ai;};
export default { async fetch(request, env, ctx) { // 関数を定義 const getWeather = async (args: { numDays: number }) => { const { numDays } = args; // 位置情報はリクエストから抽出されます // https://developers.cloudflare.com/workers/runtime-apis/request/#incomingrequestcfproperties const lat = request.cf?.latitude const long = request.cf?.longitude
// 外部API呼び出しのための値を補間 const response = await fetch( `https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${long}&daily=temperature_2m_max,precipitation_sum&timezone=GMT&forecast_days=${numDays}` ); return response.text(); }; // 関数呼び出しを伴うAI推論を実行 const response = await runWithTools( env.AI, // 関数呼び出しをサポートするモデル '@hf/nousresearch/hermes-2-pro-mistral-7b', { // メッセージ messages: [ { role: 'user', content: '次の5日間の天気はどうですか?テキストで回答してください', }, ], // AIモデルが利用できるツールの定義 tools: [ { name: 'getWeather', description: '[numDays]日間の天気を取得', parameters: { type: 'object', properties: { numDays: { type: 'numDays', description: '天気予報の日数' }, }, required: ['numDays'], }, // 以前に定義された関数への参照 function: getWeather, }, ], } ); return new Response(JSON.stringify(response)); },} satisfies ExportedHandler<Env>;