تُعد بيئات التجربة عبر الويب (Web playgrounds) رائعة للعروض التوضيحية؛ حيث تقوم بلصق كتلة من النص، وتشاهد النموذج وهو ينشئ ملخصًا أنيقًا، ثم تغلق علامة التبويب. لكن هذا ليس هندسة برمجية. العمل في بيئة الإنتاج يعني واجهات برمجة تطبيقات (APIs)، ومعالجة الأخطاء، وأكوادًا تعمل بينما أنت نائم. إذا كنت بحاجة إلى معالجة محاضر الاجتماعات، أو تذاكر الدعم، أو الأوراق البحثية وفق جدول زمني، فأنت بحاجة إلى مسار معالجة (pipeline).

يقدم هذا الدليل شرحًا لبناء ذلك بالضبط: نص برمجي (script) خفيف الوزن ومؤتمت لتلخيص المستندات باستخدام Python، وAWS SDK for Python (boto3)، وAmazon Bedrock. سنستخدم Anthropic’s Claude 3 Haiku، وهو نموذج يحقق التوازن المثالي بين السرعة والتكلفة لمهام تلخيص النصوص.

لماذا Bedrock و Claude 3 Haiku؟

Amazon Bedrock هي خدمة مدارة توفر النماذج التأسيسية (foundation models) من خلال مجموعة واحدة من AWS APIs. بدلاً من تجميع نقاط نهاية (endpoints) خارجية والصراع مع نماذج فوترة وأمن منفصلة، يمكنك استدعاء AWS endpoint باستخدام ضوابط IAM القياسية. تظل بياناتك داخل بيئة AWS الخاصة بك.

يعد Claude 3 Haiku النموذج الأكثر رشاقة في عائلة Anthropic’s Claude 3. لقد تم بناؤه من أجل الاستجابة السريعة والتكلفة المنخفضة، مما يجعله مثاليًا لعمليات التلخيص عالية الحجم حيث تريد مخرجات يمكن التنبؤ بها دون دفع ثمن القوة الحوسبية للنماذج الأكبر في مهام القراءة البسيطة.

ما تحتاجه

قبل كتابة أي كود، تأكد من جاهزية ما يلي:

  • حساب AWS نشط.
  • تثبيت Python 3.9 أو إصدار أحدث محليًا.
  • تكوين AWS CLI ببيانات اعتماد لديها الإذن لاستدعاء نماذج Bedrock. إذا لم تقم بتشغيل aws configure بعد، فافعل ذلك الآن. إذا واجهت أخطاء في الأذونات لاحقًا، فستحتاج على الأرجح إلى إرفاق أذونات استدعاء Bedrock المناسبة بمستخدم IAM أو الدور (role) الخاص بك.
  • تفعيل الوصول إلى النموذج (Model access) خصيصًا لـ Anthropic Claude 3 Haiku داخل وحدة تحكم AWS Bedrock. تتطلب AWS منك الموافقة صراحةً على كل مزود نماذج قبل أن تتمكن من استدعائه.

الخطوة 1: تفعيل الوصول إلى النموذج

لا يسمح لك Bedrock باستدعاء النماذج مباشرة بمجرد التشغيل. يجب عليك تفعيل الخيار في وحدة التحكم أولاً.

  1. قم بتسجيل الدخول إلى AWS Management Console.
  2. استخدم شريط البحث للعثور على Amazon Bedrock.
  3. في لوحة التنقل اليسرى، اختر Model access.
  4. انقر على Modify model access.
  5. حدد المربع الخاص بـ Anthropic (Claude 3 Haiku) وأرسل طلبك.

بمجرد تحول الحالة إلى "Access granted"، يمكنك استدعاء النموذج من الكود.

الخطوة 2: إعداد بيئتك

تحافظ بيئة Python النظيفة على عزل التبعيات وإمكانية إعادة إنتاجها. افتح الطرفية (terminal) وقم بتشغيل هذه الأوامر:

mkdir bedrock-summarizer && cd bedrock-summarizer
python3 -m venv venv
source venv/bin/activate
pip install boto3

يجب على مستخدمي Windows استبدال أمر التنشيط بـ venv\Scripts\activate. بعد انتهاء pip install boto3 ، سيكون لديك كل ما تحتاجه للتواصل مع AWS APIs.

الخطوة 3: كتابة النص البرمجي

أنشئ ملفًا باسم summarize.py. الهدف هو قراءة مستند من القرص، وتسليمه إلى Bedrock Converse API، وطباعة ملخص موجز.

فيما يلي تنفيذ كامل وعامل. نحن نستخدم Converse API لأنه يجرد تنسيق JSON الخام الذي يتوقعه مختلف مزودي النماذج. ما عليك سوى تمرير قائمة من الرسائل وإعدادات الاستدلال (inference settings).

import boto3

def summarize_document(text: str) -> str:
    client = boto3.client("bedrock-runtime")
    
    model_id = "anthropic.claude-3-haiku-20240307-v1:0"
    
    messages = [
        {
            "role": "user",
            "content": [
                {
                    "text": (
                        "Provide a concise summary of the following document. "
                        "Focus on the main points and avoid unnecessary detail:\n\n"
                        f"{text}"
                    )
                }
            ]
        }
    ]
    
    response = client.converse(
        modelId=model_id,
        messages=messages,
        inferenceConfig={
            "temperature": 0.3,
            "maxTokens": 512
        }
    )
    
    summary = response["output"]["message"]["content"][0]["text"]
    return summary.strip()


if __name__ == "__main__":
    with open("document.txt", "r", encoding="utf-8") as f:
        document_text = f.read()
    
    result = summarize_document(document_text)
    print("\n--- Summary ---\n")
    print(result)

بعض التفاصيل العملية التي تستحق التسليط الضوء عليها هنا:

  • boto3.client("bedrock-runtime") يستهدف نقطة نهاية وقت التشغيل (runtime endpoint) التي تعالج الاستدلال. تأكد من أن منطقة AWS الخاصة بك في ~/.aws/config تدعم Bedrock وأنك قمت بتفعيل Haiku في نفس المنطقة.
  • Model ID anthropic.claude-3-haiku-20240307-v1:0 هو المعرف الدقيق الذي يتوقعه Bedrock. انسخه بدقة.
  • ضبط درجة الحرارة (Temperature) على 0.3 يحافظ على واقعية المخرجات. بالنسبة للتلخيص، فأنت تريد الاتساق والأمانة للنص المصدر، وليس التجميل الإبداعي. إذا رفعت درجة الحرارة نحو 1.0، سيبدأ النموذج في التلاعب بالصياغة واختراع تفاصيل أحيانًا.
  • المطالبة (prompt) نفسها محددة. بدلاً من إلقاء نص خام للنموذج مع عبارة غامضة مثل "لخص هذا"، فإننا نطلب منه صراحةً النقاط الرئيسية ونوجهه لتجاوز الحشو. هذا النوع من الوضوح هو ما يفصل بين المخرجات غير القابلة للاستخدام وبين شيء يمكنك شحنه فعليًا.

ضع أي ملف نصي تريد تلخيصه في نفس المجلد وقم بتسميته document.txt.

الخطوة 4: التشغيل

مع تفعيل بيئتك الافتراضية، قم بتنفيذ:

python summarize.py

إذا كانت بيانات اعتمادك والوصول إلى النموذج صحيحين، فستشاهد ملخصًا مرتبًا مطبوعًا في الطرفية الخاصة بك في غضون ثوانٍ قليلة. إذا واجهت خطأ في الوصول، فراجع أذونات IAM وتأكد من تفعيل Claude 3 Haiku في وحدة التحكم.

ما وراء النص البرمجي

This pipeline is intentionally simple, but it is the foundation for real automation. Here is how you can extend it without adding bloat.

Batch processing. Swap the single file read for a loop over a directory. Drop fifty PDFs or text files into an input folder, iterate through them, and write the summaries to an output folder. If you want to ingest PDFs directly, you will need a preprocessing step with a library like PyPDF2 or pdfplumber to extract raw text before it hits Bedrock.

Chunking strategy. Very long documents may exceed the model’s context limit. When that happens, split the text into logical chunks by paragraph or section, summarize each chunk individually, and then pass the intermediate summaries back through the model for a final synthesis. This two-stage approach keeps you under token limits while preserving coverage of the full document.

Error handling. Production code should catch boto3.exceptions.ClientError specifically. AWS may throttle your requests if you call the API too aggressively. Wrap your converse call in a retry loop with exponential backoff, or use a library like tenacity to handle rate limits gracefully.

Prompt engineering. The difference between a mediocre summary and a useful one often comes down to the prompt. Ask for bullet points if you need scanability. Ask for a one-paragraph executive summary if the audience is senior leadership. You can even pass formatting constraints, such as "Limit the summary to three sentences" or "Return the output as JSON with keys for topic, key_points, and action_items."

The Real Takeaway

Moving from a chat playground to a working script is the inflection point where AI becomes infrastructure. Once this pipeline runs locally, you can lift it into an AWS Lambda function triggered by S3 uploads, schedule it on ECS Fargate, or hook it into an existing data workflow. The API call is the easy part. The engineering value comes from wrapping that call in logic that handles files, errors, and formatting so you never have to copy and paste text into a browser again.

For additional context and variations on this setup, see the original walkthrough on Dev.to. If you want to discuss AWS architectures, LLM pipelines, or prompt engineering with a community of builders, join the conversation over at [GyaanSetu AI on Telegram](https://t.me/GyaanSet