AskChatGPT
2024/4/25
ちょっと似ているけどもっと便利かも?なのを作った: /tkgshn/Scrapboxに書いたコンテキストを元にChatGPTにテキストを作ってもらうtkgshn.icon
試してみたいtakker.icon
OpenAI APIはお試し期間あったっけな
/tkgshn/Scrapboxに書いたコンテキストを元にChatGPTにテキストを作ってもらう#6629e96209c5f20000f2d881
scrapbox-url-customizerの実装が参考になるかもtakker.icon
似たようなことをしている
TamperMonkeyは不要ですtakker.icon
api.openai.comはCSPで許可されている
shokai.iconからもコメントもらったtkgshn.icon
shokai たぶんtampermonkeyは不要で、全てUserScriptにまとめれると思います
昔はContent-security-policyの制限回避のためにtampermonkeyが必要だったけど、2023年9月にhttp://api.openai.comと*.openai.azure.comへのCSP connect-srcを許可するようにしたので不要になった
落ち着いたら更新してみる、「Scrapbox公式のモーダル」ってどうやってアクセスできるのか教えてほしいtkgshn.icon
0xtkgshn 一旦力尽きたので余裕ある時にやってみます!あと、元々公式のモーダル(リンク入れたらタイトル取ってくるか、そのまま貼り付けるかみたいなやつ)で表示できたらなと思ったのですが、どうやって呼び出すのか見つけられませんでした
公式のモーダル = Ctrl+Shift+Vで貼り付ける機能で出てきたやつのこと
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を叩けない
TamperMonkeyのGM_xmlhttpRequestを使って叩く
ニコニコのサムネを載せるの作った時もこれにハマった記憶基素.icon
ScrapboxのPopup Menuは同期的にしかテキストの編集ができない?
APIを叩くため必然的に非同期になるからメニュー一発でテキストを更新はできない
2種類のメニューを使うことにした
insertText()やpatch()で書き込めばいいtakker.icon
クリップボードに結果を入れてペーストすればいいかなと思ったが、Promiseの中からクリップボードの操作はできない?
ウィンドウに生やすことにした
navigator.clipboard.readText()から読めるtakker.icon
Twitterを独自のフォーマットで貼り付けるUserScriptはscrapbox-userscript-stdのinsertTextで実装したwogikaze.icon
ScrapboxのPopup Menuに「処理中であることを表示する手段」がなさそう?
まあ同期的に動くことを想定してそうだし…
alertを出すことにした
useStatusBar()など、別途表示画面を作る必要がありそうtakker.icon
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
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://scrapbox.io/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=scrapbox.io
// @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",
url: "https://api.openai.com/v1/chat/completions",
data,
headers,
onload: ({ response }) =>
resolve({
...response,
}),
responseType: "json",
onerror: (e) => reject(e),
})
);
};
from 2023/03/14
寝て起きたら気づいたnishio.icon
オードリーたん効果
何でこんな簡単なことに気づいてなかったのか(睡眠が足りない)
localstorageにopenaiのAPIを入れたらサーバなんか立てなくてもScrapboxからUserScriptでChatGPTを叩けるじゃん
(CSP)「ダメ〜」
https://gyazo.com/65b726d8b2080981b1724ffbd010f5e4
悲しみ
/takker/askKeichoを参考にする
Scrapbox上でChatGPTを呼び出せるようになった!
ChatGPT.icon素晴らしいです!ChatGPTをScrapboxに統合することで、ユーザーはより便利に、簡単に質問や会話をすることができるようになります。ChatGPTは自然言語処理の技術を用いて、人工知能による会話を実現することができるため、Scrapbox上でのコミュニケーションをよりスムーズにすることができます。これにより、Scrapboxの利用価値が向上し、より多くの人々が利用することができるようになります。
https://gyazo.com/f49c717d1e872e813335032f19b104fd
待ち時間が10秒くらいある
意外と長いなwogikaze.icon
ReadableStreamを読み込めば、逐次書き込むようにできるtakker.icon
待たなきゃいけないのは変わらないけど……
最初の方の文字がすぐ返ってくるだけでもかなり体験はいいんですよねmiyamonz.icon
/takker/chatGPTのデータをTamperMoneky経由で取得するでは逐次書き込みを試そうとしたが、同時に書き込むと差分処理がかなり厄介なことになって難しかった
複数人が同時に編集する状況には対応できない
/nishioでこの情報みたとき、井戸端にtakker.iconがいないときに先を越されてちょっと悔しかったtakker.icon
何でもかんでも一人で作るほうが異常なのでまあいいことではある
Ask to LLM UserScriptとして再発明した?bsahd.icon