Repositori ini menampung multilspy, perpustakaan yang dikembangkan sebagai bagian dari penelitian yang dilakukan untuk makalah NeruIPS 2023 yang berjudul “Decoding Kode LM yang Dipandu Monitor dengan Analisis Statis Konteks Repositori” (“Memandu Model Bahasa Kode 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 merujuk ke 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 apa pun bahasa 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 Protokol Server Bahasa (LSP). Karena LSP tidak bergantung pada bahasa, multilspy
dapat memberikan hasil analisis kode statis dalam berbagai bahasa melalui antarmuka umum.
multilspy
bermaksud untuk mempermudah proses penggunaan server bahasa, dengan menangani berbagai langkah dalam menggunakan server bahasa:
- Secara otomatis menangani pengunduhan biner server khusus platform, dan pengaturan/penghancuran server bahasa
- Menangani komunikasi berbasis JSON-RPC antara klien dan server
- Mempertahankan dan meneruskan parameter konfigurasi khusus server dan bahasa yang disesuaikan secara manual
- Menyediakan API sederhana kepada pengguna, sambil menjalankan semua langkah protokol khusus server untuk menjalankan kueri/permintaan.
Beberapa analisis menghasilkan hal itu multilspy
dapat menyediakan adalah:
Sangat ideal untuk menciptakan lingkungan virtual baru 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 Minicondasebagai alternatif dari langkah-langkah di atas untuk pembuatan lingkungan virtual.
Untuk menginstal multilspy
menggunakan pip, jalankan perintah berikut:
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 multilspy
API. Beberapa tes untuk multilspy
hadir dalam pengujian/multilspy/ memberikan contoh penggunaan terperinci untuk multilspy
. Tes dapat dijalankan dengan menjalankan:
multilspy
menyediakan semua fitur yang disediakan protokol server bahasa untuk IDE seperti VSCode. Penting 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 dari kode yang dihasilkan. MGD juga menunjukkan 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 “membuka” pada objek file).
Jika Anda mendapatkan kesalahan berikut:
RuntimeError: Task cb=(_chain_future.._call_set_state() at
python3.8/asyncio/futures.py:367)> got Future attached to a different loop python3.8/asyncio/locks.py:309: RuntimeError
Harap pastikan Anda membuat lingkungan baru dengan Python >=3.10
. Untuk lebih jelasnya, 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 = {
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 Kode Etik 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 dipatuhi
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.