Milvus
Zilliz
  • Home
  • Blog
  • الجوزاء 3 برو + ميلفوس: بناء نظام RAG أكثر قوة مع استدلال متقدم وقوة متعددة الوسائط

الجوزاء 3 برو + ميلفوس: بناء نظام RAG أكثر قوة مع استدلال متقدم وقوة متعددة الوسائط

  • Tutorial
November 20, 2025
Lumina Wang

جاء إصدار Gemini 3 Pro من Google بنوع نادر من الإصدار الذي يغيّر توقعات المطورين بشكل حقيقي - ليس مجرد ضجيج، بل قدرات توسع بشكل جوهري ما يمكن أن تفعله واجهات اللغة الطبيعية. إنه يحول "وصف التطبيق الذي تريده" إلى سير عمل قابل للتنفيذ: توجيه ديناميكي للأدوات، وتخطيط متعدد الخطوات، وتنسيق واجهة برمجة التطبيقات، وتوليد تجربة مستخدم تفاعلية يتم دمجها معًا بسلاسة. هذا هو أقرب ما وصل إليه أي نموذج لجعل الترميز الحيوي يبدو قابلاً للإنتاج.

والأرقام تدعم الرواية. ينشر Gemini 3 Pro نتائج متميزة عبر كل معيار رئيسي تقريبًا:

  • اختبار الإنسانية الأخير: 37.5% بدون أدوات، و45.8% مع الأدوات - أقرب منافس له بنسبة 26.5%.

  • MathArena Apex: 23.4%، بينما تفشل معظم النماذج في تخطي نسبة 2%.

  • ScreenSpot-Pro: 72.7% دقة 72.7%، أي ضعف أفضل النماذج التالية تقريبًا بنسبة 36.2%.

  • Vending-Bench 2: متوسط القيمة الصافية 5,478.16 دولار، أي حوالي 1.4 ضعف المركز الثاني.

راجع الجدول أدناه للاطلاع على المزيد من النتائج القياسية.

هذا المزيج من التفكير العميق، والاستخدام القوي للأدوات، والطلاقة متعددة الوسائط يجعل Gemini 3 Pro مناسبًا بشكل طبيعي للتوليد المعزز للاسترجاع (RAG). قم بإقرانها مع Milvus، قاعدة البيانات المتجهة عالية الأداء مفتوحة المصدر مفتوحة المصدر المصممة للبحث الدلالي على نطاق مليار، وستحصل على طبقة استرجاع تؤسس الاستجابات وتتوسع بشكل نظيف وتبقى موثوقة في الإنتاج حتى في ظل أعباء العمل الثقيلة.

في هذا المنشور، سنقوم بتفصيل ما هو جديد في Gemini 3 Pro، ولماذا يرتقي بسير عمل RAG، وكيفية بناء خط أنابيب RAG نظيف وفعال باستخدام Milvus كعمود فقري للاسترجاع.

ترقيات رئيسية في Gemini 3 Pro

يقدم Gemini 3 Pro مجموعة من التحسينات الجوهرية التي تعيد تشكيل كيفية تعليل النموذج وإنشاء المهام وتنفيذها والتفاعل مع المستخدمين. تنقسم هذه التحسينات إلى أربعة مجالات قدرات رئيسية:

الفهم والاستدلال متعدد الوسائط

يسجل Gemini 3 Pro أرقامًا قياسية جديدة عبر معايير مهمة متعددة الوسائط، بما في ذلك ARC-AGI-2 للفهم البصري وMMMU-Pro للفهم متعدد الوسائط وMMMU-MMMU لفهم الفيديو واكتساب المعرفة. كما يقدم النموذج أيضًا طريقة التفكير العميق، وهي طريقة تفكير موسعة تتيح المعالجة المنطقية المنظمة ومتعددة الخطوات. وينتج عن ذلك دقة أعلى بكثير في المشاكل المعقدة حيث تميل نماذج سلسلة التفكير التقليدية إلى الفشل.

توليد الشيفرات البرمجية

يأخذ النموذج الترميز التوليدي إلى مستوى جديد. يمكن ل Gemini 3 Pro إنتاج صور SVG تفاعلية وتطبيقات ويب كاملة ومشاهد ثلاثية الأبعاد وحتى ألعاب وظيفية - بما في ذلك البيئات الشبيهة بماين كرافت والبلياردو المستندة إلى المتصفح - كل ذلك من موجه واحد باللغة الطبيعية. يستفيد تطوير الواجهة الأمامية بشكل خاص: يمكن للنموذج إعادة إنشاء تصميمات واجهة المستخدم الحالية بدقة عالية أو ترجمة لقطة شاشة مباشرةً إلى كود جاهز للإنتاج، مما يجعل عمل واجهة المستخدم التكرارية أسرع بشكل كبير.

وكلاء الذكاء الاصطناعي واستخدام الأدوات

بعد الحصول على إذن المستخدم، يمكن لـ Gemini 3 Pro الوصول إلى البيانات من جهاز المستخدم من Google لأداء مهام طويلة المدى ومتعددة الخطوات مثل تخطيط الرحلات أو حجز السيارات المستأجرة. تنعكس قدرة الوكيل هذه في أدائه القوي على Vending-Bench 2، وهو معيار مصمم خصيصًا لاختبار ضغط استخدام الأداة على المدى الطويل. يدعم النموذج أيضاً سير عمل الوكيل على مستوى احترافي، بما في ذلك تنفيذ الأوامر الطرفية والتفاعل مع الأدوات الخارجية من خلال واجهات برمجة التطبيقات المحددة جيداً.

واجهة المستخدم التوليدية

يتخطى Gemini 3 Pro نموذج السؤال الواحد والإجابة الواحدة التقليدي ويقدم واجهة مستخدم مولدة، حيث يمكن للنموذج بناء تجارب تفاعلية كاملة بشكل ديناميكي. بدلاً من إرجاع نص ثابت، يمكنه إنشاء واجهات مخصصة بالكامل - على سبيل المثال، مخطط سفر غني وقابل للتعديل - مباشرةً استجابةً لتعليمات المستخدم. يؤدي هذا إلى تحويل LLMs من مستجيبات سلبية إلى مولدات واجهات نشطة.

وضع Gemini 3 Pro تحت الاختبار

بالإضافة إلى النتائج القياسية، أجرينا سلسلة من الاختبارات العملية لفهم كيف يتصرف Gemini 3 Pro في سير العمل الحقيقي. وتسلط النتائج الضوء على كيفية ترجمة تفكيره متعدد الوسائط وقدراته التوليدية وتخطيطه طويل المدى إلى قيمة عملية للمطورين.

الفهم متعدد الوسائط

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

تُظهر تقييمات Google الداخلية سلوكًا مشابهًا: تعامل Gemini 3 Pro مع وصفات مكتوبة بخط اليد بلغات متعددة، وقام بنسخ وترجمة كل واحدة منها، ثم جمعها في كتاب وصفات عائلي قابل للمشاركة.

المهام الصفرية

يمكن ل Gemini 3 Pro إنشاء واجهات مستخدم ويب تفاعلية بالكامل بدون أمثلة أو سقالات مسبقة. عندما طُلب منه إنشاء لعبة ويب مصقولة ثلاثية الأبعاد لسفينة فضاء ثلاثية الأبعاد، أنتج النموذج مشهدًا تفاعليًا كاملًا: شبكة نيون أرجوانية، وسفن على غرار لعبة السايبربانك، وتأثيرات جسيمات متوهجة، وعناصر تحكم سلسة في الكاميرا - كل ذلك في استجابة واحدة من دون لقطة واحدة.

تخطيط المهام المعقدة

يُظهر النموذج أيضًا تخطيط مهام بعيد المدى أقوى من العديد من أقرانه. في اختبار تنظيم صندوق الوارد الذي أجريناه، تصرف Gemini 3 Pro إلى حد كبير مثل مساعد إداري يعمل بالذكاء الاصطناعي: تصنيف رسائل البريد الإلكتروني الفوضوية إلى مجموعات مشاريع، وصياغة اقتراحات قابلة للتنفيذ (الرد، المتابعة، الأرشفة)، وتقديم ملخص منظم ونظيف. مع وضع خطة النموذج، يمكن مسح صندوق الوارد بأكمله بنقرة تأكيد واحدة.

كيفية بناء نظام RAG مع Gemini 3 Pro و Milvus

إن المنطق المطور لـ Gemini 3 Pro، والفهم متعدد الوسائط، وقدرات استخدام الأدوات القوية تجعله أساسًا ممتازًا لأنظمة RAG عالية الأداء.

عند إقرانها مع Milvus، قاعدة البيانات المتجهة مفتوحة المصدر عالية الأداء والمصممة للبحث الدلالي واسع النطاق، تحصل على تقسيم واضح للمسؤوليات: يتعامل Gemini 3 Pro مع التفسير والاستدلال والتوليد، بينما يوفر Milvus طبقة استرجاع سريعة وقابلة للتطوير تحافظ على الاستجابات في بيانات مؤسستك. هذا الاقتران مناسب تمامًا للتطبيقات على مستوى الإنتاج مثل قواعد المعرفة الداخلية، ومساعدي المستندات، والمساعدين في المستندات، والمساعدين المساعدين لدعم العملاء، والأنظمة الخبيرة الخاصة بالمجال.

المتطلبات الأساسية

قبل إنشاء خط أنابيب RAG الخاص بك، تأكد من تثبيت مكتبات Python الأساسية هذه أو ترقيتها إلى أحدث إصداراتها:

  • pymilvus - مجموعة أدوات تطوير البرمجة الرسمية لميلفوس بايثون

  • google-generativeai - مكتبة عميل Gemini 3 Pro

  • طلبات - للتعامل مع مكالمات HTTP عند الحاجة

  • tqdm - لأشرطة التقدم أثناء استيعاب مجموعة البيانات

! pip install --upgrade pymilvus google-generativeai requests tqdm

بعد ذلك، قم بتسجيل الدخول إلى Google AI Studio للحصول على مفتاح API الخاص بك.

import os
os.environ["GEMINI_API_KEY"] = "**********"

إعداد مجموعة البيانات

بالنسبة لهذا البرنامج التعليمي، سنستخدم قسم الأسئلة الشائعة من وثائق Milvus 2.4.x كقاعدة معرفية خاصة لنظام RAG الخاص بنا.

قم بتنزيل أرشيف الوثائق واستخراجه في مجلد باسم milvus_docs.

! wget https://github.com/milvus-io/milvus-docs/releases/download/v2.4.6-preview/milvus_docs_2.4.x_en.zip
! unzip -q milvus_docs_2.4.x_en.zip -d milvus_docs

قم بتحميل جميع ملفات Markdown من المسار milvus_docs/en/faq. بالنسبة لكل مستند، نطبق تقسيمًا بسيطًا استنادًا إلى عناوين # لفصل الأقسام الرئيسية تقريبًا داخل كل ملف Markdown.

from glob import glob
text_lines = []
for file_path in glob("milvus_docs/en/faq/*.md", recursive=True):
    with open(file_path, "r") as file:
        file_text = file.read()
    text_lines += file_text.split("# ")

إعداد نموذج LLM ونموذج التضمين

في هذا البرنامج التعليمي، سنستخدم gemini-3-pro-preview كنموذج LLM و text-embedding-004 كنموذج التضمين.

import google.generativeai as genai
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
gemini_model = genai.GenerativeModel("gemini-3-pro-preview")
response = gemini_model.generate_content("who are you")
print(response.text)

استجابة النموذج: أنا الجوزاء، وهو نموذج لغوي كبير تم إنشاؤه بواسطة Google.

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

test_embeddings = genai.embed_content(
    model="models/text-embedding-004", content=["This is a test1", "This is a test2"]
)["embedding"]
embedding_dim = len(test_embeddings[0])
print(embedding_dim)
print(test_embeddings[0][:10])

ناتج متجه الاختبار:

768

[0.013588584, -0.004361838, -0.08481652, -0.039724775, 0.04723794, -0.0051557426, 0.026071774, 0.045514572, -0.016867816, 0.039378334]

تحميل البيانات في ميلفوس

إنشاء مجموعة

from pymilvus import MilvusClient
milvus_client = MilvusClient(uri="./milvus_demo.db")
collection_name = "my_rag_collection"

عند إنشاء مجموعة MilvusClient ، يمكنك الاختيار من بين ثلاثة خيارات تكوين، اعتمادًا على نطاقك وبيئتك:

  • الوضع المحلي (ميلفوس لايت): تعيين URI إلى مسار ملف محلي (على سبيل المثال، ./milvus.db). هذه هي أسهل طريقة للبدء - سيقوم ميلفوس لايت بتخزين جميع البيانات تلقائيًا في هذا الملف.

  • Milvus المستضاف ذاتيًا (Docker أو Kubernetes): بالنسبة لمجموعات البيانات الأكبر أو أعباء عمل الإنتاج، قم بتشغيل Milvus على Docker أو Kubernetes. قم بتعيين URI إلى نقطة نهاية خادم Milvus الخاص بك، مثل http://localhost:19530.

  • زيليز كلاود (خدمة ميلفوس المدارة بالكامل): إذا كنت تفضل حلاً مُداراً، استخدم Zilliz Cloud. قم بتعيين URI إلى نقطة النهاية العامة الخاصة بك وقدم مفتاح واجهة برمجة التطبيقات الخاص بك كرمز المصادقة.

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

if milvus_client.has_collection(collection_name):
    milvus_client.drop_collection(collection_name)

أنشئ مجموعة جديدة بالمعلمات المحددة.

إذا لم يتم توفير أي مخطط، يقوم Milvus تلقائيًا بإنشاء حقل معرف افتراضي كمفتاح أساسي وحقل متجه لتخزين التضمينات. كما يوفر أيضًا حقل ديناميكي JSON محجوز، والذي يلتقط أي حقول إضافية غير محددة في المخطط.

milvus_client.create_collection(
    collection_name=collection_name,
    dimension=embedding_dim,
    metric_type="COSINE",
    consistency_level="Strong",  # Strong consistency level
)

إدراج البيانات

قم بتكرار كل إدخال نصي، وإنشاء متجه التضمين الخاص به، وإدراج البيانات في ملفوس. في هذا المثال، نقوم بتضمين حقل إضافي يسمى text. نظرًا لأنه غير محدد مسبقًا في المخطط، يقوم Milvus تلقائيًا بتخزينه باستخدام حقل JSON الديناميكي تحت الغطاء - لا يلزم إعداد إضافي.

from tqdm import tqdm
data = []
doc_embeddings = genai.embed_content(
    model="models/text-embedding-004", content=text_lines
)["embedding"]
for i, line in enumerate(tqdm(text_lines, desc="Creating embeddings")):
    data.append({"id": i, "vector": doc_embeddings[i], "text": line})
milvus_client.insert(collection_name=collection_name, data=data)

نموذج الإخراج:

Creating embeddings: 100%|█████████████████████████| 72/72 [00:00<00:00, 431414.13it/s]
{'insert_count': 72, 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71], 'cost': 0}

بناء سير عمل RAG

استرجاع البيانات ذات الصلة

لاختبار الاسترجاع، نطرح سؤالاً شائعاً حول Milvus.

question = "How is data stored in milvus?"

ابحث في المجموعة عن الاستعلام وأرجع أهم 3 نتائج ذات صلة.

question_embedding = genai.embed_content(
    model="models/text-embedding-004", content=question
)["embedding"]
search_res = milvus_client.search(
    collection_name=collection_name,
    data=[question_embedding],
    limit=3,  # Return top 3 results
    search_params={"metric_type": "COSINE", "params": {}},  # Inner product distance
    output_fields=["text"],  # Return the text field
)
import json
retrieved_lines_with_distances = [
    (res["entity"]["text"], res["distance"]) for res in search_res[0]
]
print(json.dumps(retrieved_lines_with_distances, indent=4))

يتم إرجاع النتائج بترتيب التشابه، من الأقرب إلى الأقل تشابهًا.

[
    [
        " Where does Milvus store data?\n\nMilvus deals with two types of data, inserted data and metadata. \n\nInserted data, including vector data, scalar data, and collection-specific schema, are stored in persistent storage as incremental log. Milvus supports multiple object storage backends, including [MinIO](
https://min.io/
), [AWS S3](
https://aws.amazon.com/s3/?nc1=h_ls
), [Google Cloud Storage](
https://cloud.google.com/storage?hl=en#object-storage-for-companies-of-all-sizes
) (GCS), [Azure Blob Storage](
https://azure.microsoft.com/en-us/products/storage/blobs
), [Alibaba Cloud OSS](
https://www.alibabacloud.com/product/object-storage-service
), and [Tencent Cloud Object Storage](
https://www.tencentcloud.com/products/cos
) (COS).\n\nMetadata are generated within Milvus. Each Milvus module has its own metadata that are stored in etcd.\n\n###",
        0.8048489093780518
    ],
    [
        "Does the query perform in memory? What are incremental data and historical data?\n\nYes. When a query request comes, Milvus searches both incremental data and historical data by loading them into memory. Incremental data are in the growing segments, which are buffered in memory before they reach the threshold to be persisted in storage engine, while historical data are from the sealed segments that are stored in the object storage. Incremental data and historical data together constitute the whole dataset to search.\n\n###",
        0.757495105266571
    ],
    [
        "What is the maximum dataset size Milvus can handle?\n\n  \nTheoretically, the maximum dataset size Milvus can handle is determined by the hardware it is run on, specifically system memory and storage:\n\n- Milvus loads all specified collections and partitions into memory before running queries. Therefore, memory size determines the maximum amount of data Milvus can query.\n- When new entities and and collection-related schema (currently only MinIO is supported for data persistence) are added to Milvus, system storage determines the maximum allowable size of inserted data.\n\n###",
        0.7453694343566895
    ]
]

توليد استجابة RAG مع LLM

بعد استرجاع المستندات، قم بتحويلها إلى تنسيق سلسلة

context = "\n".join(
    [line_with_distance[0] for line_with_distance in retrieved_lines_with_distances]
)

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

SYSTEM_PROMPT = """
Human: You are an AI assistant. You are able to find answers to the questions from the contextual passage snippets provided.
"""
USER_PROMPT = f"""
Use the following pieces of information enclosed in <context> tags to provide an answer to the question enclosed in <question> tags.
<context>
{context}
</context>
<question>
{question}
</question>
"""

استخدم النموذج gemini-3-pro-preview مع هذه المطالبات لتوليد الاستجابة النهائية.

gemini_model = genai.GenerativeModel(
    "gemini-3-pro-preview", system_instruction=SYSTEM_PROMPT
)
response = gemini_model.generate_content(USER_PROMPT)
print(response.text)

من الإخراج، يمكنك أن ترى أن Gemini 3 Pro ينتج إجابة واضحة ومنظمة بشكل جيد بناءً على المعلومات المسترجعة.

Based on the provided documents, Milvus stores data in the following ways:
*   **Inserted Data:** Vector data, scalar data, and collection-specific schema are stored in persistent storage as an incremental log. Milvus supports multiple object storage backends for this purpose, including:
    *   MinIO
    *   AWS S3
    *   Google Cloud Storage (GCS)
    *   Azure Blob Storage
    *   Alibaba Cloud OSS
    *   Tencent Cloud Object Storage (COS)
*   **Metadata:** Metadata generated within Milvus modules is stored in **etcd**.
*   **Memory Buffering:** Incremental data (growing segments) are buffered in memory before being persisted, while historical data (sealed segments) resides in object storage but is loaded into memory for querying.

ملاحظة: Gemini 3 Pro غير متاح حاليًا لمستخدمي المستوى المجاني. انقر هنا لمزيد من التفاصيل.

يمكنك الوصول إليه من خلال OpenRouter بدلاً من ذلك:

from openai import OpenAI
client = OpenAI(
  base_url="https://openrouter.ai/api/v1",
  api_key="<OPENROUTER_API_KEY>",
)
response2 = client.chat.completions.create(
  model="google/gemini-3-pro-preview",
  messages=[
        {
            "role": "system",
            "content": SYSTEM_PROMPT
        },
        {
            "role": "user", 
            "content": USER_PROMPT
        }
    ],
  extra_body={"reasoning": {"enabled": True}}
)
response_message = response2.choices[0].message
print(response_message.content)

شيء آخر: ترميز فيبي مع جوجل ضد الجاذبية

إلى جانب Gemini 3 Pro، طرحت Google Google Antigravity، وهي منصة ترميز فيديو تتفاعل بشكل مستقل مع المحرر والمحطة والمتصفح. على عكس الأدوات السابقة المدعومة بالذكاء الاصطناعي التي تعاملت مع التعليمات لمرة واحدة، تعمل Antigravity على مستوى موجه للمهام - مما يسمح للمطورين بتحديد ما يريدون بناءه بينما يدير النظام الكيفية، وينظم سير العمل الكامل من البداية إلى النهاية.

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

وبالنظر إلى المستقبل، فإن فكرة تنسيق الوكيل مباشرةً مع قاعدة البيانات ليست بعيدة المنال. فمن خلال استدعاء الأدوات عبر MCP، يمكن للذكاء الاصطناعي في نهاية المطاف أن يقرأ من قاعدة بيانات Milvus، ويجمع قاعدة معرفية، بل ويحافظ على خط أنابيب الاسترجاع الخاص به بشكل مستقل. من نواحٍ عديدة، يعد هذا التحول أكثر أهمية من ترقية النموذج نفسه: بمجرد أن يتمكن الذكاء الاصطناعي من أخذ وصف على مستوى المنتج وتحويله إلى سلسلة من المهام القابلة للتنفيذ، يتحول الجهد البشري بشكل طبيعي نحو تحديد الأهداف والقيود وما يبدو عليه "الصواب" - التفكير على المستوى الأعلى الذي يقود حقًا تطوير المنتج.

هل أنت جاهز للبناء؟

إذا كنت مستعدًا لتجربته، فاتبع برنامجنا التعليمي خطوة بخطوة وقم ببناء نظام RAG باستخدام Gemini 3 Pro + Milvus اليوم.

هل لديك أسئلة أو تريد التعمق في أي ميزة؟ انضم إلى قناة Discord الخاصة بنا أو قم بتسجيل المشكلات على GitHub. يمكنك أيضًا حجز جلسة فردية مدتها 20 دقيقة للحصول على رؤى وإرشادات وإجابات لأسئلتك من خلال ساعات عمل Milvus المكتبية.

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    استمر في القراءة