#language-server #lsp #llm #assistant #ai #code #request-response

app llmvm-codeassist

一个基于LLM的代码助手,可自动从语言服务器协议服务器检索上下文(即类型定义)。

4 个版本

0.2.0 2024年6月24日
0.1.2 2024年1月23日
0.1.1 2024年1月6日
0.1.0 2023年8月9日

105科学

每月下载量 44

许可证 MPL-2.0

135KB
3K SLOC

llmvm-codeassist

Crates.io GitHub

一个基于LLM的代码助手,可自动从语言服务器协议服务器检索上下文(即类型定义)。是 llmvm 的前端。

作为编辑器和真实 LSP 服务器之间的中间件。使用标准 LSP 规范与各种编辑器兼容。

仅测试与 Helium 编辑器和 Rust 语言服务器。

特性

  • 编辑器代码操作菜单中可用的代码补全命令
  • 使用 LSP 自动收集上下文(即类型定义)
  • 可手动添加上下文以进行代码补全
  • 可选择代码补全的模型
  • 使用多个模型同时进行代码补全

演示

使用编辑器代码操作菜单的简单示例

asciicast

通过多个 llmvm 预设(使用 ccpr= 指令)生成多个代码补全

asciicast

手动添加上下文到代码补全请求

asciicast

快速开始

使用 cargo 安装此应用程序。

cargo install llmvm-codeassist

llmvm 核心必须安装。如果您还没有这样做,可以通过以下方式安装核心:

cargo install llmvm-core

A. 安装并配置后端。

推荐使用 llmvm-outsource 作为后端,它遵循 OpenAI/HuggingFace/Ollama 请求。

cargo install llmvm-outsource

要安装后端,请运行

查看 llmvm-outsource配置

当前默认模型预设为 gpt-3.5,它使用 outsource 后端。

您的代码编辑器必须配置为使用 llmvm-codeassist 作为主 LSP 服务器。实际 LSP 语言服务器的命令必须附加到 llmvm-codeassist 的参数中。

以下是一个 Rust 语言用于 Helix 的 languages.toml 配置示例

[language-server.llmvm-codeassist-rust]
command = "llmvm-codeassist"
args = ["rust-analyzer"]

[[language]]
name = "rust"
language-servers = [ "llmvm-codeassist-rust" ]

可以通过选择未完成的代码并调用代码操作菜单来调用代码补全命令。

选择模型预设/多个代码生成请求

可以通过在代码注释中提供 ccpr= 指令来选择一个或多个 llmvm 模型预设。

例如

// ccpr=my-model-codegen

可以使用逗号作为分隔符选择多个模型。请参阅上面的第二个示例。

手动上下文选择

如果需要,可以手动将工作区代码的片段添加到代码生成请求中。为此,选择相关片段,调用代码操作菜单并选择“手动添加...”。

该片段将被附加到下一个代码生成请求。

配置

运行 codeassist 可执行文件以在以下位置生成配置文件:

  • Linux: ~/.config/llmvm/codeassist.toml
  • macOS: ~/Library/Application Support/com.djandries.llmvm/codeassist.toml
  • Windows: AppData\Roaming\djandries\llmvm\config\codeassist.toml
必需? 描述
default_preset 用于代码补全的默认 llmvm 模型预设。目前默认为 gpt-3.5-codegen
prefer_insert_in_place 如果设置为 true,将在执行单个模型代码补全时用完成后的文本替换选定的文本。
stream_snippets 实时将每个生成的令牌流到编辑器。
use_chat_threads 如果设置为 true,将使用聊天线程提供先前请求的上下文。请注意,利用多个预设(通过 ccpr)的请求的结果不会存储在线程中。
tracing_directive tracing 的记录指令/级别
stdio_core 与 llmvm 核心通信的 Stdio 客户端配置。有关详细信息,请参阅 llmvm-protocol
http_core 与 llmvm 核心通信的 HTTP 客户端配置。有关详细信息,请参阅 llmvm-protocol

记录

日志将被保存到当前 llmvm 项目目录的 logs 目录或全局用户数据目录。

全局日志目录位于

  • Linux: ~/.local/share/llmvm/logs
  • macOS: ~/Library/Application Support/com.djandries.llmvm/logs
  • Windows: AppData\Roaming\djandries\llmvm\data\logs

工作原理

代码助手将大多数 LSP 请求转发到真实 LSP 服务器,并在相关的情况下劫持/编辑某些请求或响应有效负载。代码操作菜单的响应被修改以显示代码补全命令。实际由用户发送的代码补全命令由代码助手处理,不会发送到真实 LSP 服务器。

向 LSP 服务器发出请求以检索类型定义信息。上下文将通过以下过程自动检索

  1. 助手向 LSP 服务器请求所有符号位置。
  2. 对于每个符号,助手请求类型定义位置。
  3. 为每个类型定义位置请求折叠范围。
  4. 为每个折叠范围从文件系统中检索文本片段。

许可证

Mozilla公共许可证,版本2.0

依赖项

~21–33MB
~606K SLoC