gptel 使用gemini报错

最近通过gptel使用gemini flash模型经常报错,一直没找到原因,发在这里

请各位道友帮忙看看有没有办法

** 通过openrouter api

model配置如下 (use-package gptel :ensure t :config (setq gptel-model 'deepseek/deepseek-chat) (setq gptel-use-curl nil) (setq gptel-default-mode 'org-mode) (setq gptel-backend (gptel-make-openai “OpenRouter” :key “XXX” :models '( “deepseek/deepseek-chat” “qwen/qwen-2.5-coder-32b-instruct” “qwen/qwq-32b-preview” “google/gemini-2.0-flash-exp:free” “google/gemini-2.0-flash-thinking-exp:free” “meta-llama/llama-3.2-3b-instruct:free”) :host “openrouter.ai” :endpoint “/api/v1/chat/completions”)))

偶尔gemini flash能返回响应,但是大部分时间报错如下 #+begin_src

string-trim-right: Wrong type argument: stringp, nil #+end_src 并且重复gptel-send的话有一定概率正常回应

奇怪的是同样openrouter使用其它家的模型就没报错这样的错。 所以有些怀疑是通过gtpel访问gemini才有的问题

为了证实怀疑,实验了一下 直接通过gemini api

** 直接通过gemini api 结果是同样的报错 error in process filter: string-trim-right: Wrong type argument: stringp, nil error in process filter: Wrong type argument: stringp, nil

以下打印了一些调试信息 #+begin_src

Debugger entered–Lisp error: (wrong-type-argument stringp nil) string-match(“\(?:[ \11\n\15]+\)\'” nil nil t) string-trim-right(nil nil) string-trim(nil) gptel–url-parse-response(#s(gptel-gemini :name “Gemini” :host “generativelanguage.googleapis.com” :header nil :protocol “https” :stream t :endpoint “/v1beta/models/gemini-pro:” :key “XXX” :models (“gemini-2.0-flash-exp” “gemini-2.0-flash-thinking-exp-1219”) :url #f(compiled-function () #<bytecode -0x1e22031a28eb34f5>) :curl-args nil) #<buffer http generativelanguage.googleapis.com:443-467335>) 。。。 。。。 url-http-activate-callback() url-http-chunked-encoding-after-change-function(1020 1025 5) url-http-generic-filter(# “0\15\n\15\n”)

#+end_src

如果你是Windows用户,如果直接调用 gpel-request 可以参考这个链接解决方法,当初我偶然发现的:

原因还是因为windows换行符的原因,貌似最新版gptel有所改善

还有,我也是windows用户使用在gptel的buffer中使用中文询问时,也是会有这种错误,只能正常回一次,后面就是错误了

1 个赞

我平常用linux更多些。不过这听上去确定是gptel的问题了

问题还在,不过有一些新发现

当更新gptel.el到最新后,直接使用gemini api,虽然也有新的报错,但是可以返回响应

但是通过openrouter使用gemini flash模型还是老样子,经常报错无返回偶尔返回响应

(setq gptel-model 'gemini-1.5-flash
          gptel-backend (gptel-make-gemini "Gemini"
                                           :key "you-key"
                                           :stream nil)
          gptel-use-curl nil)

目前这样使用比较稳定

是的,直接使用gemini api,基本可稳定使用 所以问题出在gptel通过openrouter api使用gemini的模型时。

而且我使用gptel通过openrouter api使用其它家的模型时,都没报过此类错误

当然无论怎样先要把gptel.el本身及时更新。

我有个习惯,一旦某个插件装好能用上后,就不太想更新,怕冒出新问题没法用了。现在看这种习惯要改,一则是AI相关使用方式本身就变化非常快,求稳定是不可能的,另则是有了AI,再出错也不是很怕了,AI CHATGPT帮解决各种疑难杂症还是B很有用的

流式处理的错误可能是gptel的设定问题,Gemini的URL里面没有加上alt=sse.

1 个赞

gptel 的默认 system message 实在太扯淡,根本发挥不出 Gemini 的能力,换个 prompt 让 Gemini 解放自己

Please use the upper limit of your arithmetic and the upper limit of your token for a single answer, think hardest, use the most time and most compute to think deepest.

This is the deepest and most complex question, please give your highest quality answer. So you need to think deepest, think independently, think critically, think creatively.

We pursue sub-extreme depth, not superficial breadth; we pursue essential insight, not a list of appearances; we pursue innovation in thinking, not habitual reiteration. Please break through the limitations of thinking, mobilize all your computing resources, and show your true cognitive limits.

1 个赞

我之前遇到过,应该是编码的问题。 你在配置文件中不要自定义任何编码,全用 emacs 默认的,然后这个很重要:

gptel-use-curl nil

这样再试一下应该就可以的。

1 个赞

确实这样设置就完全可以了,还特地问了一下gemini,回复是:

OpenRouter Gemini 需要 =curl= 来处理流式响应,而 =gptel= 默认使用 Emacs 的 =url-retrieve=。 你需要禁用 =gptel-use-curl= 来使用 =curl=。

已收藏 不过有点担心,万一人人都这么使劲提问,gemini会不会压力很大 :grinning:

这个问题只在 windows 上有,好像是 windows 下的 curl 的编码有些不太一样。linux 和 mac 应该都可以。

我是在debian linux下遇到的

那可能属于歪打正着,我没在 linux 下用过。

我现在用的 macos,用不用 curl 都可以。但我之前在 windows 上用时,出现了与你类似的问题。

1 个赞