是不是跟你的主题配色冲突了。
通过 M-x customize-group go-translate-faces 查看或修改配色。
是不是跟你的主题配色冲突了。
通过 M-x customize-group go-translate-faces 查看或修改配色。
进行了一点点修改。主要:
因为,Google 对 Deep 翻译的结果没有包含音标。而对小写的 deep 翻译是有音标的。试试看。
推荐一个跟 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))))))))
我也遇到了这个问题。
用你的这个例子,我这边总是会提示 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,已修复。
按照你说的设置试了,现在报wrong-type-argument char-or-string-p nil 错误。
go-translate 和 pdd 也已经更新到最新。
很奇怪,我用 gptel 是可正常访问官方的 DeepSeek的:
(use-package gptel
:defer t
:custom
(gptel-default-mode 'org-mode)
(gptel-model 'deepseek-reasoner)
:config
(setq gptel-backend (gptel-make-deepseek "DeepSeek"
:stream t
:key gptel-api-key)))
希望这个可以解决你的问题。
更新后试了下,目前 deepseek-chat 成功了,不知为何 reasoner 还是报错?结果如下:
go-translate 设置如下(参考的 Readme: GitHub - lorniu/go-translate: Translator on Emacs. Support multiple engines such as Google, Bing, deepL, StarDict and Youdao, also support LLMs like ChatGPT, DeepSeek and so on.
(setq gt-chatgpt-key (my-auth-secret "api.deepseek.com"))
(setq gt-default-translator
(gt-translator :taker (gt-taker :pick nil :prompt t)
:engines (list
(gt-chatgpt-engine
:host "https://api.deepseek.com"
:path "/chat/completions"
:model "deepseek-chat")
(gt-chatgpt-engine
:host "https://api.deepseek.com"
:path "/chat/completions"
:model "deepseek-reasoner"
:prompt "Translate the text to {{lang}} and return the first word:\n\n{{text}}"
:stream t))
:render (gt-buffer-render)))
@lorniu 我把 :stream t 去了就都成功了。
无法复现你的错误,我用你的配置,不管怎么试都是正常的,不管 :stream 有没有设置。
先观望。
对我来说不用 :stream t,也没什么影响,目前已经很好用了。 感谢大佬写这么好用的包。
测试下来,deepseek-reasoner 的翻译效果比deepseek-chat要好很多,就是贵不少。
不好意思,又是半夜来提 bug 了。
我有一个需求想使用多个 LLMs ,他们各自有各自的 key ,但我不想使用 authinfo 文件来做这件事 。文档里有提到可以直接在 gt-chatgpt-engine 中设置 :key ,但现在会报错 You should provide a valid api key for ‘gt-chatgpt-engine’ 。
大概扫了眼代码,应该是 gt-resolve-key 的问题,调用 (gt-resolve-key (gt-chatgpt-engine :key "key") 就是会报那个错误。
go-translate version: 20250625.1616
感谢支持
建议区分简体和繁体,部分 llm 无法区分二者,老是翻译错
目前我是自己加了一段解决的:
(setcdr (assoc 'zh gt-lang-codes) "Simplified Chinese")
这个不确定性太大。如果有需要还是自己添加的好。直接用 push 可能更简单些:
(push '(zh . "简体中文") gt-lang-codes)