البرمجة الثنائية بالذكاء الاصطناعي مع IBM Bob

استخدم Bob كمساعد للبرمجة الثنائية بالذكاء الاصطناعي لبناء واجهة برمجة تطبيقات FastAPI للمهام — من المتطلبات إلى خطة، ثم كود مُولَّد، واختبارات، وتوثيق.

مع البرمجة الثنائية بالذكاء الاصطناعي، تبني البرامج إلى جانب مساعد يدعمك في كل مرحلة — التخطيط، والترميز، والاختبار، والتوثيق — بدلاً من مساعد يكتفي بإكمال الأسطر تلقائياً. في هذا البرنامج التعليمي، تتعاون مع IBM Bob لبناء واجهة برمجة تطبيقات FastAPI للمهام انطلاقاً من مجموعة من المتطلبات.

تبدأ من المتطلبات وتنتقل عبر خطة مراجعة، وكود مُولَّد، وشرح للتنفيذ، وتحسينات لجودة الكود، واختبارات وحدة، وتوثيق تقني. مخزن البيانات عبارة عن قائمة Python في الذاكرة، لذا لا توجد قاعدة بيانات تحتاج إلى إعدادها.

بنهاية هذا البرنامج التعليمي، قمت ببناء واجهة برمجة تطبيقات FastAPI للمهام محاطة بحاوية، وتدربت على حلقة مراجعة البرمجة الثنائية في كل مرحلة: التخطيط، والتوليد، والشرح، وإعادة الهيكلة، والاختبار، والتوثيق.

هذا البرنامج التعليمي موجّه للمطورين الذين يعرفون أساسيات Python ومفاهيم REST ويريدون حلقة مراجعة قابلة للتكرار لبناء البرمجيات مع مساعد ذكاء اصطناعي. لا تحتاج إلى خبرة سابقة بـ FastAPI.

يغطي هذا البرنامج التعليمي دورة البناء الكاملة من البداية إلى النهاية على مشروع جديد. للتعمق في تخطيط ميزة كبيرة وتنفيذها داخل قاعدة كود موجودة، راجع تخطيط الميزات المعقدة وتنفيذها.

المتطلبات الأساسية

لإكمال هذا البرنامج التعليمي، تحتاج إلى ما يلي:

  • تثبيت Bob IDE وتهيئته.
  • إتمام استخدام الترميز الأدبي لتوليد كود من التعليقات، الذي يبني عليه هذا البرنامج التعليمي.
  • إتمام إنشاء نافذة سياق جديدة، حتى تتمكن من إدارة سياق Bob عبر سير العمل متعدد الخطوات هذا.
  • تثبيت Docker وتشغيله على محطة العمل. يولّد Bob ملف Dockerfile حتى تتمكن من بناء واجهة برمجة التطبيقات وتشغيلها في حاوية دون الحاجة إلى تثبيت Python أو تبعياتها محلياً.
  • معرفة أساسية بـ Python.
  • فهم أساسي لواجهات برمجة التطبيقات REST. لا تحتاج إلى خبرة سابقة بـ FastAPI؛ فـ Bob يولّد كود FastAPI وهذا البرنامج التعليمي يشرحه.

فهم البرمجة الثنائية بالذكاء الاصطناعي مع Bob

يعمل Bob كشريك تعاوني عبر دورة حياة تطوير البرمجيات. يعمل معك أثناء التخطيط، والتوليد، والشرح، والتحسين، والاختبار، وتوثيق الكود.

سير عمل البرمجة الثنائية

يستخدم هذا البرنامج التعليمي سير العمل التالي:

المتطلبات

Bob يُنشئ خطة

تراجع الخطة وتحسّنها وتوافق عليها

Bob يولّد الكود

تراجع المخرجات

تشغيل والتحقق

Bob يشرح التنفيذ

Bob يقترح تحسينات لجودة الكود

توليد الاختبارات

توليد التوثيق

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

إعداد مساحة العمل

شغّل Bob، وافتح مجلد مشروع فارغاً، وهيّئ Bob لطلب الموافقة قبل تغيير الملفات.

تشغيل IBM Bob

شغّل تطبيق IBM Bob على حاسوبك. Bob بيئة تطوير متكاملة مستقلة، وليس امتداداً.

فتح واجهة دردشة Bob

إذا لم تكن واجهة دردشة Bob مرئية، افتحها بتحديد أيقونة Bob بجانب شريط التنقل، أو استخدم الاختصار Option + Command + B (Mac) أو Ctrl + Alt + B (Windows).

لوحة دردشة Bob مفتوحة في بيئة IBM Bob المتكاملة

فتح مجلد مشروع فارغ

أنشئ مجلداً فارغاً باسم todo-api، ثم افتحه في Bob عبر File > Open Folder. إذا سألك Bob عما إذا كنت تثق في مؤلفي الملفات في المجلد، حدد Yes, I trust the authors.

يكتب Bob التطبيق المُولَّد في هذا المجلد. لا تحتاج إلى مستودع موجود مسبقاً لهذا البرنامج التعليمي.

تعطيل الموافقة التلقائية

افتح Permissions وتأكد من أن الموافقة التلقائية معطّلة. مع تعطيل الموافقة التلقائية، يطلب Bob إذنك قبل قراءة الملفات أو تعديلها أو تشغيل الأوامر، مما يبقيك في السيطرة على كل تغيير في هذا البرنامج التعليمي.

تحديد المتطلبات والخطة

أعطِ Bob متطلبات واجهة برمجة تطبيقات المهام، ثم راجع الخطة التي يقترحها قبل كتابة أي كود.

التبديل إلى وضع Plan

افتح قائمة الأوضاع في أسفل شريط Bob الجانبي وحدد Plan.

قائمة أوضاع IBM Bob مع تحديد وضع Plan

تطبّق الأوضاع مبدأ الحد الأدنى من الامتيازات. يتيح وضع Plan لـ Bob قراءة الملفات واقتراح خطة دون كتابة الكود أو تشغيله، حتى تتمكن من مراجعة الأسلوب قبل إجراء أي تغييرات.

تحديد متطلبات التطبيق

في واجهة دردشة Bob، أدخل المطالبة التالية:

Create a simple FastAPI To-Do API.

Requirements:

- Store tasks in a Python list.
- Each task should contain:
    - id
    - task_name

Implement:

- Get all tasks
- Add a task
- Delete a task

Use FastAPI and Pydantic.

Include a requirements.txt and a Dockerfile that run the API on port 8000.

Keep the implementation simple.

يحلّل Bob المتطلبات ويُنشئ خطة مهام.

تحسين الخطة

يمكنك تغيير الخطة قبل كتابة أي كود. في واجهة دردشة Bob، أدخل مطالبة متابعة:

Update the plan to reject a task whose task_name is empty or longer than 200 characters.

يراجع Bob الخطة لتضمين التحقق من الإدخال الإضافي. راجع الخطة المحدّثة.

مراجعة الخطة والموافقة عليها

يعرض Bob الإجراءات التي يخطط لاتخاذها قبل تنفيذها. على سبيل المثال، قد يقترح Bob:

  • إنشاء تطبيق FastAPI.
  • إضافة ملف Dockerfile وملف requirements.txt.
  • التحقق من التنفيذ.

هذا الأسلوب الذي يُشرك الإنسان في الحلقة يُبقيك مسؤولاً عن قرارات التصميم مع الاستفادة من مساعدة الذكاء الاصطناعي.

توليد التطبيق ومراجعته

انتقل إلى وضع Agent حتى يتمكن Bob من تنفيذ الخطة المعتمدة، ثم راجع الكود الذي يولّده.

التبديل إلى وضع Agent وتنفيذ الخطة

افتح قائمة الأوضاع في أسفل شريط Bob الجانبي وحدد Agent. ثم أخبر Bob بتنفيذ الخطة المعتمدة:

Implement the plan.

يتيح وضع Agent لـ Bob كتابة الملفات وتشغيل الأوامر. يطلب Bob الموافقة قبل كل تغيير لأنك عطّلت الموافقة التلقائية. وافق على الخطوات بينما يعمل Bob على تنفيذ الخطة.

مراجعة التطبيق المُولَّد

عند اكتمال التنفيذ، راجع الكود المُولَّد. يتكون التطبيق من الأجزاء التالية.

نماذج البيانات. يولّد Bob نموذجَي Pydantic: أحدهما لجسم الطلب عند إنشاء مهمة، والآخر للمهمة المحفوظة. يُطبّق نموذج الإنشاء قاعدة الطول التي أضفتها أثناء التخطيط:

class TaskCreate(BaseModel):
    task_name: Annotated[str, Field(min_length=1, max_length=200)]


class Task(BaseModel):
    id: int
    task_name: str

تعتمد الأسماء الدقيقة والمسارات على ما يولّده Bob. يفترض هذا البرنامج التعليمي وجود النموذجَين Task وTaskCreate ومسار نقطة النهاية /tasks. عدّل المطالبات التالية إذا اختار Bob أسماء مختلفة.

مخزن البيانات في الذاكرة. يخزّن Bob المهام في قائمة Python فارغة ويخصص لكل مهمة جديدة id متصاعداً:

tasks: list[dict] = []
id_counter = 0

عمليات واجهة برمجة التطبيقات. يوفر التطبيق نقاط النهاية التالية:

  • GET /tasks
  • POST /tasks
  • DELETE /tasks/{task_id}

يأخذ POST /tasks فقط task_name في جسم الطلب ويعيد 201 مع المهمة المُنشأة. يعيد DELETE /tasks/{task_id} القيمة 204 عند النجاح و404 عندما لا توجد مهمة بذلك task_id.

التبعيات. ملف requirements.txt يُدرج FastAPI، وUvicorn، وPydantic.

الحاوية. ملف Dockerfile يُثبّت التبعيات ويشغّل واجهة برمجة التطبيقات على المنفذ 8000 مع Uvicorn.

نظراً لأن نماذج اللغة الكبيرة احتمالية، قد يختلف الكود المُولَّد قليلاً عن الأمثلة الموضحة في هذا البرنامج التعليمي.

إضافة نقطة نهاية بالترميز الأدبي

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

يولّد وضع الترميز الأدبي الكود من التعليمات بلغة طبيعية المكتوبة مباشرةً في المحرر.

بدء نافذة سياق جديدة

انقر على New task في مربع الدردشة أو + في أعلى لوحة الدردشة لبدء نافذة سياق جديدة. التخطيط والتوليد والمراجعة التي أتممتها للتو لم تعد بحاجة إلى البقاء في السياق، والبدء بصفحة نظيفة يُبقي استجابات Bob مُركّزة ويخفّض التكلفة لبقية البرنامج التعليمي.

فتح ملف التطبيق

افتح ملف main.py الذي أنشأه Bob وضع مؤشرك على سطر فارغ في نهاية الملف، أسفل آخر معالج للمسار.

تفعيل وضع الترميز الأدبي

اضغط Cmd + I (Mac) أو Ctrl + I (Windows وLinux)، أو حدد أيقونة العصا السحرية في شريط أدوات المحرر.

كتابة التعليمة

أدخل التعليمة التالية على السطر الفارغ. تظهر مميّزة بلون مختلف عن بقية الكود.

Add an endpoint that updates the task_name of an existing task by its ID, matching the style and conventions of the existing routes.

يستنتج Bob مسار المسار، واسم المعامل، وطريقة HTTP، ومعالجة الأخطاء من الكود المحيط، فلا تحتاج إلى تحديدها.

توليد الكود وقبوله

حدد Generate أسفل الكود الذي يقترحه Bob. يستبدل Bob التعليمة بتنفيذ ويعرض فرقاً مضمّناً.

راجع الفرق، ثم حدد Accept All لتطبيق التغيير. حدد Exit للخروج من وضع الترميز الأدبي.

الشرح والتشغيل والتحقق

اطلب من Bob شرح التنفيذ، ثم شغّل التطبيق وتحقق من سلوكه.

بدء نافذة سياق جديدة

انقر على New task في مربع الدردشة أو + في أعلى لوحة الدردشة لبدء نافذة سياق جديدة.

اطلب من Bob شرح الكود

فهم الكود المُولَّد جزء مهم من البرمجة الثنائية بالذكاء الاصطناعي. اسأل Bob:

Explain the generated To-Do API.

يمكن لـ Bob شرح بنية التطبيق، وتدفق البيانات، ومكونات FastAPI، ونماذج Pydantic، وسلوك نقاط النهاية، وقرارات التصميم. تساعدك هذه الشروحات على فهم كيفية عمل التطبيق بدلاً من التعامل مع الكود المُولَّد بالذكاء الاصطناعي كصندوق أسود.

تشغيل التطبيق

اطلب من Bob بناء واجهة برمجة التطبيقات وتشغيلها في حاوية:

Build the Docker image and run the container with port 8000 mapped to the host. Confirm the API is reachable.

يشغّل Bob أوامر البناء والتشغيل ويُبلّغ عند تشغيل الحاوية. لتشغيل الأوامر بنفسك، افتح نافذة طرفية في مجلد todo-api:

docker build -t todo-api .
docker run -d --name todo-api -p 8000:8000 todo-api

افتح http://127.0.0.1:8000/docs في متصفحك.

تقدّم FastAPI واجهة Swagger UI تفاعلية على /docs. استخدمها لاستكشاف كل نقطة نهاية، وفحص مخططات الطلب والاستجابة، وتشغيل استدعاءات واجهة برمجة التطبيقات من المتصفح.

التحقق من واجهة برمجة التطبيقات

استخدم Swagger UI على /docs لاختبار كل عملية. لكل نقطة نهاية، وسّع صفها، وحدد Try it out، وأدخل أي معاملات مسار أو جسم طلب، وحدد Execute، ثم تحقق من رمز Server response وجسمه.

إضافة مهمة

  1. وسّع POST /tasks وحدد Try it out.

  2. استبدل جسم الطلب بـ:

    {
      "task_name": "My first API item!"
    }
  3. حدد Execute. تأكد من أن رمز الاستجابة 201 وأن جسم الاستجابة يحتوي على المهمة مع id مخصص. لاحظ id؛ ستحتاجه في خطوات التحديث والحذف.

بعد ذلك، تأكد من قواعد التحقق التي أضفتها أثناء التخطيط بإرسال إدخال غير صالح والتحقق من أن واجهة برمجة التطبيقات ترفضه:

  1. في جسم الطلب نفسه، اضبط task_name على سلسلة فارغة (""), حدد Execute، وتأكد من أن رمز الاستجابة 422 مع جسم استجابة يصف خطأ التحقق.
  2. اضبط task_name على سلسلة أطول من 200 حرف، وحدد Execute، وتأكد من أن رمز الاستجابة 422 أيضاً.

استرجاع المهام

  1. وسّع GET /tasks وحدد Try it out.
  2. حدد Execute. تأكد من أن رمز الاستجابة 200 وأن جسم الاستجابة يُدرج المهمة My first API item! مع id المخصص عند إضافتها.

تحديث مهمة

  1. وسّع PUT /tasks/{task_id} وحدد Try it out.

  2. أدخل task_id للمهمة التي أنشأتها.

  3. استبدل جسم الطلب بـ:

    {
      "task_name": "Build and ship a To-Do API"
    }
  4. حدد Execute. تأكد من أن رمز الاستجابة 200 وأن المهمة المُعادة تُظهر task_name المحدّث.

  5. غيّر task_id إلى قيمة غير موجودة وحدد Execute مرة أخرى. تأكد من أن رمز الاستجابة 404.

حذف مهمة

  1. وسّع DELETE /tasks/{task_id} وحدد Try it out.
  2. أدخل task_id للمهمة التي أنشأتها وحدد Execute. تأكد من أن رمز الاستجابة 204.
  3. وسّع GET /tasks، وحدد Execute، وتأكد من أن المهمة لم تعد تظهر في الاستجابة.
  4. وسّع DELETE /tasks/{task_id} مجدداً، وأدخل نفس task_id، وحدد Execute. تأكد من أن رمز الاستجابة 404.

هذا يؤكد أن التنفيذ، بما يشمل نقطة النهاية للتحديث التي أضفتها بالترميز الأدبي، يستوفي المتطلبات الأصلية.

تحسين جودة الكود

اطلب من Bob مراجعة الكود المُولَّد بحثاً عن مشكلات الجودة، ثم طبّق التغييرات التي توافق عليها. تستخدم هذه الخطوة Bob كمراجع لا مجرد مولّد للكود.

بدء نافذة سياق جديدة

انقر على New task في مربع الدردشة أو + في أعلى لوحة الدردشة لبدء نافذة سياق جديدة.

اطلب من Bob اقتراحات للتحسين

في واجهة دردشة Bob، أدخل:

Review the To-Do API and suggest improvements to code quality, error handling, and HTTP status codes.

يرصد Bob الثغرات مثل نقطة النهاية المفقودة لاسترداد مهمة واحدة، ومخزن في الذاكرة يحتفظ بقواميس عادية بدلاً من نماذج Task المُتحقَّق منها، ومتغير id_counter على مستوى الوحدة يصعب إعادة تعيينه أو اختباره.

تطبيق التحسينات

اطلب من Bob تنفيذ الاقتراحات التي تريد الإبقاء عليها:

Add a GET /tasks/{task_id} endpoint that returns 404 when the task ID does not exist, and store tasks as Task models instead of dictionaries.

راجع التغييرات المقترحة وافق عليها لتطبيقها. اطلب من Bob إعادة بناء الصورة وإعادة تشغيل الحاوية، ثم كرّر خطوات التحقق. تأكد من أن GET /tasks/{task_id} يُعيد 200 مع المهمة لمعرّف صالح و404 لمعرّف غير معروف، وأن نقاط النهاية الموجودة لا تزال تتصرف كالسابق.

توليد الاختبارات والتوثيق

اطلب من Bob توليد مجموعة اختبارات وتوثيق تقني لواجهة برمجة التطبيقات.

بدء نافذة سياق جديدة

انقر على New task في مربع الدردشة أو + في أعلى لوحة الدردشة لبدء نافذة سياق جديدة.

توليد اختبارات الوحدة

اسأل Bob:

Generate pytest unit tests for this application. Add pytest and httpx to a dev requirements file, build a test image, and run the suite in a container.

يضيف Bob تبعيات الاختبار pytest وhttpx، ويبني صورة تتضمنها، ويشغّل المجموعة في حاوية، ويُبلّغ بالنتائج. تشغيل الاختبارات في حاوية يعني أنك لا تحتاج إلى بيئة Python محلية. راجع الاختبارات المُولَّدة وحسّنها.

تظل مراجعة الاختبارات المُولَّدة وصيانتها مسؤوليتك.

توليد التوثيق التقني

اسأل Bob:

Generate technical documentation for this To-Do API.

يمكن لـ Bob توليد نظرة عامة على التطبيق، ووصف البنية، وملخصات نقاط النهاية، وأمثلة الطلب والاستجابة، وتعليمات الاستخدام. يكمّل هذا التوثيق توثيق واجهة برمجة التطبيقات الذي تولّده FastAPI تلقائياً.

استكشاف الأخطاء وإصلاحها

  • تعذّر الاتصال بـ Docker daemon: شغّل Docker Desktop أو خدمة Docker قبل بناء الصورة.
  • Bind for 0.0.0.0:8000 failed: port is already allocated: أوقف العملية التي تستخدم المنفذ 8000، أو عيّن منفذاً مختلفاً للمضيف باستخدام docker run -d --name todo-api -p 8080:8000 todo-api وافتح http://127.0.0.1:8080/docs.
  • The container name "/todo-api" is already in use: شغّل docker rm -f todo-api، ثم أعد تشغيل الحاوية.
  • pytest is missing when the tests run: صورة التطبيق لا تتضمن تبعيات الاختبار. اطلب من Bob إضافة pytest وhttpx إلى ملف متطلبات التطوير وبناء صورة اختبار منفصلة.

التنظيف

أوقف الحاوية وأزلها لتحرير المنفذ 8000:

docker rm -f todo-api

أزل الصورة عند الانتهاء:

docker rmi todo-api

يمكنك أيضاً مطالبة Bob بالتنظيف:

Stop and remove the To-Do API container and image.

لا يُبقي Bob مخزن البيانات في الذاكرة، لذا لا يحتاج إلى تنظيف إضافي.

الخطوات التالية

في هذا البرنامج التعليمي، استخدمت Bob لبناء واجهة برمجة تطبيقات المهام مع FastAPI ومخزن بيانات في الذاكرة. رأيت كيف يعمل Bob كمساعد للبرمجة الثنائية بالذكاء الاصطناعي عبر دورة حياة تطوير البرمجيات: تحليل المتطلبات، وتخطيط التنفيذ، وتوليد الكود، والاختبار، والتوثيق. طوال العملية، بقيت مسؤولاً عن مراجعة مخرجات Bob والتحقق منها.

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

هل أحتاج إلى معرفة FastAPI؟ لا. يُولِّد Bob كود FastAPI وPydantic ويشرحه عند الطلب. تكفي المعرفة الأساسية بـ Python وREST.

لماذا نتبدّل بين الأوضاع عبر المراحل؟ تطبّق الأوضاع مبدأ الحد الأدنى من الامتيازات. يقرأ وضع Plan الكود ويكتب خطة دون تشغيل أي شيء؛ يستطيع وضع Agent تعديل الملفات وتشغيل الأوامر؛ وضع Ask يجيب على الأسئلة دون تغيير الملفات. يُبقي التبديل بين الأوضاع قدرات Bob متوافقةً مع المهمة المطلوبة.

ماذا لو اختار Bob أسماء مختلفة للملفات أو النماذج؟ يرتبط عقد HTTP بمطالبة المتطلبات، لذا تتطابق المسارات ورموز الحالة. يمكن أن تختلف أسماء الفئات وتخطيط الملف. يفترض هذا البرنامج التعليمي النموذجَين Task وTaskCreate؛ عدّل المطالبات اللاحقة إذا اختار Bob أسماء مختلفة.

لماذا نبدأ نافذة سياق جديدة في كل مرحلة؟ يحفظ Bob الخطة في مجلد plans، لذا لم تعد المحادثة السابقة ضرورية في السياق. يُبقي السياق النظيف كل مرحلة مُركّزة ويتحكم في تكلفة الرمز.

هل يمكنني إتمام هذا دون Docker؟ يمكنك تقنياً إتمام هذا البرنامج التعليمي دون Docker، لكنك ستحتاج إلى تعديل الخطة والمطالبات الموجّهة لـ Bob.

هل يُغيّر وضع Plan الملفات؟ لا. في وضع Plan يقرأ Bob كودك ويكتب خطة Markdown فقط. لا يتغير أي كود تطبيق حتى تتبدّل إلى وضع Agent.

ما رأيك في هذا الموضوع؟

في هذه الصفحة

المتطلبات الأساسيةفهم البرمجة الثنائية بالذكاء الاصطناعي مع Bobسير عمل البرمجة الثنائيةإعداد مساحة العملتشغيل IBM Bobفتح واجهة دردشة Bobفتح مجلد مشروع فارغتعطيل الموافقة التلقائيةتحديد المتطلبات والخطةالتبديل إلى وضع Planتحديد متطلبات التطبيقتحسين الخطةمراجعة الخطة والموافقة عليهاتوليد التطبيق ومراجعتهالتبديل إلى وضع Agent وتنفيذ الخطةمراجعة التطبيق المُولَّدإضافة نقطة نهاية بالترميز الأدبيبدء نافذة سياق جديدةفتح ملف التطبيقتفعيل وضع الترميز الأدبيكتابة التعليمةتوليد الكود وقبولهالشرح والتشغيل والتحققبدء نافذة سياق جديدةاطلب من Bob شرح الكودتشغيل التطبيقالتحقق من واجهة برمجة التطبيقاتتحسين جودة الكودبدء نافذة سياق جديدةاطلب من Bob اقتراحات للتحسينتطبيق التحسيناتتوليد الاختبارات والتوثيقبدء نافذة سياق جديدةتوليد اختبارات الوحدةتوليد التوثيق التقنياستكشاف الأخطاء وإصلاحهاالتنظيفالخطوات التاليةالأسئلة الشائعة