Assistant APIを呼び出す Google App Script
https://scrapbox.io/files/662913d157f0760024496fe7.webp
これはなに?
Google Sheets に組み込んで、あれこれできる
応用すれば、Node.js などの JSからも呼び出し可能
用途
テキストの校訂・要約・翻訳、さらには自動応答・説明提示・情報抽出など🚀
例
文章の校訂
文章から必要な情報を抽出し、構造化
業務の自動化
問い合わせなどの自動応答システム
コンテンツの判断
Sheet と組み合わせることで、Knowledge の更新が捗るため、継続的に精度を向上できる🌀
スクリプト
code:gs.js
/**
* 使い方
* =improveText(A2)
*
* 注意
* :実行したセルは、値貼り付けにして、関数を実行しないようにすること(表示の度に関数が実行され、課金されてしまう)
* :「=AND(K4<>"", ISFORMULA (K4))」のような条件付き書式を使って、関数のセルを赤色にしておくとよい
*/
const OPENAI_API_KEY = YOUR_OPENAU_API_KEY
const ASSISTANT_ID = YOUR_ASSISTANT_ID
function improveText(text) {
if(text=="" || text==null) { return }
// 1. thread の作成
const threadId = createThread()
//return threadId
// 2. メッセージの追加
const ret = addMessage(threadId, text)
// 3. Assistant 実行
const runId = execAssistant(threadId)
// 4. 処理待機
const isCompleted = checkStatus(threadId, runId)
if(!isCompleted) return "取得に失敗しました"
// 5. レスポンスの取得
const responsText = fetchResponse(threadId)
return responsText
}
// 1
function createThread() {
const url = https://api.openai.com/v1/threads
const ret = fetchJSON(url, "") // DO NOT CHANGE paylod TO null
return ret.id;
}
// 2
function addMessage(threadId, text) {
const url = https://api.openai.com/v1/threads/${threadId}/messages
const payload = {
role: "user",
content: text
}
const ret = fetchJSON(url, payload)
return ret;
}
// 3
function execAssistant(threadId) {
const url = https://api.openai.com/v1/threads/${threadId}/runs
const payload = {
assistant_id: ASSISTANT_ID
}
const ret = fetchJSON(url, payload)
const runId = ret.id
return runId;
}
// 4
function checkStatus(threadId, run_id) {
const url = https://api.openai.com/v1/threads/${threadId}/runs/${run_id}
let status = "queued"
while(true) {
const ret = fetchJSON(url, null)
status = ret.status
console.log(status)
if(!(status == "in_progress" || status == "queued")) { break }
Utilities.sleep(3000);
}
return (status == "completed")
}
// 5
function fetchResponse(threadId) {
const url = https://api.openai.com/v1/threads/${threadId}/messages
const ret = fetchJSON(url, null)
const text = ret.data0.content0.text.value return text
}
function fetchJSON(url, payload) {
let options = {
contentType: 'application/json',
headers: {
'Authorization': Bearer ${OPENAI_API_KEY},
'OpenAI-Beta': 'assistants=v2'
},
//muteHttpExceptions:true
};
options.method = (payload != null) ? 'post' : 'get'
if(payload != null) {
options.payload = JSON.stringify(payload)
}
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
return data;
}