LoginSignup
2
1

Workato:OpenAIに文字数の多いデータを扱わせる方法(翻訳を例に)[前編]

Last updated at Posted at 2023-11-30

はじめに

Workatoでも遂に、OpenAI(Chat GPT)のコネクタが登場し、レシピでOpenAIが使える様になりました!

そこで私も、コネクションを張り、主に翻訳でOpenAIを使用しようとしたのですが

長い文章やファイルを翻訳しようとする際に、

  1. そもそもOpenAIへの入力時にエラーが出る(以下)
    スクリーンショット 2023-11-25 18.02.20.png

  2. OpenAIに読み込ませることはできるが、翻訳結果の出力が途中で止まってしまう

などの事態に陥りました。

色々調べたところ、これらは共にOpenAIをAPI呼び出しする際のToken数に関する制限に関係していることがわかりました。この記事では、その制限に関する説明や、力技ではありますがWorkato上で制限を回避する方法を説明いたします。

※なお使用したOpenAIのverはGPT-3.5 turboとなります。

OpenAIのToken数制限

トークンは、テキストを扱う際の基本単位で、通常は単語や文字の一部に対応します。

例えば、英語と日本語で同程度の文章量で、トークン数を見てみると、文字数だけでなく、トークンの作り方・トークン数に差があることがわかります。

(トークン数はこちらからテスト・確認することができます。)


スクリーンショット 2023-11-25 18.38.39.png


スクリーンショット 2023-11-25 18.38.49.png

ここで調べたところ、gpt-3.5-turbo のAPIで最大トークン数は、APIに渡すデータの入力トークン数と、GPTからの出力トークン数を合わせて4096トークンまでとなっていました。

実際にWorkatoのレシピで、OpenAIのAPIに渡すデータの入力トークン数を4000弱とし、翻訳を依頼してみると、

翻訳が途中で終了し、入力(Prompt tokens)出力(Completion tokens) の合計が4096前後に制限されていることがわかります。

スクリーンショット 2023-11-25 18.49.04.png

制限を回避する方法(方針)

今回は翻訳(英→日)を例に、入力トークン数が多い時、API制限に引っかからず、全文が翻訳される様なレシピを作成しました。ロジックを組みました。

基本的な方針としては、

  • 英語: 50トークンが大体250文字
  • 日本語: 50トークンは大体50文字
  • 英語の文字数(Characters)は日本語の大体2倍

なことから、翻訳したいデータ(英語)を5000文字ずつ取り出しながら翻訳し、ループを回しながら、翻訳結果を結合していく方針を取りました。

IMG_8113.JPG

この時、 切り出した5000文字(英語)は約1000 トークンに相当し、

翻訳後の日本語は、英語の半分の約2500文字(約2500 トークン相当)となるため、

(英語、日本語のトークン数換算の例はページ上部)

各回のAPI呼び出しにおいて、トークン数は約3500トークンとなり、制限である4096トークンを下回ることができます。

だいぶ長くなってしまったので、レシピの実装は次回に持ち越したいと思います。
後編をご覧ください!

後編はこちら!
https://qiita.com/tsuyu_masa/items/5dfa405d665a915e06ea

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1