← Cloudflare Workers AI / workers-ai / features / function-calling / embedded / examples
Использование обработчика fetch()
Очень частый вариант использования: дать LLM возможность выполнять вызовы API с помощью вызова функций.
В этом примере LLM получает прогноз погоды на следующие 5 дней.
Для этого getWeather определена функция, которая передаётся LLM в качестве инструмента.
getWeatherфункция извлекает местоположение пользователя из запроса и вызывает внешний API погоды через привязку Workers' Fetch API и возвращает результат.
Пример встроенного вызова функций с fetch()
import { runWithTools } from '@cloudflare/ai-utils';
type Env = {
AI: Ai;
};
export default {
async fetch(request, env, ctx) {
// Define function
const getWeather = async (args: { numDays: number }) => {
const { numDays } = args;
// Location is extracted from request based on
// https://developers.cloudflare.com/workers/runtime-apis/request/#incomingrequestcfproperties
const lat = request.cf?.latitude
const long = request.cf?.longitude
// Interpolate values for external API call
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();
};
// Run AI inference with function calling
const response = await runWithTools(
env.AI,
// Model with function calling support
'@hf/nousresearch/hermes-2-pro-mistral-7b',
{
// Messages
messages: [
{
role: 'user',
content: 'What the weather like the next 5 days? Respond as text',
},
],
// Definition of available tools the AI model can leverage
tools: [
{
name: 'getWeather',
description: 'Get the weather for the next [numDays] days',
parameters: {
type: 'object',
properties: {
numDays: { type: 'numDays', description: 'number of days for the weather forecast' },
},
required: ['numDays'],
},
// reference to previously defined function
function: getWeather,
},
],
}
);
return new Response(JSON.stringify(response));
},
} satisfies ExportedHandler<Env>;