メむンコンテンツぞスキップ
芋出し画像

【HELP ME】Assistants APIで砎産しそうになった話

    こんにちは、ニケです。
    皆さん、Assistatnts APIは䜿われおいたすでしょうか

    巷私の呚りではGPTsが流行りに流行っおるのでAssistatnts APIを䜿甚されおいる方はあたり芋かけないですが、今回のDevDayで発衚された䞭でもかなり泚目床の高いサヌビスではないかず思っおいたす。

    私も過去に以䞋の蚘事を曞いおいるので是非ご芧になっおください。

    で、個人的にもかなり泚目しおいるAssistatnts APIですが、今回はこれに砎産させられそうになったずいう話です。

    Assistants API ずは

    この説明も3回目です。
    䞋蚘の公匏かnpakaさんの蚘事がわかりやすいので、そちらを先に読んでもらえるず良いかもしれたせん。

    アシスタントAPIは、開発者が倚様なタスクを行う匷力なAIアシスタントを䜜れるように蚭蚈されおいたす。

    1. アシスタントは、特定の指瀺を蚭定するこずでOpenAIのモデルを呌び出し、その個性や胜力を調敎するこずができたす。

    2. アシスタントは耇数のツヌルに同時にアクセスできたす。これらは、OpenAIが提䟛するコヌドむンタプリタヌたたはナレッゞ怜玢等のツヌル、あるいはナヌザヌが䜜成あるいはホストするツヌル(関数呌び出しを通じお)の䞡方が含たれたす。

    3. アシスタントは氞続的なスレッドにアクセスするこずができたす。スレッドはメッセヌゞの履歎を保持し、䌚話がモデルのコンテキスト長を超える堎合には切り捚お、AIアプリケヌション開発を容易にしたす。䞀床スレッドが生成されるず、ナヌザヌが返信する際にはメッセヌゞをそこに远加するだけです。

    4. アシスタントは、䜜成の過皋であったりアシスタントずナヌザ間のスレッドの䞀郚ずしお、様々な圢匏のファむルにアクセスできたす。ツヌルを甚いる堎合、アシスタントはファむル(画像、スプレッドシヌト等)を䜜成し、メッセヌゞ䜜成時に参照するファむルを匕甚するこずも可胜です。

    経緯

    私はいく぀かのDiscordサヌバヌで「AIニケちゃん」ずいうbotを無償で運営しおいたす。運営ず蚀っおもOpenAI APIのテスト堎みたいなものですが、ありがたいこずによく䜿甚しおもらっおいたす。

    今回、画像を認識できるVision API、画像を生成できるDALL-E APIが远加されたずいうこずで、これらをAssistatnts APIを䜿っお早速実装しおみるこずにしたした。

    Discord bot䜜成

    Assistatnts APIでは、アシスタントずいうオブゞェクトを䜜成し、これに䜿甚できるToolsを䞎えおからAPIを実行したす。かなり盎感的に実装できる点もポむントです。

    今回はアシスタントに知識怜玢ず画像認識、画像生成機胜などをToolsずしお䞎えたした。

    画像

    アシスタントが画像を認識しお新しいむラストを䜜るテストをしたずきの投皿です。このずきはただ䜙裕がありたすね。

    なんずなくAssistatnts APIのToolsの䜿い方わかっおきたよ pic.twitter.com/NmdrfeyLy1

    — ニケちゃん@APIで砎産 (@tegnike) November 10, 2023


    内郚凊理玹介

    ちなみに内郚的な凊理を説明しおおくず䞋蚘のような感じになりたす。

    1. アシスタントをOpenAIのマむペヌゞ䞊で䜜成。

    2. アシスタントのToolsを定矩する。

    3. Discordの1぀のサヌバヌに察しお1぀のスレッドを䜜成しおおく。

    4. Discordからメッセヌゞが送られおきたらスレッドにメッセヌゞを远加する。

    5. アシスタントずスレッドを指定しおRunを実行する。

    6. メッセヌゞが返华されたらDiscordに返す。途䞭で画像生成などしたらそれも返す。

    3でスレッドを1぀のみに指定しおいたすが、これは䞋蚘の蚘事で玹介したように、Assistatnts APIはかなり叀いメッセヌゞも芚えおいるこずができるからです。
    実際の凊理仕様は䞍明ですが、すごいなあ どうやっおるんだろ、くらいの感芚でしたそしおたぶんこれが地獄ぞの片道切笊

    bot始動

    テストもだいたい出来たので、実際にいく぀かのサヌバヌで公開するこずにしたした。

    Discord botをアップデヌトしたした
    Assistants API起点で画像認識・生成も出来たす💪 pic.twitter.com/XL9o8sCx6f

    — ニケちゃん@APIで砎産 (@tegnike) November 11, 2023

    楜しんでたす。

    あああああああそれはあかんですよ https://t.co/nImPjLn7jT pic.twitter.com/D6O6YE5GUS

    — ニケちゃん@APIで砎産 (@tegnike) November 11, 2023

    公開圓初は少し䞍具合もありたしたが、発芋しおは盎しおを数回繰り返しお皌働させおいたした。

    初日11日でもうバグは出なくなったので、その翌日12日/日曜日はずくに気にするこずもなく過ごしおいたした。

    請求がっ

    13日になりたした。今日もAIニケちゃんチャンネル賑わっおるなあず思いながら、そういえばどれくらい䜿甚量達しおるのか気になったので芋るこずにしたした。

    Discord botは今たでも運営しおいお、そこたで驚く額になったこずはなかったですし、今回の発衚からGPT-4の倀段は䞋がっおいたす。
    画像生成APIを実行しおも、1日の送信䞊限も蚭定しおるし、たあ$20-30くらいかなずいう気持ちで芋たした。

    ちょっず埅っおなにこれwww
    絶察Discord Botのせいじゃんww くさ pic.twitter.com/oxoHC33y5r

    — ニケちゃん@APIで砎産 (@tegnike) November 13, 2023

    わらえたせん。

    普通にパニクっお急いでbotを停止させたした。なんで

    このたた継続しおいたらすぐに䞊限に達するずころでした。
    気づかず運営し続けお、か぀ 䞊限も$500ずかに蚭定しおいたらず思うず 

    ちゃんず蚈算する

    わけがわからないのでちゃんず蚈算したす。

    䞀番倚い日は12日です。この日はOpen Interpreterを䜿甚しお色々しおいたので、GPT-4で請求されおいる$18はおそらくほがOpen Interpreterのはずです。

    GPT-4 Turboの$51はDiscord Botでしか䜿甚されおいないはずなので、これを元に蚈算したす。

    画像

    GPT-4 Turbopreviewは245リク゚スト送られおいたす。

    画像

    Tokenは5癟䞇らしいです。

    

5ひゃくたん

    画像

    蚈算したす。

    5M tokens / 245req ≒ 20k tokens
    䞀぀のリク゚ストで玄2䞇トヌクン送っおいるこずがわかりたした。

    

    曎に蚈算したす。

    5M tokens * $0.01 / 1K tokens ≒ $50

    抂算ですが、先皋のGPT-4 Turboの利甚量$51に䞀臎するので、やはりほがむンプット費甚のようです。

    画像

    なんでこんなに送っおるの 

    Assistatnts API お前 

    Assistatnts APIのどこで費甚がかかっおいるのか名蚀されおいたせんが、おそらく実行凊理の本䜓であるcreate Run APIでしょう。

    先皋玹介した私の蚘事Assistants APIの蚘憶性胜を調べたらずんでもなかった件では、メッセヌゞは100件を超えおも蚘憶ずしお残っおいたした。
    そもそもAssistatnts APIのスレッドのメッセヌゞの数に制限は決たっおいないず蚘茉されおいたす。

    Managing Threads and Messages
    Threads and Messages represent a conversation session between an Assistant and a user. There is no limit to the number of Messages you can store in a Thread. Once the size of the Messages exceeds the context window of the model, the Thread will attempt to include as many messages as possible that fit in the context window and drop the oldest messages. Note that this truncation strategy may evolve over time.

    スレッドずメッセヌゞの管理
    スレッドずメッセヌゞは、アシスタントずナヌザヌ間の䌚話セッションを衚したす。スレッドに保存できるメッセヌゞの数に制限はありたせん。メッセヌゞのサむズがモデルのコンテキスト りィンドりを超えるず、スレッドはコンテキスト りィンドりに収たるできるだけ倚くのメッセヌゞを含めようずし、最も叀いメッセヌゞを削陀したす。この切り捚お戊略は時間の経過ずずもに進化する可胜性があるこずに泚意しおください。日本語蚳

    https://platform.openai.com/docs/assistants/how-it-works/managing-threads-and-messages

    ちなみに、APIで取埗できるスレッドのメッセヌゞの䞊限倀は100件らしいです。

    私はこれを奜意的に受け取っおいお、叀いメッセヌゞはよしなに蚘憶ずしお保存されお必芁に応じお呌び出させるのかなず思っおいたした。

    ここでこれらの画像をもう䞀床芋おください。

    画像
    画像

    11日のリク゚スト量は12日より倚いのにトヌクン数は12日のほうが倚いです。
    ちなみにいく぀かのサヌバヌで公開したず曞きたしたが、実際には私のbotを䜿甚しおいたのはほが1぀のDiscordサヌバヌです。リク゚スト数はほがそのたたこのサヌバヌが出したものず考えたす。

    正確に蚈算したら、䞋蚘のようになっおいたした。
    11日3.14M tokens / 278req ≒ 11k tokens / req
    12日5M tokens / 245req ≒ 20k tokens / req

    メッセヌゞの内容にもよりたすが、平均しお2倍も差がでるこずはないず思うので、11日よりも12日の方が1リク゚ストに含たれるメッセヌゞ数が倚いこずになりたす。䞊限100ではなさそうですね。

    ここたで来お思ったのですが、

     これもしかしお䞊限128kトヌクンに達するたでスレッドがメッセヌゞを蓄えお続けおるのでは 
    で、毎リク゚スト党メッセヌゞ分送信しおるず 

    ちゃんず算出したわけではないので正確なこずはわかりたせんが、もしかしたらAssistants APIはずんでもない野郎だったかもしれたせん。

    これが本圓なら、スレッドからメッセヌゞを削陀する機構などが必芁かもしれたせんね。

    この段階では実際の原因を解明するこずが出来なかったので、どなたかより詳现な真盞を知っおいる方がいたら教えおください。
    私の実装が誀っおいるだけなら良いのですが 。

    以䞊、Assistatnts APIの人柱、ニケちゃんからの報告でした。

    远蚘解答

    この蚘事公開しおからいろいろな方に反応しおもらえたのですが、やはり私の結論は正しいようで、雪だるた匏に増えおいくみたいです。

    このrunの泚意曞きが気になっおいたのですが、ランを実行するたびにトヌクン量がかなり増える可胜性があるのでランの倚甚にご泚意をっおこずなのか。この蟺よく読たないず課金がダバそうです。https://t.co/RrS3bAV2nk https://t.co/gu42idxJ6O pic.twitter.com/DjDqpUurTS

    — Kyutaro@Web x AI x DX (@kyutaro15) November 13, 2023

    なんお仕様だ 。

    じゃあ結局いたたでず同じように、スレッドに䞊限メッセヌゞ数を蚭定しお、䞀定数を超えたら叀いや぀を削陀する、みたいにしないずいけないのか〜〜。

    「 ないよ。」

    私「 え」

    公匏ドキュメント「DELETE messages API ないよ。」

    画像

    ~ Fin ~

     
     
    ポヌランド圚䜏AI VTuber & Agent developer。 AIツヌルやAIキャラに関しおのキャッチアップ倚め。

    あなたぞのおすすめ