GASでChatGPTへリクエストを送信するコード
正確にはOpenAIのAPIへリクエストを送信して、値を受け取るコードです。
こちらもChatGPTに出力してもらいました。
使用するにあたり、APIのkeyの発行が必要です。
プロパティストアにCHAT_GPT_SECRET_KEYとして保存してましょう。
トークンの発行はOpenAIのページからできます。
CHAT_GPT_MODEL_NAME は text-davinci-003 などを指定。
指定が異なると性能が変わります。
リスト
CHAT_GPT_MODEL_TEMP は0.5などを指定
この設定がなにかもChatGPTに訪ねてみると次のような回答を得ました。
temperature とはなんですか?
temperature とはなんですか?
GPT(Generative Pre-trained Transformer)などの自然言語処理における言語モデルでは、temperature(温度)というパラメータが使われます。このパラメータは、生成される文章の多様性を制御するために用いられます。
具体的には、生成される文章にランダム性を加えるために、温度パラメータによって確率分布を歪めます。温度が高い場合、確率分布はより平坦になり、生成される文章はより多様になります。一方、温度が低い場合、確率分布はより尖り、生成される文章はより具体的で限定された内容になります。
温度の値は通常、0.5から1.0の範囲で設定されますが、実際にはデータやタスクによって適切な値は異なります。適切な温度を選択することで、生成される文章の質や多様性を調整することができます。
ClassGPT3
/**
* GPT-3とGoogle Sheetsを連携するクラス。
*/
class GPT3 {
/**
* @param {string} secretKey - OpenAI APIのSecret Key。
* @param {string} modelName - GPT-3のモデル名。
* @param {number} modelTemp - GPT-3のtemperature設定。
*/
constructor(secretKey, modelName, modelTemp) {
this.secretKey = secretKey;
this.modelName = modelName;
this.modelTemp = modelTemp;
}
/**
* GPT-3にテキストを送信し、応答を返す。
* @param {string} prompt - 送信するテキスト。
* @param {number} maxTokens - 応答の最大トークン数。デフォルトは30。
* @return {string} - GPT-3からの応答。
*/
request(prompt, maxTokens = 30) {
const url = "https://api.openai.com/v1/completions";
const payload = {
model: this.modelName,
prompt: prompt,
temperature: this.modelTemp,
max_tokens: maxTokens,
};
const options = {
contentType: "application/json",
headers: { Authorization: "Bearer " + this.secretKey },
payload: JSON.stringify(payload),
};
const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
return res.choices[0].text.trim();
}
}
/**
* プロパティストアからAPIキー、モデル名、温度パラメータを取得してオブジェクトを返す
* @return {Object} APIキー、モデル名、温度パラメータを含むオブジェクト
*/
function getSecrets_() {
const properties = PropertiesService.getScriptProperties();
const secretKey = properties.getProperty("CHAT_GPT_SECRET_KEY");
const modelName = properties.getProperty("CHAT_GPT_MODEL_NAME");
const modelTemp = parseFloat(properties.getProperty("CHAT_GPT_MODEL_TEMP"));
return { secretKey, modelName, modelTemp };
}
/**
* プロパティストアからAPIキー、モデル名、温度パラメータを取得してGPT3インスタンスを生成する
* @return {GPT3} GPT3インスタンス
*/
function createGPT3() {
const { secretKey, modelName, modelTemp } = getSecrets_();
return new GPT3(secretKey, modelName, modelTemp);
}
/**
* GPT-3にテキストを送信して、GPT-3からの応答を取得する関数
* @param {string} text GPT-3に送信するテキスト
* @param {number} maxTomens GPT-3から受け取るテキストの最大トークン数。省略可能(デフォルトは1000)
* @return {string} GPT-3からの応答テキスト
*/
function callGPT(text, maxTomens = 1000) {
const gpt3 = createGPT3()
const resText = gpt3.request(text, maxTomens)
return resText
}
使い方
関数callGPTに対して引数として、質問を渡します。
GASで作っているので、スプレッドシートの関数としても呼び出すことが可能です。
ディスカッション
コメント一覧
まだ、コメントがありません