JavaScript の API をフックして chat.openai.com 上で実行したダイアログの返答を受け取る関数を定義できるようにします。
以下のスクリプトを Tampermonkey 等で chat.openai.com 以下にアクセスしたときに実行するようにします。あるいはコンソールから直接実行しても構いません。
(function() {
if (window.__hooked) {
return;
}
window.__hooked = true;
let msg = null;
const OrigTextDecoder = TextDecoder;
TextDecoder = class {
constructor() {
this.orig = new OrigTextDecoder(...arguments);
}
decode() {
const res = this.orig.decode(...arguments);
try {
msg = JSON.parse(res).message.content.parts[0];
} catch (e) {
}
if (msg != null && res == "[DONE]") {
if (window.ongpt) {
window.ongpt(msg);
}
msg = null;
}
return res;
}
};
})();
あとはグローバルコンテキスト上に ongpt
関数を定義すれば返答を受け取ることができます。
function ongpt(message) {
console.log("message: " + message);
}
レンダリング結果ではなく生の文字列を処理したい時に使えます。
動かなくなったとき
そのうち仕様変更によって動かなくなる可能性が高いですが、軽微な変更であれば
msg = JSON.parse(res).message.content.parts[0];
この辺や
res == "[DONE]"
この辺を直せばまた使えるようになると思います。関数内にブレークポイントを仕込むなどして JSON の構造を見て、返答に対応する部分を msg
に代入し、終了の合図が来た段階で ongpt
に流してください。
もはや TextDecoder
が使われなくなっていた場合は諦めてください。