mind-wave -- 基于ChatGPT API的Emacs AI插件

请用 get_emacs_vars 修改一下补丁, 实例代码在 emacs-application-framework/eaf.py at 442a2b39f50999d6b2a9297d709758db52e920c6 · emacs-eaf/emacs-application-framework · GitHub

这样可以一次IPC通讯获取多个变量值, 提升 Elisp 和 Python 的交互性能。

1 个赞

网页版现在太卡了,这个太及时了,非常好用

做了个spacemacs的layer,有需要的自取

1 个赞

提一个需求,能不能支持临时buffer,可以直接问,不用建.chat文件,比如类似于 org-capture 那种

mind-wave-chat-mode

(define-derived-mode chatgpt-mode comint-mode "chatgpt"
  (let ((chatgpt-prompt-regexp "\\([0-9]+>\\)"))
   (setq comint-prompt-regexp chatgpt-prompt-regexp)
   (set (make-local-variable 'paragraph-separate) "\\'")
   (set (make-local-variable 'paragraph-start) chatgpt-prompt-regexp)
   (setq comint-use-prompt-regexp t)
   (setq comint-process-echoes t)))

(defun run-chatgpt ()
  (interactive)
  (let* ((chatgpt-program "chatgpt")
         (buffer (get-buffer-create "*chatgpt*"))
         (proc-alive (comint-check-proc buffer))
         (process (get-buffer-process buffer)))
    (unless proc-alive
      (with-current-buffer buffer
        (apply #'make-comint-in-buffer "chatgpt" buffer
               chatgpt-program nil nil)
        (chatgpt-mode)))
    (when buffer
      (pop-to-buffer buffer))))

用get-buffer-crete 建的 buffer里收不到回复,不清楚是什么情况

糊了一个。

直接运行时创建新chat,如果前置C-u,那就从历史chat中找。

历史文件放在配置中的 “mind-wave/” 目录下。

(defun z/mind-wave-find-chat (&optional arg)
     "Creat new chat. with ARG, find previous chat."
     (interactive "P")
     (find-file
      (if arg
          (completing-read
           "Choose chat: "
           (cl-remove-if
            (lambda (x) (member x '("." "..")))
            (directory-files (locate-user-emacs-file "mind-wave") t "\\.chat\\'")))
        (concat user-emacs-directory "mind-wave/" (format-time-string "%FT%T") ".chat")))
     (mind-wave-chat-mode))

@manateelazycat 猫哥 , chatgpt 有时回复的代码样式渲染不了,就像你图这样

有什么好的方法解决?

哈哈哈, 是这样的, ChatGPT 回答回答的就忘记把代码换行了。

你这时候告诉他, “请把上面的回复用 Markdown 来渲染”, 它就会调整过来了。

ChatGPT 那么强, 不知道为啥这个细节一直不行, 逼死强迫症呀。 :sweat_smile:

:sweat_smile: 好吧,是否可以人工手动换行? 但是我试了一下不行,不知道什么原因.

代码多了,你不知道那些是正确的换行呀。

有可能是我的锅, 因为我现在的方式是按照 \n 来分割提取内容的, 但是这样会导致换行符去掉后, ChatGPT 模仿我的问题, 也回复没有换行符的代码给我。

我推送了一个新的补丁 Add newline support to ChatGPT prompt for mind-wave users' input. · manateelazycat/mind-wave@9f8f14e · GitHub

新的补丁在分析内容的时候, 保留了换行符。

你看看新补丁解决了你的问题没?

1 个赞

增加了 mind-wave-explain-point 函数, 解释光标处API在整个代码的作用, API每个参数的意思以及使用API的示例代码。

同时使用mind-waveauto-save插件,聊天模式下的mind-wave会遇到下图问题,阻塞问答。

OS为Windows10,请问这个问题是platform-specific还是可以通过修改auto-save插件的配置解决呢?

你的auto-save是怎么安装的?

是把auto-save.el下载到本地,然后load-path加载的。

这个是 mind-wave 自动重命名选项 mind-wave-auto-change-title

应该是有两个buffer导致创建新文件, 你可以检查你的自动保存设置或者关闭 mind-wave-auto-change-title 选项。

1 个赞
(add-to-list 'load-path "~/.emacs.d/mind-wave/")
(require 'mind-wave)
(setq mind-wave-auto-change-title nil)

关掉了 mind-wave-auto-change-title就好了。谢谢回复!

需要代理才能访问API的情况,在mind_wave.py中加入openai.proxy=“you proxy”

我想加段代码去从emacs中显式设置代理,这里是该重新定义一个proxy的选项,比如在mind-wave.el中定义mind-wave-api-proxy,还是直接去解析url-proxy-services比较合适?

我建议你用 proxy-ns , 基于Linux Namespace原理开发, 这样只要一个进程是用 proxy-ns 启动的, 不管是否静态编译, 这个进程的所有子进程都自动代理。

我至从用了 proxy-ns , 我再也不给各种插件单独设置代理了, Emacs插件太多太麻烦了。

1 个赞