概要
- OpenAIのAPIを使ってレスポンスを英語で返してもらい、トークン量の節約をします。
- レスポンスをDeepLのAPIを使って日本語翻訳して出力します。
前提条件
- OpenAIの各種IDやAPIキーを取得している事。
- DeepLのAPIキーを取得する事。
開発環境
- python
- VScode
使用するモジュール
インポート
import os
from openai import OpenAI
import markdown
import requests
OpenAIのモデルについて
- OpenAIについては下記を参照
- OpenAIモデルについて
OpenAIにアクセスし、英語のレスポンスを受ける
OpenAI_API
## Markdownファイルを読込み、txt形式で返す関数
def markdown_txt(input_file_path):
with open(input_file_path, 'r', encoding='utf-8') as markdown_file:
markdown_content = markdown_file.read()
return markdown_content
## マークダウンファイル形式に保存する関数
def save_to_markdown(filename, content):
with open(filename, 'w') as file:
file.write(content)
jp_txt_input = markdown_txt([マークダウンのファイルパス])
set_en="すべての回答を英語でお願いします。"
## OpenAIにアクセス
client = OpenAI(api_key=[OpenAiのAPIキー],organization=[組織id],project=[プロジェクトid])
stream = client.chat.completions.create(
model="gpt-4o-mini", ##モデルを設定
messages=[
{"role": "system", "content": set_en},
{"role": "user", "content": jp_txt_input}],
stream=False,
)
## OpenAIから返ってきた内容(英語)をマークダウン形式で保存
en_post_txt = stream.choices[0].message.content
save_to_markdown(f'[保存先のファイルパス].md', en_post_txt)
返ってきた英語の内容をDeepLで翻訳し、日本語で出力
DeepL_API
input_text = en_post_txt
input_lang = 'EN'
target_lang = 'JA'
# パラメータの指定
params = {
'auth_key': [DeepLのAPIキー],
'text': input_text,
'source_lang': input_lang,
'target_lang': target_lang
}
# リクエストを投げる
jp_request = requests.post("https://api-free.deepl.com/v2/translate", data=params)
jp_result_json = jp_request.json()
jp_post_content=jp_result_json['translations'][0]['text']
## MDとして出力
save_to_markdown(f'[出力先ファイルパス].md',jp_post_content)
最後に
- モデル:gpt-4o-miniの場合、日本語出力に比べ英語出力の方が約2割ほどのトークン量削減ができました。
- OpenAiのモデルによってトークン量や値段が異なります。
モデル | max output tokens | 入力(単位:ドル/1M tokens) | 出力入力(単位:ドル/1M tokens) |
---|---|---|---|
gpt-4-mini | 16,384 | 0.15 | 0.6 |
gpt-4o | 4,096 | 5 | 15 |
gpt-4-turbo | 4,096 | 10 | 30 |
gpt-4 | 8,192 | 30 | 60 |
gpt-3.5-turbo | 16,385 | 0.5 | 1.5 |
上記の表は2024/08時点でまとめた表です。
詳細は公式で確認してください。