• 作成:

EmacsからChatGPT.elでChatGPT Plusを利用しようとしましたが、パッケージの修正にもかかわらず、結局GPT-4が使用できませんでした

ChatGPT APIを使ってリファクタリングやドキュメント生成などを組み込む · Issue #20 · ncaq/.emacs.dからのexport記事。

ChatGPT(GPT-4)をEmacsに組み込もうと考えました

ChatGPTのAPIじゃなくて他のOpenAIのAPIでも良いんですが、 ChatGPT Plusを契約したので、せっかくなのでAPI経由ではなく、そちらを利用してコストを抑えることにします。

安くない金を払ってるから倫理的に問題だとは思っていません。画面の出るブラウザからアクセスするか、ヘッドレスブラウザからアクセスするかの違いですし。どちらにせよ、 GPT-4はある程度の頻度でアクセスしたら規制をかけてくるので、同じだと考えています。

joshcho/ChatGPT.el: ChatGPT in Emacsを利用します。

早速暗雲が立ち込める

ChatGPT.elはchatgpt-wrapperというライブラリを使ってChatGPTにアクセスしています。そこにはこんな説明がありました。

Playwright (browser-based): DEPRECATED

This backend is deprecated, and may be removed in a future release.

mmabrouk/chatgpt-wrapper: API for interacting with ChatGPT and GPT4 using Python and from Shell.

ヘッドレスブラウザ経由でのアクセス方法は既に非推奨となっているようです。将来的にこの方法は使えなくなる可能性があります…

まあでもどうせCopilot Xに乗り換える気がしますし、今回は設定してみることにしました。

chatgpt configを試みてもAPIキーの設定を求められ、設定したいのにどこに配置するべきか分からなかったのですが、どうやら~/.config/chatgpt-wrapper/profiles/default/config.yamlに置くようです。

しかし次のような警告が表示されました。

GPT-4 models are currently broken in the browser backend, due to increased 'anti-bot' security measures implemented by OpenAI on chat.openai.com

If you'd like to help fix this issue, see https://github.com/mmabrouk/chatgpt-wrapper/issues/311

Set model_name to gpt-4-plugins

straightでのセットアップ

ChatGPT.elはmelpaにはアップロードされていないので、 straightを使ってインストールします。

radian-software/straight.el: 🍀 Next-generation, purely functional package manager for the Emacs hacker.

el-getなどを使う場合依存関係が全然インストールされないので、 straightを導入したほうが良いでしょう。

straightは普通にインストールするとしてleafのクエリはこのように書きます。

:straight (chatgpt :type git :host github :repo "joshcho/ChatGPT.el" :files ("dist" "*.el")

chatgpt-wrapperとのバージョン不整合。

インストールは成功したのですが、以下のようなエラーが発生しました。

Traceback (most recent call last):
  File "/home/ncaq/.emacs.d/straight/repos/ChatGPT.el/chatgpt.py", line 5, in <module>
    from chatgpt_wrapper import ChatGPT
ModuleNotFoundError: No module named 'chatgpt_wrapper'

Fix breaking changes for chatgpt-wrapper versions >= v0.7.0 by barryridge · Pull Request #46 · joshcho/ChatGPT.elのPRで修正されているようです。

PR取り込みでも良いけど、とりあえずお手軽な、

pip install git+https://github.com/mmabrouk/chatgpt-wrapper@v0.11.7

で対処を試みましたが、これでも問題が解決しませんでした。

Traceback (most recent call last):
  File "/home/ncaq/.emacs.d/straight/repos/ChatGPT.el/chatgpt.py", line 5, in <module>
    from chatgpt_wrapper import ChatGPT
ImportError: cannot import name 'ChatGPT' from 'chatgpt_wrapper' (/home/ncaq/.local/lib/python3.10/site-packages/chatgpt_wrapper/__init__.py)

なのでforkされたバージョンをハッシュ指定で読み込みましたが、結局問題は解決しませんでした。

Update README to use correct version of chatgpt-wrapper by torfjelde · Pull Request #50 · joshcho/ChatGPT.elを見てlweに切り替えましたが、クエリを投げても、

straight vs el-get
cg?[1]
ERROR: nil

という結果が返ってきました。

ログインすれば良いのかと思いましたが、

deferred error : (args-out-of-range "\"AttributeError(\\\"module 'lwe.core.constants' has no attribute 'RENDER_MODELS'\\\")\"" 1065 1066)

のようなエラーが出ます。

完全にバージョン間で互換性を失っているようです。

修繕します

もうわけがわからないので大規模に修繕しました。 PR出します。

fix: support new chatgpt-wrapper by ncaq · Pull Request #52 · joshcho/ChatGPT.el

一応動いたのでPRは一応出しましたが、 GPT-4がアンチbotシステムによって結局使えないようですね。

ブラウザから使います

GPT-4が使えないのはかなり痛いので、おとなしくブラウザから使ったほうが良さそうです。

GPT-4を従量課金性のAPIで使えば良いのではないかと思われるかもしれませんが、そういう訳にも行きません。

chatgpt-wrapperには以下のようにpluginsを指定する仕組みがあります。

backend: "browser"

chat:
  model: gpt-4-plugins

browser:
  plugins:
    - plugin-11d34cfc-1505-4556-b059-c82fc98dade6 # stack-overflow-search.onrender.com, stackoverflow_plus
    - plugin-6ca313e8-9035-4bde-8542-7d107a1fb316 # gochitchat.ai, linkReader

しかしこれはChatGPTのプラグイン機能を使ったものであるため、当然ChatGPTでしか動きません。 API経由では無理でしょう。

他の用途なら例えばリンク読み込みなどは自分でコピペしたデータを貼り付けるなどで対処可能でしょうが、 Stack Overflowの2021年後のデータの読み込みなどはプログラミングの支援を主に期待する場合無いと致命的です。

なのでおとなしくブラウザから使う必要があるというわけです。

ChatGPT Plusの会員ならAPIバージョンも同じレート制限で使えて、更にpluginsも使えるようになれば良いなと思います。