Repositori ini menampung multilspy
, perpustakaan yang dikembangkan sebagai bagian dari penelitian yang dilakukan untuk makalah NeruIPS 2023 berjudul "Penguraian Kode LM yang Dipandu Monitor dengan Analisis Statis Konteks Repositori" ("Model Bahasa Panduan dengan Konteks Global menggunakan Monitor" di Arxiv). Makalah ini memperkenalkan Monitor-Guided Decoding (MGD) untuk pembuatan kode menggunakan Model Bahasa, di mana monitor menggunakan analisis statis untuk memandu decoding, memastikan bahwa kode yang dihasilkan mengikuti berbagai properti kebenaran, seperti tidak adanya nama simbol yang berhalusinasi, urutan pemanggilan metode yang valid, , dll. Untuk detail lebih lanjut tentang Decoding yang Dipandu Monitor, silakan lihat makalah dan repositori GitHub microsoft/monitors4codegen.
multilspy
adalah perpustakaan lintas platform yang dirancang untuk menyederhanakan proses pembuatan klien server bahasa untuk menanyakan dan memperoleh hasil berbagai analisis statis dari berbagai server bahasa yang berkomunikasi melalui Protokol Server Bahasa. Mudah diperluas untuk mendukung bahasa apa pun yang memiliki Server Bahasa dan saat ini mendukung Java, Rust, C#, dan Python. Kami bertujuan untuk terus menambahkan dukungan untuk lebih banyak server bahasa dan bahasa.
Server bahasa adalah alat yang melakukan berbagai analisis statis pada repositori kode dan memberikan informasi berguna seperti saran penyelesaian kode yang diarahkan pada tipe, lokasi definisi simbol, referensi simbol, dll., melalui Language Server Protocol (LSP). Karena LSP tidak bergantung pada bahasa, multilspy
dapat memberikan hasil analisis statis kode dalam berbagai bahasa melalui antarmuka umum.
multilspy
bermaksud untuk memudahkan proses penggunaan server bahasa, dengan menangani berbagai langkah dalam menggunakan server bahasa:
Beberapa hasil analisis yang dapat diberikan oleh multilspy
adalah:
Sangat ideal untuk membuat lingkungan virtual baru dengan python>=3.10
. Untuk membuat lingkungan virtual menggunakan conda dan mengaktifkannya:
conda create -n multilspy_env python=3.10
conda activate multilspy_env
Detail dan instruksi lebih lanjut tentang pembuatan lingkungan virtual Python dapat ditemukan di dokumentasi resmi. Selanjutnya, kami juga merujuk pengguna ke Miniconda, sebagai alternatif dari langkah-langkah di atas untuk pembuatan lingkungan virtual.
Untuk menginstal multilspy
menggunakan pip, jalankan perintah berikut:
pip install multilspy
Contoh penggunaan:
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
juga menyediakan API berbasis asyncio yang dapat digunakan dalam konteks async. Contoh penggunaan (asyncio):
from multilspy import LanguageServer
...
lsp = LanguageServer . create (...)
async with lsp . start_server ():
result = await lsp . request_definition (
...
)
...
File src/multilspy/lingual_server.py menyediakan API multilspy
. Beberapa tes untuk multilspy
hadir di bawah tes/multilspy/ memberikan contoh penggunaan rinci untuk multilspy
. Tes dapat dijalankan dengan menjalankan:
pytest tests/multilspy
multilspy
dalam Skenario AI4Code seperti Decoding yang Dipandu Monitor multilspy
menyediakan semua fitur yang disediakan protokol server bahasa untuk IDE seperti VSCode. Hal ini berguna untuk mengembangkan perangkat yang dapat berinteraksi dengan sistem AI seperti Large Language Model (LLM).
Salah satu kasus penggunaan tersebut adalah Decoding yang Dipandu Monitor, di mana multilspy
digunakan untuk menemukan hasil analisis statis seperti penyelesaian yang diarahkan pada tipe, untuk memandu pembuatan kode token-demi-token menggunakan LLM, memastikan bahwa semua pengidentifikasi/nama metode yang dihasilkan valid dalam konteks repositori, secara signifikan meningkatkan kemampuan kompilasi kode yang dihasilkan. MGD juga mendemonstrasikan penggunaan multilspy
untuk membuat monitor yang memastikan semua pemanggilan fungsi dalam kode yang dihasilkan LLM menerima jumlah argumen yang benar, dan bahwa fungsi suatu objek dipanggil dalam urutan yang benar mengikuti protokol (seperti tidak memanggil "baca" sebelum "buka" pada objek file).
asyncio
saat menjalankan tes untuk MGDJika Anda mendapatkan kesalahan berikut:
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
Harap pastikan Anda membuat lingkungan baru dengan Python >=3.10
. Untuk rincian lebih lanjut, silakan lihat di Diskusi StackOverflow.
Jika Anda menggunakan Multilspy dalam penelitian atau aplikasi Anda, silakan kutip menggunakan BibTeX ini:
@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}
}
Proyek ini menyambut baik kontribusi dan saran. Sebagian besar kontribusi mengharuskan Anda menyetujui Perjanjian Lisensi Kontributor (CLA) yang menyatakan bahwa Anda berhak, dan memang benar, memberi kami hak untuk menggunakan kontribusi Anda. Untuk detailnya, kunjungi https://cla.opensource.microsoft.com.
Saat Anda mengirimkan permintaan tarik, bot CLA akan secara otomatis menentukan apakah Anda perlu memberikan CLA dan menghiasi PR dengan tepat (misalnya, pemeriksaan status, komentar). Cukup ikuti instruksi yang diberikan oleh bot. Anda hanya perlu melakukan ini sekali di seluruh repo menggunakan CLA kami.
Proyek ini telah mengadopsi Kode Etik Sumber Terbuka Microsoft. Untuk informasi lebih lanjut lihat FAQ Pedoman Perilaku atau hubungi [email protected] jika ada pertanyaan atau komentar tambahan.
Proyek ini mungkin berisi merek dagang atau logo untuk proyek, produk, atau layanan. Penggunaan resmi atas merek dagang atau logo Microsoft tunduk dan harus mengikuti Pedoman Merek Dagang & Merek Microsoft. Penggunaan merek dagang atau logo Microsoft dalam versi modifikasi proyek ini tidak boleh menimbulkan kebingungan atau menyiratkan sponsor Microsoft. Segala penggunaan merek dagang atau logo pihak ketiga tunduk pada kebijakan pihak ketiga tersebut.