دليل تطوير تطبيقات Gemini 3 Flash على مستوى الإنتاج: البنية المتدفقة، تحسين التكلفة، المراقبة، وتجارب عملية في الترحيل

هذا دليل لتطوير تطبيقات Gemini 3 Flash على مستوى الإنتاج موجّه للمطورين وفرق منتجات الذكاء الاصطناعي، وينظّم بشكل منهجي القضايا الجوهرية مثل الإخراج المتدفق، المعالجة الدُفعية، التوجيه الهجين، استراتيجيات التخزين المؤقت، إعادة المحاولة عند الأخطاء، قواطع الدوائر، الترحيل، المراقبة، الأمان، وتحسين التكلفة. كما يضيف المقال من منظور نمو We0 AI محاور تتعلق بالموقع الرسمي للمنتج، وصفحات التوثيق، وصفحات محتوى SEO / GEO، ومسار تحويل العملاء المحتملين، لمساعدة الفرق على تحويل قدرات النموذج فعليًا إلى منتج قابل للإطلاق والنمو واكتساب العملاء بشكل مستدام

发布于 2026年7月5日technologyGEO 评分: 704 次阅读
Gemini 3 Flashدليل Gemini 3 Flashدليل الإنتاج لـ Gemini 3 Flashبنية Gemini 3 Flashتكلفة Gemini 3 Flashالإخراج المتدفق في Gemini 3 Flashواجهة برمجة تطبيقات Gemini 3 Flashحزمة تطوير Google AI SDKنشر تطبيقات الذكاء الاصطناعيدليل إطلاق النماذج اللغوية الكبيرةتحسين تكلفة النماذج اللغوية الكبيرةمراقبة الذكاء الاصطناعيقاطع الدائرة للذكاء الاصطناعيآلية الرجوع الاحتياطي للذكاء الاصطناعيموقع عرض الذكاء الاصطناعيWe0 AISEO GEOإنتاج الذكاء الاصطناعي
يُوصى بأن يستخدم الغلاف أسلوب إنفوغرافيك تقني باللغة الإنجليزية، مع إبراز كلمات مفتاحية مثل Gemini 3 Flash وproduction patterns وcost optimization وmonitoring وfallback وlaunch checklist، مع مظهر بصري بسيط يركّز على إحساس الترقية الهندسية «من Demo إلى Production».

  • أكثر ما يستحق الانتباه في Gemini 3 Flash ليس كونه أسرع فحسب، بل إنه يضع للمرة الأولى «السرعة» و«القابلية للإطلاق في الإنتاج» داخل النموذج نفسه.

  • إذا كان منتجك يتضمن سيناريوهات مثل الأسئلة والأجوبة عالية التكرار، أو المساعدة في الكتابة، أو الترجمة الفورية، أو الاستخراج الدفعي، فمن المرجح أنه سيكون أوفر من الحل الافتراضي للجيل السابق.

  • ما يحدد فعليًا أثر الإطلاق ليس اسم النموذج، بل ما إذا كنت قد أكملت معًا streaming والتخزين المؤقت وإعادة المحاولة وقاطع الدائرة والمراقبة و fallback.

  • بالنسبة إلى فرق مثل We0 AI التي تحتاج إلى بناء قدرات المنتج، وفي الوقت نفسه إنشاء موقع عرض تسويقي وجذب العملاء عبر البحث، فإن أداء النموذج ليس إلا النصف الأول من الطريق، أما النصف الثاني فهو البناء -> العرض -> النمو -> العملاء المحتملون.

دليل تطوير تطبيقات Gemini 3 Flash على مستوى الإنتاج: تطبيقات عملية في البنية والأداء وتحسين التكلفة

نسخة مُنقّحة في مايو 2026

أكثر نقطة يثيرها Gemini 3 Flash حاليًا للنقاش هي أنه يضع السرعة والجودة والتكلفة في موضع يسهل فيه تحقيق التوازن بينها. وبالنسبة إلى كثير من الفرق، يعني ذلك أن القدرات التي كانت تعمل سابقًا داخل العروض التجريبية فقط أصبحت أخيرًا تملك فرصة للانتقال إلى بيئات إنتاج حقيقية.

لكن هناك مسألة واقعية جدًا هنا: انخفاض تكلفة النموذج لا يعني أن بيئة الإنتاج ستصبح بسيطة تلقائيًا. بعد الإطلاق الفعلي، فإن تجربة المستخدم، ومعالجة الأخطاء، ومعدل إصابة التخزين المؤقت، وتحديد المعدلات، والمراقبة، ومسارات الرجوع الاحتياطي؛ أي عنصر لا يكتمل منها قد يؤدي إلى انهيار الفاتورة والسمعة معًا.

تُعيد هذه المقالة ترتيب المحتوى مع تعديلات طفيفة وفق بنية النص الأصلي، وتركّز على: أنماط البنية، وتحسين الأداء، ومعالجة الأخطاء، واستراتيجيات الترحيل، وسيناريوهات الأعمال الواقعية، والتحكم في التكلفة، وكيفية ربط القدرات التقنية في النهاية بمسار النمو.

لماذا يستحق Gemini 3 Flash دراسة منفصلة

في السابق، كان «النموذج السريع» يعني غالبًا التضحية بجزء من الجودة؛ أما «النموذج القوي» فكان يعني عادةً تكلفة أعلى وزمن استجابة أطول. ما يجعل Gemini 3 Flash جديرًا بالتقييم الجاد فعلًا هو أنه يبدو أقرب إلى طبقة افتراضية يمكن إدخالها مباشرة في بنية الإنتاج.

نقطة التحول الحقيقية هي أن Gemini 3 Flash بدأ يقترب من حالة «سريع من دون تراجع في الجودة». وهذا سيدفع كثيرًا من المنتجات التي كانت مضطرة سابقًا إلى اعتماد تقسيم ثنائي للنماذج إلى إعادة تقييم مسار التوجيه الافتراضي.

الأثر في الأعمال الواقعية

إذا كان منتجك:

  • محادثات وأسئلة وأجوبة وكتابة فورية موجهة للمستخدمين

  • توليدًا وتصنيفًا واستخراجًا دفعيًا عالي التكرار

  • خدمة API تحتاج إلى ضبط التفاصيل باستمرار بين السرعة والتكلفة

فإن سرعة أكبر بثلاث مرات + سعرًا أقل لكل وحدة لا يعنيان غالبًا أرقام تكلفة أجمل فحسب، بل يمكنهما إعادة تشكيل إحساس التفاعل في المنتج، وتكلفة الجلسة الواحدة، والقدرة على تحمّل التزامن.

أكثر ثلاثة أنماط بنية عملية في بيئات الإنتاج

النمط 1: Streaming لتجربة مستخدم فورية

ما يكون المستخدم أكثر حساسية تجاهه ليس «كم ثانية استغرق النموذج إجمالًا»، بل «هل رأيت شيئًا يبدأ بالظهور فورًا أم لا». لذلك في منتجات مثل الدردشة، ومساعدي الكتابة، وCopilot، ينبغي أن يكون streaming خيارًا افتراضيًا في الأساس، لا مجرد ميزة إضافية.

import { GoogleGenerativeAI } from '@google/generative-ai';

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!);
const model = genAI.getGenerativeModel({ model: 'gemini-3-flash' });

export async function POST(req: Request) {
  const { prompt } = await req.json();
  const result = await model.generateContentStream(prompt);

  const encoder = new TextEncoder();
  const stream = new ReadableStream({
    async start(controller) {
      for await (const chunk of result.stream) {
        const text = chunk.text();
        controller.enqueue(encoder.encode(text));
      }
      controller.close();
    },
  });

  return new Response(stream, {
    headers: { 'Content-Type': 'text/plain; charset=utf-8' },
  });
}

إذا قامت الواجهة الأمامية بالعرض بشكل متزامن على مستوى token، فسيشعر المستخدم بوضوح بأن «النظام حي». في هذه السيناريوهات، عادةً ما يؤثر زمن التأخير المُدرَك في الاحتفاظ بالمستخدمين أكثر من إجمالي الوقت المستغرق.

const response = await fetch('/api/chat', {
  method: 'POST',
  body: JSON.stringify({ prompt }),
});

const reader = response.body?.getReader();
const decoder = new TextDecoder();
let content = '';

while (reader) {
  const { done, value } = await reader.read();
  if (done) break;
  content += decoder.decode(value);
  setMessage(content);
}

النمط 2: Batch Processing for Cost Optimization

ما دام عبء العمل لا يتطلب استجابة فورية قوية، فإن المعالجة الدفعية تُعد من أوائل أساليب خفض التكلفة التي ينبغي التفكير فيها. على سبيل المثال:

  • تلخيص المحتوى على دفعات

  • استخراج وسوم المنتجات

  • تنظيف FAQ

  • تصنيف تذاكر الدعم

import PQueue from 'p-queue';

const queue = new PQueue({ concurrency: 10 });

async function processBatch(items) {
  return Promise.all(
    items.map((item) =>
      queue.add(async () => {
        const result = await model.generateContent(item.prompt);
        return { id: item.id, output: result.response.text() };
      })
    )
  );
}

لا يكمن جوهر هذا النوع من الأنماط في «تشغيل المهام بالتوازي» فحسب، بل في: أن تُحسن في الوقت نفسه إدارة عمق الطابور، وإعادة المحاولة عند الفشل، والاستجابة لقيود المعدّل، وتكلفة كل دفعة.

النمط 3: التوجيه الهجين (Flash + Pro)

ليست كل الطلبات تستحق استخدام نموذج عالي التكلفة. والطريقة الأكثر استقرارًا هي:

  • استخدام Flash للأسئلة والأجوبة العادية، والإكمال، والاستخراج المنظم

  • استخدام Pro للتحليل عالي التعقيد واتخاذ القرارات الحساسة للأعمال

class ModelRouter {
  async generate(prompt, taskType) {
    if (taskType === 'simple_chat' || taskType === 'autocomplete') {
      return geminiFlash.generateContent(prompt);
    }

    if (taskType === 'complex_reasoning' || taskType === 'code_review') {
      return geminiPro.generateContent(prompt);
    }

    return geminiFlash.generateContent(prompt);
  }
}

تكمن قيمة طريقة التوجيه هذه في أنك لست مضطرًا إلى دفع «ضريبة أقوى نموذج» مقابل كل طلب عادي.

تحسين الأداء: لا تركز على النموذج فقط، راقب النظام أولًا

1. تحسين زمن الاستجابة

في معظم السيناريوهات، ما يبطئ التجربة فعليًا ليس استدلال النموذج نفسه فقط، بل يشمل أيضًا:

مطالبات طويلة جدًا

  • سياقًا مكررًا

  • استدعاءات تسلسلية غير ضرورية

  • نقصًا في التخزين المؤقت

عمليًا، يمكنك البدء بثلاثة أمور:

  • ما يمكن بثه تدريجيًا، فابدأ ببثه تدريجيًا

  • ما يمكن تخزينه مؤقتًا، فابدأ بتخزينه مؤقتًا

  • ما يمكن تقصير سياقه، فابدأ بتقصير سياقه

2. استراتيجية التخزين المؤقت

غالبًا ما يكون التخزين المؤقت هو الزر الأكثر مباشرة لتوفير التكاليف. تكتشف العديد من الفرق بعد الإطلاق أن الأسئلة المكررة، والقوالب المكررة، وتعليمات النظام المكررة كثيرة جدًا في الواقع.

import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL!);

async function cachedGeneration(prompt) {
  const cacheKey = `gemini:${hash(prompt)}`;
  const cached = await redis.get(cacheKey);

  if (cached) {
    return JSON.parse(cached);
  }

  const result = await model.generateContent(prompt);
  const text = result.response.text();

  await redis.setex(cacheKey, 3600, JSON.stringify(text));
  return text;
}

في كثير من الأعمال، غالبًا ما لا يتحقق انخفاض التكاليف بنسبة 30% إلى 50% عبر تغيير النموذج، بل عبر معدل إصابة ذاكرة التخزين المؤقت.

3. تحسين الـ Prompt

غالبًا ما يكون Gemini 3 Flash أكثر استقرارًا مع الـ prompt ذي البنية الواضحة وحدود المهام المحددة. وبدلًا من إطالة تعليمات النظام باستمرار، من الأفضل:

  • توضيح الهدف بوضوح

  • توضيح تنسيق الإخراج بوضوح

  • توضيح حدود استدعاء الأدوات بوضوح

  • جعل بنية Markdown تحل محل اللغة الطبيعية المطوّلة

معالجة الأخطاء والموثوقية

إعادة المحاولة بالتراجع الأُسّي

async function generateWithRetry(prompt, maxRetries = 3) {
  let lastError;

  for (let i = 0; i < maxRetries; i++) {
    try {
      return await model.generateContent(prompt);
    } catch (error) {
      lastError = error;
      const delay = Math.pow(2, i) * 1000 + Math.random() * 1000;
      await new Promise((resolve) => setTimeout(resolve, delay));
    }
  }

  throw lastError;
}

بعد الإطلاق الفعلي، وجود retry ليس خيارًا اختياريًا، بل هو الحد الأدنى من الحماية الذاتية.

نمط قاطع الدائرة

class CircuitBreaker {
  constructor(threshold = 5, timeout = 60000) {
    this.failures = 0;
    this.threshold = threshold;
    this.timeout = timeout;
    this.lastFailureTime = 0;
    this.state = 'CLOSED';
  }

  async call(fn) {
    if (this.state === 'OPEN') {
      if (Date.now() - this.lastFailureTime > this.timeout) {
        this.state = 'HALF_OPEN';
      } else {
        throw new Error('Circuit breaker is OPEN');
      }
    }

    try {
      const result = await fn();
      this.onSuccess();
      return result;
    } catch (error) {
      this.onFailure();
      throw error;
    }
  }
}

إذا لم يكن لديك قاطع دائرة، فمن السهل أن يؤدي عطل جزئي إلى إسقاط سلسلة المعالجة بأكملها.

استراتيجية الانتقال

الانتقال من مسار GPT-4 / GPT-5

الطريقة الأكثر استقرارًا للانتقال ليست التبديل دفعة واحدة، بل:

  1. حدِّد أولًا الواجهات ذات حركة المرور العالية والحساسة للسرعة والتكلفة

  2. أجرِ اختبارات A/B

  3. قارِن الجودة وزمن الاستجابة والتكلفة ومعدل الأخطاء

  4. زِد حجم الاستخدام على مراحل

async function abTestGeneration(prompt, userId) {
  const useGemini = hashUserId(userId) % 100 < 10;

  if (useGemini) {
    const result = await geminiFlash.generateContent(prompt);
    logMetric('gemini_flash', result);
    return result.response.text();
  } else {
    const result = await openai.chat.completions.create({
      model: 'gpt-4',
      messages: [{ role: 'user', content: prompt }],
    });
    logMetric('gpt4', result);
    return result.choices[0].message.content;
  }
}

الانتقال من Claude إلى Gemini 3 Flash

أسهل موضع للوقوع في الأخطاء هنا هو بنية المطالبة ومخطط الأداة. كثير من مطالبات أسلوب Claude تميل إلى صيغة XML، بينما يكون Gemini غالبًا أنسب مع بنية Markdown واضحة.

## التعليمات
حلّل هذا الكود بحثًا عن الأخطاء.

## الكود
```javascript
function foo() { ... }
```

يجب أيضًا التحقق من اختلافات بنية الحقول في جزء استدعاء الدوال:

const claudeTools = [{
  name: 'get_weather',
  description: 'Get weather for a location',
  input_schema: {
    type: 'object',
    properties: { location: { type: 'string' } }
  }
}];

const geminiTools = [{
  functionDeclarations: [{
    name: 'get_weather',
    description: 'Get weather for a location',
    parameters: {
      type: 'object',
      properties: { location: { type: 'string' } }
    }
  }]
}];

سيناريوهات الأعمال الواقعية

1. روبوت دردشة لخدمة العملاء

الإعداد النموذجي المناسب لـ Gemini 3 Flash هو:

  • تزامن عالٍ

  • حساسية لسرعة أول بايت

  • الحاجة إلى محادثات متعددة الجولات

  • ضرورة بقاء التكلفة قابلة للتحكم

2. خط إنتاج المحتوى

عادةً ما تكون مهام مثل إنشاء العناوين، والملخصات، والوسوم، وتوسيع الأسئلة الشائعة FAQ، وكتابة نصوص صفحات الهبوط أكثر ملاءمة للمعالجة الدفعية + التخزين المؤقت. بالنسبة إلى فرق مثل We0 AI التي تحتاج إلى إنشاء مواقع عرض رسمية، وصفحات دراسات حالة، وصفحات محتوى SEO بشكل مستمر، يمكن دمج هذا النوع من خطوط الإنتاج بسهولة مباشرةً في نظام النمو.

3. واجهة API للترجمة الفورية

في أي سيناريو يتطلب زمن استجابة منخفضًا، ودعمًا متعدد اللغات، واستدعاءات كثيفة للنصوص القصيرة، سيكون Gemini 3 Flash أسهل في تحقيق تكلفة وحدة صحية مقارنةً بـ“استخدام نموذج كبير افتراضيًا”.

قائمة تحقق لتحسين التكلفة

  • تفعيل streaming افتراضيًا لتقليل الانتظار المُدرَك

  • تخزين الطلبات عالية التكرار مؤقتًا للحصول أولًا على أسهل مكاسب التكلفة

  • توزيع الطلبات حسب تعقيد المهمة لتجنب استخدام Pro في كل خطوة

  • تشديد prompt لتقليل السياق غير الضروري

  • تتبّع نسبة fallback وعدم الاكتفاء بالنظر إلى سعر النموذج الرئيسي فقط

  • استخدام المعالجة الدفعية للاستفادة من الإنتاجية وعدم تمويه المهام غير المتصلة كمهام فورية

المراقبة وقابلية الرصد

المؤشرات التي يجب متابعتها

  • زمن الاستجابة p50 / p95 / p99

  • استهلاك رموز الإدخال / الإخراج

  • معدل إصابة التخزين المؤقت

معدل إعادة المحاولة

  • معدل fallback

  • التكلفة لكل طلب

  • معدل الأخطاء حسب نقطة النهاية

عناصر التنبيه المقترحة

  • ارتفاع غير طبيعي في زمن الاستجابة

  • ارتفاع مفاجئ في معدل الأخطاء

  • انحراف استهلاك الرموز اليومي عن الميزانية

  • ارتفاع نسبة استدعاءات fallback

  • انخفاض واضح في معدل إصابة التخزين المؤقت

أفضل ممارسات الأمان

1. إدارة مفتاح API

export GEMINI_API_KEY=your_key_here

2. تنظيف المدخلات

function sanitizeInput(input) {
  return input
    .replace(/<script[^>]*>.*?<\/script>/gi, '')
    .replace(/javascript:/gi, '')
    .trim();
}

3. تصفية المخرجات

function filterOutput(text) { const blockedPatterns = [/api[_-]?key/i, /password/i, /secret/i]; for (const pattern of blockedPatterns) { if (pattern.test(text)) { throw new Error('Sensitive content detected'); } } return text; }

الأخطاء الشائعة وحلولها

الخطأ 1: عدم التعامل مع تحديد المعدّل

async function rateLimitedCall(fn, maxRetries = 5) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await fn();
    } catch (error) {
      if (error.status === 429) {
        const retryAfter = error.headers?.['retry-after'] || Math.pow(2, i);
        await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
        continue;
      }
      throw error;
    }
  }
}

الخطأ 2: تجاهل حدود الرموز المميّزة

function chunkText(text, maxTokens = 30000) {
  const estimatedTokens = text.length / 4;

  if (estimatedTokens <= maxTokens) {
    return [text];
  }

  const chunkSize = Math.floor(text.length / Math.ceil(estimatedTokens / maxTokens));
  const chunks = [];

  for (let i = 0; i < text.length; i += chunkSize) {
    chunks.push(text.slice(i, i + chunkSize));
  }

  return chunks;
}

الخطأ 3: عدم وجود آلية بديلة

async function generateWithFallback(prompt) {
  try {
    return await geminiFlash.generateContent(prompt);
  } catch (error) {
    console.error('Gemini Flash failed, trying fallback');

    try {
      return await openai.chat.completions.create({
        model: 'gpt-3.5-turbo',
        messages: [{ role: 'user', content: prompt }],
      });
    } catch (fallbackError) {
      return { text: 'Service temporarily unavailable. Please try again.' };
    }
  }
}

الخلاصة: من إثبات المفهوم إلى الإنتاج، الرهان هو اكتمال الهندسة

ما غيّره Gemini 3 Flash ليس مجرد جدول أسعار النماذج، بل حدود قابلية الإطلاق للعديد من تطبيقات الذكاء الاصطناعي. بعض القدرات التي كانت تبدو في الماضي «تعمل وظيفيًا لكنها غير مجدية حسابيًا» بدأت الآن تملك فرصة للدخول في الأعمال الفعلية.

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

  • إعادة المحاولة ومعالجة تحديد المعدلات

  • التخزين المؤقت ونمذجة التكلفة

  • المراقبة والتنبيهات والرجوع الاحتياطي

  • التصفية الأمنية وعزل الصلاحيات

  • صفحات العرض، وصفحات التوثيق، وصفحات الأسئلة الشائعة، ومسار التحويل في طبقة النمو

إذا كنت قد وصلت واجهة API فقط، فهذه ليست إلا بداية البناء. ما يجعل المنتج قادرًا باستمرار على الحصول على زيارات من البحث، وزيارات من توصيات الذكاء الاصطناعي، والعملاء المحتملين للمبيعات، هو ما إذا كنت قد أنشأت أيضًا نصف السلسلة المتعلق بـ Showcase، Grow، Leads.

الأدوات والموارد ذات الصلة

  • مخطِّط موقع العرض من We0 AI: يخطط بنية موقع المنتج الرسمي، وصفحات القدرات، وصفحات دراسات الحالة، وصفحات الوثائق، وصفحات المقارنة.

  • خريطة محتوى SEO / GEO من We0 AI: تقسيم القدرات التقنية إلى مصفوفة من المقالات وصفحات الهبوط القابلة للبحث والتوصية والتحويل.

  • ورقة عمل نموذج تكلفة API: تقدير حجم الـ prompt، ومعدل إصابة التخزين المؤقت، ومعدل fallback، والتكلفة المدمجة مسبقًا.

  • قائمة التحقق للإطلاق: تجميع streaming، وإعادة المحاولة، وقاطع الدائرة، والمراقبة، وfallback، وrate limit في قائمة واحدة قبل الإطلاق.

  • لوحة مقارنة المزوّدين: مقارنة أفقية بين Gemini وClaude وOpenAI ومسارات المصادر المفتوحة من حيث السرعة والجودة والميزانية.

الأسئلة الشائعة

لماذا يُعد Gemini 3 Flash مناسبًا لبيئات الإنتاج؟

تكمن نقطته الأساسية في أن: السرعة والجودة لم تعودا خيارين لا يمكن الجمع بينهما. بالنسبة إلى سيناريوهات الطلبات عالية التكرار، يعني ذلك تكلفة أقل لكل طلب، واستجابة أسرع، وتعقيدًا أقل في الطبقات.

ما المنتجات الأنسب لـ Gemini 3 Flash؟

الدردشة، ومساعدات الكتابة، وخطوط إنتاج المحتوى، وواجهات الترجمة، والأسئلة والأجوبة المعرفية، والاستخراج المنظم؛ كلها مناسبة جدًا لاستخدامه أولًا كطبقة افتراضية، ثم تحديد ما إذا كان ينبغي الترقية إلى نموذج أقوى وفقًا لدرجة التعقيد.

ما أهم ثلاثة أمور ينبغي القيام بها قبل الإطلاق؟

streaming، والتخزين المؤقت، وfallback. غالبًا ما تحقق هذه الأمور الثلاثة عائدًا حقيقيًا في وقت أبكر من مواصلة الانشغال بتفاصيل الـ prompt.

لماذا ينبغي للفرق التقنية أن تهتم أيضًا بالمواقع التعريفية وSEO / GEO؟

لأن قدرات النموذج لا تتحول تلقائيًا إلى عملاء. ما يشرح قدرات المنتج بوضوح، ويجعله قابلًا للعثور عليه في البحث، وموصى به من قبل الذكاء الاصطناعي، ثم يحوله في النهاية إلى عملاء محتملين، هو بنية الموقع الرسمي، وصفحات دراسات الحالة، والأسئلة الشائعة، وصفحات المقارنة، ومصفوفة المحتوى.