Emacs 中使用 gptel 编写 elisp 函数,方便运行测试

我在 Emacs 中用 gptel 和 deepseek 进行交流。

以前没有 deepseek API 的时候,当我需要写 Elisp 时,我在网页和 ChatGPT 对话去完成一些函数编写,然后再复制到 Emacs 里调试。反复复制粘贴,直到能用。

而 gptel 一方面可以用 gptel-rewrite 选中 region 直接重写,但是缺少一些对话性,调整起来没有直接对话打交道来的方便。 (但有的场景也是好用的,例如翻译,按照要求格式话,将一些名词变成 wiki 链接等)

另一方面,我可以直接开一个 session 在 buffer 里和 deepseek 对话编码,然后在 buffer 里直接执行它输出的 elisp,就可以直接用这个函数了,然后不断对话测试,给他错误日志,直到符合需求,再贴到配置里,感觉方便得多,省去了来来回回的复制粘贴。

今天就用这个方法写了一个获取接口 API,然后在 Yapi API文档打开的函数,这样我就能随时查这个接口的文档了。

最近 deepseek 还发布了新模型 R1,应该会更智能,价格也只是原来的两倍(V3 我日常用到现在才 5 毛不到),感觉可以好好玩玩。

1 个赞

求教这个是怎么做的?

我假设你已经配置好了 gptel,接下来你直接运行 gptel,它就会创建一个 buffer 用于和你指定模型进行对话。

buffer 里的交互就和网页里对话没有差别。

不同的是,你是在一个 Emacs 的 buffer 里,所以那些基于 buffer 的操作你都可以做。

当它给你一个 Elisp defun 你也可以直接 eval 执行它,这样函数就加载了,你就能用了,接下来就是验证函数功能,补充相关上下文继续对话,直到自己满意就好了。

最后将完成的函数放到对应的配置中,以后就能用了。

Emacs 和 LLM 结合,对于不是很熟悉 Elisp 的人来说,一下子拥有了很强地扩展能力,找 LLM 要实现就好了。(不过还是多少要熟悉一些才能大致判断有没有问题)

LLM 给的 Elisp 又可以作为自己的学习资料,自己提的需求,LLM 告诉你可以这么写,它怎么写的,弄明白了也促进了对 Elisp 的了解。

1 个赞

aider会好用一点

1 个赞

晚点试试,以前看到过,苦于没有 API。

Aider 看起来更像编程助手,gptel 相对比较简单,就是在 Emacs 多了个随时可用的 LLM。

Aider 应该是目前最强的 FOSS 写代码的工具了。最接近 cursor composer 体验的了。

不需要手动添加文件,不需要给它复制粘贴代码段落,它能够自己找到需要阅读的文件以及需要修改的位置。

aider 在0.7以后支持了识别 inline comment 的功能,可以直接在代码里用注释的形式向 aider 问问题或者发出指令。不需要在 aider 窗口和代码窗口之间来回切换了。和编辑器集成也不需要在编辑器端里使用向 aider 发送命令的胶水命令了。

不过用 aider 最好得把 git 玩明白。要不然自己追踪 AI 对文件的历史变动很累。因为它不能像 cursor 那样是否选择接受 diff,每次都会自动修改。所以最好每次都在一个分支里操作,然后要不停的用 git 的 rebase squash reword 之类的工具来修改自己的提交历史。某种意义上,要把 git 的 commit history 当成编辑器的 undo-redo tree 来使用。

3 个赞

配置上了,先用用看 :grinning:

aider.el 写了一下午,确实和 cursor composer 的感觉比较接近。

但写完了还是需要做一些调整才能符合需要。

每次改动之后,他都会 commit 一次改动,我目前都是 reset --mixed,选择对应的 diff 再提交。

token 的消耗量也比之前用 gptel 多了很多。

(帖子已被作者删除)

解决自动commit的方法 lazycat-emacs/site-lisp/config/init-aider.el at 1fe9618f9630b5048b6f2cf985d9fa5b9d51da17 · manateelazycat/lazycat-emacs · GitHub

1 个赞