Full Stack AI AWS Bedrock عملياً: الكود والأوامر التي تهم فعلاً

Full Stack AI AWS Bedrock : الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة تتكون من 41 درسًا.

Full Stack AI AWS Bedrock عملياً: الكود والأوامر التي تهم فعلاً

لا توجد نظرية لا نهاية لها هنا: نفتح الطرفية ونمارس. إليك أساسيات Full Stack AI AWS Bedrock، مستخرجة مباشرة من دورة كاملة تضم 41 درسًا — مع كود حقيقي يمكنك نسخه ولصقه الآن.

tl;dr
  • إنشاء حساب AWS واكتشاف Bedrock
  • مقدمة في الذكاء الاصطناعي التوليدي وAWS Bedrock
  • واجهة برمجة تطبيقات Bedrock وSDK Python Boto3
  • هندسة التلقين لـ Bedrock
  • خلفية FastAPI مع Bedrock
~$ cat ./parcours.md # Full Stack AI AWS Bedrock — 11 فصول
01
إنشاء حساب AWS واكتشاف Bedrock
→ إنشاء حساب AWS Free Tier→ تكوين IAM والأمان+ 1 دروس أخرى
02
مقدمة إلى الذكاء الاصطناعي التوليدي و AWS Bedrock
→ ما هو الذكاء الاصطناعي التوليدي؟→ نظرة عامة على نماذج الأساس+ 1 دروس أخرى
03
API Bedrock و SDK Python Boto3
→ تثبيت Boto3 وتكوين بيانات الاعتماد→ استدعاء النماذج باستخدام Python+ 1 دروس أخرى
04
هندسة الـ Prompt لـ Bedrock
→ مبادئ هندسة الـ Prompt→ تقنيات zero-shot و few-shot+ 1 دروس أخرى
05
Backend FastAPI مع Bedrock
→ بنية backend للذكاء الاصطناعي→ إنشاء API FastAPI + Bedrock+ 1 دروس أخرى
06
Frontend Streamlit للذكاء الاصطناعي
→ واجهة دردشة مع Streamlit→ سجل المحادثة والذاكرة+ 1 دروس أخرى
07
RAG Retrieval Augmented Génération
→ ما هو الـ RAG؟→ Embeddings وقاعدة البيانات المتجهية+ 1 دروس أخرى
08
Knowledge Bases و Agents Bedrock
→ Knowledge Bases Bedrock→ Agents Bedrock والإجراءات+ 2 دروس أخرى
🏁
المشروع النهائي (+ 3 فصول في الطريق)
→ تعود بمشروع ملموس وقابل للعرض

تثبيت Boto3 وتهيئة بيانات الاعتماد

NOTEهدف هذا الدرس: في نهاية هذا الجزء، ستكون قادرًا على تثبيت SDK Python Boto3، وتهيئة بيانات اعتماد AWS الخاصة بك، والتحقق من أن اتصالك بـ AWS Bedrock يعمل بشكل صحيح من خلال سكريبت Python.
TIPالمتطلبات الأساسية: يجب أن يكون لديك حساب AWS مع تفعيل الوصول إلى Amazon Bedrock (انظر الفصل 01). لا حاجة لمعرفة مسبقة بـ Boto3.

الأهداف التعليمية

ما هو Boto3؟

Boto3 هو SDK أمازون ويب سيرفيسز الرسمي لـ Python. يتيح التفاعل مع جميع خدمات AWS (S3، DynamoDB، Lambda، Bedrock، إلخ) مباشرة من خلال كود Python.

NOTEتشبيه: تخيل أن AWS مطعم ضخم يحتوي على مئات الأطباق. Boto3 هو النادل الذي يأخذ طلباتك (استدعاءات API) ويعيد إليك النتائج. بدون Boto3، سيتعين عليك الصراخ بطلباتك عبر نافذة المطبخ (طلبات HTTP خام) — وهذا ممكن، لكنه أقل عملية بكثير.

Boto3 – العميل منخفض المستوى

وصول مباشر إلى واجهات برمجة تطبيقات AWS. كل طريقة تتوافق تمامًا مع عملية من واجهة REST API. تتعامل مع قواميس Python.

Boto3 – المورد عالي المستوى

تجريد موجه للكائنات. أكثر بديهية لبعض الخدمات (S3، DynamoDB). بالنسبة لـ Bedrock، نستخدم بشكل أساسي العميل.

الخطوة 1 – تثبيت Python 3.8+

يتطلب Boto3 Python 3.8 أو أعلى. تحقق أولاً مما إذا كان Python مثبتًا بالفعل:

bash
python --version

إذا كانت النسخة المعروضة 3.8+، انتقل إلى الخطوة التالية. وإلا، قم بتثبيت Python حسب نظامك:

Windows

قم بتنزيل المثبت الرسمي من https://www.python.org/downloads/. تأكد من تحديد مربع « Add Python to PATH » أثناء التثبيت.

bash
# Vérification après installation
python --version
pip --version

macOS

bash
# Via Homebrew (recommandé)
brew install python@3.11

# Vérification
python3 --version
pip3 --version

Linux (Ubuntu / Debian)

bash
sudo apt update
sudo apt install python3 python3-pip python3-venv -y

# Vérification
python3 --version
pip3 --version
WARNINGتنبيه: على macOS وLinux، استخدم python3 وpip3 بدلاً من python وpip، لأن python قد يشير إلى Python 2.x على بعض الأنظمة.

الخطوة 2 – إنشاء بيئة افتراضية

البيئة الافتراضية تعزل تبعيات مشروعك. وهذا يتجنب التعارضات بين مشاريع Python المختلفة على جهازك.

NOTEتشبيه: البيئة الافتراضية تشبه صندوق أدوات مخصص لمشروع. كل مشروع لديه صندوقه الخاص بأدواته (المكتبات). لا خلط بين المشاريع.

إنشاء وتفعيل venv

أول استدعاء إلى Bedrock عبر وحدة التحكم

NOTEهدف هذا الدرس: التنقل في وحدة تحكم AWS Bedrock، تفعيل الوصول إلى النماذج، إرسال أول تلقين في الملعب، وفهم معاملات التوليد (درجة الحرارة، الحد الأقصى للرموز، top-p).

الأهداف التعليمية

1 – الوصول إلى Amazon Bedrock

الخطوة 1: تسجيل الدخول إلى وحدة تحكم AWS

افتح متصفحك وانتقل إلى:

bash
https://console.aws.amazon.com

سجل الدخول باستخدام بيانات اعتماد AWS الخاصة بك. إذا لم يكن لديك حساب بعد، أنشئ واحدًا (طبقة AWS المجانية تمنحك الوصول إلى العديد من الخدمات مجانًا).

الخطوة 2: اختيار المنطقة الصحيحة

WARNINGتنبيه بشأن المنطقة: Bedrock غير متوفر في جميع المناطق. تأكد من أنك في منطقة مدعومة. نوصي بـ US East (N. Virginia) – us-east-1 للوصول إلى جميع النماذج.

تحقق من المنطقة في أعلى يمين وحدة التحكم:

output
+----------------------------------------------------------+
|  AWS Console                          [N. Virginia v]    |
|                                        ^^^^^^^^^^^^      |
|  Barre de recherche : [ Amazon Bedrock         ]         |
|                                                          |
+----------------------------------------------------------+

Si vous voyez une autre région, cliquez sur le menu
déroulant et sélectionnez « US East (N. Virginia) ».

الخطوة 3: العثور على Amazon Bedrock

في شريط البحث أعلى وحدة التحكم، اكتب « Bedrock » وانقر على Amazon Bedrock في النتائج:

output
+----------------------------------------------------------+
|  Recherche : [ Bedrock                          ]        |
|                                                          |
|  Résultats :                                              |
|  +------------------------------------------------------+|
|  |  Amazon Bedrock                                      ||
|  |  Build with foundation models                        ||
|  +------------------------------------------------------+|
+----------------------------------------------------------+

ستصل إلى لوحة تحكم Bedrock (Bedrock Dashboard).

2 – تفعيل الوصول إلى النماذج

افتراضيًا، لا يوجد نموذج مفعّل. يجب عليك طلب الوصول صراحةً قبل استخدامها.

الخطوة 1: الانتقال إلى Model Access

في القائمة الجانبية اليسرى من Bedrock، انقر على « Model access » (في الأسفل):

output
+----------------------------+------------------------------+
|  Amazon Bedrock            |                              |
|                            |  Bedrock Dashboard           |
|  Playgrounds               |                              |
|    Chat                    |  Bienvenue sur Amazon        |
|    Text                    |  Bedrock. Accédez à des      |
|    Image                   |  modèles fondation de         |
|                            |  pointe via une API unique.  |
|  Orchestration             |                              |
|    Agents                  |                              |
|    Knowledge bases         |                              |
|                            |                              |
|  Foundation models         |                              |
|    Base models             |                              |
|    Custom models           |                              |
|                            |                              |
|  Bedrock configurations    |                              |
|  > Model access    <--    |                              |
+----------------------------+------------------------------+

الخطوة 2: طلب الوصول

انقر على الزر « Manage model access » (أعلى اليمين).

سترى قائمة بجميع النماذج المتاحة. حدد النماذج التالية لهذه الدورة:

output
+----------------------------------------------------------+
|  Manage model access                                     |
|                                                          |
|  Provider        Model                   Access Status   |
|  -------------------------------------------------------+|
|  [x] Anthropic   Claude 3 Haiku          Available      ||
|  [x] Anthropic   Claude 3.5 Sonnet       Available      ||
|  [ ] Anthropic   Claude 3 Opus           Available      ||
|  [x] Amazon      Titan Text Express      Available      ||
|  [x] Meta        Llama 3 8B Instruct     Available      ||
|  [x] Mistral AI  Mistral 7B Instruct     Available      ||
|  [x] Mistral AI  Mixtral 8x7B Instruct   Available      ||
|                                                          |
|                        [ Save changes ]                  |
+----------------------------------------------------------+

انقر على « Save changes ». يتم تفعيل الوصول عادةً في غضون ثوانٍ.

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

إنشاء API FastAPI + Bedrock

Full Stack AI مع AWS Bedrock • خلفية FastAPI مع Bedrock

NOTEالهدف: بناء واجهة برمجة تطبيقات FastAPI كاملة خطوة بخطوة تستقبل رسالة المستخدم وتعيد الرد المُولَّد بواسطة AWS Bedrock (Claude). في نهاية هذا الدرس، سيكون لديك نقطة نهاية /chat تعمل ويمكن اختبارها عبر Swagger UI وcurl وPowerShell.

ما ستتعلمه

1. تثبيت التبعيات

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

bash
# Activer l'environnement virtuel (Windows PowerShell)
.\venv\Scripts\Activate.ps1

# Installer les bibliothèques principales
pip install fastapi uvicorn boto3 pydantic python-dotenv python-multipart

تحقق من تثبيت كل شيء بشكل صحيح:

bash
pip list | findstr -i "fastapi uvicorn boto3"

يجب أن ترى المكتبات الثلاث مع أرقام إصداراتها.

TIPتشبيه: تثبيت التبعيات يشبه جمع المكونات قبل الطهي. FastAPI هو المقلاة، Uvicorn هو النار، وBoto3 هو المكون الرئيسي الذي يتصل بـ AWS.

2. نماذج Pydantic

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

output
# backend/models/schemas.py
from pydantic import BaseModel, Field
from typing import Optional, List


class Message(BaseModel):
    """Représente un message dans la conversation."""
    role: str = Field(
        ...,
        description="Rôle : 'user' ou 'assistant'",
        examples=["user"]
    )
    content: str = Field(
        ...,
        description="Contenu du message",
        examples=["Explique-moi les boucles Python"]
    )


class ChatRequest(BaseModel):
    """Requête envoyée par le frontend pour chatter avec l'IA."""
    message: str = Field(
        ...,
        min_length=1,
        max_length=10000,
        description="Message de l'utilisateur"
    )
    history: Optional[List[Message]] = Field(
        default=[],
        description="Historique de la conversation"
    )
    model_id: Optional[str] = Field(
        default=None,
        description="ID du modèle Bedrock"
    )
    temperature: Optional[float] = Field(
        default=0.7,
        ge=0.0,
        le=1.0,
        description="Créativité du modèle (0 = précis, 1 = créatif)"
    )
    max_tokens: Optional[int] = Field(
        default=4096,
        ge=1,
        le=8192,
        description="Nombre maximum de tokens dans la réponse"
    )


class ChatResponse(BaseModel):
    """Réponse retournée par l'API après appel à Bedrock."""
    response: str = Field(
        ...,
        description="Réponse générée par l'IA"
    )
    model_id: str = Field(
        ...,
        description="ID du modèle utilisé"
    )
    input_tokens: int = Field(
        default=0,
        description="Tokens consommés par le prompt"
    )
    output_tokens: int = Field(
        default=0,
        description="Tokens générés dans la réponse"
    )


class HealthResponse(BaseModel):
    """Réponse du endpoint de santé."""
    status: str
    message: str
NOTEلماذا Pydantic؟ بدون Pydantic، يجب عليك التحقق يدويًا من كل حقل (هل هو سلسلة نصية؟ هل هي فارغة؟ هل الرقم ضمن النطاق؟). تقوم Pydantic بكل ذلك تلقائيًا وتُنشئ رسائل خطأ واضحة للواجهة الأمامية.

إذا أرسلت الواجهة الأمامية حقل temperature بقيمة 5.0 (خارج النطاق 0-1)، تعيد Pydantic:

output
{
  "detail": [
    {
      "loc": ["body", "temperature"],
      "msg": "Input should be less than or equal to 1",
      "type": "less_than_equal"
    }
  ]
}

3. خدمة Bedrock

تغلف خدمة Bedrock كل منطق التواصل مع AWS. هنا يحدث «السحر»: يتم تحويل رسالتك النصية إلى طلب AWS، إرساله إلى Claude، وإعادة الرد.

output
# backend/services/bedrock_service.py
import json
import boto3
from config import AWS_REGION, BEDROCK_MODEL_ID, MAX_TOKENS, TEMPERATURE


def get_bedrock_client():
    """Crée et retourne un client Bedrock Runtime."""
    return boto3.client(
        service_name="bedrock-runtime",
        region_name=AWS_REGION
    )


def build_messages(message: str, history: list = None) -> list:
    """Construit la liste de messages pour l'API Bedrock."""
    messages = []
    if history:
        for msg in history:
            messages.append({
                "role": msg.role,
                "content": [{"type": "text", "text": msg.content}]
            })
    messages.append({
        "role": "user",
        "content": [{"type": "text", "text": message}]
    })
    return messages


def invoke_bedrock(
    message: str,
    history: list = None,
    model_id: str = None,
    temperature: float = None,
    max_tokens: int = None
) -> dict:
    """
    Appelle AWS Bedrock avec le message et retourne la réponse.

    Args:
        message: Le message de l'utilisateur
        history: L'historique de la conversation
        model_id: L'identifiant du modèle Bedrock
        temperature: La créativité (0.0 à 1.0)
        max_tokens: Le nombre max de tokens en sortie

    Returns:
        dict avec la réponse, le modèle utilisé et les tokens
    """
    client = get_bedrock_client()
    model = model_id or BEDROCK_MODEL_ID
    temp = temperature if temperature is not None else TEMPERATURE
    tokens = max_tokens or MAX_TOKENS

    messages = build_messages(message, history)

    body = json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": tokens,
        "temperature": temp,
        "messages": messages
    })

    response = client.invoke_model(
        modelId=model,
        contentType="application/json",
        accept="application/json",
        body=body
    )

    response_body = json.loads(response["body"].read())

    return {
        "response": response_body["content"][0]["text"],
        "model_id": model,
        "input_tokens": response_body.get("usage", {}).get(
            "input_tokens", 0
        ),
        "output_tokens": response_body.get("usage", {}).get(
            "output_tokens", 0
        ),
    }

تفاصيل معامل body

المعامل النوع الوصف
anthropic_version string إصدار واجهة برمجة تطبيقات Anthropic المستخدمة بواسطة Bedrock
max_tokens int يحد من طول الرد (1 رمز ≈ 0.75 كلمة)
temperature float 0.0 = ردود دقيقة، 1.0 = ردود إبداعية
messages list المحادثة الكاملة (السجل + الرسالة الجديدة)

4. ملف main.py الكامل

هذه نقطة الدخول للتطبيق. تجمع جميع المكونات: التهيئة، CORS، المسارات ومعالجة الأخطاء.

output
# backend/main.py
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from dotenv import load_dotenv

from config import CORS_ORIGINS
from models.schemas import (
    ChatRequest,
    ChatResponse,
    HealthResponse,
)
from services.bedrock_service import invoke_bedrock

load_dotenv()

app = FastAPI(
    title="Full Stack AI - Backend Bedrock",
    description="API pour interagir avec AWS Bedrock (Claude)",
    version="1.0.0",
)

# --- Middleware CORS ---
app.add_middleware(
    CORSMiddleware,
    allow_origins=CORS_ORIGINS,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


# --- Endpoints ---

@app.get("/health", response_model=HealthResponse)
def health_check():
    """Vérifie que le serveur est opérationnel."""
    return HealthResponse(
        status="ok",
        message="Le serveur fonctionne correctement"
    )


@app.post("/chat", response_model=ChatResponse)
def chat(request: ChatRequest):
    """
    Envoie un message à AWS Bedrock et retourne la réponse de l'IA.

    - **message** : le texte envoyé par l'utilisateur
    - **history** : l'historique de conversation (optionnel)
    - **model_id** : le modèle Bedrock à utiliser (optionnel)
    - **temperature** : la créativité de 0.0 à 1.0 (optionnel)
    - **max_tokens** : nombre max de tokens en sortie (optionnel)
    """
    try:
        result = invoke_bedrock(
            message=request.message,
            history=request.history,
            model_id=request.model_id,
            temperature=request.temperature,
            max_tokens=request.max_tokens,
        )
        return ChatResponse(**result)

    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Erreur lors de l'appel à Bedrock : {str(e)}"
        )


@app.get("/models")
def list_models():
    """Retourne la liste des modèles disponibles."""
    return {
        "models": [
            {
                "id": "anthropic.claude-3-sonnet-20240229-v1:0",
                "name": "Claude 3 Sonnet",
                "description": "Bon équilibre performance/coût"
            },
            {
                "id": "anthropic.claude-3-haiku-20240307-v1:0",
                "name": "Claude 3 Haiku",
                "description": "Le plus rapide et économique"
            },
            {
                "id": "anthropic.claude-3-5-sonnet-20240620-v1:0",
                "name": "Claude 3.5 Sonnet",
                "description": "Le plus performant"
            },
        ]
    }
va-plus-loin

يغطي هذا المقال المقتطفات الأكثر فائدة — الدورة الكاملة Full Stack AI AWS Bedrock (12 فصلاً، 41 درسًا، تمارين مصححة ومشروع نهائي) تأخذك إلى النهاية.

./acceder-au-cours-complet cours gratuit : Maîtriser Claude Code

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

كم من الوقت يستغرق تعلم Full Stack AI AWS Bedrock؟
مع تقدم منظم (12 فصلاً، 41 درسًا قصيرًا وعمليًا)، يمكن الوصول إلى مستوى تشغيلي في غضون أسابيع قليلة بمعدل 30 إلى 60 دقيقة يوميًا. المهم هو ممارسة كل مفهوم فورًا.
هل هناك متطلبات أساسية؟
تكفي أساسيات في الحوسبة. إذا كنت تعرف كيفية استخدام الطرفية وقراءة كود بسيط، فأنت جاهز.
من أين نبدأ عمليًا؟
أعد إنتاج أوامر هذا المقال، ثم تابع الدورة الكاملة Full Stack AI AWS Bedrock: فهي تربط الـ 41 درسًا بالترتيب، مع تمارين ومشروع نهائي.

📬 هل تريد تلقي هذا النوع من الأدلة كل أسبوع؟ اشترك مجانًا — كود حقيقي، بدون ثرثرة.