コンテンツにスキップ

fetch() ハンドラーの使用

非常に一般的なユースケースは、LLMに関数呼び出しを介してAPI呼び出しを実行する能力を提供することです。

この例では、LLMは次の5日間の天気予報を取得します。 そのために、getWeather関数が定義され、ツールとしてLLMに渡されます。

getWeather関数は、リクエストからユーザーの位置情報を抽出し、WorkersのFetch APIを介して外部天気APIを呼び出し、結果を返します。

fetch()を使用した埋め込み関数呼び出しの例
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>;