该存储库托管multilspy
,该库是 NeruIPS 2023 论文“Monitor-Guided Decoding of Code LMs with Static Analysis of Repository Context”(Arxiv 上的“Guiding Language Models of Code with Global Context using Monitors”)的研究的一部分而开发的。本文介绍了使用语言模型进行代码生成的监视器引导解码(MGD),其中监视器使用静态分析来指导解码,确保生成的代码遵循各种正确性属性,例如不存在幻觉的符号名称、方法调用的有效顺序有关 Monitor-Guided Decoding 的更多详细信息,请参阅论文和 GitHub 存储库 microsoft/monitors4codegen。
multilspy
是一个跨平台库,旨在简化创建语言服务器客户端的过程,以便从通过语言服务器协议进行通信的各种语言服务器查询和获取各种静态分析的结果。它可以轻松扩展以支持任何具有语言服务器的语言,目前支持 Java、Rust、C# 和 Python。我们的目标是不断增加对更多语言服务器和语言的支持。
语言服务器是对代码存储库执行各种静态分析并通过语言服务器协议 (LSP) 提供有用信息的工具,例如类型导向的代码完成建议、符号定义位置、符号引用等。由于 LSP 与语言无关,因此multilspy
可以通过公共接口提供不同语言代码的静态分析结果。
multilspy
旨在通过处理使用语言服务器的各个步骤来简化使用语言服务器的过程:
multilspy
可以提供的一些分析结果是:
使用python>=3.10
创建新的虚拟环境是理想的选择。使用 conda 创建虚拟环境并激活它:
conda create -n multilspy_env python=3.10
conda activate multilspy_env
有关创建 Python 虚拟环境的更多详细信息和说明可以在官方文档中找到。此外,我们还建议用户使用 Miniconda,作为上述创建虚拟环境步骤的替代方法。
要使用 pip 安装multilspy
,请执行以下命令:
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
还提供了一个基于 asyncio 的 API,可以在异步上下文中使用。用法示例(异步):
from multilspy import LanguageServer
...
lsp = LanguageServer . create (...)
async with lsp . start_server ():
result = await lsp . request_definition (
...
)
...
文件 src/multilspy/language_server.py 提供了multilspy
API。 test/multilspy/ 下的多项multilspy
测试提供了multilspy
的详细使用示例。可以通过运行以下命令来执行测试:
pytest tests/multilspy
multilspy
multilspy
提供了 language-server-protocol 为 VSCode 等 IDE 提供的所有功能。开发可以与大型语言模型 (LLM) 等人工智能系统交互的工具集非常有用。
其中一个用例是监控引导解码,其中multilspy
用于查找静态分析的结果(例如类型定向完成),以指导使用 LLM 逐个令牌生成代码,确保所有生成的标识符/方法名称都是有效的在存储库的上下文中,显着提高了生成代码的可编译性。 MGD 还演示了使用multilspy
创建监视器,以确保 LLM 生成的代码中的所有函数调用接收正确数量的参数,并且按照协议以正确的顺序调用对象的函数(例如不在“open”之前调用“read”)在文件对象上)。
asyncio
相关的运行时错误如果您收到以下错误:
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(例如,状态检查、评论)。只需按照机器人提供的说明进行操作即可。您只需使用我们的 CLA 在所有存储库中执行一次此操作。
该项目采用了微软开源行为准则。有关详细信息,请参阅行为准则常见问题解答或联系 [email protected] 提出任何其他问题或意见。
该项目可能包含项目、产品或服务的商标或徽标。 Microsoft 商标或徽标的授权使用须遵守且必须遵循 Microsoft 的商标和品牌指南。在此项目的修改版本中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 赞助。对第三方商标或徽标的任何使用均须遵守这些第三方的政策。