VimGPT
1.0.0
使用 neovim/pynvim 直接访问 Vim 的实验性 LLM 代理/工具包。旨在用作高效文件编辑的子代理,或用作其自己的代理运行时。
内置:
这是一个小演示视频。
使用 LLM 代理编辑文件有一些常见选项:
解决方案:不要要求代理调用具有新内容的工具,而是为代理提供一个“编辑器”工具,该工具会放入具有适当上下文的子代理中。模拟编辑器以纯文本形式显示编辑器的状态,进行单独的击键并反映更新。当法学硕士已经了解 Vim 时,为什么还要发明自己的编辑器呢?
️ 警告:VimGPT 仍处于实验阶段,尚未准备好投入生产。
gpt-4
能够正确使用它 - 更多研究待定。你需要安装 neovim,如果你使用的是 MacOS,你可以简单地brew install neovim
。然后从 PyPI 安装:
pip install vimgpt # or poetry add vimgpt
CLI 用法(用于演示/测试):
$ vimgpt --help
usage: vimgpt [-h] [--path PATH] [--output [OUTPUT]] [--socket SOCKET] [--loglevel {DEBUG,INFO,WARNING}] [--max-calls MAX_CALLS] [--delay-seconds DELAY_SECONDS] command
VimGPT CLI
positional arguments:
command Task for VimGPT to perform on the file, in natural language:
'Rename Bob to Bill in paragraph 2`,
'make arg `user` optional on line 34',
'rewrite this in iambic pentameter', etc.
options:
-h, --help show this help message and exit
--path PATH, -p PATH File for VimGPT to open.
NOTE: for safety, VimGPT will NOT make changes directly
to the file unless the --output flag is provided.
--output [OUTPUT], -o [OUTPUT]
Specify output file. If flag is not provided,
VimGPT will NOT make changes directly to the file.
If flag is provided without value, uses the same path as the input file.
If flag is provided with no value and there is no input file specified,
will output to 'vimgpt_output.txt'.
--socket SOCKET, -s SOCKET
Path to nvim socket of running nvim process.
If left empty, VimGPT will run in headless mode.
Suggested value: '/tmp/nvimsocket'.
--loglevel {DEBUG,INFO,WARNING}
Set the logging level (default: WARNING)
--max-calls MAX_CALLS
Maximum number of LLM calls. Default is 1000.
--delay-seconds DELAY_SECONDS
Delay in seconds. If not provided, defaults to None.
使用无头 vim 运行:
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO
要附加到正在运行的 Neovim 实例,以便您可以像代理一样实时查看正在发生的情况:
NVIM_LISTEN_ADDRESS=/tmp/nvimsocket nvim
# in separate terminal
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO --socket ' /tmp/nvimsocket '
VimGPT 旨在用作子代理/工具,因此它可以在更大的代理中组成,因此您可以直接调用vim_gpt_agent()
来实现特定目标。
from vimgpt import vimgpt_agent
original_file_content : str = '???'
new_file_content : str = vimgpt_agent (
command = 'Edit to recommend vim over emacs.' ,
content = original_file_content ,
file_path = 'does_not_matter_just_useful_for_prompt.md' ,
# socket=None, # or '/path/to/running/nvim'
# max_calls=1000, # can use prevent cycles
# delay_seconds=2, # if you want to follow in real-time more easily
)
查看vimgpt/core.py
以获得灵感。对于 LangChain 示例,请查看./vimgpt/langchain_agents/
以获取替代运行时以及如何使用 VimGPT 作为工具的示例。
这个项目使用诗歌。
# If you don't already have 3.11 installed
pyenv install 3.11:latest
# typical poetry install methods didn't work for me
brew install poetry
# this will create a .venv in the project directory.
# it should automatically check the right version is installed.
poetry install
# view info about your new venv
poetry env list
# activate in your shell
poetry shell
# exit poetry env
source deactivate
要更新 PyPI (https://pypi.org/project/vimgpt) 上的包:
poetry build
poetry config pypi-token.pypi YOUR_PYPI_TOKEN
poetry publish
使用 ruff + black + mypy + pytest。如果您使用的是 VSCode,您可能需要按照这些说明进行操作,以确保 mypy 扩展设置设置为使用您的活动解释器(诗歌 venv)。
black .
ruff check . --fix
mypy vimgpt
pytest -vv -s --verbose -o log_cli=true
set relativenumber
)_
或|
但这并没有真正起作用。