Acest tutorial Cloudflare Workers AI vă arată cum să implementați și să rulați modele de machine learning direct pe rețeaua globală edge a Cloudflare. Cu Cloudflare Workers AI , puteți executa modele de limbaj mari (LLMs), traduceri de text, generare de imagini și transcrieri audio aproape de utilizatorii dumneavoastră, fără a gestiona servere GPU complexe. Pașii de mai jos explică cum să configurați Wrangler, să scrieți un fetch handler, să rulați un model Llama și să optimizați costurile API la edge.
TL;DR
- Rulați modele AI serverless ; Cloudflare Workers AI gestionează infrastructura GPU de bază și vă taxează doar pentru calculul activ.
- Configurați bindings în wrangler.toml ; conectați worker-ul direct la legătura AI fără a gestiona chei API.
- Scrieți un fetch handler pentru a primi solicitările utilizatorilor, a executa modelul și a transmite răspunsuri JSON în timp real (streaming).
- Selectați modele optimizate din catalogul Cloudflare (cum ar fi Llama 3, Whisper sau Stable Diffusion) pentru a echilibra viteza și acuratețea.
- Aplicați limite de frecvență pentru a vă proteja endpoint-ul împotriva abuzurilor legate de costul ridicat al tokenilor în producție.
De ce să rulați modele AI la edge?
În mod tradițional, integrarea funcționalităților AI necesita apelarea unor API-uri externe (cum ar fi OpenAI) sau găzduirea modelelor open-source pe servere cloud scumpe.
Apelarea API-urilor externe aduce probleme de latență și confidențialitate a datelor. Rularea propriilor servere GPU introduce provocări de întreținere și o scalabilitate dificilă. Cloudflare Workers AI rezolvă această dilemă. Platforma găzduiește modele open-source pe GPU-uri implementate pe rețeaua globală a Cloudflare. Codul dumneavoastră rulează ca un Worker ușor, executând modele aproape de utilizatorii dumneavoastră cu o latență aproape nulă. Pentru o introducere în crearea structurilor edge de bază, consultați ghidul nostru despre crearea unui API serverless cu Cloudflare Workers .
Prerechizite
Înainte de a începe, asigurați-vă că aveți la dispoziție următoarele:
- Un cont Cloudflare cu Workers activat. Planul gratuit include o alocare zilnică pentru inferență, care este mai mult decât suficientă pentru a urmări acest ghid.
- Node.js 18 sau mai nou instalat local, astfel încât să puteți rula instrumentele și serverul de dezvoltare local.
- Wrangler, CLI-ul Workers, instalat și autentificat. Instalați-l cu
npm install -g wrangler, apoi rulațiwrangler loginpentru a-l conecta la contul dumneavoastră. - Familiaritate de bază cu JavaScript și modelul de cerere/răspuns
fetchpe care este construit fiecare Worker.
Dacă porniți de la zero, creați un proiect cu instrumentul create-cloudflare (C3). Acesta generează un Worker gata de implementare, un fișier wrangler.toml și o dată de compatibilitate (compatibility_date) potrivită:
1npm create cloudflare@latest my-edge-ai
2cd my-edge-ai
Alegeți șablonul Worker “Hello World” când vi se solicită. Aceasta vă oferă un punct de plecare curat la care puteți adăuga legătura AI în pasul următor.
Pasul 1: Configurarea wrangler.toml
Pentru a accesa modelele AI, trebuie mai întâi să definiți legătura (binding) AI în fișierul de configurare al proiectului dumneavoastră.
Deschideți fișierul wrangler.toml (sau wrangler.json) și adăugați următorul bloc:
1[ai]
2binding = "AI"
Această legătură face serviciul AI disponibil pe argumentul de mediu (env.AI) în codul worker-ului dumneavoastră. Nu este nevoie să gestionați chei API, să configurați endpoint-uri sau să gestionați șiruri de conexiune. Wrangler gestionează autentificarea automat la implementare.
Un fișier wrangler.toml complet pentru acest proiect arată astfel:
1name = "my-edge-ai"
2main = "src/index.js"
3compatibility_date = "2025-01-01"
4
5[ai]
6binding = "AI"
Data de compatibilitate (compatibility_date) este importantă: fixează comportamentul runtime-ului, astfel încât viitoarele modificări ale platformei să nu altereze în mod silențios modul în care rulează Worker-ul dumneavoastră. Dacă o omiteți, implementarea va eșua cu o eroare de configurare, unul dintre cele mai comune obstacole la prima rulare.
Pasul 2: Scrierea codului Worker
Odată configurată legătura, puteți apela serviciul AI din handlerul fetch. Exemplul de mai jos arată cum să primiți un payload JSON care conține un prompt al utilizatorului și să generați o completare de text utilizând Llama 3.
1export default {
2 async fetch(request, env) {
3 if (request.method !== "POST") {
4 return new Response("Method not allowed", { status: 405 });
5 }
6
7 try {
8 const { prompt } = await request.json();
9 if (!prompt) {
10 return Response.json({ error: "Missing prompt" }, { status: 400 });
11 }
12
13 // Call the model using the AI binding
14 const response = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
15 prompt: prompt,
16 max_tokens: 256
17 });
18
19 return Response.json(response);
20 } catch (err) {
21 return Response.json({ error: err.message }, { status: 500 });
22 }
23 }
24};
Această structură simplă vă permite să creați rezumate de text, instrumente de analiză a sentimentelor sau generatoare de conținut. Dacă doriți să conectați aceste funcționalități la baza de date, vă puteți conecta la o bază de date SQL serverless; consultați ghidul de configurare a bazei de date Cloudflare D1 pentru detalii.
Utilizarea formatului de mesaje de chat
Câmpul prompt este convenabil pentru completări unice, dar modelele conversaționale se comportă cel mai bine cu un array structurat de mesaje (messages). Aceasta vă permite să setați o instrucțiune de sistem pentru a defini tonul modelului și a o menține separată de intrarea utilizatorului:
1const messages = [
2 { role: "system", content: "You are a concise technical assistant." },
3 { role: "user", content: prompt }
4];
5
6const response = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
7 messages,
8 max_tokens: 512
9});
10
11// Text models return the generated text on the `response` property
12return Response.json({ answer: response.response });
Rețineți că modelele de generare a textului își pun rezultatul într-un câmp response, astfel încât textul completat se află la response.response și nu la nivelul principal. Acest detaliu surprinde mulți utilizatori la prima rulare, care înregistrează obiectul brut și observă o structură neașteptată.
Alegerea modelului potrivit
Catalogul Cloudflare include zeci de modele, iar alegerea corectă este un compromis între viteză, calitate și cost. Modelele mai mici răspund mai repede și consumă mai puține resurse; modelele mai mari raționează mai bine, dar costă mai mult per solicitare. Tabelul de mai jos compară câteva opțiuni populare pentru generarea de text.
| Model | Ideal pentru | Viteză relativă | Cost relativ |
|---|---|---|---|
@cf/meta/llama-3-8b-instruct | Chat general, rezumate | Rapid | Scăzut |
@cf/meta/llama-3.1-70b-instruct | Raționament complex, răspunsuri lungi | Mai lent | Mai mare |
@cf/mistral/mistral-7b-instruct-v0.2 | Instrucțiuni ușoare, schițe | Rapid | Scăzut |
@cf/meta/llama-guard-3-8b | Moderarea și clasificarea conținutului | Rapid | Scăzut |
Ca regulă generală, începeți cu un model 8B precum Llama 3 8B Instruct. Acesta gestionează majoritatea fluxurilor de lucru de rezumat, clasificare și chat la o fracțiune din latența și costul unui model 70B. Treceți la un model mai mare doar atunci când evaluările dumneavoastră demonstrează că cel mai mic este cu adevărat insuficient.
Pasul 3: Streamingul răspunsurilor pentru o mai bună experiență a utilizatorului
În aplicațiile de chat, așteptarea generării complete a răspunsului poate duce la o experiență neplăcută pentru utilizator.
Puteți configura legătura AI pentru a transmite (stream) răspunsul token cu token pe măsură ce este generat. Pentru a face acest lucru, transmiteți stream: true în opțiunile solicitării dumneavoastră. Worker-ul va returna un ReadableStream pe care îl puteți trimite direct către clientul browser, creând o interfață de chat fluidă și interactivă. Pentru a compara această abordare de runtime la edge cu găzduirea cloud tradițională, citiți compararea noastră între Cloudflare Workers și AWS Lambda
.
Iată un handler de streaming complet. În loc să returnați JSON analizat, transmiteți direct fluxul către client cu corectul content-type, astfel încât browserul să îl poată consuma ca Server-Sent Events:
1export default {
2 async fetch(request, env) {
3 const { prompt } = await request.json();
4
5 const stream = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
6 prompt,
7 max_tokens: 512,
8 stream: true
9 });
10
11 return new Response(stream, {
12 headers: { "content-type": "text/event-stream" }
13 });
14 }
15};
Diferența cheie față de versiunea fără streaming constă în răspunsul propriu-zis: treceți fluxul direct în new Response() și setați content-type la text/event-stream. Dacă împachetați fluxul în Response.json(), acesta nu se va serializa corect, iar clientul va primi un corp de răspuns gol.
Testarea și implementarea Worker-ului
Odată ce legătura și handlerul sunt configurate, rulați Worker-ul local înainte de a-l implementa:
1npx wrangler dev
Deoarece inferența rulează pe GPU-urile Cloudflare și nu pe mașina dumneavoastră locală, legătura AI apelează rețeaua chiar și în timpul dezvoltării locale. Wrangler gestionează acest lucru pentru dumneavoastră, dar înseamnă că testarea locală are nevoie de o conexiune activă și de o sesiune de autentificare valabilă.
Trimiteți o solicitare de test cu curl în timp ce wrangler dev rulează:
1curl -X POST http://localhost:8787 \
2 -H "Content-Type: application/json" \
3 -d '{"prompt": "Summarise the benefits of edge computing in one sentence."}'
Odată ce sunteți mulțumit de rezultat, implementați-l pe rețeaua globală:
1npx wrangler deploy
Wrangler încarcă Worker-ul dumneavoastră și returnează un URL *.workers.dev. Endpoint-ul dumneavoastră este acum activ în fiecare centru de date Cloudflare, iar fiecare solicitare este direcționată automat către locația cea mai apropiată de utilizator.
Erori comune și depanare
Iată câteva dintre cele mai frecvente probleme care apar atunci când echipele implementează pentru prima dată inferența la edge. Cunoașterea soluției din timp salvează ore de depanare.
Cannot read properties of undefined (reading 'run')– legăturaenv.AIeste nedefinită. Acest lucru înseamnă aproape întotdeauna că blocul[ai]lipsește dinwrangler.toml, sau ați modificat fișierul fără a reporniwrangler dev(sau fără a reimplementa). Verificați ca numele legăturii să se potrivească exact.No such modelsau eroare 400 larun– identificatorul modelului este incorect. Numele modelelor sunt sensibile la majuscule și trebuie să includă calea completă, de exemplu@cf/meta/llama-3-8b-instruct. Copiați-le din catalogul de modele în loc să le scrieți din memorie.- Răspunsuri în streaming goale sau defecte – ați returnat fluxul prin
Response.json()în loc denew Response(stream, ...). Fluxurile trebuie transmise direct, nu serializate. - Erori de capacitate sau erori 429 sub sarcină – modelul este temporar saturat sau ați atins o limită a contului. Adăugați un scurt mecanism de reîncercare cu temporizare și luați în considerare un model mai mic pentru vârfurile de trafic.
- Răspunsuri trunchiate – răspunsul se oprește la mijlocul propoziției deoarece
max_tokenseste configurat prea mic. Creșteți limita, dar rețineți că valorile mai mari cresc atât latența, cât și costul.
Dacă o solicitare eșuează fără mesaje de eroare, monitorizați logurile în timp real cu npx wrangler tail în timp ce trimiteți o solicitare de test. Acesta afișează erorile de runtime și ieșirile de console.log din Worker-ul implementat.
Optimizarea costurilor de producție și a securității
Deși Workers AI este foarte rentabil, rularea inferenței de modele în producție necesită controale atente.
- Implementați limite de frecvență (Rate Limiting): Limitați frecvența cu care un client poate apela endpoint-ul dumneavoastră. Costurile de calcul GPU cresc proporțional cu utilizarea.
- Sanitizați promptele: Validați intrările pentru a preveni atacurile de prompt injection și a vă asigura că rezultatele modelului rămân în conformitate cu imaginea companiei.
- Limitați dimensiunea contextului: Păstrați istoricul promptelor scurt. Trimiterea de volume masive de context la fiecare apel crește costurile de procesare a tokenilor.
Pentru o analiză detaliată a gestionării contextului, consultați ghidul nostru despre crearea unui chatbot cu API-ul OpenAI .
Aspecte cheie de reținut
- Cloudflare Workers AI oferă acces serverless la modele open-source fără întreținerea de servere GPU.
- Configurați accesul adăugând blocul de legătură
[ai]în fișierulwrangler.toml. - Scrieți fetch handleri pentru a executa sarcini de generare de text, traduceri sau imagini direct la edge.
- Activați streamingul de tokeni cu
stream: truepentru a optimiza experiența pe dispozitive mobile și în aplicațiile de chat. - Aplicați limite de frecvență și sanitizare a promptelor pentru a vă proteja endpoint-urile edge în producție.
Construiți aplicațiile dumneavoastră AI la edge
Crearea de integrări AI fiabile necesită cunoștințe de specialitate în arhitectura serverless. Mecanik este specializat în servicii de integrare AI și configurații de API personalizate prin intermediul serviciului nostru de integrare a API-ului OpenAI . Construim instrumente edge-native care scalează fluid, optimizând costurile și experiența utilizatorului. Contactați experții noștri astăzi pentru a discuta proiectul dumneavoastră.
Întrebări frecvente (FAQ)
Ce este Cloudflare Workers AI? Este o platformă serverless care vă permite să rulați modele de machine learning (generare de text, traducere, speech-to-text, generare de imagini) pe rețeaua globală de GPU a Cloudflare.
Am nevoie de o cheie API pentru a utiliza Workers AI?
Nu. Odată ce declarați legătura AI în fișierul wrangler.toml, Cloudflare gestionează autentificarea în mod intern, făcând serviciul accesibil prin intermediul env.AI.
Ce modele sunt disponibile pe Cloudflare Workers AI? Platforma găzduiește modele open-source populare, inclusiv Meta Llama, Mistral, OpenAI Whisper și Stable Diffusion, care sunt actualizate regulat în catalogul de modele.
Pot streamui răspunsuri de text de pe Workers AI?
Da. Setând stream: true în parametrii apelului env.AI.run, worker-ul returnează un ReadableStream standard pentru a streamui textul către browser.
Cum funcționează facturarea pentru Workers AI? Facturarea se bazează pe numărul de tokeni procesați (pentru modelele de text) sau pe durata timpului de calcul (pentru alte modele), oferind un model de plată la utilizare foarte rentabil.
Comentarii