نعرفكم في مقال اليوم على كيفية استخدام مكتبة المحولات Transformers في مهام الذكاء الاصطناعي التوليدي مثل توليد الصور أو تحويل النص إلى كلام أو الإجابة عن أسئلة متعلقة بالمستندات حيث يوفر الإصدار v4.29.0 من مكتبة المحوّلات Transformers واجهة برمجة تطبيقات API اختبارية لعناصر مفيدة في الذكاء الاصطناعي التوليدي هي الوكلاء Agents والأدوات Tools، وسنناقشها بالتفصيل في فقراتنا التالية. يمكنك العمل مع هذه الواجهة البرمجية API من رابط مخصص لها على جوجل كولاب Google Colab، وهي تُركز على مهام فهم اللغة الطبيعية (اللغة البشرية)، فيعمل الوكيل agent على تفسير أوامر اللغة الطبيعية المعُطاة له مستخدمًا مجموعة من الأدوات tools الأساسية التي توفرها المكتبة؛ تحتاج لأن تبدأ عملك بتصميم الوكيل وتحديد أدواته المناسبة لمشروعك، ويمكنك في أي لحظة توسيع نطاق التصميم ليشمل أدواتٍ إضافية أنشأها وشاركها مطورون آخرون على مجتمع Hugging Face.
اقتباستنويه: واجهة API السابقة لا زالت اختبارية، وهي عرضة للتطوير والتغيير في أي وقت، لذا قد تتغير النتائج التي تحصل عليها باستخدام الوكلاء Agents عن النتائج المعروضة في أمثلتنا تبعًا للتغيرات التي طرأت على النماذج.
سنعرض بعضًا من الأمثلة عمّا يمكنك تحقيقه باستخدام هذه الواجهة البرمجية API، وستلاحظ قوتها في المهام متعددة الأنماط multimodal، لذا سنبدأ أمثلتنا بتجربتها في مهام توليد الصور وقراءة النصوص صوتيًا.
ألقِ نظرة على الأمر التالي فهو يوجه طلبًا مكتوبًا باللغة الإنكليزية للوكيل Agent ويطلب منه وضع تسمية توضيحية أو عنوان للصورة المعطاة له:
agent.run("Caption the following image", image=image)
لاحظ أن دخل الوكيل صورة والخرج تسمية توضيحية تناسبها:
الدخل | الخرج |
---|---|
![]() |
A beaver is swimming in the water |
الآن لنطلب من الوكيل Agent قراءة التسمية التوضيحية السابقة، سنمررها له ضمن text
:
agent.run("Read the following text out loud", text=text)
وسيكون الدخل والخرج كما يلي:
الدخل | الخرج |
---|---|
A beaver is swimming in the water |
ملف صوتي يقرأ النص باللغة الطبيعية وهي في مثالنا الإنجليزية
|
لنجرب أيضًا تمرير مستند document
للوكيل Agent ونطرح عليه سؤالًا عن مضمون المستند:
agent.run( "In the following `document`, where will the TRRF Scientific Advisory Council Meeting take place?", document=document, )
في هذه الحالة سيكون الدخل والخرج كما يلي:
الدخل | الخرج |
---|---|
صورة المستند | نص يتضمن الإجابة عن السؤال المستنتجة من المستند |
أكمل معنا قراءة المقال لتعرف الأساسيات، ثم ادخل إلى colab الخاص بالمكتبة وجرب بعض المهام بنفسك حتى تتقنها.
مقدمة سريعة
الخطوة الأولى هي إدراج الوكيل agent الذي نود استخدامه بتعليمة agent.run
، والوكيل هو نموذج لغوي كبير (LLM) يمكنك الحصول عليه من مصادر متنوعة، فمكتبة المحوّلات Transformers مثلًا تدعم النماذج اللغوية الخاصة بمنصات openAI و BigCode و OpenAssistant؛ تتمتع نماذج openAI بكفاءة أعلى من البقية لكنها بالمقابل غير مجانية إذ يتطلب استخدام واجهتها البرمجية مفتاحًا خاصًا "openAI API key"، أما نماذج منصتي BigCode و OpenAssistant فالوصول إليها متاح مجانًا عبر منصة Hugging Face يمكنك استخدامها بسهولة.
لنُثَبِّت في البداية امتداد مكتبة المحوّلات الخاص بالوكلاء agents
قبل تثبيت بقية الاعتماديات:
pip install transformers[agents]
تعتمد خطوتنا التالية على نوع المنصة التي سنستخدم نماذجها.
إذا رغبت باعتماد نماذج OpenAI فثَبِّت الاعتمادية openai
لتتمكن من استخدامها وإنشاء المثيل OpenAiAgent ليكون وكيلًا:
pip install openai
يمكنك الآن إدراج الوكيل OpenAiAgent كما يلي:
from transformers import OpenAiAgent agent = OpenAiAgent(model="text-davinci-003", api_key="<your_api_key>")
أما إذا رغبت باستخدام نماذج BigCode أو OpenAssistant، فعليك في البداية تسجيل الدخول إلى منصة Hugging Face لتحصل على صلاحية الوصول إلى واجهة API الاستدلالية التي توفرها Hugging Face لهذه النماذج:
from huggingface_hub import login login("<YOUR_TOKEN>")
وبعدها أدرِِج الوكيل agent:
from transformers import HfAgent # Starcoder agent = HfAgent("https://api-inference.huggingface.co/models/bigcode/starcoder") # StarcoderBase # agent = HfAgent("https://api-inference.huggingface.co/models/bigcode/starcoderbase") # OpenAssistant # agent = HfAgent(url_endpoint="https://api-inference.huggingface.co/models/OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5")
استخدمنا هنا واجهة API المجانية (حاليًا) التي توفرها Hugging Face للوصول إلى النماذج اللغوية الكبيرة، لكن يمكنك بالطبع استخدام أي واجهة API أخرى متوفرة لديك وعندها ستستبدل عنوان URL الذي استخدمناه بعنوان URL لنقطة الاتصال endpoint المتوفرة لديك.
ملاحظة تعمل النماذج المجانية لكل من OpenAssistant و StarCoder جيدًا في المهام البسيطة لكن أدائها يتراجع للأسف كلما ازداد تعقيد المهام الموكلة لها، لذا ننصحك باستخدام نماذج OpenAI في المشاريع الكبيرة رغم أنها غير مفتوحة المصدر لكنها مناسبة.
لننتقل إلى الخطوة التالية، ونتعرف عن قرب على واجهتي API المتوفرتين لدينا الآن.
التنفيذ الإفرادي باستخدام التابع run
يستخدم التنفيذ الإفرادي single execution التابع ()run
مع الوكيل ،agent كما في المثال التالي الذي يطلب من الوكيل توليد صورة تتضمن أنهارًا وبحيرات:
agent.run("Draw me a picture of rivers and lakes.")
أرجع الوكيل الصورة التالية:
سيُحَدِدْ الوكيل agent تلقائيًا الأداة tool أو الأدوات المناسبة للمهمة التي طلبنا تنفيذها، ويعمل على تشغيلها بالطريقة الصحيحة، علمًا أنه يستطيع تنفيذ أكثر من مهمة في آن واحد، لكن لا ننصحك بذلك فكلما ازداد تعقيد الأوامر الموجهة له ازدادت احتمالات الفشل.
وهذا مثالٌ آخر لتوليد صورة تتضمن بحرًا ثم إضافة جزيرة عليها:
agent.run("Draw me a picture of the sea then transform the picture to add an island")
وستكون الصورة التي ستحصل عليها كالتالي:
يمكنك تشغيل ()run
لمهام مختلفة عدة مرات متتالية، فكل تعليمة ()run
مستقلة تمامًا عن غيرها من التعليمات.
تُعدّ دقة مطالبات الدخل prompts الموجهة للوكيل مهمة جدًا في الحصول على أفضل النتائج، فالاختلافات الصغيرة فيها تصنع فرقًا فالوكيل agent في نهاية الأمر مجرد نموذج لغوي كبير يستجيب للتوجيهات التي تُعطى له.
كما يوفر الوكيل خياراتٍ مفيدة أخرى عبر المتغيرات التي يقبلها، فتستطيع مثلًا تمرير كائنات غير نصية له كتمرير الصور، أو توجيهه لحفظ حالة التنفيذ الأخيرة التي وصل إليها وتحديثها بإضافة عناصر جديدة، لنفترض أننا نريد من الوكيل أخذ صورة الأنهار والبحيرات التي ولدها في مثالنا السابق وإضافة جزيرة عليها، فستكون الأوامر وفق التالي:
picture = agent.run("Generate a picture of rivers and lakes.") updated_picture = agent.run("Transform the image in `picture` to add an island to it.", picture=picture)
تفيدك هذه الحالة عندما لا يكون النموذج قادرًا على فهم طلبك بوضوح أو عاجزًا عن مزج عدة أدوات معًا، كما في المثال التالي: >
agent.run("Draw me the picture of a capybara swimming in the sea")
قد يُفسِّر الوكيل هذا الطلب بطريقتين:
-
توليد صورة من النص
text-to-image
والنص هو: "ارسم لي صورة لحيوان كابيبارا يسبح في الماء". -
توليد صورة من النص
text-to-image
والنص هو: "ارسم لي صورة لحيوان كابيبارا"، ثم "استخدام أداة تحويل الصورimage-transformation
لجعل حيوان الكابيبارا يسبح".
يمكنك حسم الموضوع وفرض السيناريو الأول بتمرير موجه prompt صريحة كمتغير للوكيل تتضمن بوضوح ما تريد وجوده في الصورة كما يلي:
agent.run("Draw me a picture of the `prompt`", prompt="a capybara swimming in the sea")
التنفيذ المستند إلى الدردشة باستخدام التابع chat
يعمل الوكيل agent بأسلوب الدردشة النصية chat-based بواسطة التابع ()chat
كما في المثال التالي:
سنطالبه أولًا بتوليد صورة أنهار وبحيرات:
agent.chat("Generate a picture of rivers and lakes")
سيولد لنا الصورة التالية:
ثم سنطلب منه تحويل الصورة وإضافة عنصر إليها كما يلي:
agent.chat("Transform the picture so that there is a rock in there")
يساعدك هذا الأسلوب في الاختبارات وتنفيذ التعليمات الفردية التي تحافظ فيها على الحالة الأخيرة للتنفيذ عبر مجموعة من التعليمات، لكنه ليس الأسلوب الأمثل للتعليمات المعقدة، التي يناسبها التنفيذ المعتمد على ()run
.
يقبل التنفيذ المعتمد على الدردشة تمرير وسيط غير نصي أو موجهات Prompts محددة للتابع ()chat
.
التنفيذ عن بعد Remote execution
أنشأت منصة Hugging Face -باستخدام نقاط الاتصال الاستدلالية inference endpoints- مُنَفِّذْين عن بعد remote executors للعديد من الأدوات الافتراضية التي يستخدمها الوكلاء agents، ستجدها معطلة حاليًا في هذا الإصدار لكننا ذكرناها هنا لتعرف أن الإمكانية متوفرة، وأن باستطاعتك إنشاء أدوات مخصصة لاحتياجات مشروعك وتخزينها في مستودع بعيد ثم استدعائها للتنفيذ عن بعد، اقرأ دليل إنشاء الأدوات المخصصة لتعرف أكثر عن الموضوع.
الوكلاء Agents والأدوات Tools
بعد هذه المقدمة السريعة سنُعَرِّف الآن الوكلاء Agents والأدوات Tools، لكن اطلّع أولًا على المخطط التوضيحي التالي:
الوكلاء Agents
الوكيل agent هو نموذج لغوي كبير (LLM) نوجهه بواسطة مُوجّهات prompts ليستخدم مجموعة من الأدوات tools التي نحددها له بغرض تنفيذ المهمة المطلوبة.
تُعَدُ النماذج اللغوية الكبيرة (LLMs) مناسبة لتوليد شيفرات برمجية صغيرة، لذا تستفيد الواجهة البرمجية API من هذه الميزة وتطلب من النموذج توليد شيفرة برمجية تتضمن التعليمات اللازمة لتنفيذ مهمة محددة مع استخدام أدوات معينة نَصِفُها له، فيأخذ الوكيل المهمة والوصف المقدم للأدوات، ويكمل المطلوب بإنشاء تعليمات متوافقة مع مدخلات الأدوات ومخرجاتها كما هو موضح في المخطط السابق.
الأدوات Tools
تتكون الأداة tool من دالة واحدة لها وظيفة محددة؛ وتتميز كل أداة باسم ووصف، نستخدم وصف الأدوات في المُوجِّهات prompt الموجهة للوكيل agent، فيوضح له الوصف كيف يستفيد من كل أداة في تنفيذ المهمة المطلوبة.
يستخدم الوكيل agent الأدوات tools بدلًا من خطوط الأنابيب pipelines بالرغم من تشابه المفهومين لأنه يقدم أداءً أفضل في كتابة الشيفرة البرمجية مع الأدوات المحددة والصغيرة، فالأدوات تتخصص بمهمة واحدة بسيطة، بينما تجمع خطوط الأنابيب مهامًا متعددة في آنٍ واحد.
تنفيذ الشيفرة البرمجية
بعد توليد الوكيل الشيفرة البرمجية تُنَفَّذْ على المدخلات مباشرةً باستخدام مُفَسِّر أوامر بايثون المحدود والخاص بمنصة Hugging Face، قد لا تطمئن لهذه الطريقة أو تظنها غير آمنة فالأوامر الناتجة عن الوكيل تذهب للمُفَسِّر مباشرةً وتُنَفَّذْ دون أن تراها.
لكن ما يخفف مخاطرها أن التنفيذ يقتصر على الأدوات التي تستدعيها بنفسك فقط ، ولن تُنفذ أي تعليمات أخرى غيرها، لذا فهو يُعدّ آمنًا نوعًا ما، طالما أنك تلتزم باستخدام الأدوات التي تؤمنها منصة Hugging Face، فالمنصة تعتمد عددًا من الاحتياطات الأمنية فهي تمنع عمليات استخراج السمات من الشيفرات البرمجية أو استيرادها وتحميك من الهجمات الشهيرة.
وإذا رغبت بحماية أكبر فيمكنك استخدام أسلوب التنفيذ المعتمد على التابع ()run
مع الوسيط return_code=True
الذي سيعرض لك الشيفرة البرمجية التي وَلَّدها الوكيل لتتفحصها وتقرر بنفسك فيما إذا ما كنت تود تنفيذها أم لا.
أما حالات توقف التنفيذ غير المتوقعة التي قد تصادفك، فهي ترجع عادةً لسببين: إما تنفيذك عملية غير مصرح بها، أو وجود خطأ ما في الشيفرة التي أنتجها الوكيل.
الأدوات التي توفرها مكتبة Transformers
هذه قائمة بأشهر الأدوات المدمجة في مكتبة المحوّلات Transformers والمستخدمة لتشغيل الوكلاء agents:
-
الإجابة عن أسئلة حول محتوى المستند Document question answering: نمرر للنموذج مستندًا (ملف PDF مثلًا) بصيغة صورة ويستخدم الأداة للإجابة عن أي سؤال تطرحه حول محتوى المستند، ومن أمثلته النموذج (
Donut
). -
الإجابة عن أسئلة حول النص Text question answering: تكون المدخلات هنا نص طويل وسؤال، والمخرجات هي الإجابة عن هذا السؤال من داخل النص، تعمل مع النموذج (
Flan-T5
). -
وضع تسمية توضيحية للصورة Unconditional image captioning: وضع تسميةً توضيحية للصور المدخلة، مثل النموذج (
BLIP
). -
الإجابة عن أسئلة حول الصورة Image question answering: نمرر صورة لتتم الإجابة عن السؤال المطروح عنها، (
VILT
). -
تجزئة الصور Image segmentation: المدخلات في هذه الحالة: صورة، وموجه prompt بتجزئة الصورة، ويكون الخرج قناعًا لتجزئة الصورة حسب المعيار المحدد في الموجه prompt، ومن أمثلتها النموذج (
CLIPSeg
) -
تحويل الكلام إلى نص Speech to text: نمرر ملفًا صوتيًا لشخص يتكلم، ويجري تحويله إلى نص، يناسبه مثلًا النموذج (
Whisper
). -
تحول النص إلى كلام Text to speech: العملية المعاكسة، الدخل هنا هو نص ويُحوّل إلى كلام، تعمل مع النموذج (
SpeechT5
). -
تصنيف النصوص بدون تدريب مسبق Zero-shot text classification: نمرر للنموذج نصًا ومجموعة تسميات توضيحية labels لم تكن موجودة ضمن البيانات التي تَدَرَّبَ عليها سابقًا، وينبغي له تحديد التسمية التوضيحية الأكثر توافقًا مع النص، مثل النموذج (
BART
). -
تلخيص النصوص Text summarization: تلخيص النص الطويل ببضع جمل فقط، مثل النموذج (
BART
). -
الترجمة Translation: ترجمة النص المُعطى إلى اللغة المحددة، نحو النموذج (
NLLB
).
هذه الأدوات مدمجة في مكتبة المحولات Transformers ويمكنك استدعائها واستخدامها يدويًا خارج الإطار السابق كما في المثال التالي:
from transformers import load_tool tool = load_tool("text-to-speech") audio = tool("This is a text to speech tool")
الأدوات المخصصة
بالرغم من توفر العديد من الأدوات الجاهزة في منصة Hugging Face إلّا أن الإمكانية متاحة أمامك لإنشاء أدوات مخصصة لاحتياجات عملك ومشاركتها على المنصة بسرعة وبسهولة.
بعد الانتهاء من برمجة الأداة ارفع شيفرتها البرمجية إلى المنصة أو إلى مستودع النموذج الخاص بك، وستتمكن بعدها من استخدامها مع أي وكيل agent، وهذه بعض الأمثلة عن أدوات مخصصة موجودة في قسم huggingface-tools على منصة Hugging Face وهي مستقلة عن مكتبة Transformers:
-
تحميل النصوص Text downloader: تحميل نص من عنوان URL معين.
-
تحويل النص إلى صورة Text to image: توليد صورة بناءً على النص المُدخل في الموجه prompt، وذلك باستخدام نموذج الذكاء الاصطناعي stable diffusion.
-
تحويل الصور Image transformation: تكون المدخلات صورة مبدئية، وموجه prompt بتعديلها، ويجري تعديل الصورة بناءً على الموجه prompt، وذلك باستخدام تعليمات pix2pix stable diffusion.
-
تحويل النص إلى فيديو Text to video: يُنشئ مقطع فيديو صغير بناءً على الموجه prompt المقدم له، وذلك بالاستفادة من damo-vilab.
بالمناسبة إن أداة تحويل النص إلى صورة text-to-image
التي استخدمناها في أمثلة المقال هي أداة بعيدة مستضافة على منصة Hugging Face على الرابط huggingface-tools/text-to-image، وستجد العديد من الأدوات الأخرى المستضافة هناك.
يمكنك الاطلاع على دليل إنشاء الأدوات المخصصة لتتعرف أكثر على طريقة إنشاء الأدوات ومشاركتها، علمًا أن الوكلاء agents يتمتعون تلقائيًا بصلاحية الوصول إلى كافة الأدوات الموجودة على Hugging Face.
توليد الشيفرة البرمجية Code generation
استخدمنا في أمثلتنا السابقة الوكلاء agents لتنفيذ الإجراءات دون أي تدخل منا، فالوكيل يوّلِد الشيفرة البرمجية ثم تُنَفَّذ هذه الشيفرة باستخدام مُفَسِّر بايثون المحدود، وبالتالي إذا رغبت باستخدام الشيفرة البرمجية الموَّلدة بأي طريقة أخرى، يمكنك ذلك عبر مطالبة الوكيل بإرجاع الشيفرة البرمجية الناتجة جنبًا إلى جنب مع تعريف الأداة المستخدمة وعمليات الاستيراد imports الدقيقة.
فالتعليمة المبينة أدناه على سبيل المثال:
agent.run("Draw me a picture of rivers and lakes", return_code=True)
تُرجع الشيفرة التالية التي تستطيع تعديلها وتنفيذها يدويًا حسب ما تريد:
from transformers import load_tool image_generator = load_tool("huggingface-tools/text-to-image") image = image_generator(prompt="rivers and lakes")
الخلاصة
تعرفنا في هذا المقال على الوكلاء agents والأدوات tools والأساليب المختلفة لاستخدامها في تحويل أوامر اللغة الطبيعية إلى تعليمات برمجية لتوليد الصور والنصوص والفيديوهات أو لترجمتها أو تلخيصها أو تحويلها حالة إلى أخرى، وتعلمنا أيضًا أننا أحرار في طريقة الاستفادة من هذه التعليمات البرمجية الناتجة، فيمكننا تركها لتُنَفَّذْ تلقائيًا أو استعراضها وتنفيذها يدويًا أو حتى استخدامها في أغراضٍ أخرى في برامج أوسع مثلًا أو غير ذلك. وفي الختام ندعوك لمتابعة مقالنا التالي حول توليد النصوص باستخدام النماذج اللغوية الكبيرة LLMs لتعزز معرفتك أكثر بهذا المجال الحيوي.
ترجمة -وبتصرف- لقسم Transformers Agents من منصة Hugging Face.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.