พื้นที่เก็บข้อมูลนี้โฮสต์ multilspy
ซึ่งเป็นไลบรารีที่พัฒนาขึ้นโดยเป็นส่วนหนึ่งของการวิจัยที่จัดทำขึ้นสำหรับรายงานของ NeruIPS 2023 ที่มีชื่อว่า "Monitor-Guided Decoding of Code LMs with Static Analysis of Repository Context" ("Guiding Language Models of Code with Global Context โดยใช้ Monitors" บน Arxiv) บทความนี้แนะนำ Monitor-Guided Decoding (MGD) สำหรับการสร้างโค้ดโดยใช้โมเดลภาษา โดยที่มอนิเตอร์ใช้การวิเคราะห์แบบคงที่เพื่อเป็นแนวทางในการถอดรหัส เพื่อให้มั่นใจว่าโค้ดที่สร้างขึ้นเป็นไปตามคุณสมบัติความถูกต้องต่างๆ เช่น การไม่มีชื่อสัญลักษณ์ที่หลอน ลำดับที่ถูกต้องของการเรียกเมธอด ฯลฯ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ Monitor-Guided Decoding โปรดดูเอกสารและที่เก็บ GitHub microsoft/monitors4codegen
multilspy
เป็นไลบรารีข้ามแพลตฟอร์มที่ออกแบบมาเพื่อลดความซับซ้อนของกระบวนการสร้างไคลเอนต์เซิร์ฟเวอร์ภาษาเพื่อสืบค้นและรับผลลัพธ์ของการวิเคราะห์แบบคงที่ต่างๆ จากเซิร์ฟเวอร์ภาษาที่หลากหลายที่สื่อสารผ่าน Language Server Protocol สามารถขยายได้อย่างง่ายดายเพื่อรองรับภาษาใดๆ ที่มีเซิร์ฟเวอร์ภาษาและปัจจุบันรองรับ Java, Rust, C# และ Python เรามุ่งมั่นที่จะเพิ่มการสนับสนุนเซิร์ฟเวอร์ภาษาและภาษาต่างๆ อย่างต่อเนื่อง
เซิร์ฟเวอร์ภาษาเป็นเครื่องมือที่ทำการวิเคราะห์แบบคงที่ที่หลากหลายบนที่เก็บโค้ด และให้ข้อมูลที่เป็นประโยชน์ เช่น คำแนะนำการเติมโค้ดตามประเภทที่กำหนด ตำแหน่งคำจำกัดความของสัญลักษณ์ การอ้างอิงสัญลักษณ์ ฯลฯ ผ่าน Language Server Protocol (LSP) เนื่องจาก LSP ไม่เชื่อเรื่องภาษา ดังนั้น multilspy
จึงสามารถให้ผลลัพธ์สำหรับการวิเคราะห์โค้ดแบบคงที่ในภาษาต่างๆ ผ่านอินเทอร์เฟซทั่วไปได้
multilspy
ตั้งใจที่จะลดความยุ่งยากในการใช้เซิร์ฟเวอร์ภาษา โดยจัดการขั้นตอนต่างๆ ในการใช้เซิร์ฟเวอร์ภาษา:
ผลการวิเคราะห์บางส่วนที่ multilspy
สามารถให้ได้ ได้แก่:
เหมาะอย่างยิ่งที่จะสร้างสภาพแวดล้อมเสมือนใหม่ด้วย python>=3.10
หากต้องการสร้างสภาพแวดล้อมเสมือนจริงโดยใช้ conda และเปิดใช้งาน:
conda create -n multilspy_env python=3.10
conda activate multilspy_env
รายละเอียดและคำแนะนำเพิ่มเติมเกี่ยวกับการสร้างสภาพแวดล้อมเสมือน Python มีอยู่ในเอกสารอย่างเป็นทางการ นอกจากนี้ เรายังแนะนำผู้ใช้ให้รู้จัก Miniconda แทนขั้นตอนข้างต้นสำหรับการสร้างสภาพแวดล้อมเสมือน
หากต้องการติดตั้ง multilspy
โดยใช้ pip ให้รันคำสั่งต่อไปนี้:
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
ยังมี API ที่ใช้ asyncio ซึ่งสามารถใช้ในบริบท async ได้ ตัวอย่างการใช้งาน (asyncio):
from multilspy import LanguageServer
...
lsp = LanguageServer . create (...)
async with lsp . start_server ():
result = await lsp . request_definition (
...
)
...
ไฟล์ src/multilspy/ language_server.py จัดเตรียม multilspy
API มีการทดสอบ multilspy
หลายอย่างภายใต้ tests/multilspy/ ให้ตัวอย่างการใช้งานโดยละเอียดสำหรับ multilspy
การทดสอบสามารถทำได้โดยการรัน:
pytest tests/multilspy
multilspy
ในสถานการณ์ AI4Code เช่น Monitor-Guided Decoding multilspy
มอบคุณสมบัติทั้งหมดที่ภาษาเซิร์ฟเวอร์โปรโตคอลมอบให้กับ IDE เช่น VSCode การพัฒนาชุดเครื่องมือที่สามารถเชื่อมต่อกับระบบ AI เช่น Large Language Models (LLM) ได้มีประโยชน์
กรณีการใช้งานอย่างหนึ่งคือการถอดรหัสแบบ Monitor-Guided ซึ่งใช้ multilspy
เพื่อค้นหาผลลัพธ์ของการวิเคราะห์แบบคงที่ เช่น การเสร็จสิ้นตามประเภท เพื่อเป็นแนวทางในการสร้างโค้ดโทเค็นต่อโทเค็นโดยใช้ LLM เพื่อให้แน่ใจว่าตัวระบุ/ชื่อเมธอดที่สร้างขึ้นทั้งหมดนั้นถูกต้อง ในบริบทของพื้นที่เก็บข้อมูล ซึ่งช่วยเพิ่มความสามารถในการคอมไพล์ของโค้ดที่สร้างขึ้นได้อย่างมาก MGD ยังสาธิตการใช้ multilspy
เพื่อสร้างจอภาพเพื่อให้แน่ใจว่าการเรียกใช้ฟังก์ชันทั้งหมดในโค้ดที่สร้าง LLM ได้รับอาร์กิวเมนต์ที่ถูกต้อง และฟังก์ชันของอ็อบเจ็กต์ถูกเรียกใช้ในลำดับที่ถูกต้องตามโปรโตคอล (เช่น การไม่เรียก "read" ก่อน "open" บนวัตถุไฟล์)
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 และตกแต่ง PR อย่างเหมาะสมหรือไม่ (เช่น การตรวจสอบสถานะ ความคิดเห็น) เพียงทำตามคำแนะนำที่ได้รับจากบอท คุณจะต้องทำสิ่งนี้เพียงครั้งเดียวกับ repos ทั้งหมดโดยใช้ CLA ของเรา
โครงการนี้ได้นำหลักจรรยาบรรณของ Microsoft Open Source มาใช้ สำหรับข้อมูลเพิ่มเติม โปรดดูคำถามที่พบบ่อยเกี่ยวกับจรรยาบรรณหรือติดต่อ [email protected] หากมีคำถามหรือความคิดเห็นเพิ่มเติม
โครงการนี้อาจมีเครื่องหมายการค้าหรือโลโก้สำหรับโครงการ ผลิตภัณฑ์ หรือบริการ การใช้เครื่องหมายการค้าหรือโลโก้ของ Microsoft โดยได้รับอนุญาตนั้นอยู่ภายใต้และต้องปฏิบัติตามแนวทางเครื่องหมายการค้าและแบรนด์ของ Microsoft การใช้เครื่องหมายการค้าหรือโลโก้ของ Microsoft ในเวอร์ชันแก้ไขของโครงการนี้จะต้องไม่ทำให้เกิดความสับสนหรือบ่งบอกถึงการสนับสนุนของ Microsoft การใช้เครื่องหมายการค้าหรือโลโก้ของบุคคลที่สามจะต้องเป็นไปตามนโยบายของบุคคลที่สามเหล่านั้น