본문으로 건너뛰기

Cloudflare

Cloudflare 어댑터는 Cloudflare Workers AI 모델과 AI Gateway에 액세스할 수 있도록 하며, 캐싱, 속도 제한, 통합 결제를 적용해 OpenAI, Anthropic, Gemini, Grok, OpenRouter로 요청을 라우팅합니다.

설치​

npm install @cloudflare/tanstack-ai @tanstack/ai

AI Gateway에서 서드 파티 공급자를 사용하려면 필요한 공급자 SDK를 설치합니다.

npm install @tanstack/ai-openai       # For OpenAI via Gateway
npm install @tanstack/ai-anthropic # For Anthropic via Gateway
npm install @tanstack/ai-gemini # For Gemini via Gateway
npm install @tanstack/ai-grok # For Grok via Gateway
npm install @tanstack/ai-openrouter # For OpenRouter via Gateway

기본 사용법​

import { chat, toHttpResponse } from "@tanstack/ai";
import { createWorkersAiChat } from "@cloudflare/tanstack-ai";
import { env } from "./env";

const adapter = createWorkersAiChat(
"@cf/meta/llama-4-scout-17b-16e-instruct",
{ binding: env.AI },
);

const response = chat({
adapter,
stream: true,
messages: [{ role: "user", content: "Hello!" }],
});

const httpResponse = toHttpResponse(response);

Workers AI​

Cloudflare Worker에서 AI를 사용하는 가장 간단한 방법입니다. env.AI 바인딩을 사용하면 API 키가 필요하지 않습니다.

채팅​

import { chat, toHttpResponse } from "@tanstack/ai";
import { createWorkersAiChat } from "@cloudflare/tanstack-ai";
import { env } from "./env";

const adapter = createWorkersAiChat(
"@cf/meta/llama-4-scout-17b-16e-instruct",
{ binding: env.AI },
);

const response = chat({
adapter,
stream: true,
messages: [{ role: "user", content: "Hello!" }],
});

const httpResponse = toHttpResponse(response);

REST 자격 증명을 사용한 채팅​

Worker 내부에서 실행하지 않는 경우에는 account ID와 API key를 대신 사용합니다.

import { createWorkersAiChat } from "@cloudflare/tanstack-ai";

const adapter = createWorkersAiChat(
"@cf/meta/llama-4-scout-17b-16e-instruct",
{
accountId: "your-account-id",
apiKey: "your-api-key",
},
);

이미지 생성​

import { generateImage } from "@tanstack/ai";
import { createWorkersAiImage } from "@cloudflare/tanstack-ai";
import { env } from "./env";

const adapter = createWorkersAiImage(
"@cf/stabilityai/stable-diffusion-xl-base-1.0",
{ binding: env.AI },
);

const result = await generateImage({
adapter,
prompt: "a cat in space",
});

console.log(result.images[0]?.b64Json);

전사(음성-텍스트)​

Whisper 및 Deepgram 모델을 지원합니다.

import { generateTranscription } from "@tanstack/ai";
import { createWorkersAiTranscription } from "@cloudflare/tanstack-ai";
import { env, audioArrayBuffer } from "./env";

const adapter = createWorkersAiTranscription(
"@cf/openai/whisper-large-v3-turbo",
{ binding: env.AI },
);

const result = await generateTranscription({
adapter,
audio: audioArrayBuffer,
});

console.log(result.text);
console.log(result.segments);

지원되는 전사 모델: @cf/openai/whisper, @cf/openai/whisper-tiny-en, @cf/openai/whisper-large-v3-turbo, @cf/deepgram/nova-3

텍스트-음성 변환​

import { generateSpeech } from "@tanstack/ai";
import { createWorkersAiTts } from "@cloudflare/tanstack-ai";
import { env } from "./env";

const adapter = createWorkersAiTts("@cf/deepgram/aura-2-en", {
binding: env.AI,
});

const result = await generateSpeech({
adapter,
text: "Hello world",
});

console.log(result.audio);

요약​

import { summarize, type AnySummarizeAdapter } from "@tanstack/ai";
import { createWorkersAiSummarize } from "@cloudflare/tanstack-ai";
import { env } from "./env";

const adapter: AnySummarizeAdapter = createWorkersAiSummarize("@cf/facebook/bart-large-cnn", {
binding: env.AI,
});

const result = await summarize({
adapter,
text: "Long article here...",
});

console.log(result.summary);

AI 게이트웨이​

캐싱, 속도 제한, 통합 결제를 위해 Cloudflare의 AI Gateway를 통해 AI 요청을 라우팅합니다. Workers AI와 서드 파티 공급자를 모두 지원합니다.

Gateway를 통한 Workers AI​

import { createWorkersAiChat } from "@cloudflare/tanstack-ai";
import { env } from "./env";

const adapter = createWorkersAiChat(
"@cf/meta/llama-4-scout-17b-16e-instruct",
{
binding: env.AI.gateway("my-gateway-id"),
apiKey: env.WORKERS_AI_TOKEN,
},
);

Gateway를 통한 서드 파티 공급자​

바인딩 방식을 사용합니다(Cloudflare Workers에 권장).

import {
createOpenAiChat,
createAnthropicChat,
createGeminiChat,
createGrokChat,
createOpenRouterChat,
} from "@cloudflare/tanstack-ai";
import { env } from "./env";

const openai = createOpenAiChat("gpt-4o", {
binding: env.AI.gateway("my-gateway-id"),
});

const anthropic = createAnthropicChat("claude-sonnet-4-5", {
binding: env.AI.gateway("my-gateway-id"),
});

const grok = createGrokChat("grok-4.3", {
binding: env.AI.gateway("my-gateway-id"),
});

const openrouter = createOpenRouterChat("openai/gpt-4o", {
binding: env.AI.gateway("my-gateway-id"),
});

Worker가 아닌 환경에서는 자격 증명을 사용할 수도 있습니다.

import { createOpenAiChat } from "@cloudflare/tanstack-ai";

const adapter = createOpenAiChat("gpt-4o", {
accountId: "your-account-id",
gatewayId: "your-gateway-id",
cfApiKey: "your-cf-api-key",
apiKey: "provider-api-key",
});

캐시 옵션​

바인딩 모드와 자격 증명 모드 모두 캐시 구성을 지원합니다.

import { createOpenAiChat } from "@cloudflare/tanstack-ai";
import { env } from "./env";

const adapter = createOpenAiChat("gpt-4o", {
binding: env.AI.gateway("my-gateway-id"),
skipCache: false,
cacheTtl: 3600,
customCacheKey: "my-key",
metadata: { user: "test" },
});

구성 모드​

Workers AI는 네 가지 구성 모드를 지원합니다.

모드구성설명
일반 바인딩{ binding: env.AI }직접 액세스, gateway 없음
일반 REST{ accountId, apiKey }REST API, gateway 없음
Gateway 바인딩{ binding: env.AI.gateway(id) }바인딩을 통해 AI Gateway 사용
Gateway REST{ accountId, gatewayId, ... }REST를 통해 AI Gateway 사용

서드 파티 공급자(OpenAI, Anthropic, Gemini, Grok, OpenRouter)는 gateway 모드만 지원합니다.

지원되는 기능​

공급자채팅요약이미지 생성전사TTS
Workers AI✅✅✅✅✅
OpenAI✅✅✅✅✅
Anthropic✅✅❌❌❌
Gemini✅✅✅❌✅
Grok✅✅✅❌❌
OpenRouter✅✅✅❌❌

환경 변수​

REST 자격 증명 경로(Cloudflare Workers 외부):

CLOUDFLARE_ACCOUNT_ID=your-account-id
CLOUDFLARE_API_KEY=your-api-key

Worker 내부에서 env.AI 바인딩을 사용하면 환경 변수가 필요하지 않습니다.

API 참조​

Workers AI​

  • createWorkersAiChat(model, config) — 채팅 및 구조화된 출력
  • createWorkersAiImage(model, config) — 이미지 생성
  • createWorkersAiTranscription(model, config) — 음성-텍스트 변환(Whisper, Deepgram)
  • createWorkersAiTts(model, config) — 텍스트-음성 변환(Deepgram Aura)
  • createWorkersAiSummarize(model, config) — 요약(BART-large-CNN)

Gateway 공급자​

  • createOpenAiChat(model, config) / createOpenAiSummarize / createOpenAiImage / createOpenAiTranscription / createOpenAiTts
  • createAnthropicChat(model, config) / createAnthropicSummarize
  • createGeminiChat(model, config) / createGeminiSummarize / createGeminiImage / createGeminiTts
  • createGrokChat(model, config) / createGrokSummarize / createGrokImage
  • createOpenRouterChat(model, config) / createOpenRouterSummarize / createOpenRouterImage

다음 단계​