このガイドでは、埋め込み関数呼び出し(embedded function calling)を使う最初の Workers AI プロジェクトを設定し、デプロイします。Workers、Workers AI バインディング、ai-utils パッケージ ↗、および大規模言語モデル(LLM)を使い、埋め込み関数呼び出し付きの AI アプリケーションを Cloudflare のグローバルネットワークにデプロイします。
Workers AI の開始ガイド のステップ 2 まで進めます。
次に、プロジェクトのリポジトリで次のコマンドを実行し、Workers AI のユーティリティパッケージをインストールします。
npm i @cloudflare/ai-utilsyarn add @cloudflare/ai-utilspnpm add @cloudflare/ai-utilsbun add @cloudflare/ai-utilsアプリケーションディレクトリの index.ts を、次のコードで更新します。
import { runWithTools } from "@cloudflare/ai-utils";
export default {
async fetch(request, env, ctx) {
// Define function
const sum = (args) => {
const { a, b } = args;
return Promise.resolve((a + b).toString());
};
// 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 result of 123123123 + 10343030?",
},
],
// Definition of available tools the AI model can leverage
tools: [
{
name: "sum",
description: "Sum up two numbers and returns the result",
parameters: {
type: "object",
properties: {
a: { type: "number", description: "the first number" },
b: { type: "number", description: "the second number" },
},
required: ["a", "b"],
},
// reference to previously defined function
function: sum,
},
],
},
);
return new Response(JSON.stringify(response));
},
};import { runWithTools } from "@cloudflare/ai-utils";
type Env = {
AI: Ai;
};
export default {
async fetch(request, env, ctx) {
// Define function
const sum = (args: { a: number; b: number }): Promise<string> => {
const { a, b } = args;
return Promise.resolve((a + b).toString());
};
// 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 result of 123123123 + 10343030?",
},
],
// Definition of available tools the AI model can leverage
tools: [
{
name: "sum",
description: "Sum up two numbers and returns the result",
parameters: {
type: "object",
properties: {
a: { type: "number", description: "the first number" },
b: { type: "number", description: "the second number" },
},
required: ["a", "b"],
},
// reference to previously defined function
function: sum,
},
],
},
);
return new Response(JSON.stringify(response));
},
} satisfies ExportedHandler<Env>;この例では、import { runWithTools} from "@cloudflare/ai-utils" でユーティリティを取り込み、次の API リファレンスに沿って呼び出します。
さらに、ユーザーの問い合わせに答えるために LLM が使えるツールの一覧を定義し、説明しています。ここではツールは sum 関数の 1 つだけです。
runWithTools 関数の内部では、次の手順が抽象化されています。
sequenceDiagram
participant Worker as Worker
participant WorkersAI as Workers AI
Worker->>+WorkersAI: メッセージ、関数呼び出しプロンプト、利用可能なツールを送信
WorkersAI->>+Worker: 関数呼び出し用のツールと引数を選択
Worker-->>-Worker: 関数を実行
Worker-->>+WorkersAI: メッセージ、関数呼び出しプロンプト、関数の結果を送信
WorkersAI-->>-Worker: 関数の出力を反映した応答を送信
ai-utils パッケージは GitHub ↗ でもオープンソースとして公開しています。
ローカル開発とデプロイは、Workers AI の開始ガイド のステップ 4 と 5 を参照してください。
詳細は API リファレンス を参照してください。