AI技術の進化とともに、OpenAIのAPIを使用して高度な機能を実現するプロジェクトが増えています。しかし、一方で、APIの利用料金は、トークン数やモデルの性能によって異なります。これにより、コスト管理が重要な要素となってきます。
そこで、本記事では、開発者向けにOpenAIのAPIをコスト効率よく利用するための方法を紹介します。具体的には、トークン数の計算と管理を行い、タスクに適したGPTモデルを選択する方法を解説します。これにより、コストを抑えつつ、最適なパフォーマンスを実現することが可能になります。
さらに、実践的なサンプルコードやTikTokenの使用方法も紹介しますので、すぐにでも活用できる内容を提供します。是非、この記事を参考にして、AI技術を効率的に活用してプロジェクトを成功させましょう。
GPTモデルの概要とコスト
「GPTモデルの概要とコスト」のセクションでは、現在利用可能なGPTモデルの概要と、それらのモデルに関連するコストについて説明します。以下に、このセクションでカバーする主な内容を示します。
GPT (Generative Pre-trained Transformer)の基本概念
GPTは、自然言語処理タスクにおいて高い性能を持つモデルで、大規模なテキストデータから事前学習された知識を活用します。Transformerアーキテクチャに基づいており、文章生成や質問応答など、多様なタスクに対応可能です。
GPT-3.5-turbo, GPT-4 8K, GPT-4 32Kの主な特徴と性能
GPT-3.5-turbo: OpenAIのGPT-3シリーズで、コストパフォーマンスが良く、幅広いタスクに適しています。最大4096トークンまで対応。GPT-4 8K: GPT-4シリーズのモデルで、より高い性能を持ち、最大8192トークンまで対応しています。GPT-4 32K: GPT-4シリーズの最上位モデルで、最高の性能を持ちますが、コストが高くなることが考慮されるべきです。最大32768トークンまで対応。
2023年4月現在の各モデルの比較(1K tokensあたりの料金)
モデル | 最大トークン数 | OpenAI API | GPT-3.5を1とした場合の料金 | ||
---|---|---|---|---|---|
Prompt (入力) |
Completion (出力) |
Prompt (入力) |
Completion (出力) |
||
GPT-3.5 turbo | 4096(4k) token | $0.002 | 1 | ||
GPT-4 8K context | 8192(8k) token | $0.03 | $0.06 | 15 | 30 |
GPT-4 32K context | 32768(32k) token | $0.06 | $0.12 | 30 | 60 |
最大トークン数とは?
トークンは、テキストを扱う際の基本単位で、通常は単語や文字の一部に対応します。GPTモデルは、入力と出力のトークン数を計算し、それに基づいてAPI利用料金が決定されます。
最大トークン数は、OpenAI APIに渡すデータの入力トークン数と、GPTからの出力トークン数の合計です。
例えば、gpt-3.5-turbo であれば入力・出力合わせて4096トークンまで使うことが出来ます。例えば、入力が3000トークンで出力が2000トークンの場合、最大数を超えるため出力は1096トークンとなります。
また、入力トークン数はOpenAI APIをコールせずに計算することが出来ますが、出力トークンは実行するまでわかりません。
そのためにも、コストを最適化させるためにはトークン数の制御が重要となります。
OpenAIのコスト最適化
OpenAIの利用料を最適化するには以下の考えが必要となります。
- GPT-3.5 turboなら$0.002と安価だが、GPT-4なら安くても15倍以上の料金が発生する
- 最大トークン数を超えると、適切な出力が得られなかったり、エラーが発生して無駄なコストが発生する
この2つをプログラムで制御することでコストを最適化します。コストを考えない場合、GPT-4の方が高性能ですが本記事ではコストのみで最適化を行います。
プログラムの大きな考え方としては
- 入力サイズはtiktokenでカウントする
- 出力サイズは事前にはわからないので、最大トークン数の一定の割合を最大入力サイズとして利用し、その割合を変数で指定できるようにする
- 入力された最大入力サイズに合わせてモデルを切り替える
プログラム実装
以下が実装するプログラムとなります。
最初の openai.api_key と最大トークン数の何割を入力に使うかの input_ratio の2つを設定するだけで使えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import openai from tiktoken import Tokenizer, TokenizerMixin from tiktoken.models import TokenizerModel openai.api_key = "your_api_key" # tiktokenによるトークン数計算の関数 def count_tokens(text): tokenizer = Tokenizer(TokenizerModel()) tokens = tokenizer.tokenize(text) return len(tokens) # 入力メッセージ messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"}, ] input_text = "\n".join([f"{msg['role']}:{msg['content']}" for msg in messages]) # 入力トークン数の計算 num_input_tokens = count_tokens(input_text) # 最大トークン数に対する入力トークン数の割合 (0.0〜1.0の範囲で指定) input_ratio = 0.5 # 各モデルの最大トークン数と最大入力トークン数 models = [ {"name": "gpt-3.5-turbo", "max_tokens": 4096, "max_input_tokens": int(4096 * input_ratio)}, {"name": "gpt-4-8k", "max_tokens": 8192, "max_input_tokens": int(8192 * input_ratio)}, {"name": "gpt-4-32k", "max_tokens": 32768, "max_input_tokens": int(32768 * input_ratio)}, ] # 適切なモデルを選択 selected_model = None for model in models: if num_input_tokens <= model["max_input_tokens"]: selected_model = model["name"] break if selected_model: response = openai.ChatCompletion.create( model=selected_model, messages=messages, ) generated_text = response.choices[0].message["content"].strip() print(f"Using {selected_model}: {generated_text}") else: print("Error: Input token count exceeds the limit of all available models.") |
まとめ
本記事では、OpenAI APIをコスト効率良く利用する方法について解説しました。GPT-3.5-turbo、GPT-4 8K、GPT-4 32Kといったモデルの特徴とコストを比較し、トークン数の計算と管理を行い、タスクに適したモデルを選択する方法を紹介しました。また、実践的なサンプルコードやTikTokenの使用方法も提供しました。
将来的には、GPTシリーズのモデルがさらに進化し、より高性能で効率的なモデルが登場することが予想されます。このような状況に対応するためには、API利用においても柔軟にモデル選択やトークン数の管理ができるよう、開発者は常に技術の進歩に注意を払い、最新の情報を取り入れることが重要です。
また、AI技術の発展に伴い、より多くの業界やアプリケーションでGPTモデルが活用されることが期待されます。そのため、コストと性能のバランスを適切に取りながら、独自のビジネスやプロジェクトに適したGPTモデルを活用することが、今後の成功につながるでしょう。