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倍以上の料金が発生する
- 最大トークン数を超えると、適切な出力が得られなかったり、エラーが発生して無駄なコストが発生する
プログラムの大きな考え方としては
- 入力サイズはtiktokenでカウントする
- 出力サイズは事前にはわからないので、最大トークン数の一定の割合を最大入力サイズとして利用し、その割合を変数で指定できるようにする
- 入力された最大入力サイズに合わせてモデルを切り替える
プログラム実装
以下が実装するプログラムとなります。 最初の openai.api_key と最大トークン数の何割を入力に使うかの input_ratio の2つを設定するだけで使えます。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モデルを活用することが、今後の成功につながるでしょう。