アップデートされたAssistants APIを試す

# はじめに
本記事のタイトルをテーマに、社内勉強会で発表しました。
使用したスライドは以下です。
<script async class="speakerdeck-embed" data-id="bd1bc8ff60ea425fb1e4e575e7488193" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

本記事では、Chatbotを使用して実際にAssistants APIを試した様子を記載します。
スライドに記載の通り、今回は主にfile_search、code_interpreter、スレッドによる会話履歴保持を試します。

Chatbotは以下記事を参考に作成しました。

https://note.com/nike_cha_n/n/n6110881d7c3e

Assistants APIについては以下です。

https://platform.openai.com/docs/assistants/overview

Assistants APIのv2のアップデート内容については以下です。

https://platform.openai.com/docs/assistants/whats-new

# 実際にAssistants APIを試す
今回モデルは先日発表されたGPT-4oを使用してみました。
![画像 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/fbf5a9c0-83d7-9511-cef6-57f17e35ff75.png)

まずはfile_searchを試してみます。
ファイルの有無で比較するので、まずはファイル無しで試してみます。
今回用意したファイルは、うなぎパイのWikipediaをコピーしたテキストファイルです。[^うなぎパイ]

Chatbotを起動し、うなぎパイについて聞いてみます。
![画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/0d1a812e-610b-29de-9192-0b6df8629028.png)
うなぎパイの情報を与えていないので、間違った回答が出力されました。
正しくは「うなぎのじゅもん」です。

ではファイルをアシスタントへ与えます。

まずOpenAIのコンソール画面を開きます。
![画像9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/290bb79b-3fe8-6913-ae48-5990fbb364f4.png)

ここでファイルをアップロードします。
![画像 (1-1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/374bcb3f-66a1-f7f9-a55c-3f05ba8a97cb.png)

![画像 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/afe9693a-e2e0-011c-bcef-6a3a7e060284.png)

![画像 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/a8950e59-d871-96c9-3f4f-cd2d78d7a119.png)

![画像 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/2e247bfb-9061-fbcc-0533-a2af68e847d5.png)
アップロードしてVector Storeが作成されました。
アップロードはコンソール画面でお手軽にできますね。

ではもう一度Chatbotを起動します。
もう一度うなぎパイについて聞いてみますが、その前に記憶保持を試してみます。

私の好きなゲームをChatbotに教え、覚えているかを聞いてみます。
![画像 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/78d88441-ffd7-99e4-582a-fed115a90501.png)
すぐなので覚えていますね。後でまた覚えているかを聞いてみます。

今回スレッドのメッセージ保持上限を6に設定しており、アシスタントとのやり取りを3回するとそれより古いやり取りが破棄されるはずなので、4回目以降で聞くと覚えていないはずです。
この「私の好きなゲームを覚えていますか？」の質問で私の好きなゲームの情報が保持されている可能性もあるかもしれないので、ここから数えて4回目以降で聞いてみます。

では改めて、もう一度うなぎパイについて聞いてみます。
![画像 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/3a070f3e-b7ea-b0be-b9fc-0a90ac77e454.png)
正しく解答してくれました。
ちょっと踏み込んだ内容についても聞いてみましたが、こちらも正しく解答してくれました。

出力に【】で囲われた文字がありますが、これまでに試していて確認した感じでは、file_searchが使用された場合は、この【】で囲われた文字が付くみたいです。[^数字の意味]
また、アップロードしたファイル名が付いているので、このファイルを使用したということのようです。[^ファイル名]

次にcode_interpreterを試してみます。
フィボナッチ数列を出力するPythonコードを実行させてみます。
同時に記述したPythonコードも出力させてみます。
![画像 (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/86019ac1-0c75-a23c-505d-516127f4d494.png)
コード付きで正しく出力されました。
 
これでアシスタントとのやり取りを「私の好きなゲームを覚えていますか？」の質問から数えて3回行ったので、私の好きなゲームを覚えているか聞いてみます。
![画像 (8-1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/9785919b-5b4a-a259-daad-4e437b3fa00c.png)
覚えていないですね。これで破棄されていることが確認出来ました。

これまでにした質問で、覚えている分を出力させてみます。
![画像 (8-2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/768789/16a1ec2b-5e1c-7477-ec83-885084fca4f1.png)
3回分を保持するので、この質問を除いて2つの質問を覚えていますね。[^質問保持]

こんな感じで、file_search、code_interpreter、スレッドによる会話履歴保持を試すことが出来ました。

# おわりに
間違っている部分などありましたら指摘していただけると幸いです。

# 参考記事
https://note.com/nike_cha_n/n/n21fe47546e8d

https://note.com/npaka/n/n4438384c96d0

https://developer.mamezou-tech.com/blogs/2024/04/21/openai-file-search-intro/

https://note.com/mahlab/n/nba20ea09648d

[^うなぎパイ]:うなぎパイにした理由は、私がうなぎパイ好きだからです。
[^数字の意味]:【】内の数字の意味は分からないです。ご存知の方がいましたら教えてください…。
[^ファイル名]:これまでに試していて、ファイル名が付く場合もあれば、付かない場合もありました。そのため安定しないようです。謎。
[^質問保持]:これまでにこの質問を試していて、2つの質問を覚えているはずが、1つの質問しか覚えていない場合もあれば、1つも覚えていない場合もありました。そのためこちらも安定しないようです。謎。