はじめに
Workatoでも遂に、OpenAI(Chat GPT)のコネクタが登場し、レシピでOpenAIが使える様になりました!
そこで私も、コネクションを張り、主に翻訳でOpenAIを使用しようとしたのですが
長い文章やファイルを翻訳しようとする際に、
などの事態に陥りました。
色々調べたところ、これらは共にOpenAIをAPI呼び出しする際のToken数に関する制限に関係していることがわかりました。この記事では、その制限に関する説明や、力技ではありますがWorkato上で制限を回避する方法を説明いたします。
※なお使用したOpenAIのverはGPT-3.5 turboとなります。
OpenAIのToken数制限
トークンは、テキストを扱う際の基本単位で、通常は単語や文字の一部に対応します。
例えば、英語と日本語で同程度の文章量で、トークン数を見てみると、文字数だけでなく、トークンの作り方・トークン数に差があることがわかります。
(トークン数はこちらからテスト・確認することができます。)
ここで調べたところ、gpt-3.5-turbo のAPIで最大トークン数は、APIに渡すデータの入力トークン数と、GPTからの出力トークン数を合わせて4096トークンまでとなっていました。
実際にWorkatoのレシピで、OpenAIのAPIに渡すデータの入力トークン数を4000弱とし、翻訳を依頼してみると、
翻訳が途中で終了し、入力(Prompt tokens)
と出力(Completion tokens)
の合計が4096前後に制限されていることがわかります。
制限を回避する方法(方針)
今回は翻訳(英→日)を例に、入力トークン数が多い時、API制限に引っかからず、全文が翻訳される様なレシピを作成しました。ロジックを組みました。
基本的な方針としては、
- 英語: 50トークンが大体250文字
- 日本語: 50トークンは大体50文字
- 英語の文字数(Characters)は日本語の大体2倍
なことから、翻訳したいデータ(英語)を5000文字ずつ取り出しながら翻訳し、ループを回しながら、翻訳結果を結合していく方針を取りました。
この時、 切り出した5000文字(英語)は約1000 トークンに相当し、
翻訳後の日本語は、英語の半分の約2500文字(約2500 トークン相当)となるため、
(英語、日本語のトークン数換算の例はページ上部)
各回のAPI呼び出しにおいて、トークン数は約3500トークンとなり、制限である4096トークンを下回ることができます。
だいぶ長くなってしまったので、レシピの実装は次回に持ち越したいと思います。
後編をご覧ください!
後編はこちら!
https://qiita.com/tsuyu_masa/items/5dfa405d665a915e06ea