mochi-neko / ChatGPT-API-unity

A client library of ChatGPT chat completion API for Unity.
MIT License
117 stars 14 forks source link

逐次出力(stream =true)でトークン数の取得は可能ですか? #7

Closed atorih closed 1 year ago

atorih commented 1 year ago

現状model gpt-3.5-turboまたはgpt-4でのトークン数の取得を行おうと思っています。 そもそも逐次出力でトークン数の取得ができれば問題ないのですが、可能なのでしょうか。 また、自分の中での実装イメージは出力が完了したテキストでトークン数の計算を行う というものでしたが、 Assetフォルダ内に作成したスクリプトからはusing TiktokenSharp;に到達できませんでした。 そこで同階層にスクリプトを移動しましたところ今度はusing Cysharp.Threading.Tasks;が使用できなくなりました。 おそらく権限というか衝突を避けるためにこのような作りになっているかとは思いますが、何か方法はございませんでしょうか。

生成された文字列を以下の関数に渡せればいいと思うのですが。 public int CalculateTokenLength(string _text) { // Specify model name. TikToken tikToken = TikToken.EncodingForModel("gpt-4"); // Encoding is tokenizing. List tokens = tikToken.Encode(_text); return tokens.Count; }

お忙しいところ恐縮ですが、ご回答いただければ幸いです。

atorih commented 1 year ago

加えて申し訳ございません UnauthorizedAccessException: Access to the path 'C:\Program Files\Unity\Hub\Editor\2021.3.16f1\Editor\bpe' is denied.

スクリプト/ローカルでのカウントを行うとこちらのバグも発生してしまいます。 こちらで権限を変更する必要があるのでしょうか。

mochi-neko commented 1 year ago

ご連絡ありがとうございます!

現状model gpt-3.5-turboまたはgpt-4でのトークン数の取得を行おうと思っています。 そもそも逐次出力でトークン数の取得ができれば問題ないのですが、可能なのでしょうか。

stream = true の場合のResponseには "usage" が入っていないため、APIからは取得できない認識です。

おっしゃる通り TikToken を使用して自分で計算する形が良いかと思います。

また、自分の中での実装イメージは出力が完了したテキストでトークン数の計算を行う というものでしたが、 Assetフォルダ内に作成したスクリプトからはusing TiktokenSharp;に到達できませんでした。

TikTokenSharp の実装は拡張機能的な立ち位置で含めていまして、ご自身のUnity ProjectでAssembly Definitionを作成し、Assembly Definition ReferencesMochineko.TiktokenSharp を追加していただけると使用できるかと思います。

参考:

もし Assembly Definition を使用するのが難しい環境でしたら設定を変更しますのでおっしゃってください。

加えて申し訳ございません UnauthorizedAccessException: Access to the path 'C:\Program Files\Unity\Hub\Editor\2021.3.16f1\Editor\bpe' is denied. スクリプト/ローカルでのカウントを行うとこちらのバグも発生してしまいます。 こちらで権限を変更する必要があるのでしょうか。

すみません、こちらは実装の不具合になります。 Macでは動作していたので問題ないと認識していましたが、Unity向けの実装としては不適切な箇所がありました。 修正いたしますので少々お待ちください。

mochi-neko commented 1 year ago

加えて申し訳ございません UnauthorizedAccessException: Access to the path 'C:\Program Files\Unity\Hub\Editor\2021.3.16f1\Editor\bpe' is denied. スクリプト/ローカルでのカウントを行うとこちらのバグも発生してしまいます。 こちらで権限を変更する必要があるのでしょうか。

すみません、こちらは実装の不具合になります。 Macでは動作していたので問題ないと認識していましたが、Unity向けの実装としては不適切な箇所がありました。 修正いたしますので少々お待ちください。

こちらの問題ですが、ver0.7.3にて修正しました。 手元のWindowsで動作は確認していますが、ご自身の環境でも問題ないかご確認いただいてもよろしいでしょうか?

atorih commented 1 year ago

mochi-neko様 ご回答いただきありがとうございます。

stream = true の場合のResponseには "usage" が入っていないため、APIからは取得できない認識です。 おっしゃる通り TikToken を使用して自分で計算する形が良いかと思います。

かしこまりました。ありがとうございます。

TikTokenSharp の実装は拡張機能的な立ち位置で含めていまして、ご自身のUnity ProjectでAssembly Definitionを作成し、Assembly Definition References に Mochineko.TiktokenSharp を追加していただけると使用できるかと思います。

自分の知識不足でした。 一度こちらの記事通りに試してみます。

すみません、こちらは実装の不具合になります。 Macでは動作していたので問題ないと認識していましたが、Unity向けの実装としては不適切な箇所がありました。 修正いたしますので少々お待ちください。

いえいえ!とんでもございません。 かしこまりました。ありがとうございます。

こちらの問題ですが、ver0.7.3にて修正しました。 手元のWindowsで動作は確認していますが、ご自身の環境でも問題ないかご確認いただいてもよろしいでしょうか?

再度確認させていただきます。 迅速な対応ありがとうございます。

atorih commented 1 year ago

mochi-neko様 無事動作が確認できました。

大変ありがとうございました。