【Next.js】Assistants APIの基本的なコードまとめ。
2023/11/21
2023/11/21
Open AIの「Assistants API」をNext.jsで使用する時の基本的なコードをまとめました。
目次
Open AIのAPIセットアップ
const openai = new OpenAI({apiKey: YOUR_OPENAI_API_KEY});
基本の使い方
Threads: スレッドを作る
// スレッドを作成する ================
const emptyThread = await openai.beta.threads.create();
console.log(emptyThread.id);
// thread_abc123
https://platform.openai.com/docs/api-reference/threads/createThread
Assistants: アシスタントを作る
// アシスタントのロール設定・指示文を作成する ================
const INSTRUCTIONS = "あなたは数学の家庭教師です。質問をされたら、質問に答えてください。";
// アシスタントを作成する ================
const myAssistant = await openai.beta.assistants.create({
model: "gpt-4-1106-preview", // アシスタントのモデル
instructions: INSTRUCTIONS, // アシスタントへの指示文
tools: [], // アシスタントが使うツール (retrieval,code_interpreter,function)
});
console.log(myAssistant.id);
// asst_abc123
https://platform.openai.com/docs/api-reference/assistants/createAssistant
Messages: 送るメッセージを設定する
const THREAD_ID = "thread_abc123";
const MESSAGE_CONTENT = "方程式 `3x + 11 = 14` を解きたい。助けてくれますか?";
// スレッドにメッセージを追加する ================
const threadMessages = await openai.beta.threads.messages.create(
THREAD_ID, // スレッドを指定
{ role: "user", content: MESSAGE_CONTENT } // メッセージ内容
);
https://platform.openai.com/docs/api-reference/messages/createMessage
Runs: アシスタントによるメッセージ応答を生成する
const THREAD_ID = "thread_abc123";
const ASSISTANT_ID = "asst_abc123";
// スレッドでアシスタントの回答を生成する ================
const run = await openai.beta.threads.runs.create(
THREAD_ID, // スレッドを指定
{ assistant_id: ASSISTANT_ID } // アシスタントを指定
);
console.log(run.id);
// run_abc123
https://platform.openai.com/docs/api-reference/runs/createRun
Runs & Messages: 生成されたメッセージを取得する
const THREAD_ID = "thread_abc123";
const RUN_ID = "run_abc123";
// Runのステータス確認 ================
async function waitOnRun(run_id: string, thread_id: string): Promise<any> {
const startTime = Date.now();
while (run.status === "queued" || run.status === "in_progress") {
if (Date.now() - startTime > 300000) { // タイムアウトの設定
throw new Error("Timeout exceeded");
}
run = await client.beta.threads.runs.retrieve({
thread_id: thread_id,
run_id: run_id
});
await new Promise(resolve => setTimeout(resolve, 500));
}
return run;
};
waitOnRun(RUN_ID, THREAD_ID)
// アシスタントの生成したメッセージを取得する ================
const threadMessages = await openai.beta.threads.messages.list(THREAD_ID); // スレッドのメッセージを取得
const newMessage = threadMessages.data[0].content.text.value; // 最新のメッセージ
追加機能
各機能は、アシスタント作成時に設定します。
1) Data Retrieval: アシスタントがファイルを参照して回答する
// ファイルをアップロードする ================
const file = await openai.files.create({
file: fs.createReadStream(YOUR_FILE),
purpose: "assistants",
});
// ファイルを参照するよう設定する ================
const assistant = await openai.beta.assistants.create({
instructions: "あなたはカスタマーサポートのチャットボットです。ナレッジベースを活用して、顧客からの問い合わせに最適な対応をしましょう。",
model: "gpt-4-1106-preview",
tools: [{"type": "retrieval"}],
file_ids: [file.id]
});
- 最大ファイルサイズ: 「512MB/1ファイル」(※参考1)
- Assistant: 「最大20ファイル,または最大合計100GB」(※参考1、※参考2)
- Message: 「最大10ファイル」(※参考1)
2) Code Interpreter: アシスタントがコードを生成&実行する
// コードを生成&実行するよう設定する ================
const assistant = await openai.beta.assistants.create({
instructions: "あなたは数学の家庭教師です。数学の質問をされたら、その質問に答えるコードを書いて実行します。",
model: "gpt-4-1106-preview",
tools: [{"type": "code_interpreter"}]
});
3) Function Calling: アシスタントが自作の関数を実行する
// 使用する関数を指定する ================
const assistant = await openai.beta.assistants.create({
instructions: "あなたは天気ボットです。提供された機能を使って質問に答えてください。",
model: "gpt-4-1106-preview", // 使用するモデルの指定: gpt-4-1106-preview
tools: [{
"type": "function", // ツールのタイプ: function
"function": {
"name": "getCurrentWeather", // 関数名
"description": "場所の天気を取得", // 関数の説明
"parameters": { // 関数のパラメータ
"type": "object", // 関数のパラメータ: タイプ
"properties": { // 関数のパラメータ: 一覧
"location": {"type": "string", "description": "都市と州 例:サンフランシスコ、CA"}, // パラメータ1
"unit": {"type": "string", "enum": ["c", "f"]} // パラメータ2
},
"required": ["location"] // 必須パラメータ
}
}
}, {
"type": "function", // ツールのタイプ: function
"function": {
"name": "getNickname", // 関数名
"description": "都市の愛称を取得", // 関数の説明
"parameters": { // 関数のパラメータ
"type": "object", // 関数のパラメータ: タイプ
"properties": { // 関数のパラメータ: 一覧
"location": {"type": "string", "description": "都市と州 例:サンフランシスコ、CA"} // パラメータ1
},
"required": ["location"] // 必須パラメータ
}
}
}]
});
最近の記事

音楽生成AI「Suno」の使い方まとめ!作詞作曲が簡単にできる?
簡単に曲が作れるAIということでよく聞く「Suno(Chirp)」についてまとめました。
目次「Suno」とはテキストからさまざまな音声を生成する「Bark」歌詞から曲を生成する「Chirp」...
2023/11/24
2023/11/24

【Open AI】APIの料金まとめ|GPT・DALL·E・Whisperなど
Open AIのAPI(一部)の料金をまとめました。
参考のために日本円は「1ドル150円」で換算をしています。
目次Text generation: テキスト生成Assistants ...
2023/11/22
2023/11/22

【Next.js】Assistants APIの基本的なコードまとめ。
Open AIの「Assistants API」をNext.jsで使用する時の基本的なコードをまとめました。
目次Open AIのAPIセットアップ基本の使い方Threads: スレッドを作る...
2023/11/21
2023/11/21

【Next.js】Open AIのAPIでファイルをアップロードする方法。
今回は、Next.jsサイトからOpen AIのAPI(Upload file)で、ファイルをアップロードする方法を実装するのに時間がかかったのでその過程と最終コードをまとめます。(Vercelにデ...
2023/11/21
2023/11/22

「生成系AIのWEBプロダクトTOP50」をまとめてみる。
Andreessen Horowitzが出している記事で紹介されている「AIプロダクトの月間訪問者数ランキングTOP50」のサービスをまとめました。
目次ChatGPTcharacter.ai...
2023/10/3
2023/10/3

【Next.js 13】NextAuth+FireStoreにユーザー情報を保存する。
今回は、以下の3つをNext.js 13で実装するためのメモです。
Googleアカウントでログインできる
アカウント、セッション情報をFirestoreに保存する
サーバーサイ...
2023/7/12
2023/7/12