multilspy

GitHub
560 102 简单 1 次阅读 3天前MIT插件语言模型开发框架Agent图像
AI 解读 由 AI 自动生成,仅供参考

multilspy 是一个专为 Python 开发者打造的跨平台客户端库,旨在简化基于语言服务器协议(LSP)的应用构建过程。它充当了应用程序与各类语言服务器之间的桥梁,让用户能够轻松获取代码的静态分析结果,例如查找函数定义、追踪调用关系、提供类型感知的代码补全建议以及查看符号悬停信息等。

在开发涉及代码理解或生成的工具时,直接对接不同语言的服务器往往面临环境配置复杂、通信协议繁琐以及参数调整困难等挑战。multilspy 有效解决了这些痛点,它能自动处理特定平台服务器二进制文件的下载与生命周期管理,封装底层的 JSON-RPC 通信细节,并智能维护针对不同语言和服务器的配置参数。用户只需调用简洁统一的 API,即可屏蔽底层差异,专注于上层业务逻辑。

该工具特别适合需要集成代码静态分析能力的研究人员和软件工程师,尤其是那些致力于开发代码大模型辅助工具、静态分析插件或智能编程助手的团队。其核心亮点在于“一次编写,多语言通用”的设计理念:依托 LSP 的语言无关特性,multilspy 提供了统一的接口来支持多种编程语言的分析需求,并且架构易于扩展,可随需接入更多新的语言服务器,极大地提升了开发效率与系统的可维护性。

使用场景

某 AI 研发团队正在构建一个跨语言的代码大模型辅助系统,需要实时获取多语言仓库中的符号定义、引用关系及类型信息以引导模型生成准确代码。

没有 multilspy 时

  • 团队需为 Python、Java、Go 等不同语言分别编写复杂的 LSP 客户端,重复处理 JSON-RPC 通信协议,开发成本极高。
  • 每次集成新语言服务器时,都要手动处理特定平台的二进制文件下载、环境配置及进程启停,极易因环境差异导致运行失败。
  • 缺乏统一的接口标准,上层应用必须针对不同语言服务器调整调用逻辑,导致代码耦合度高且难以维护。
  • 难以精确控制服务器特有的配置参数,静态分析结果(如函数跳转、悬停提示)经常因配置不当而缺失或报错。

使用 multilspy 后

  • 通过统一的 Python API 即可访问任意支持 LSP 的语言服务器,无需关心底层通信细节,显著降低多语言适配难度。
  • 自动处理各平台服务器二进制的下载与环境生命周期管理,实现“开箱即用”,彻底消除环境部署痛点。
  • 提供标准化的查询接口,上层应用可用同一套代码逻辑获取不同语言的符号定义、引用列表及补全建议,架构清晰简洁。
  • 内置针对各类服务器的优化配置模板,确保能稳定获取高质量的类型推导和代码结构信息,提升下游 AI 模型的准确性。

multilspy 将繁琐的语言服务器交互封装为简单的 Python 调用,让开发者能专注于构建基于全局代码上下文的智能应用,而非陷入底层协议泥潭。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notes该工具是一个跨平台的 LSP 客户端库,用于与多种语言的 Language Server 通信。它会自动处理特定平台的服务器二进制文件下载及环境配置。建议使用 conda 创建虚拟环境(Python 3.10+)以避免 asyncio 相关的运行时错误。支持的语言包括 Java, Python, Rust, C#, TypeScript, JavaScript, Go, Dart, Ruby, Kotlin,对应的语言服务器需由工具自动下载或配置。
python>=3.10
multilspy hero image

快速开始

PyPI - Version

Multilspy: 用于构建基于语言服务器的应用程序的 Python LSP 客户端库

简介

本仓库托管 multilspy,这是一个作为 NeurIPS 2023 论文《使用仓库上下文的静态分析引导代码语言模型解码》(“使用监控器通过全局上下文引导代码语言模型”)研究工作的一部分而开发的库。该论文提出了一种用于代码生成的语言模型引导解码方法——监控引导解码(MGD)。在此方法中,监控器利用静态分析来指导解码过程,确保生成的代码符合各种正确性属性,例如不存在幻觉符号名、方法调用顺序有效等。有关监控引导解码的更多详细信息,请参阅论文及 GitHub 仓库 microsoft/monitors4codegen

multilspy 是一个跨平台库,旨在简化创建语言服务器客户端的过程,以便查询并从多种通过 语言服务器协议 进行通信的语言服务器获取各类静态分析结果。它易于扩展,可支持任何拥有语言服务器的语言,并且我们计划持续增加对更多语言服务器和语言的支持。

语言服务器 是一种工具,可在代码仓库上执行多种静态分析,并通过 语言服务器协议 (LSP) 提供有用的信息,例如基于类型的代码补全建议、符号定义位置、符号引用等。由于 LSP 具有语言无关性,multilspy 可以通过统一的接口提供不同语言代码的静态分析结果。

multilspy 旨在简化语言服务器的使用流程,通过处理使用语言服务器时的多个步骤来实现这一目标:

  • 自动下载特定于操作系统的服务器二进制文件,并完成语言服务器的启动与关闭;
  • 处理客户端与服务器之间的 JSON-RPC 通信;
  • 维护并传递经过精心调整的服务器及语言特定配置参数;
  • 向用户提供简单的 API,同时自动执行服务器特定协议中的所有步骤以完成查询或请求。

multilspy 可以提供的部分分析结果包括:

安装

建议使用 python>=3.10 创建一个新的虚拟环境。使用 conda 创建并激活虚拟环境的命令如下:

conda create -n multilspy_env python=3.10
conda activate multilspy_env

关于 Python 虚拟环境的更多详细信息和创建说明,请参阅 官方文档。此外,我们也推荐用户使用 Miniconda,作为上述创建虚拟环境步骤的替代方案。

使用 pip 安装 multilspy 的命令如下:

pip install multilspy

支持的语言

目前,multilspy 支持以下语言:

编程语言 语言服务器
Java Eclipse JDTLS
Python jedi-language-server
Rust Rust Analyzer
C# OmniSharp / RazorSharp
TypeScript TypeScriptLanguageServer
JavaScript TypeScriptLanguageServer
Go gopls
Dart Dart
Ruby Solargraph
Kotlin KotlinLanguageServer

使用方法

使用示例:

from multilspy import SyncLanguageServer
from multilspy.multilspy_config import MultilspyConfig
from multilspy.multilspy_logger import MultilspyLogger
...
config = MultilspyConfig.from_dict({"code_language": "java"}) # 同样支持 "python", "rust", "csharp", "typescript", "javascript", "go", "dart", "ruby"
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", # 发起请求的代码文件路径
        163, # 请求符号所在的行号
        4 # 请求符号所在的列号
    )
    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。位于 tests/multilspy/ 中的多个测试用例提供了 multilspy 的详细使用示例。可通过运行以下命令执行这些测试:

pytest tests/multilspy

multilspy 在 AI4Code 场景中的应用,如监控引导解码

multilspy 提供了语言服务器协议为 VSCode 等 IDE 所提供的所有功能。它对于开发能够与大型语言模型(LLM)等 AI 系统交互的工具集非常有用。

监控引导解码

其中一个用例就是监控引导解码(MGD),其中 multilspy 被用来获取诸如类型导向补全之类的静态分析结果,以指导使用大语言模型逐标记生成代码。这样可以确保所有生成的标识符和方法名在仓库上下文中都是有效的,从而显著提高生成代码的可编译性。MGD 还展示了如何利用 multilspy 创建监控器,以保证大语言模型生成的代码中所有函数调用都接收正确数量的参数,并且对象的方法调用遵循正确的协议顺序(例如,在文件对象上不会先调用“read”再调用“open”)。

Multilspy 在其他用例中的应用

常见问题解答 (FAQ)

执行 MGD 测试时出现与 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

如果您在研究或应用中使用了 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 = {基于仓库上下文静态分析的代码大语言模型监控引导解码},
 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 的所有仓库,您只需执行一次此操作。

本项目已采用 微软开源行为准则。更多信息请参阅 行为准则常见问题解答 或发送电子邮件至 opencode@microsoft.com 提出任何其他问题或意见。

商标

本项目可能包含项目、产品或服务的商标或徽标。未经授权使用微软商标或徽标须遵守并遵循 微软商标与品牌指南。在本项目的修改版本中使用微软商标或徽标不得造成混淆或暗示微软的赞助。任何第三方商标或徽标的使用均受其各自政策的约束。

版本历史

v0.0.15-auto2025/04/03
v0.0.152025/04/03
v0.0.14-corrected-auto2025/03/03
v0.0.14-corrected2025/03/03
v0.0.142025/03/03
v0.0.13-auto2025/02/25
v0.0.132025/02/25
v0.0.12-auto2025/01/29
v0.0.122025/01/29
v0.0.11-corrected-auto2025/01/26
v0.0.11-corrected2025/01/26
v0.0.11-auto2025/01/26
v0.0.112025/01/26
v0.0.10-auto2025/01/26
v0.0.102025/01/26
v0.0.9-auto2024/12/28
v0.0.92024/12/28
v0.0.82024/12/28
v0.0.72024/12/28
v0.0.62024/12/20

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架