المدوَّنة العربية
كيفية دمج النماذج الأساسية من Amazon Bedrock في تطبيقاتك
أحدث ظهور النماذج اللغوية الكبيرة (LLMs) – Large Language Models – ونماذج الأساس (FMs) – Foundation Models – ثورة في مجال معالجة اللغات الطبيعية (NLP) والذكاء الاصطناعي (AI) – Artificial Intelligence. هذه النماذج الكبيرة المدربة على كميات هائلة من البيانات قادرة على إنشاء نصوص عالية الجودة، والإجابة على الأسئلة، وحتى المشاركة في مهام الكتابة الإبداعية. إلاّ أنّ تدريب ونشر مثل هذه النماذج من الصفر عمليّة معقدة تتطلب موارد كثيرة وخبرة متخصصة وقدرات حوسبة كبيرة.
هنا يأتي دور Amazon Bedrock، وهي خدمة مُدارة بالكامل من AWS توفر للمطورين وصولاً سلساً إلى أحدث النماذج الأساسية من خلال واجهات برمجة تطبيقات (APIs) سهلة الاستخدام. يُبسّط Amazon Bedrock عملية دمج قدرات الذكاء الاصطناعي المُولّد المتطورة في التطبيقات، مقدماً نماذج مدربة مسبقاً يمكن تخصيصها ونشرها دون الحاجة إلى تدريب مكثّف للنموذج من الصفر. تحافظ Amazon على مرونة عالية في تخصيص النماذج الأساسية بخطوات بسيطة، مما يسهل على المطورين استخدام تقنيات الذكاء الاصطناعي المُولّد المتطورة في تطبيقاتهم. وبالتالي، يمكنك باستخدام Amazon Bedrock دمج ميّزات معالجة اللغات الطبيعية المتقدمة، مثل فهم اللغة وتوليد النصوص والإجابة على الأسئلة، في تطبيقاتك بسهولة.
في هذا المقال، سنستكشف بشكل عملي كيفية توظيف واجهة برمجة التطبيقات من Amazon Bedrock لدمج النماذج الأساسية في تطبيقاتك، مما يتيح لك بناء تطبيقات مدعومة بالذكاء الاصطناعي بسهولة. سنرشدك أولاً إلى كيفية إعداد بيئة العمل، ثم ربط تطبيقاتك بـ Amazon Bedrock، كما سنستكشف كيفية توظيف هندسة الأوامر (أو هندسة التلقين) – prompt engineering – لتوجيه النموذج. سنتدرب أيضاً على استخدام نماذج مختلفة وعلى استقبال الأجوبة بتقنية تدفق البيانات – data streaming. بعد الانتهاء من هذا المقال، ستمتلك المعرفة والأدوات اللازمة لتسخير قوة النماذج الأساسية لـ Amazon Bedrock في تعزيز تطبيقاتك بقدرات الذكاء الاصطناعي المتقدمة بسرعة وكفاءة عالية.
نظرة عامة على الحل
يوفر Amazon Bedrock طريقة بسيطة وفعالة لاستخدام النماذج الأساسية القوية من خلال واجهات برمجة التطبيقات، دون الحاجة إلى تدريب نماذج مخصصة. في هذا المقال، سنقوم بتشغيل الكود في Jupyter Notebook داخل بيئة عمل VS Code وباستخدام لغة البرمجة Python. تتضمن عملية دمج Amazon Bedrock في تطبيقاتك الخطوات التالية:
- إعداد بيئة التطوير الخاصة بك عن طريق استيراد التبعيات (dependencies) اللازمة وإنشاء عميل – client – للاتصال بAmazon Bedrock. سيعمل هذا العميل كنقطة دخول للتفاعل مع النماذج الأساسية المُتوفّرة على Amazon Bedrock.
- بعد إعداد عميل Amazon Bedrock، يمكنك تحديد الإرشادات التي سيتم استخدامها للتفاعل مع النماذج الأساسية. يمكن أن تتضمن هذه الإرشادات تعليمات باللغة الطبيعية أو مقتطفات كود سيقوم النموذج بمعالجتها وإنشاء مخرجات بناءً عليها.
- ثم نقوم بتوظيف هندسة الأوامر لتحديد الإرشادات اللازمة لتوجيه النموذج، ونستخدم عميل الاتصال لاستدعاء النموذج الأساسي المناسب من Amazon Bedrock وتمرير الإرشادات إليه. يدعم Amazon Bedrock نماذج متنوعة، كل منها له نقاط قوة وقدرات خاصة به، مما يتيح لك اختيار النموذج الأنسب للمهمة المنشودة.
- اعتماداً على النموذج والإرشادات المقدمة، سيقوم Amazon Bedrock بإنشاء مخرجات يمكن أن تتضمن نصاً طبيعياً، أو مقتطفات كود، أو مزيجاً من الاثنين. يمكنك بعد ذلك معالجة هذه المخرجات ودمجها في تطبيقك حسب الحاجة.
- بالنسبة لبعض النماذج وحالات الاستخدام، يدعم Amazon Bedrock إرسال المخرجات بتدفق بيانات، والتي تسمح لك بالتفاعل مع النموذج بشكل مباشر. يمكن أن يكون هذا مفيداً بشكل خاص للذكاء الاصطناعي التحاوري أو التطبيقات التفاعلية حيث تحتاج إلى تبادل إرشادات واستجابات متعددة مع النموذج.
خلال هذا المقال، سنقدم أمثلة مفصّلة وشروحات لكل خطوة، مما سيساعدك على دمج النماذج الأساسية لـ Amazon Bedrock بسلاسة في تطبيقاتك. باستخدام هذه النماذج القوية، يمكنك تعزيز تطبيقاتك بقدرات معالجة اللغات الطبيعية المتقدمة، وتسريع عملية التطوير الخاصة بك، وتقديم حلول مبتكرة لمستخدميك.
المتطلبات الأساسية
قبل أن نتعمق في عملية الدمج، تأكد من توفر المتطلبات الأساسية التالية:
- حساب AWS – ستحتاج إلى حساب AWS للوصول إلى Amazon Bedrock واستخدامه. إذا لم يكن لديك حساب، يمكنك إنشاء حساب جديد.
- بيئة التطوير – قم بإعداد بيئة تطوير متكاملة (IDE) مع لغة البرمجة والأدوات المفضلة لديك. يمكنك التفاعل مع Amazon Bedrock باستخدام مجموعات تطوير برمجيات AWS المتوفرة بلغات Python وJava وNode.js وغيرها من لغات البرمجة.
- بيانات اعتماد AWS – قم بتكوين بيانات اعتماد AWS في بيئة التطوير الخاصة بك للتتمكّن من التواصل مع خدمات AWS. يمكنك العثور على تعليمات حول كيفية القيام بذلك في وثائق AWS لمجموعة تطوير البرمجيات (SDK) التي اخترتها. سنقوم في هذا المقال بشرح مثال بلغة Python.
مع توفر هذه المتطلبات الأساسية، أنت جاهز للبدء بدمج النماذج الأساسية لـ Amazon Bedrock في تطبيقاتك.
في بيئة التطوير الخاصة بك، قم بإنشاء ملف جديد. في هذا المثال، نستخدم Jupyter Notebook (Kernel: Python 3.12.0).
في الأقسام التالية، سنوضح كيفية تنفيذ الحل في Jupyter Notebook.
إعداد البيئة
بداية، قم باستيراد التبعيات اللازمة للتفاعل مع Amazon Bedrock. فيما يلي مثال على كيفية القيام بذلك في Python.
الخطوة الأولى هي استيراد boto3
وjson
:
import boto3, json
بعد ذلك، قم بإنشاء نسخة من عميل Amazon Bedrock. سيعمل هذا العميل كنقطة دخول للتفاعل مع النماذج الأساسية. فيما يلي مثال على الكود اللازم لإنشاء العميل:
bedrock_runtime = boto3.client(
service_name='bedrock-runtime',
region_name='us-east-1'
)
تحديد الأوامر ومقتطفات الكود
مع إعداد عميل Amazon Bedrock، قم بتحديد أوامر توجيه النموذج ومقتطفات الكود التي سيتم استخدامها للتفاعل مع النموذج الأساسي. يمكن أن تتضمن هذه الأوامر تعليمات باللغة الطبيعية أو مقتطفات كود سيقوم النموذج بمعالجتها وإنشاء مخرجات بناءً عليها.
في هذا المثال، سألنا النموذج السؤال التالي: “?Hello, who are you”
لإرسال الطلب إلى واجهة برمجة التطبيقات (API)، تحتاج إلى بعض المعطيات الرئيسية والتي يمكنك الحصول عليها من لوحة تحكم Amazon Bedrock.
- في لوحة تحكم Amazon Bedrock، اختر Base models في قائمة التنقل.
- حدد Titan Text G1 – Express.
- اختر اسم النموذج (Titan Text G1 – Express) وانتقل إلى مثال طلب واجهة برمجة التطبيقات (API request).
- انسخ المثال الموجود عن كيفية إنشاء الطلب للتواصل مع واجهة برمجة التطبيقات:
{
"modelId": "amazon.titan-text-express-v1",
"contentType": "application/json",
"accept": "application/json",
"body": "{\"inputText\":\"this is where you place your input text\",\"textGenerationConfig\":{\"maxTokenCount\":8192,\"stopSequences\":[],\"temperature\":0,\"topP\":1}}"
}
- ثم أدخل هذا الكود في Jupyter Notebook مع التعديلات الطفيفة التالية:
- نقوم بنشر طلبات واجهة برمجة التطبيقات إلى المتغير kwargs .
- التغيير التالي هو على الطلب. سنستبدل “this is where you place your input text” بـ “?Hello, who are you”
- اطبع محتوى المتغير kwargs:
kwargs = {
"modelId": "amazon.titan-text-express-v1",
"contentType": "application/json",
"accept": "application/json",
"body": "{\"inputText\":\"Hello, who are you?\",\"textGenerationConfig\":{\"maxTokenCount\":8192,\"stopSequences\":[],\"temperature\":0,\"topP\":1}}"
}
print(kwargs)
يجب أن يعطيك الناتج التالي:
{
'modelId': 'amazon.titan-text-express-v1',
'contentType': 'application/json',
'accept': 'application/json',
'body': '{"inputText":"Hello, who are you?","textGenerationConfig":{"maxTokenCount":8192,"stopSequences":[],"temperature":0,"topP":1}}'
}
استدعاء النموذج
بعد تحديد بنية الطلب، يمكنك الآن إرسال الطلب إلى النموذج المطلوب في Amazon Bedrock.
- قم بتمرير الطلب إلى العميل:
response = bedrock_runtime.invoke_model(**kwargs)
response
سيقوم Amazon Bedrock بتوظيف النموذج المطلوب وإرسال الإجابة الناتجة كتدفق بيانات، بحيث تتم طباعة نص الإجابة بشكل تدريجي.
{'ResponseMetadata': {'RequestId': '3cfe2718-b018-4a50-94e3-59e2080c75a3',
'HTTPStatusCode': 200,
'HTTPHeaders': {'date': 'Fri, 18 Oct 2024 11:30:14 GMT',
'content-type': 'application/json',
'content-length': '255',
'connection': 'keep-alive',
'x-amzn-requestid': '3cfe2718-b018-4a50-94e3-59e2080c75a3',
'x-amzn-bedrock-invocation-latency': '1980',
'x-amzn-bedrock-output-token-count': '37',
'x-amzn-bedrock-input-token-count': '6'},
'RetryAttempts': 0},
'contentType': 'application/json',
'body': <botocore.response.StreamingBody at 0x105e8e7a0>}
سيعمل نموذج استدعاء عميل وقت تشغيل Amazon Bedrock السابق مع النموذج الأساسي الذي اخترت استدعاءه.
- قم بفك سلسلة JSON كما يلي:
response_body = json.loads(response.get('body').read())
response_body
يجب أن تحصل على استجابة كما يلي (هذه هي الاستجابة التي حصلنا عليها من نموذج Titan Text G1 – Express للطلب الذي قدمناه).
{'inputTextTokenCount': 6, 'results': [{'tokenCount': 37, 'outputText': '\nI am Amazon Titan, a large language model built by AWS. It is designed to assist you with tasks and answer any questions you may have. How may I help you?', 'completionReason': 'FINISH'}]}
تجربة نماذج مختلفة
يقدم Amazon Bedrock نماذج أساسية متنوعة، كل منها له نقاط قوة وقدرات خاصة به. يمكنك تحديد النموذج الذي تريد استخدامه عن طريق تغيير اسم النموذج في المُعامل model_name
عند إنشاء عميل Amazon Bedrock.
- مثلاً، في السابق استعملنا اسم النموذج Titan Text G1 – Express، يُمكننا الآن تغييره إلى أحد النماذج من عائلة Claude من Anthropic المتوفرة على Amazon Bedrock. احصل على مثال طلب واجهة برمجة التطبيقات من لوحة تحكم Amazon Bedrock.
{
"modelId": "anthropic.claude-v2",
"contentType": "application/json",
"accept": "*/*",
"body": "{\"prompt\":\"\\n\\nHuman: Hello world\\n\\nAssistant:\",\"max_tokens_to_sample\":300,\"temperature\":0.5,\"top_k\":250,\"top_p\":1,\"stop_sequences\":[\"\\n\\nHuman:\"],\"anthropic_version\":\"bedrock-2023-05-31\"}"
}
يقبل Claude من Anthropic الطلب بطريقة مختلفة (\\n\\nHuman:
)، لذا يوفر طلب واجهة برمجة التطبيقات في لوحة تحكم Amazon Bedrock الطلب بالطريقة التي يمكن لـ Claude من Anthropic قبولها.
- قم بتحرير طلب واجهة برمجة التطبيقات وضعه في المتغير kwargs:
kwargs = {
"modelId": "anthropic.claude-v2",
"contentType": "application/json",
"accept": "*/*",
"body": "{\"prompt\":\"\\n\\nHuman: we have received some text without any context.\\nWe will need to label the text with a title so that others can quickly see what the text is about \\n\\nHere is the text between these <text></text> XML tags\\n\\n<text>\\nToday I sent to the beach and saw a whale. I ate an ice-cream and swam in the sea\\n</text>\\n\\nProvide title between <title></title> XML tags\\n\\nAssistant:\",\"max_tokens_to_sample\":300,\"temperature\":0.5,\"top_k\":250,\"top_p\":1,\"stop_sequences\":[\"\\n\\nHuman:\"],\"anthropic_version\":\"bedrock-2023-05-31\"}"
}
print(kwargs)
يجب أن تحصل على الناتج التالي:
{
'modelId': 'anthropic.claude-v2',
'contentType': 'application/json',
'accept': '*/*',
'body': '{"prompt":"\\n\\nHuman: we have received some text without any context.\\nWe will need to label the text with a title so that others can quickly see what the text is about \\n\\nHere is the text between these <text></text> XML tags\\n\\n<text>\\nToday I sent to the beach and saw a whale. I ate an ice-cream and swam in the sea\\n</text>\\n\\nProvide title between <title></title> XML tags\\n\\nAssistant:","max_tokens_to_sample":300,"temperature":0.5,"top_k":250,"top_p":1,"stop_sequences":["\\n\\nHuman:"],"anthropic_version":"bedrock-2023-05-31"}'
}
- مع تحديد الطلب، يمكنك الآن استدعاء نموذج Amazon Bedrock FM عن طريق تمرير الطلب إلى العميل:
response = bedrock_runtime.invoke_model(**kwargs)
يجب أن تحصل على الناتج التالي:
{'ResponseMetadata':
{
'RequestId': '72d2b1c7-cbc8-42ed-9098-2b4eb41cd14e',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'date': 'Thu, 17 Oct 2024 15:07:23 GMT',
'content-type': 'application/json',
'content-length': '121',
'connection': 'keep-alive',
'x-amzn-requestid': '72d2b1c7-cbc8-42ed-9098-2b4eb41cd14e',
'x-amzn-bedrock-invocation-latency': '538',
'x-amzn-bedrock-output-token-count': '15',
'x-amzn-bedrock-input-token-count': '100'
},
'RetryAttempts': 0
},
'contentType': 'application/json',
'body': <botocore.response.StreamingBody at 0x1200b5990>
}
- قم بقراءة المُخرجات القادمة بصيغة JSON كما يلي:
response_body = json.loads(response.get('body').read())
يؤدي هذا إلى المُخرج التالي حيثُ يحتوي عنوان النص المعطى.
{'completion': ' <title>A Day at the Beach</title>',
'stop_reason': 'stop_sequence',
'stop': '\n\nHuman:'}
- استخرج الإجابة:
completion = response_body.get('completion')
print(completion)
نظراً لأن الإجابة يتم إرجاعها في علامات XML كما حددت، يمكنك قراءتها وعرضها للعميل بالشكل المُناسب.
<title>A Day at the Beach</title>
استدعاء النموذج والإجابة بتدفق بيانات
بالنسبة لبعض النماذج وحالات الاستخدام، يدعم Amazon Bedrock الاستدعاءات والإجابة بتدفق البيانات، والتي تسمح لك بالتفاعل مع النموذج بشكل مباشر. يمكن أن يكون هذا مفيداً بشكل خاص للذكاء الاصطناعي التحادثي أو التطبيقات التفاعلية حيث تحتاج إلى تبادل طلبات واستجابات متعددة مع النموذج. على سبيل المثال، إذا كنت تطلب من النموذج الأساسي مقالاً أو قصة، فقد ترغب في تدفق ناتج المحتوى المُنشأ حتى تُحسّن تجربة المُستخدم.
- قم باستيراد التبعيات وإنشاء عميل Amazon Bedrock:
import boto3, json
bedrock_runtime = boto3.client(service_name='bedrock-runtime', region_name='us-east-1')
- حدد الطلب كما يلي:
prompt = "write an article about fictional planet Foobar"
- قم بتحرير طلب واجهة برمجة التطبيقات ووضعه في الوسيطة الرئيسية كما سبق: نستخدم طلب واجهة برمجة التطبيقات لنموذج claude-v2.
kwargs = {
"modelId": "anthropic.claude-v2",
"contentType": "application/json",
"accept": "*/*",
"body": "{\"prompt\":\"\\n\\nHuman: " + prompt + "\\nAssistant:\",\"max_tokens_to_sample\":300,\"temperature\":0.5,\"top_k\":250,\"top_p\":1,\"stop_sequences\":[\"\\n\\nHuman:\"],\"anthropic_version\":\"bedrock-2023-05-31\"}"
}
- يمكنك الآن استدعاء نموذج Amazon Bedrock FM عن طريق تمرير الطلب إلى العميل: نستخدم
invoke_model_with_response_stream
بدلاً منinvoke_model
.
response = bedrock_runtime.invoke_model_with_response_stream(**kwargs)
stream = response.get('body')
if stream:
for event in stream:
chunk = event.get('chunk')
if chunk:
print(json.loads(chunk.get('bytes')).get('completion'), end="")
ستحصل على إجابة مثل التالية كتدفق بيانات:
Here is a draft article about the fictional planet Foobar: Exploring the Mysteries of Planet Foobar Far off in a distant solar system lies the mysterious planet Foobar. This strange world has confounded scientists and explorers for centuries with its bizarre environments and alien lifeforms. Foobar is slightly larger than Earth and orbits a small, dim red star. From space, the planet appears rusty orange due to its sandy deserts and red rock formations. While the planet looks barren and dry at first glance, it actually contains a diverse array of ecosystems. The poles of Foobar are covered in icy tundra, home to resilient lichen-like plants and furry, six-legged mammals. Moving towards the equator, the tundra slowly gives way to rocky badlands dotted with scrubby vegetation. This arid zone contains ancient dried up riverbeds that point to a once lush environment. The heart of Foobar is dominated by expansive deserts of fine, deep red sand. These deserts experience scorching heat during the day but drop to freezing temperatures at night. Hardy cactus-like plants manage to thrive in this harsh landscape alongside tough reptilian creatures. Oases rich with palm-like trees can occasionally be found tucked away in hidden canyons. Scattered throughout Foobar are pockets of tropical jungles thriving along rivers and wetlands.
الخاتمة
في هذا المقال، أوضحنا كيفية دمج النماذج الأساسية من Amazon Bedrock في تطبيقاتك. مع Amazon Bedrock، يمكنك استخدام قدرات الذكاء الاصطناعي المُولّد المتطورة دون الحاجة إلى تدريب نماذج مخصصة، مما يسرع عملية التطوير الخاصة بك ويمكنك من بناء تطبيقات قوية بميزات معالجة اللغة الطبيعية المتقدمة.
سواء كنت تبني مساعداً ذكياً تحادثياً، أو أداة لتوليد الكود، أو تطبيقاً آخر يتطلب قدرات معالجة اللغة الطبيعية، يوفر Amazon Bedrock حلاً بسيطاً وفعالاً. من خلال استخدام قوة النماذج الأساسية عبر واجهات برمجة تطبيقات Amazon Bedrock، يمكنك التركيز على بناء حلول مبتكرة وتقديم قيمة لمستخدميك، دون القلق بشأن تعقيدات نماذج اللغة.
بينما تواصل استكشاف ودمج Amazon Bedrock في مشاريعك، تذكر أن تبقى على اطلاع بآخر التحديثات والميزات التي تقدمها الخدمة. بالإضافة إلى ذلك، فكر في استكشاف خدمات وأدوات AWS الأخرى التي يمكن أن تكمل وتعزز تطبيقاتك المدعومة بالذكاء الاصطناعي، مثل Amazon SageMaker لتدريب ونشر نماذج التعلم الآلي، أو Amazon Lex لبناء واجهات المحادثة.
لاستكشاف المزيد من إمكانات Amazon Bedrock، راجع الموارد التالية:
- بناء تطبيقات ذكاء اصطناعي مُولّد مخصصة مدعومة من Amazon Bedrock
- استخدام Amazon Bedrock لإنشاء وتقييم وفهم الكود في مسار تطوير البرمجيات الخاص بك
- هندسة التلقين بالأمثلة القليلة والضبط الدقيق لنماذج اللغة الكبيرة في Amazon Bedrock
شارك وتعلم مع مجتمع الذكاء الاصطناعي المُولّد لدينا على community.aws.
استمتع بالبرمجة والبناء مع Amazon Bedrock!