Alejandro Rioja.
AI Agents Growth

أرخص طريقة لتشغيل وكيل محتوى على Cloudflare

Alejandro Rioja
Alejandro Rioja
6 د قراءة
TL;DR

يمكنك تشغيل خط أنابيب كامل لإنشاء المحتوى وترجمته على Cloudflare Workers + Claude API بحوالي $0.50 للمقالة مع Sonnet 3.5، أو $0.12 مع Haiku. تعالج الخطة المجانية من Cloudflare 100 ألف طلب يومياً — لا تدفع إلا عندما يتطلب الحجم ذلك. القيد الوحيد هو زمن الانتظار عند البدء البارد لمكالمات LLM الطويلة، وهو ما تحله Queues.

نشرة بريدية مجانية

كل أربعاء. أكثر من 28,400 مشترك. بدون حشو.

جدول المحتويات

محدّث مايو 2026.

TL;DR: يمكنك تشغيل خط أنابيب كامل لإنشاء المحتوى وترجمته على Cloudflare Workers + Claude API بحوالي $0.50 للمقالة مع Sonnet 3.5، أو $0.12 مع Haiku. تعالج الخطة المجانية من Cloudflare 100 ألف طلب يومياً — لا تدفع إلا عندما يتطلب الحجم ذلك. القيد الوحيد هو زمن الانتظار عند البدء البارد لمكالمات LLM الطويلة، وهو ما تحله Queues.

[منظور المشغّل] أنا أشغّل هذا الخط بالضبط على alejandrorioja.com: Worker واحد بـ TypeScript يكتب مقالة، ويوزّع 12 مهمة ترجمة، ويخزّن كل شيء في KV — كل ذلك يُشغَّل بطلب HTTP واحد. إليك التكلفة الدقيقة وكيفية البناء.

لماذا Cloudflare بدلاً من AWS أو Vercel

تفرض AWS Lambda رسوماً بالجيجابايت في الثانية. تفرض Vercel رسوماً لكل تنفيذ ولها حدود صارمة للمعدل في الخطة المجانية. كلاهما يضيف عدم قابلية التنبؤ بالبدء البارد على نطاق واسع.

تعمل Cloudflare Workers على V8 isolates، وليس الحاويات. تكون عمليات البدء الباردة أقل من ميلي ثانية. الخطة المجانية مفيدة فعلاً: 100,000 طلب يومياً، 10 ميلي ثانية من وقت المعالج لكل طلب (وقت الساعة الفعلي أطول). الخطة المدفوعة $5 شهرياً لـ10 ملايين طلب.

بالنسبة لخط أنابيب محتوى الذكاء الاصطناعي، تكاليف الحوسبة في Workers تكاد تكون صفراً. التكلفة الحقيقية هي Claude API. هذا هو المتغير الوحيد الذي تحتاج إلى تحسينه.

البنية المعمارية (مخطط نصي)

code
مُشغِّل HTTP (cron أو webhook)


  Worker: المنسّق

        ├─ كتابة بيانات المهمة → KV (الحالة: "pending")

        └─ وضع مهمة إنشاء EN في قائمة الانتظار


         قائمة الانتظار: content-jobs

        ┌──────┴──────┐
        ▼             ▼
  Worker: الكاتب   Worker: المترجم (×12 لغة)
        │                    │
        ▼                    ▼
  Claude API             Claude API
        │                    │
        └──────┬─────────────┘

        KV: posts/{slug}/{locale}


     Webhook → GitHub → نشر

يُعدّ Worker المنسّق نقطة الدخول. يكتب سجل حالة أولي في KV، ثم يدفع مهمة إلى Cloudflare Queue. يُشغّل Fan-out القائمة Worker الكاتب (EN)، وبمجرد أن يصبح نص EN جاهزاً، يُشغّل 12 Worker مترجم بالتوازي. كل شيء ينتهي في KV بمفتاح {slug}/{locale}. يُشغّل webhook نهائي نشر GitHub Actions.

جدول تكاليف Cloudflare

الموردالخطة المجانيةالمدفوعة ($5/شهر)استخدامي الفعلي
طلبات Workers100K/يوم10M/شهر~500/يوم
وقت CPU في Workers10ms/طلب30s/طلب~8ms/طلب
قراءات KV100K/يوم10M/شهر~2K/يوم
كتابات KV1K/يوم1M/شهر~300/يوم
رسائل Queues1M/شهر (مشمول)~300/شهر
تخزين KV1 جيجابايت1 جيجابايت (مشمول)~200 ميجابايت

للموقع الذي ينشر 10 مقالات/شهر، تكون فاتورة Cloudflare $0 في الخطة المجانية. Workers مجانية. قراءات/كتابات KV بهذا الحجم مجانية. الميزة المدفوعة الوحيدة التي أستخدمها هي Queues — التي تتطلب خطة Workers Paid بـ$5/شهر، لكن هذه الخطة تشمل مليون رسالة في قائمة الانتظار.

فاتورة Cloudflare الخاصة بي: $5 شهرياً ثابتة، بغض النظر عن حجم المقالات حتى ~3,000 مقالة/شهر.

جدول تكاليف Claude API

هنا تذهب الأموال الحقيقية. فيما يلي التفصيل لكل مقالة.

إنشاء EN (مقالة واحدة، ~1,500 كلمة):

النموذجرموز الإدخالرموز الإخراجالتكلفة
Claude Haiku 3.5~2,000~2,500$0.005
Claude Sonnet 3.5~2,000~2,500$0.042

12 ترجمة (كل منها ~1,500 كلمة):

النموذجرموز الإدخال (×12)رموز الإخراج (×12)التكلفة
Claude Haiku 3.5~24,000~30,000$0.054
Claude Sonnet 3.5~24,000~30,000$0.500

الإجمالي لكل مقالة (EN + 12 ترجمة):

النموذجالتكلفة الإجمالية
Claude Haiku 3.5~$0.059
Claude Sonnet 3.5~$0.542

أستخدم Sonnet لإنشاء EN (الجودة مهمة للمقالة الأصلية) و Haiku للترجمات (نص المصدر مكتوب بالفعل؛ النموذج يحتاج فقط إلى ترجمته بأمانة). يكلّف هذا النهج المختلط حوالي $0.10 لكل مقالة في الواقع.

TypeScript Worker: المنسّق

typescript
// src/workers/orchestrator.ts
import { Queue } from "@cloudflare/workers-types";

interface Env {
  CONTENT_QUEUE: Queue;
  POSTS_KV: KVNamespace;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const { slug, topic } = await request.json<{ slug: string; topic: string }>();

    // كتابة الحالة الأولية
    await env.POSTS_KV.put(
      `status:${slug}`,
      JSON.stringify({ status: "pending", createdAt: Date.now() })
    );

    // وضع مهمة إنشاء EN في قائمة الانتظار
    await env.CONTENT_QUEUE.send({
      type: "generate",
      slug,
      topic,
      locale: "en",
    });

    return Response.json({ queued: true, slug });
  },
};

TypeScript Worker: الكاتب + المترجم

typescript
// src/workers/content-processor.ts
interface Env {
  CONTENT_QUEUE: Queue;
  POSTS_KV: KVNamespace;
  ANTHROPIC_API_KEY: string;
}

const LOCALES = ["ar","de","es","fr","hi","it","ja","ko","nl","pt","ru","zh"];

export default {
  async queue(batch: MessageBatch<ContentJob>, env: Env): Promise<void> {
    for (const msg of batch.messages) {
      const job = msg.body;

      if (job.type === "generate") {
        const post = await generatePost(job.topic, env.ANTHROPIC_API_KEY);
        await env.POSTS_KV.put(`post:${job.slug}:en`, post);

        // توزيع الترجمات
        for (const locale of LOCALES) {
          await env.CONTENT_QUEUE.send({
            type: "translate",
            slug: job.slug,
            locale,
            sourceText: post,
          });
        }
      }

      if (job.type === "translate") {
        const translated = await translatePost(
          job.sourceText,
          job.locale,
          env.ANTHROPIC_API_KEY,
          // استخدام Haiku للترجمات لخفض التكلفة
          "claude-haiku-3-5-20241022"
        );
        await env.POSTS_KV.put(`post:${job.slug}:${job.locale}`, translated);
      }

      msg.ack();
    }
  },
};

async function generatePost(topic: string, apiKey: string): Promise<string> {
  const res = await fetch("https://api.anthropic.com/v1/messages", {
    method: "POST",
    headers: {
      "x-api-key": apiKey,
      "anthropic-version": "2023-06-01",
      "content-type": "application/json",
    },
    body: JSON.stringify({
      model: "claude-sonnet-3-5-20241022",
      max_tokens: 4096,
      messages: [{ role: "user", content: `Write a detailed blog post about: ${topic}` }],
    }),
  });
  const data = await res.json<{ content: Array<{ text: string }> }>();
  return data.content[0].text;
}

async function translatePost(
  text: string,
  locale: string,
  apiKey: string,
  model: string
): Promise<string> {
  const res = await fetch("https://api.anthropic.com/v1/messages", {
    method: "POST",
    headers: {
      "x-api-key": apiKey,
      "anthropic-version": "2023-06-01",
      "content-type": "application/json",
    },
    body: JSON.stringify({
      model,
      max_tokens: 4096,
      messages: [
        {
          role: "user",
          content: `Translate the following blog post to ${locale}. Preserve all markdown. Keep code blocks in English.\n\n${text}`,
        },
      ],
    }),
  });
  const data = await res.json<{ content: Array<{ text: string }> }>();
  return data.content[0].text;
}

مقارنة البدائل

المنصةالتكلفة الأساسيةالتكلفة لكل طلبالبدء الباردتجربة TypeScript
Cloudflare Workers$0–$5/شهرشبه صفرأقل من msممتازة
AWS Lambda$0 (محدود)$0.20/مليون طلب100ms–1sجيدة
Vercel Functions$0 (محدود)بناءً على الاستخدام200ms–2sجيدة
VPS مستضاف ذاتياً$5–$20/شهر$0لا يوجد (يعمل دائماً)أي لغة
Fly.io Machines$0 (محدود)لكل جيجابايت-ثانية~500msجيدة

الاستضافة الذاتية هي الحالة الوحيدة التي تخسر فيها Cloudflare. VPS Hetzner بـ$6/شهر يُشغّل Node على مدار الساعة دون بدء بارد ودون تكلفة لكل طلب. لكنك تدير عمليات النشر ووقت التشغيل والتوسع بنفسك. Workers تتعامل مع كل ذلك مجاناً بحجمي.

مقارنة AWS Lambda تبدو تنافسية على الورق، لكن الحد الأقصى لوقت تنفيذ Lambda البالغ 15 دقيقة هو قيد حقيقي لسلاسل LLM الطويلة. لدى Workers حد CPU 30 ثانية في الخطة المدفوعة — وهو ما يبدو أسوأ لكنه مناسب لأنك تستخدم Queues للعمل غير المتزامن، وليس حجب Lambda واحدة.

KV لإدارة الحالة

KV هو مخزن قيمة المفتاح الموزع عالمياً من Cloudflare. القراءات سريعة في كل مكان (مخزّنة مؤقتاً على الحافة). تنتشر الكتابات عالمياً في أقل من 60 ثانية.

لخط أنابيب المحتوى، أستخدم ثلاثة أنماط مفاتيح:

typescript
// حالة المهمة
await kv.put(`status:${slug}`, JSON.stringify({ status, updatedAt: Date.now() }));

// محتوى المقالة
await kv.put(`post:${slug}:${locale}`, markdownContent);

// فهرس للقائمة
const index = await kv.get<string[]>("index:posts", "json") ?? [];
await kv.put("index:posts", JSON.stringify([...index, slug]));

تكاليف KV بحجمي: $0. توفر الخطة المجانية 1K كتابة/يوم و100K قراءة/يوم. أكتب ~300 إدخال KV شهرياً (25 مقالة × 13 لغة = 325). بعيد جداً عن الحد.

إذا كنت تنشر 100+ مقالة/شهر بـ12 لغة، ستصل إلى ~39,000 كتابة/شهر — لا تزال أقل من الـ1M/شهر المضمّنة في الخطة المدفوعة بـ$5.

الخلاصة النهائية للمشغّل

يكلّف خط أنابيب المحتوى الكامل — الإنشاء والترجمة والتخزين والنشر — $5.10/شهر في البنية التحتية ($5 Cloudflare Workers Paid + $0.10 Claude API لكل مقالة بمعدل 10 مقالات/شهر). هذا كل شيء. لا خوادم للإدارة، لا تنسيق حاويات، لا فواتير مفاجئة من بدايات باردة لـ Lambda تصل إلى عتبة التزامن المُخصَّص.

استراتيجية النموذج المختلط (Sonnet لـ EN، Haiku للترجمات) تخفّض تكاليف Claude بنسبة 80% دون انخفاض ملحوظ في جودة الترجمة. احسب الأرقام لحجمك وستجد أن Cloudflare + Claude Haiku هو حقاً أرخص طريقة لتشغيل هذا النوع من خط الأنابيب على نطاق المؤسسين.

تابع القراءة

احصل على دليل الذكاء الاصطناعي في صندوق بريدك

كل أربعاء. أكثر من 28,400 مشترك. بدون حشو.

↵ لعرض كل النتائج esc esc للإغلاق