محیط‌های آزمایشی تحت وب (Web playgrounds) برای دموها عالی هستند. شما یک بلوک متن را کپی می‌کنید، تماشا می‌کنید که مدل یک خلاصه مرتب تولید می‌کند و سپس تب را می‌بندید. اما این مهندسی نیست. کار در محیط عملیاتی (Production) به معنای APIها، مدیریت خطا و کدی است که وقتی خواب هستید هم اجرا می‌شود. اگر نیاز دارید در یک برنامه زمانی مشخص، متن پیاده‌شده جلسات، تیکت‌های پشتیبانی یا مقالات پژوهشی را پردازش کنید، به یک خط لوله (pipeline) نیاز دارید.

این راهنما دقیقاً نحوه ساخت چنین چیزی را آموزش می‌دهد: یک اسکریپت سبک و خودکار برای خلاصه‌سازی اسناد با استفاده از Python، AWS SDK برای Python (boto3) و Amazon Bedrock. ما از Claude 3 Haiku شرکت Anthropic استفاده خواهیم کرد؛ مدلی که نقطه تعادلی ایده‌آل بین سرعت و هزینه برای وظایف خلاصه‌سازی متن است.

چرا Bedrock و Claude 3 Haiku؟

Amazon Bedrock یک سرویس مدیریت‌شده است که مدل‌های پایه (foundation models) را از طریق مجموعه‌ای واحد از AWS APIها ارائه می‌دهد. به جای سرهم کردن نقاط انتهایی (endpoints) خارجی و درگیر شدن با مدل‌های پرداخت و امنیتی مجزا، شما یک AWS endpoint را با کنترل‌های استاندارد IAM فراخوانی می‌کنید. داده‌های شما در محیط AWS شما باقی می‌ماند.

Claude 3 Haiku سبک‌ترین مدل در خانواده Claude 3 شرکت Anthropic است. این مدل برای پاسخگویی سریع و هزینه کم ساخته شده است، که آن را برای خلاصه‌سازی با حجم بالا (high-volume) ایده‌آل می‌کند؛ جایی که می‌خواهید خروجی قابل پیش‌بینی داشته باشید بدون اینکه برای قدرت پردازشی مدل‌های بزرگ‌تر در وظایف ساده‌ی خواندن، هزینه زیادی بپردازید.

آنچه نیاز دارید

قبل از نوشتن هرگونه کد، مطمئن شوید موارد زیر آماده است:

  • یک حساب فعال AWS.
  • نصب Python 3.9 یا بالاتر به صورت محلی.
  • تنظیم AWS CLI با اعتبارنامه‌هایی (credentials) که اجازه فراخوانی مدل‌های Bedrock را دارند. اگر هنوز aws configure را اجرا نکرده‌اید، همین حالا انجام دهید. اگر بعداً با خطاهای دسترسی (permission errors) مواجه شدید، احتمالاً باید مجوزهای فراخوانی Bedrock مناسب را به کاربر یا نقش (role) IAM خود اضافه کنید.
  • فعال بودن دسترسی به مدل (Model access) به‌طور خاص برای Anthropic Claude 3 Haiku در کنسول AWS Bedrock. AWS از شما می‌خواهد که قبل از فراخوانی هر مدل، صراحتاً برای آن درخواست (opt in) دهید.

مرحله ۱: فعال‌سازی دسترسی به مدل

Bedrock به صورت پیش‌فرض اجازه فراخوانی مدل‌ها را به شما نمی‌دهد. ابتدا باید این گزینه را در کنسول فعال کنید.

۱. وارد AWS Management Console شوید. ۲. از نوار جستجو برای پیدا کردن Amazon Bedrock استفاده کنید. ۳. در پنل ناوبری سمت چپ، Model access را انتخاب کنید. ۴. روی Modify model access کلیک کنید. ۵. کادر مربوط به Anthropic (Claude 3 Haiku) را تیک بزنید و درخواست خود را ارسال کنید.

وقتی وضعیت به "Access granted" تغییر کرد، می‌توانید مدل را از طریق کد فراخوانی کنید.

مرحله ۲: آماده‌سازی محیط کار

یک محیط Python تمیز، وابستگی‌ها (dependencies) را ایزوله و بازتولیدپذیر نگه می‌دارد. ترمینال خود را باز کرده و این دستورات را اجرا کنید:

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

کاربران ویندوز باید دستور فعال‌سازی را با venv\Scripts\activate جایگزین کنند. پس از اتمام pip install boto3 شما تمام آنچه برای ارتباط با AWS APIها نیاز دارید را در اختیار خواهید داشت.

مرحله ۳: نوشتن اسکریپت

فایلی به نام summarize.py ایجاد کنید. هدف این است که یک سند را از دیسک بخواند، آن را به Bedrock Converse API تحویل دهد و یک خلاصه مختصر چاپ کند.

در ادامه یک پیاده‌سازی کامل و قابل اجرا آورده شده است. ما از Converse API استفاده می‌کنیم زیرا فرمت‌بندی خام JSON را که ارائه‌دهندگان مختلف مدل انتظار دارند، انتزاع (abstract) می‌کند. شما فقط یک لیست از پیام‌ها و تنظیمات استنتاج (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 را هدف قرار می‌دهد که استنتاج را مدیریت می‌کند. مطمئن شوید که منطقه (region) AWS شما در ~/.aws/config از Bedrock پشتیبانی می‌کند و Haiku را در همان منطقه فعال کرده‌اید.
  • Model ID anthropic.claude-3-haiku-20240307-v1:0 شناسه دقیقی است که Bedrock انتظار دارد. آن را دقیقاً کپی کنید.
  • تنظیم Temperature روی 0.3 باعث می‌شود خروجی مستدل و منطقی باقی بماند. برای خلاصه‌سازی، شما به ثبات و وفاداری به متن اصلی نیاز دارید، نه زیاده‌گویی‌های خلاقانه. اگر دما (temperature) را به سمت 1.0 ببرید، مدل شروع به آزادی عمل در عبارت‌بندی می‌کند و گاهی جزئیاتی را از خود می‌سازد.
  • خودِ پرامپت (prompt) مشخص است. به جای اینکه متن خام را با یک دستور مبهم مثل "summarize this" به مدل بدهید، ما صراحتاً نکات اصلی را می‌خواهیم و به آن دستور می‌دهیم که از حواشی بگذرد. این نوع شفافیت، خروجی‌های بی‌مصرف را از چیزی که واقعاً می‌توانید از آن استفاده کنید، متمایز می‌کند.

هر فایل متنی را که می‌خواهید خلاصه‌سازی کنید در همان دایرکتوری قرار دهید و نام آن را document.txt بگذارید.

مرحله ۴: اجرا

در حالی که محیط مجازی شما فعال است، دستور زیر را اجرا کنید:

python summarize.py

اگر اعتبارنامه‌ها و دسترسی شما به مدل درست باشد، باید یک خلاصه مرتب را ظرف چند ثانیه در ترمینال خود مشاهده کنید. اگر با خطای دسترسی (access error) مواجه شدید، مجوزهای IAM خود را دوباره بررسی کنید و مطمئن شوید که Claude 3 Haiku را در کنسول فعال کرده‌اید.

فراتر از یک اسکریپت ساده

این خط لوله (pipeline) تعمداً ساده طراحی شده است، اما زیربنای اتوماسیون واقعی محسوب می‌شود. در ادامه می‌بینید که چگونه می‌توانید بدون پیچیدگی بیهوده، آن را گسترش دهید.

پردازش دسته‌ای (Batch processing). خواندن تک‌فایل را با یک حلقه روی یک دایرکتوری جایگزین کنید. پنجاه فایل PDF یا متنی را در یک پوشه ورودی بریزید، روی آن‌ها پیمایش کنید و خلاصه‌ها را در یک پوشه خروجی بنویسید. اگر می‌خواهید مستقیماً PDFها را پردازش کنید، برای استخراج متن خام قبل از ارسال به Bedrock، به یک مرحله پیش‌پردازش با کتابخانه‌ای مانند PyPDF2 یا pdfplumber نیاز خواهید داشت.

استراتژی تکه‌بندی (Chunking strategy). اسناد بسیار طولانی ممکن است از محدودیت کانتکست (context limit) مدل فراتر بروند. در چنین حالتی، متن را به تکه‌های منطقی بر اساس پاراگراف یا بخش تقسیم کنید، هر تکه را به صورت جداگانه خلاصه کنید و سپس خلاصه‌های میانی را برای ترکیب نهایی دوباره به مدل بفرستید. این رویکرد دو مرحله‌ای، شما را زیر محدودیت توکن نگه می‌دارد و در عین حال پوشش کامل سند را حفظ می‌کند.

مدیریت خطا (Error handling). کد تولیدی (Production code) باید به‌طور مشخص boto3.exceptions.ClientError را مدیریت کند. اگر درخواست‌های API را بیش از حد با سرعت بالا ارسال کنید، ممکن است AWS نرخ درخواست‌های شما را محدود (throttle) کند. فراخوانی converse خود را در یک حلقه بازبینی (retry loop) با مکانیزم exponential backoff قرار دهید، یا از کتابخانه‌ای مانند tenacity برای مدیریت هوشمندانه محدودیت‌های نرخ استفاده کنید.

مهندسی پرامپت (Prompt engineering). تفاوت بین یک خلاصه معمولی و یک خلاصه کاربردی اغلب به پرامپت بستگی دارد. اگر به قابلیت مرور سریع نیاز دارید، درخواست لیست‌های گلوله‌ای (bullet points) کنید. اگر مخاطب شما مدیران ارشد هستند، یک خلاصه مدیریتی در یک پاراگراف بخواهید. حتی می‌توانید محدودیت‌های قالب‌بندی را هم تعیین کنید، مانند: "خلاصه را به سه جمله محدود کن" یا "خروجی را به صورت JSON با کلیدهای topic، key_points و action_items برگردان."

نکته اصلی و کاربردی

گذار از یک محیط آزمایشی چت (chat playground) به یک اسکریپت عملیاتی، همان نقطه عطفی است که در آن هوش مصنوعی به زیرساخت تبدیل می‌شود. زمانی که این خط لوله به صورت محلی اجرا شد، می‌توانید آن را به یک تابع AWS Lambda که با آپلود در S3 فعال می‌شود منتقل کنید، آن را در ECS Fargate زمان‌بندی کنید، یا آن را به یک جریان کاری داده (data workflow) موجود متصل کنید. فراخوانی API بخش آسان کار است. ارزش مهندسی از اینجاست که آن فراخوانی را در منطقی قرار دهید که فایل‌ها، خطاها و قالب‌بندی را مدیریت کند تا دیگر هرگز مجبور نباشید متن را در مرورگر کپی و پیست کنید.

برای اطلاعات بیشتر و انواع مختلف این تنظیمات، راهنمای اصلی را در Dev.to مشاهده کنید. اگر می‌خواهید درباره معماری‌های AWS، خط لوله‌های LLM یا مهندسی پرامپت با جامعه‌ای از سازندگان گفتگو کنید، در [GyaanSetu AI on Telegram](https://t.me/GyaanSet