go-translate 更新到 v3

是不是跟你的主题配色冲突了。

通过 M-x customize-group go-translate-faces 查看或修改配色。

进行了一点点修改。主要:

  1. 引入 pdd 包管理请求和异步任务
    • 一些跟网络相关的配置有变动,需要更改
  2. 对 ChatGPT 引擎进行了小小改动,让其能更好工作在不同场景

应该不是主题色导致的,比如截图当中 en → zh,显示的是中文拼音。

因为,Google 对 Deep 翻译的结果没有包含音标。而对小写的 deep 翻译是有音标的。试试看。

1 个赞

推荐一个跟 AI 集成,从而将选中文本跟 LLM 进行交互的命令。挺实用的。

(defvar my-ai-oneshot-prompts
  (list "优化、润色文本" "请认真分析代码,修复代码存在的错误,并给出建议"))

(defvar my-ai-oneshot-models
  (list "deepseek-reasoner" "gpt-4o-mini" "gemini-2.5-pro"))

(defvar my-ai-oneshot-last-model nil)

(defvar my-ai-oneshot-history nil)

(defun my-ai-oneshot ()
  "Use C-. C-, to switch model."
  (interactive)
  (require 'go-translate)
  (let ((prompt nil)
        (model (or my-ai-oneshot-last-model
                   (setq my-ai-oneshot-last-model (or (car my-ai-oneshot-models) gt-chatgpt-model)))))
    (cl-flet ((get-cands ()
                (cl-delete-duplicates
                 (append my-ai-oneshot-history my-ai-oneshot-prompts) :from-end t :test #'equal))
              (change-model (&optional prev)
                (let* ((pos (or (cl-position my-ai-oneshot-last-model my-ai-oneshot-models :test #'equal) -1))
                       (next (if prev (max 0 (1- pos)) (min (1- (length my-ai-oneshot-models)) (1+ pos)))))
                  (setq my-ai-oneshot-last-model (nth next my-ai-oneshot-models))
                  (setq model my-ai-oneshot-last-model)
                  (overlay-put (car (overlays-at 1)) 'after-string my-ai-oneshot-last-model))))
      (setq prompt
            (minibuffer-with-setup-hook
                (lambda ()
                  (local-set-key (kbd "C-,") (lambda () (interactive) (change-model)))
                  (local-set-key (kbd "C-.") (lambda () (interactive) (change-model t)))
                  ;; (local-set-key (kbd "C-c C-k") #'my-ai-oneshot-delete-current)
                  (overlay-put (make-overlay 1 9) 'after-string model)
                  (use-local-map (make-composed-keymap nil (current-local-map))))
              (completing-read "Prompt (): " (get-cands) nil nil nil 'my-ai-oneshot-history)))
      (gt-start (gt-translator
                 :taker (gt-taker
                         :text 'point :pick nil
                         :prompt (lambda (translator)
                                   (let ((text (car (oref translator text))))
                                     (oset translator text
                                           (list (if (string-blank-p text)
                                                     prompt
                                                   (let ((str (if (string-blank-p prompt) text
                                                                (format "%s\n\n内容如下:\n\n%s\n" prompt text))))
                                                     (if current-prefix-arg (read-string "Ensure: " str) str))))))
                                   (message "Processing...")))
                 :engines (gt-chatgpt-engine
                           :cache nil
                           :stream t
                           :model model
                           :timeout 300
                           :prompt #'identity)
                 :render (gt-buffer-render
                          :name (format "*ai-oneshot-%s*" model)
                          :mode 'markdown-mode
                          :init (lambda () (markdown-toggle-markup-hiding 1))
                          :dislike-header t
                          :dislike-source t
                          :window-config '((display-buffer-below-selected))))))))
1 个赞

我看了下 pdd 的代码,确实没有这个方法(而 go-translate 使用了)。 是不是 pdd 升级导致的?我是 250623 的 pdd 。

我也遇到了这个问题。

用你的这个例子,我这边总是会提示 wrong-type-argument listp t 错误。 使用的是最新的 go-translate 和 pdd.el, 直接从 Github 安装的。

我就在你的代码里加了这几行,我只用 DeepSeek,其他2个后端都删除了。

执行M-x my-ai-oneshot-models 后,在Prompt中选择“优化、润色文本”,出现“Processing…” 后过一会就会看到错误 wrong-type-argument listp t

  (setq gt-chatgpt-key (my-auth-secret "api.deepseek.com"))
  (setq gt-chatgpt-host "https://api.deepseek.com")
  (setq gt-chatgpt-model "deepseek-v3")
  (defvar my-ai-oneshot-prompts
    (list "优化、润色文本" "请认真分析代码,修复代码存在的错误,并给出建议"))

  (defvar my-ai-oneshot-models
    (list "deepseek-v3"))

我用的是第三方接口,示例中代码可以直接运行。如果使用 deepseek 官方接口,path 和模型名有些不一样,需要配置。比如:

(setq gt-chatgpt-host "https://api.deepseek.com")
(setq gt-chatgpt-path "/chat/completions")
(setq gt-chatgpt-model "deepseek-reasoner")  ; or "deepseek-chat"

https://api-docs.deepseek.com/zh-cn/api/create-chat-completion

BUG,已修复。