Full Stack AI AWS Bedrock عملياً: الكود والأوامر التي تهم فعلاً
Full Stack AI AWS Bedrock : الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة تتكون من 41 درسًا.
لا توجد نظرية لا نهاية لها هنا: نفتح الطرفية ونمارس. إليك أساسيات Full Stack AI AWS Bedrock، مستخرجة مباشرة من دورة كاملة تضم 41 درسًا — مع كود حقيقي يمكنك نسخه ولصقه الآن.
- إنشاء حساب AWS واكتشاف Bedrock
- مقدمة في الذكاء الاصطناعي التوليدي وAWS Bedrock
- واجهة برمجة تطبيقات Bedrock وSDK Python Boto3
- هندسة التلقين لـ Bedrock
- خلفية FastAPI مع Bedrock
تثبيت Boto3 وتهيئة بيانات الاعتماد
الأهداف التعليمية
ما هو Boto3؟
Boto3 هو SDK أمازون ويب سيرفيسز الرسمي لـ Python. يتيح التفاعل مع جميع خدمات AWS (S3، DynamoDB، Lambda، Bedrock، إلخ) مباشرة من خلال كود Python.
Boto3 – العميل منخفض المستوى
وصول مباشر إلى واجهات برمجة تطبيقات AWS. كل طريقة تتوافق تمامًا مع عملية من واجهة REST API. تتعامل مع قواميس Python.
Boto3 – المورد عالي المستوى
تجريد موجه للكائنات. أكثر بديهية لبعض الخدمات (S3، DynamoDB). بالنسبة لـ Bedrock، نستخدم بشكل أساسي العميل.
الخطوة 1 – تثبيت Python 3.8+
يتطلب Boto3 Python 3.8 أو أعلى. تحقق أولاً مما إذا كان Python مثبتًا بالفعل:
python --version
إذا كانت النسخة المعروضة 3.8+، انتقل إلى الخطوة التالية. وإلا، قم بتثبيت Python حسب نظامك:
Windows
قم بتنزيل المثبت الرسمي من https://www.python.org/downloads/. تأكد من تحديد مربع « Add Python to PATH » أثناء التثبيت.
# Vérification après installation python --version pip --version
macOS
# Via Homebrew (recommandé) brew install python@3.11 # Vérification python3 --version pip3 --version
Linux (Ubuntu / Debian)
sudo apt update sudo apt install python3 python3-pip python3-venv -y # Vérification python3 --version pip3 --version
python3 وpip3 بدلاً من python وpip، لأن python قد يشير إلى Python 2.x على بعض الأنظمة.الخطوة 2 – إنشاء بيئة افتراضية
البيئة الافتراضية تعزل تبعيات مشروعك. وهذا يتجنب التعارضات بين مشاريع Python المختلفة على جهازك.
إنشاء وتفعيل venv
أول استدعاء إلى Bedrock عبر وحدة التحكم
الأهداف التعليمية
1 – الوصول إلى Amazon Bedrock
الخطوة 1: تسجيل الدخول إلى وحدة تحكم AWS
افتح متصفحك وانتقل إلى:
https://console.aws.amazon.com
سجل الدخول باستخدام بيانات اعتماد AWS الخاصة بك. إذا لم يكن لديك حساب بعد، أنشئ واحدًا (طبقة AWS المجانية تمنحك الوصول إلى العديد من الخدمات مجانًا).
الخطوة 2: اختيار المنطقة الصحيحة
تحقق من المنطقة في أعلى يمين وحدة التحكم:
+----------------------------------------------------------+ | 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 في النتائج:
+----------------------------------------------------------+ | Recherche : [ Bedrock ] | | | | Résultats : | | +------------------------------------------------------+| | | Amazon Bedrock || | | Build with foundation models || | +------------------------------------------------------+| +----------------------------------------------------------+
ستصل إلى لوحة تحكم Bedrock (Bedrock Dashboard).
2 – تفعيل الوصول إلى النماذج
افتراضيًا، لا يوجد نموذج مفعّل. يجب عليك طلب الوصول صراحةً قبل استخدامها.
الخطوة 1: الانتقال إلى Model Access
في القائمة الجانبية اليسرى من Bedrock، انقر على « Model access » (في الأسفل):
+----------------------------+------------------------------+ | 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 » (أعلى اليمين).
سترى قائمة بجميع النماذج المتاحة. حدد النماذج التالية لهذه الدورة:
+----------------------------------------------------------+ | 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 ». يتم تفعيل الوصول عادةً في غضون ثوانٍ.
إنشاء API FastAPI + Bedrock
Full Stack AI مع AWS Bedrock • خلفية FastAPI مع Bedrock
/chat تعمل ويمكن اختبارها عبر Swagger UI وcurl وPowerShell.ما ستتعلمه
1. تثبيت التبعيات
تأكد من تفعيل بيئتك الافتراضية، ثم قم بتثبيت المكتبات:
# 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
تحقق من تثبيت كل شيء بشكل صحيح:
pip list | findstr -i "fastapi uvicorn boto3"
يجب أن ترى المكتبات الثلاث مع أرقام إصداراتها.
2. نماذج Pydantic
تتيح Pydantic تحديد الشكل الدقيق للبيانات التي تقبلها واجهة برمجة التطبيقات وتعيدها. إنها مثل نموذج يحتوي على حقول إلزامية: إذا لم تتطابق البيانات، ترفض واجهة برمجة التطبيقات الطلب تلقائيًا مع رسالة خطأ واضحة.
# 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إذا أرسلت الواجهة الأمامية حقل temperature بقيمة 5.0 (خارج النطاق 0-1)، تعيد Pydantic:
{
"detail": [
{
"loc": ["body", "temperature"],
"msg": "Input should be less than or equal to 1",
"type": "less_than_equal"
}
]
}3. خدمة Bedrock
تغلف خدمة Bedrock كل منطق التواصل مع AWS. هنا يحدث «السحر»: يتم تحويل رسالتك النصية إلى طلب AWS، إرساله إلى Claude، وإعادة الرد.
# 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، المسارات ومعالجة الأخطاء.
# 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"
},
]
}يغطي هذا المقال المقتطفات الأكثر فائدة — الدورة الكاملة Full Stack AI AWS Bedrock (12 فصلاً، 41 درسًا، تمارين مصححة ومشروع نهائي) تأخذك إلى النهاية.
./acceder-au-cours-complet cours gratuit : Maîtriser Claude Codeالأسئلة الشائعة
كم من الوقت يستغرق تعلم Full Stack AI AWS Bedrock؟
هل هناك متطلبات أساسية؟
من أين نبدأ عمليًا؟
📬 هل تريد تلقي هذا النوع من الأدلة كل أسبوع؟ اشترك مجانًا — كود حقيقي، بدون ثرثرة.