Dieses Repository beherbergt multilspy
, eine Bibliothek, die im Rahmen der Forschung für den NeruIPS 2023-Artikel mit dem Titel „Monitor-Guided Decoding of Code LMs with Static Analysis of Repository Context“ („Guiding Language Models of Code with Global Context using Monitors“ auf Arxiv) entwickelt wurde. In dem Artikel wird Monitor-Guided Decoding (MGD) für die Codegenerierung mithilfe von Sprachmodellen vorgestellt, bei dem ein Monitor eine statische Analyse verwendet, um die Dekodierung zu steuern und sicherzustellen, dass der generierte Code verschiedenen Korrektheitseigenschaften folgt, wie z. B. dem Fehlen halluzinierter Symbolnamen und der gültigen Reihenfolge von Methodenaufrufen usw. Weitere Informationen zur Monitor-Guided Decoding finden Sie im Dokument und im GitHub-Repository microsoft/monitors4codegen.
multilspy
ist eine plattformübergreifende Bibliothek, die den Prozess der Erstellung von Sprachserver-Clients vereinfacht, um Ergebnisse verschiedener statischer Analysen von einer Vielzahl von Sprachservern abzufragen und zu erhalten, die über das Language Server Protocol kommunizieren. Es ist leicht erweiterbar, um jede Sprache zu unterstützen, die über einen Sprachserver verfügt und derzeit Java, Rust, C# und Python unterstützt. Unser Ziel ist es, kontinuierlich Unterstützung für weitere Sprachserver und Sprachen hinzuzufügen.
Sprachserver sind Tools, die eine Vielzahl statischer Analysen an Code-Repositorys durchführen und nützliche Informationen wie typgesteuerte Code-Vervollständigungsvorschläge, Symboldefinitionsorte, Symbolreferenzen usw. über das Language Server Protocol (LSP) bereitstellen. Da LSP sprachunabhängig ist, kann multilspy
die Ergebnisse für statische Analysen von Code in verschiedenen Sprachen über eine gemeinsame Schnittstelle bereitstellen.
multilspy
beabsichtigt, den Prozess der Verwendung von Sprachservern zu vereinfachen, indem verschiedene Schritte bei der Verwendung eines Sprachservers durchgeführt werden:
Einige der Analyseergebnisse, die multilspy
liefern kann, sind:
Ideal ist es, eine neue virtuelle Umgebung mit python>=3.10
zu erstellen. So erstellen Sie eine virtuelle Umgebung mit Conda und aktivieren sie:
conda create -n multilspy_env python=3.10
conda activate multilspy_env
Weitere Details und Anleitungen zur Erstellung virtueller Python-Umgebungen finden Sie in der offiziellen Dokumentation. Darüber hinaus verweisen wir Benutzer auch auf Miniconda als Alternative zu den oben genannten Schritten zur Erstellung der virtuellen Umgebung.
Um multilspy
mit Pip zu installieren, führen Sie den folgenden Befehl aus:
pip install multilspy
Beispielverwendung:
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
bietet außerdem eine Asyncio-basierte API, die in asynchronen Kontexten verwendet werden kann. Beispielverwendung (asyncio):
from multilspy import LanguageServer
...
lsp = LanguageServer . create (...)
async with lsp . start_server ():
result = await lsp . request_definition (
...
)
...
Die Datei src/multilspy/sprache_server.py stellt die multilspy
-API bereit. Mehrere Tests für multilspy
unter tests/multilspy/ bieten detaillierte Anwendungsbeispiele für multilspy
. Die Tests können ausgeführt werden, indem Folgendes ausgeführt wird:
pytest tests/multilspy
multilspy
in AI4Code-Szenarien wie Monitor-Guided Decoding multilspy
bietet alle Funktionen, die das Sprachserverprotokoll für IDEs wie VSCode bereitstellt. Es ist nützlich, Toolsets zu entwickeln, die mit KI-Systemen wie Large Language Models (LLM) kommunizieren können.
Ein solcher Anwendungsfall ist Monitor-Guided Decoding, bei dem multilspy
verwendet wird, um Ergebnisse statischer Analysen wie typgesteuerte Vervollständigungen zu finden, um die Token-für-Token-Generierung von Code mithilfe eines LLM zu steuern und sicherzustellen, dass alle generierten Bezeichner-/Methodennamen gültig sind im Kontext des Repositorys, was die Kompilierbarkeit des generierten Codes erheblich steigert. MGD demonstriert auch die Verwendung von multilspy
zum Erstellen von Monitoren, die sicherstellen, dass alle Funktionsaufrufe in LLM-generiertem Code die richtige Anzahl von Argumenten erhalten und dass Funktionen eines Objekts in der richtigen Reihenfolge gemäß einem Protokoll aufgerufen werden (z. B. nicht „Lesen“ vor „Öffnen“ aufrufen). auf einem Dateiobjekt).
asyncio
bezogener Laufzeitfehler beim Ausführen der Tests für MGDWenn Sie die folgende Fehlermeldung erhalten:
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
Bitte stellen Sie sicher, dass Sie eine neue Umgebung mit Python >=3.10
erstellen. Weitere Details finden Sie in der StackOverflow-Diskussion.
Wenn Sie Multilspy in Ihrer Forschung oder Ihren Anwendungen verwenden, zitieren Sie bitte mit diesem 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}
}
Dieses Projekt freut sich über Beiträge und Vorschläge. Für die meisten Beiträge müssen Sie einem Contributor License Agreement (CLA) zustimmen, in dem Sie erklären, dass Sie das Recht haben, uns die Rechte zur Nutzung Ihres Beitrags zu gewähren, und dies auch tatsächlich tun. Weitere Informationen finden Sie unter https://cla.opensource.microsoft.com.
Wenn Sie eine Pull-Anfrage einreichen, ermittelt ein CLA-Bot automatisch, ob Sie eine CLA bereitstellen müssen, und schmückt die PR entsprechend (z. B. Statusprüfung, Kommentar). Folgen Sie einfach den Anweisungen des Bots. Sie müssen dies nur einmal für alle Repos tun, die unsere CLA verwenden.
Dieses Projekt hat den Microsoft Open Source Verhaltenskodex übernommen. Weitere Informationen finden Sie in den FAQ zum Verhaltenskodex oder wenden Sie sich bei weiteren Fragen oder Kommentaren an [email protected].
Dieses Projekt kann Marken oder Logos für Projekte, Produkte oder Dienstleistungen enthalten. Die autorisierte Nutzung von Microsoft-Marken oder -Logos unterliegt den Marken- und Markenrichtlinien von Microsoft und muss diesen entsprechen. Die Verwendung von Microsoft-Marken oder -Logos in geänderten Versionen dieses Projekts darf keine Verwirrung stiften oder eine Sponsorschaft durch Microsoft implizieren. Jegliche Nutzung von Marken oder Logos Dritter unterliegt den Richtlinien dieser Drittanbieter.