يستضيف هذا المستودع مكتبة multilspy
، التي تم تطويرها كجزء من البحث الذي تم إجراؤه لورقة NeruIPS 2023 بعنوان "فك التشفير الموجه بواسطة الشاشة لـ Code LMs مع التحليل الثابت لسياق المستودع" ("نماذج اللغة التوجيهية للتعليمات البرمجية ذات السياق العالمي باستخدام الشاشات" على Arxiv). تقدم الورقة فك التشفير الموجه بالمراقبة (MGD) لإنشاء التعليمات البرمجية باستخدام نماذج اللغة، حيث تستخدم الشاشة تحليلًا ثابتًا لتوجيه عملية فك التشفير، مما يضمن أن التعليمات البرمجية التي تم إنشاؤها تتبع خصائص الصحة المختلفة، مثل غياب أسماء الرموز المهلوسة، والترتيب الصحيح لاستدعاءات الطريقة ، وما إلى ذلك. لمزيد من التفاصيل حول فك التشفير الموجه بالشاشة، يرجى الرجوع إلى الورق ومستودع GitHub microsoft/monitors4codegen.
multilspy
عبارة عن مكتبة مشتركة بين الأنظمة الأساسية مصممة لتبسيط عملية إنشاء عملاء خادم اللغة للاستعلام والحصول على نتائج التحليلات الثابتة المتنوعة من مجموعة واسعة من خوادم اللغة التي تتواصل عبر بروتوكول خادم اللغة. يمكن توسيعه بسهولة لدعم أي لغة بها خادم لغة ويدعم حاليًا Java وRust وC# وPython. نحن نهدف إلى إضافة الدعم بشكل مستمر لمزيد من خوادم اللغات واللغات.
خوادم اللغة هي أدوات تقوم بإجراء مجموعة متنوعة من التحليلات الثابتة على مستودعات التعليمات البرمجية وتوفر معلومات مفيدة مثل اقتراحات إكمال التعليمات البرمجية الموجهة حسب النوع، ومواقع تعريف الرموز، ومراجع الرموز، وما إلى ذلك، عبر بروتوكول خادم اللغة (LSP). نظرًا لأن LSP لا يعرف اللغة، فيمكن multilspy
توفير نتائج التحليلات الثابتة للتعليمات البرمجية بلغات مختلفة عبر واجهة مشتركة.
تهدف multilspy
إلى تسهيل عملية استخدام خوادم اللغة، من خلال التعامل مع الخطوات المختلفة في استخدام خادم اللغة:
بعض نتائج التحليل التي يمكن أن تقدمها multilspy
هي:
إنه مثالي لإنشاء بيئة افتراضية جديدة باستخدام python>=3.10
. لإنشاء بيئة افتراضية باستخدام conda وتفعيلها:
conda create -n multilspy_env python=3.10
conda activate multilspy_env
يمكن العثور على مزيد من التفاصيل والتعليمات حول إنشاء بيئات بايثون الافتراضية في الوثائق الرسمية. علاوة على ذلك، نحيل المستخدمين أيضًا إلى Miniconda، كبديل للخطوات المذكورة أعلاه لإنشاء البيئة الافتراضية.
لتثبيت multilspy
باستخدام النقطة، قم بتنفيذ الأمر التالي:
pip install multilspy
مثال على الاستخدام:
from multilspy import SyncLanguageServer
from multilspy . multilspy_config import MultilspyConfig
from multilspy . multilspy_logger import MultilspyLogger
...
config = MultilspyConfig . from_dict ({ "code_language" : "java" }) # Also supports "python", "rust", "csharp"
logger = MultilspyLogger ()
lsp = SyncLanguageServer . create ( config , logger , "/abs/path/to/project/root/" )
with lsp . start_server ():
result = lsp . request_definition (
"relative/path/to/code_file.java" , # Filename of location where request is being made
163 , # line number of symbol for which request is being made
4 # column number of symbol for which request is being made
)
result2 = lsp . request_completions (
...
)
result3 = lsp . request_references (
...
)
result4 = lsp . request_document_symbols (
...
)
result5 = lsp . request_hover (
...
)
...
يوفر multilspy
أيضًا واجهة برمجة التطبيقات غير المتزامنة والتي يمكن استخدامها في سياقات غير متزامنة. مثال للاستخدام (غير متزامن):
from multilspy import LanguageServer
...
lsp = LanguageServer . create (...)
async with lsp . start_server ():
result = await lsp . request_definition (
...
)
...
يوفر الملف src/multilspy/language_server.py واجهة برمجة تطبيقات multilspy
. توجد عدة اختبارات لـ multilspy
ضمن الاختبارات/multilspy/ تقدم أمثلة استخدام تفصيلية لـ multilspy
. يمكن تنفيذ الاختبارات عن طريق تشغيل:
pytest tests/multilspy
multilspy
في سيناريوهات AI4Code مثل فك التشفير الموجه بالمراقبة يوفر multilspy
جميع الميزات التي يوفرها بروتوكول خادم اللغة لمطورات التطوير مثل VSCode. من المفيد تطوير مجموعات أدوات يمكنها التفاعل مع أنظمة الذكاء الاصطناعي مثل نماذج اللغات الكبيرة (LLM).
إحدى حالات الاستخدام هذه هي فك التشفير الموجه للمراقبة، حيث يتم استخدام multilspy
للعثور على نتائج التحليلات الثابتة مثل الإكمالات الموجهة من النوع، لتوجيه إنشاء رمز مميز لكل رمز باستخدام LLM، مما يضمن أن جميع أسماء المعرفات/الطرق التي تم إنشاؤها صالحة في سياق المستودع، مما يعزز بشكل كبير إمكانية تجميع التعليمات البرمجية التي تم إنشاؤها. يوضح MGD أيضًا استخدام multilspy
لإنشاء شاشات تضمن أن جميع استدعاءات الوظائف في التعليمات البرمجية التي تم إنشاؤها بواسطة LLM تتلقى العدد الصحيح من الوسائط، وأن وظائف الكائن يتم استدعاؤها بالترتيب الصحيح بعد البروتوكول (مثل عدم استدعاء "قراءة" قبل "فتح" على كائن ملف).
asyncio
عند تنفيذ اختبارات MGDإذا حصلت على الخطأ التالي:
RuntimeError: Task <Task pending name='Task-2' coro=<_AsyncGeneratorContextManager.__aenter__() running at
python3.8/contextlib.py:171> cb=[_chain_future.<locals>._call_set_state() at
python3.8/asyncio/futures.py:367]> got Future <Future pending> attached to a different loop python3.8/asyncio/locks.py:309: RuntimeError
يرجى التأكد من إنشاء بيئة جديدة باستخدام Python >=3.10
. لمزيد من التفاصيل، يرجى إلقاء نظرة على مناقشة StackOverflow.
إذا كنت تستخدم Multilspy في بحثك أو تطبيقاتك، فيرجى الاستشهاد باستخدام BibTeX:
@inproceedings{NEURIPS2023_662b1774,
author = {Agrawal, Lakshya A and Kanade, Aditya and Goyal, Navin and Lahiri, Shuvendu and Rajamani, Sriram},
booktitle = {Advances in Neural Information Processing Systems},
editor = {A. Oh and T. Naumann and A. Globerson and K. Saenko and M. Hardt and S. Levine},
pages = {32270--32298},
publisher = {Curran Associates, Inc.},
title = {Monitor-Guided Decoding of Code LMs with Static Analysis of Repository Context},
url = {https://proceedings.neurips.cc/paper_files/paper/2023/file/662b1774ba8845fc1fa3d1fc0177ceeb-Paper-Conference.pdf},
volume = {36},
year = {2023}
}
يرحب هذا المشروع بالمساهمات والاقتراحات. تتطلب معظم المساهمات منك الموافقة على اتفاقية ترخيص المساهم (CLA) التي تعلن أن لديك الحق في منحنا حقوق استخدام مساهمتك، بل وتفعل ذلك بالفعل. للحصول على التفاصيل، تفضل بزيارة https://cla.opensource.microsoft.com.
عند إرسال طلب سحب، سيحدد روبوت CLA تلقائيًا ما إذا كنت بحاجة إلى تقديم CLA وتزيين العلاقات العامة بشكل مناسب (على سبيل المثال، التحقق من الحالة، التعليق). ما عليك سوى اتباع التعليمات التي يقدمها لك الروبوت. سوف تحتاج إلى القيام بذلك مرة واحدة فقط في جميع عمليات إعادة الشراء باستخدام CLA الخاص بنا.
اعتمد هذا المشروع قواعد السلوك الخاصة بشركة Microsoft مفتوحة المصدر. لمزيد من المعلومات، راجع الأسئلة الشائعة حول قواعد السلوك أو اتصل بـ [email protected] لطرح أي أسئلة أو تعليقات إضافية.
قد يحتوي هذا المشروع على علامات تجارية أو شعارات للمشاريع أو المنتجات أو الخدمات. يخضع الاستخدام المصرح به للعلامات التجارية أو الشعارات الخاصة بشركة Microsoft ويجب أن يتبع إرشادات العلامة التجارية والعلامات التجارية الخاصة بشركة Microsoft. يجب ألا يتسبب استخدام العلامات التجارية أو الشعارات الخاصة بشركة Microsoft في الإصدارات المعدلة من هذا المشروع في حدوث ارتباك أو الإشارة ضمنًا إلى رعاية Microsoft. ويخضع أي استخدام لعلامات تجارية أو شعارات تابعة لجهات خارجية لسياسات تلك الجهات الخارجية.