عندما يبدأ المطور لأول مرة في العمل مع جيثب copilot هناك (بحق) التركيز على الصياغة السريعة – أو فن توفير سياق ومعلومات جيدة لإنشاء اقتراحات عالية الجودة.
لكن السياق يتجاوز كتابة خطين في دردشة Copilot في VS Code. نريد التأكد من أن Copilot يفكر في الملفات الصحيحة عند إجراء العمليات ، وأن هذه الملفات سهلة على القراءة ، وأن نقدم Copilot أي إرشادات إضافية قد تحتاجها بشأن المشروع أو المهمة المحددة.
لذلك دعونا نستكشف اتخاذ الخطوة التالية إلى أبعد من الصياغة السريعة ، وفكر في كيف يمكننا أن نكون شريكًا أفضل لمبرمج زوج الذكاء الاصطناعي.
السياق هو المفتاح
أحب دائمًا التحدث عن السياق من خلال البدء بقصة. في اليوم الآخر ، استيقظت أنا وشريكي وقالت: “دعنا نذهب إلى الغداء!” رائع! من لا يحب الغداء؟
أوصيت بقعة ، واحدة من المفضلة لدينا ، وقالت: “أنت تعرف … لقد كنا هناك في الآونة الأخيرة. أود أن أجرب شيء مختلف.” أوصيت بقعة أخرى أجابت عليها ، “الآن بعد أن أفكر في الأمر ، أريد حقًا الفطائر. دعنا نجد مكانًا جيدًا في الفطائر.”
هذه المحادثة ، بالطبع ، طبيعية جدا. سألت شريكي سؤالاً ، أجبت ، قدمت المزيد من السياق ، وذهبنا ذهابًا وإيابًا. كانت جميع اقتراحاتي معقولة تمامًا بناءً على المعلومات التي كانت لدي ، وعندما لم تسمع ما كانت تتوقع أنها قدمت المزيد من التوجيهات. مع استمرارنا في الحديث ، أدركت أنها كانت تعاني من شغف بالفطائر ، والتي اكتشفتها وهي تعتبر اقتراحاتي.
هذه هي الطريقة التي نتحدث بها مع أشخاص آخرين ، ولكن أيضًا كيف نتعامل مع العمل مع أدوات الذكاء الاصطناعى التوليدي ، بما في ذلك Copilot. نطرح الأسئلة ، ونحصل على الإجابات ، والعمل جيئة وذهابا لتوفير المزيد من السياق واتخاذ القرارات بناءً على ما نراه.
إذا لم نتلق الاقتراحات التي نتوقعها ، أو إذا لم يتم تصميم شيء ما على المواصفات التي نضعها في الاعتبار ، فمن المحتمل جدًا أن يكون لدى Copilot السياق الذي يحتاجه – تمامًا كما لم يكن لدي السياق الذي اقترحه في مكان جديد عندما بدأت المحادثة مع شريكي.
كيف يعمل Github Copilot مع الكود
لفهم كيف يحصل Copilot في IDE على سياقه ، من المهم أن نفهم كيفية عمله. باستثناء وضع الوكيل ، الذي يؤدي المهام الخارجية، لا يقوم Copilot بإنشاء أو تشغيل الرمز لأنه يقوم بإنشاء اقتراحات التعليمات البرمجية. في الواقع ، فإنه يتصرف بشكل مشابه ، حسناً ، مبرمج زوج. إنه يقرأ الكود (والتعليقات) للملفات التي أشارناها إليها كما يفعل مطور آخر.
ولكن على عكس زميله في الفريق ، فإن Copilot ليس لديه “معرفة مؤسسية” ، أو المعلومات الأساسية التي تأتي مع الخبرة (على الرغم من ذلك يمكنك إضافة إرشادات مخصصة، ولكن أكثر على ذلك في وقت لاحق). قد يكون هذا هو تاريخ سبب بناء الأشياء بطريقة معينة (لم يتم توثيقها في مكان ما ولكن الجميع “يعرف” 🙄) ، أن مكتبة أو إطارًا داخليًا يجب استخدامه دائمًا ، أو الأنماط التي يجب اتباعها.
من الواضح أن كل معلومات الخلفية هذه مهمة للحصول على اقتراحات الكود الصحيحة من Copilot. إذا كنا نستخدم طبقة تجريد البيانات (DAL) ، على سبيل المثال ، ولكن Copilot تقوم بإنشاء رمز SQL الخام ، فلن تكون الاقتراحات مفيدة.
المشكلة ليست أن Copilot يولد رمزًا غير صالح. بدلاً من ذلك ، فإنه يفتقر إلى السياق لإنشاء الكود بالتنسيق والهيكل الذي نحتاجه. في الأساس ، نريد الفطائر ويعطينا عجة. دعونا نرى ما يمكننا القيام به للحصول على الفطائر.
هناك اعتقاد شائع بأن رمز الجودة يجب ألا يحتاج إلى تعليقات ، وأن إضافة تعليقات هي “رائحة رمز” ، أو إشارة إلى أنه يمكن تحسين شيء ما. على الرغم من أنه من النبيل أن نسعى إلى كتابة رمز يمكن قراءته قدر الإمكان ، إلا أنه شيء لا نقدره في عملنا اليومي.
حتى عندما نفعل “ضرب العلامة” ، نحتاج إلى أن نتذكر أنه لمجرد أن الكود قد يكون قابلاً للقراءة لمطور واحد ، فهذا لا يعني أنه يمكن قراءته لجميع المطورين. يمكن أن يقطع خطين من التعليقات شوطًا طويلاً لضمان قابلية القراءة.
الشيء نفسه ينطبق على Copilot! كما أبرزنا أعلاه ، لا يقوم Copilot بتشغيل أو تجميع الكود الخاص بك إلا في مواقف محددة. بدلاً من ذلك ، “يقرأ” رمزك مثل المطور.
باتباع الإرشادات لوجود docstrings في الوظائف/الوحدات النمطية في Python ، على سبيل المثال ، يمكن أن تساعد في ضمان أن Copilot لديه فهم أفضل لما يفعله الرمز وكيف يفعل ذلك. يتيح ذلك Copilot إنشاء اقتراحات عالية الجودة باستخدام الكود الحالي الخاص بك لضمان أن أي رمز جديد يتبع نفس الأنماط والممارسات الموجودة بالفعل.
💡 للنصيحة: عندما تفتح ملفًا ، من الجيد دائمًا تركه في حالة أفضل مما عندما عثرت عليه. أحد التحسينات الصغيرة التي يمكن أن تقوم بها هي إضافة بعض التعليقات إلى أماكن للمساعدة في وصف الرمز. يمكنك دائمًا أن تطلب من Copilot إنشاء المسودة الأولى للتعليقات ، ويمكنك إضافة أي تفاصيل إضافية ضائعة! |
فائدة استخدام التعليمات المخصصة مع Github Copilot في مشاريعك
لتوليد اقتراحات عالية الجودة ، يستفيد Copilot من وجود سياق حول ما تفعله وكيف تفعل ذلك. إن معرفة التكنولوجيا والأطر التي تستخدمها ، وما هي معايير الترميز التي يجب اتباعها ، وحتى بعض الخلفية حول ما تقوم ببناءه ، يساعد Copilot على رفع شريط الجودة على اقتراحاته. هذا هو المكان إرشادات مخصصة تعال إلى اللعب.
تساعدك الإرشادات المخصصة على توفير كل هذه المعلومات الأساسية وتعيين القواعد الأساسية (أشياء مثل واجهات برمجة التطبيقات التي تريد أن تسميها ، أو أنماط التسمية التي تريد اتباعها ، أو حتى التفضيلات الأسلوبية).
للبدء ، يمكنك وضع كل ما هو مهم في ملف مسمى copilot-instructions.md داخل الخاص بك .githubub مجلد. إنه ملف تخفيض ، بحيث يمكنك إنشاء أقسام مثل هيكل المشروعو التقنياتو معايير الترميزوأي ملاحظات أخرى تريد أن تنظر فيها Copilot في كل طلب دردشة واحد. يمكنك أيضًا إضافة أي إرشادات حول المهام التي ترى فيها Copilot لا تختار دائمًا المسار الصحيح ، مثل استخدام مكونات React المستندة إلى الفصل بدلاً من المكونات المستندة إلى الوظيفة (جميع الأطفال الرائعين يستخدمون المؤسسات المستندة إلى الوظائف).
ضع في اعتبارك أنه يتم إرسال التعليمات المخصصة إلى Copilot على كل واحد طلب الدردشة. تريد الحفاظ على تعليماتك تقتصر على المعلومات ذات الصلة بالمشروع بأكمله. إن توفير الكثير من التفاصيل يمكن أن يجعل الأمر أكثر صعوبة على Copilot لتحديد ما هو مهم.
بعبارات أبسط ، يمكنك أن تفكر بشكل أساسي في صديق واحد لديك والذي ربما يشارك الكثير من التفاصيل عندما يرويون قصة ، وكيف يمكن أن يجعل من الصعب التركيز على نقاط المؤامرة الرئيسية. إنه نفس الشيء مع Copilot. توفير بعض الإرشادات على مستوى المشروع ونظرة عامة ، لذلك فهي على أفضل وجه البيئة التي تعمل فيها.
هناك قاعدة جيدة تتمثل في وجود أقسام تسلط الضوء على الجوانب المختلفة لمشروعك. قد يبدو هذا المخطط التفصيلي لعميل وخادم لتطبيق الويب هكذا:
# Tailspin Toys Crowd Funding
Website for crowd funding for games.
## Backend
The backend is written using:
- Flask for the API
- SQLAlchemy for the ORM
- SQLite for the database
## Frontend
The frontend is written using:
- Astro for routing
- Svelte for the components and interactivity
- Tailwind CSS for styling
## Code standards
- Use good variable names, avoiding abbreviations and single letter variables
- Use the casing standard for the language in question (camelCasing for TypeScript, snake_casing for Python, etc.)
- Use type hints in all languages which support them
## Project structure
- `client` contains the frontend code
- `docs` contains the documentation for the project
- `scripts` contains the scripts used to install services, start the app, and run tests
- `server` contains the backend code
هذا مختصر نسبيا ، ولكن لاحظ الهيكل. نحن نخبر CoPilot بالمشروع الذي لدينا ، هيكله ، والتكنولوجيا المستخدمة ، وبعض التوجيهات حول كيفية إنشاء رمزنا. ليس لدينا أي شيء محدد للمهام ، مثل كتابة اختبارات الوحدة ، لأن لدينا طريقة أخرى لإخبار Copilot بهذه المعلومات!
تقديم تعليمات محددة لمهام محددة
مواصلة حديثنا حول ملفات التعليمات … (أنا Gen-X ، لذلك أنا مطالب باستخدام Ellipsis Gen-X مرة واحدة على الأقل.)
VS Code and CodeSpaces تدعم أيضًا .instructions.md
الملفات. هذه هي تماما مثل copilot-instructions.md
ملف تحدثنا عنه سابقًا ، فقط مصممون لاستخدامهم في أنواع محددة من المهام ووضعها في .github/instructions
.
فكر في مشروع حيث تقوم ببناء مخططات القلاع لطرق واجهة برمجة التطبيقات. قد تكون هناك متطلبات حول كيفية تنظيم الملف وكيفية إنشاء اختبارات الوحدة. يمكنك إنشاء ملف تعليمات مخصص يسمى flask-endpoint.instructions.md
، ضعه في .github/instructions
، ثم أضفه كسياق إلى الدردشة عند طلب Copilot لإنشاء نقطة نهاية جديدة. قد يبدو شيئًا مثل:
# Endpoint creation guidelines
## Endpoint notes
- Endpoints are created in Flask using blueprints
- Create a centralized function for accessing data
- All endpoints require tests
- Use the `unittest` module for testing
- All tests must pass
- A script is provided to run tests at `scripts/run-server-tests.sh`
## Project notes
- The Python virtual environment is located in the root of the project in a **venv** folder
- Register all blueprints in `server/app.py`
- Use the (test instructions)(./python-tests.instructions.md) when creating tests
## Prototype files
- (Endpoint prototype)(../../server/routes/games.py)
- (Tests prototype)(../../server/tests/test_games.py)
لاحظ كيف نقدم معلومات محددة حول كيفية إنشاء نقاط النهاية الخاصة بنا. ستلاحظ أيضًا أننا حتى نرتبط بملفات أخرى في المشروع باستخدام الارتباطات التشعبية – كلا الملفات الموجودة لـ Copilot لاستخدامها كأمثلة تمثيلية ، وملفات التعليمات الأخرى لمزيد من المعلومات.
بالإضافة إلى ذلك ، يمكنك أيضًا تطبيق التعليمات على أنواع الملفات بناءً على نمط. دعنا نأخذ الاختبارات على سبيل المثال. إذا كانت جميعها موجودة في server/tests
وبدأت مع test_
، يمكنك إضافة بيانات تعريف إلى الأعلى لضمان يتضمن Copilot دائمًا الإرشادات عند العمل على ملف اختبار:
---
applyTo: server/tests/test_*.py
---
يمنحك هذا الكثير من المرونة في ضمان أن Copilot قادر على الوصول إلى المعلومات الصحيحة في الوقت المناسب. يمكن القيام بذلك بشكل صريح عن طريق إضافة ملف التعليمات ، أو ضمنيًا من خلال توفير نمط لاستخدامه عند إنشاء ملفات معينة.
كما كان من قبل ، هذه هي القطع الأثرية في مستودعك. قد يستغرق الأمر بعض الوقت لإنشاء مجموعة من ملفات التعليمات ، ولكن هذا الاستثمار سيؤتي ثماره في شكل رمز عالي الجودة ، وبالتالي تحسين الإنتاجية.
مطالبات قابلة لإعادة الاستخدام بالكامل
نشر فريق VS Code مؤخرًا ميزة تجريبية جديدة تسمى الملفات المطالبة. نظرًا لأنهم ما زالوا قيد التطوير ، لا أريد أن أتعمق فيها ، لكن يمكنك قراءة المزيد عنها الملفات المطالبة في المستندات ومعرفة كيفية الاستفادة منها أثناء تنفيذها حاليًا. باختصار ، تسمح لك بإنشاء مطالبات نصية بفعالية لـ Copilot. يمكنك اختيار أوضاع Copilot التي تتوفر فيها (assis ، reled and Agent) ، الأدوات التي يجب استدعاؤها ، وما هي الأسئلة التي يجب طرحها على المطور. يمكن إنشاء هذه من قبل الفريق لإعادة الاستخدام والاتساق المحسّنة.
تمديد قدرات Github Copilot مع بروتوكول سياق النموذج (MCP)
في مشهد تطوير البرمجيات المتغير باستمرار ، نحتاج إلى التأكد من أن المعلومات التي نعمل معها دقيقة وذات صلة ومحدثة. هذا ما تم تصميمه لـ MCP ، أو بروتوكول سياق النموذج! تم تطوير MCP في البداية بواسطة الأنثروبور ، وهو بروتوكول مفتوح المصدر يتيح للمؤسسات كشف خدماتها أو بياناتها إلى أدوات الذكاء الاصطناعي.
عند إضافة خادم MCP إلى IDE الخاص بك ، فإنك تسمح لـ CoPilot بـ “الهاتف صديق” للعثور على معلومات ، أو حتى أداء المهام نيابة عنك. على سبيل المثال ، و خادم Playwright MCP يساعد على خلق الكاتب المسرحي الاختبارات من طرف إلى طرف ، بينما خادم Github MCP يوفر الوصول إلى خدمات github مثل المستودعات والمشكلات وطلبات السحب.
دعنا نقول ، على سبيل المثال ، أنك أضفت خادم الكاتب المسرحي MCP إلى IDE الخاص بك. عندما تطلب من Copilot إنشاء اختبار جديد للتحقق من صحة الوظائف على موقع الويب الخاص بك ، يمكن لـ Copilot استشارة مصدر موثوق ، مما يسمح له بإنشاء أفضل رمز يمكنه.
يمكنك حتى إنشاء خوادم MCP الخاصة بك! أحد الأسئلة التي أسمعها عادةً حول كيف يمكنك السماح لـ Copilot بالبحث من خلال قاعدة كود داخلية أو مجموعة من المكتبات. باستخدام خادم MCP مخصص ، يمكنك توفير واجهة لـ Copilot لأداء هذه الأنواع من الاستعلامات ، ثم الاستفادة من المعلومات التي تم اكتشافها لاقتراح رمز بناءً على بيئتك الداخلية.
MCP كبير بما يكفي للحصول على مدونة خاصة به ، والتي كتبها زميلي كاسيدي ، المشاركة النصائح والحيل والرؤى حول MCP.
التفكير وراء المطالبات
اسمحوا لي أن أكون واضحا: الصياغة السريعة مهمة. إنها واحدة من المهارات الأولى التي يجب على أي مطور أن يتعلمها عند بدء استخدام Github Copilot.
لكن كتابة موجه جيد ليست سوى قطعة واحدة تعتبرها Copilot عند إنشاء إجابة. باستخدام أفضل الممارسات المميزة أعلاه – التعليقات والرمز الجيد ، والتعليمات المخصصة ، وخوادم MCP – يمكنك مساعدة Copilot على فهم ما تريد أن تفعله وكيف تريد أن تفعل ذلك. لإعادته إلى القياس ، يمكنك التأكد من أن Copilot يعرف متى تريد الفطائر بدلاً من العجة.
وعلى هذه المذكرة ، أنا خارج عن الغداء.
ابدأ مع Github copilot>
كتبه
اترك تعليقاً