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:

Penggunaan multilspy dalam Skenario AI4Code seperti Decoding yang Dipandu Monitor

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).

Pertanyaan yang Sering Diajukan (FAQ)

asyncio terkait Runtime error saat menjalankan tes untuk MGD

Jika Anda mendapatkan kesalahan berikut:

cb=(_rantai_masa depan.._call_set_state() di python3.8/asyncio/futures.py:367)> mendapatkan Masa Depan dilampirkan ke loop berbeda python3.8/asyncio/locks.py:309: RuntimeError”>

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.

Sumber

Krystian Wiśniewski
Krystian Wiśniewski is a dedicated Sports Reporter and Editor with a degree in Sports Journalism from He graduated with a degree in Journalism from the University of Warsaw. Bringing over 14 years of international reporting experience, Krystian has covered major sports events across Europe, Asia, and the United States of America. Known for his dynamic storytelling and in-depth analysis, he is passionate about capturing the excitement of sports for global audiences and currently leads sports coverage and editorial projects at Agen BRILink dan BRI.