AskChatGPT
試してみたいtakker.icon
似たようなことをしている
TamperMonkeyは不要ですtakker.icon
shokai.iconからもコメントもらったtkgshn.icon
shokai たぶんtampermonkeyは不要で、全てUserScriptにまとめれると思います 落ち着いたら更新してみる、「Scrapbox公式のモーダル」ってどうやってアクセスできるのか教えてほしいtkgshn.icon
0xtkgshn 一旦力尽きたので余裕ある時にやってみます!あと、元々公式のモーダル(リンク入れたらタイトル取ってくるか、そのまま貼り付けるかみたいなやつ)で表示できたらなと思ったのですが、どうやって呼び出すのか見つけられませんでした kondoumh おお。Scrapbox にリンクをコピペすると URL のままか、タイトル付きリンクかを選んで貼れるようになった。 https://gyazo.com/f25ce66471d395a44d191bf311696661
自分の知る限りアクセス方法はありませんtakker.icon
同様のUIを自作する必要があります
なるほどtkgshn.icon*3
Scrapbox上で選択範囲のテキストをChatGPTに投げるUserScriptnishio.icon
https://gyazo.com/f49c717d1e872e813335032f19b104fd
辛いポイントnishio.icon
CSPの影響でScrapboxから直接OpenAIのAPIを叩けない ニコニコのサムネを載せるの作った時もこれにハマった記憶基素.icon
ScrapboxのPopup Menuは同期的にしかテキストの編集ができない?
APIを叩くため必然的に非同期になるからメニュー一発でテキストを更新はできない
2種類のメニューを使うことにした
クリップボードに結果を入れてペーストすればいいかなと思ったが、Promiseの中からクリップボードの操作はできない?
ウィンドウに生やすことにした
ScrapboxのPopup Menuに「処理中であることを表示する手段」がなさそう?
まあ同期的に動くことを想定してそうだし…
alertを出すことにした
APIの待ち時間が長い、10秒以上待たされる
これは仕方ない…
ver2
UserScriptで選択範囲を置き換える想定をやめた(その想定だと選択範囲を維持したまま10秒待たないといけないから)
ChatGPTにリクエストを投げて、返事が返ってくるまで別のことをしててよい
alertで返事が来たことに気づくので、それを好きなところにペーストする
妥当そうtakker.icon
code:script.js
scrapbox.PopupMenu.addButton({
title: "AskChatGPT",
onClick: (text) => {
alert(text);
askChatGPT(text).then((x) => {
const result = "ChatGPT.icon" + x.choices0.message.content.trim(); console.log(text + "\n" + result)
window.chatgpt_result = result;
alert(text + "\n" + result);
});
},
});
scrapbox.PopupMenu.addButton({
title: "PasteChatGPT",
onClick: (text) => {
return window.chatgpt_result;
},
});
↓クリックでinstallできるtakker.icon
code:askChatGPT.user.js
// ==UserScript==
// @name New Userscript
// @version 0.1
// @description try to take over the world!
// @author You
// @grant GM_xmlhttpRequest
// ==/UserScript==
unsafeWindow.askChatGPT = async (
text,
{ temperature = 0.7, max_tokens = 500 } = {}
) => {
const headers = {
"Content-Type": "application/json",
Authorization: "Bearer " + localStorage.getItem("OPENAI_KEY"),
};
const data = JSON.stringify({
temperature,
max_tokens,
model: "gpt-3.5-turbo",
messages: role: "user", content: text },
});
return await new Promise((resolve, reject) =>
GM_xmlhttpRequest({
method: "POST",
data,
headers,
onload: ({ response }) =>
resolve({
...response,
}),
responseType: "json",
onerror: (e) => reject(e),
})
);
};
何でこんな簡単なことに気づいてなかったのか(睡眠が足りない)
localstorageにopenaiのAPIを入れたらサーバなんか立てなくてもScrapboxからUserScriptでChatGPTを叩けるじゃん
https://gyazo.com/65b726d8b2080981b1724ffbd010f5e4
悲しみ
Scrapbox上でChatGPTを呼び出せるようになった!
ChatGPT.icon素晴らしいです!ChatGPTをScrapboxに統合することで、ユーザーはより便利に、簡単に質問や会話をすることができるようになります。ChatGPTは自然言語処理の技術を用いて、人工知能による会話を実現することができるため、Scrapbox上でのコミュニケーションをよりスムーズにすることができます。これにより、Scrapboxの利用価値が向上し、より多くの人々が利用することができるようになります。
https://gyazo.com/f49c717d1e872e813335032f19b104fd
待ち時間が10秒くらいある
意外と長いなwogikaze.icon
待たなきゃいけないのは変わらないけど……
最初の方の文字がすぐ返ってくるだけでもかなり体験はいいんですよねmiyamonz.icon
複数人が同時に編集する状況には対応できない
/nishioでこの情報みたとき、井戸端にtakker.iconがいないときに先を越されてちょっと悔しかったtakker.icon 何でもかんでも一人で作るほうが異常なのでまあいいことではある