日本語はそのまま要約/英語は日本語に翻訳して要約 ― 初心者向けハンズオン
この章で学ぶこと
- OpenAI API を使って日本語の字幕テキストを要約する
- 英語の字幕を日本語に翻訳して要約する
- 「最小のコード」で動くところから始める考え方
まずは “日本語→要約” の小さな成功を作ってから、”英語→日本語で要約” に広げます。 例のごとく、動く芯を作ってから少しずつ育てましょう。
事前準備(初回だけ)
- ライブラリを入れます
- Windows:
pip install openai
Mac:
pip install openai
- APIキーを環境変数に設定します
Windows(PowerShell):
setx OPENAI_API_KEY "sk-...あなたのキー..."
(新しいターミナルを開き直す)Mac/Linux:
export OPENAI_API_KEY="sk-...あなたのキー..."
OpenAI の最新Pythonクライアントは
from openai import OpenAI; client = OpenAI()
で使い始めます。実行リクエストはclient.responses.create(...)
がシンプルです。(OpenAI Platform)
3-A: 日本語テキストを要約しよう(最小コード)
何を作る?
Step 2 で保存した transcript_ja.txt
(日本語の全文字幕)を300〜500字の日本語要約にします。画面にも出し、summary_ja.md
にも保存します。
まずコード
以下の内容で 03A_ai_summary_ja.py
を作成してください。
# 03A_ai_summary_ja.py
from openai import OpenAI
import pathlib
INPUT_FILE = "transcript_ja.txt" # Step 2 で作った日本語字幕
OUTPUT_FILE = "summary_ja.md" # 要約の保存先
# ① 入力テキストを読む
text = pathlib.Path(INPUT_FILE).read_text(encoding="utf-8")
# ② OpenAI クライアントを用意
client = OpenAI() # OPENAI_API_KEY を環境変数に設定済みであること
# ③ 日本語要約の依頼文(プロンプト)
prompt = (
"次の文章を日本語で300〜500字に要約し、最後に重要ポイントを3〜5個の箇条書きで示してください。\n"
"専門用語は噛み砕いて、初学者にも分かる説明にしてください。\n\n"
f"=== 元テキスト ===\n{text[:12000]}\n"
)
# ④ モデルにリクエスト(最小形)
res = client.responses.create(
model="gpt-4.1", # 軽量モデルに変えてもOK(例: gpt-4.1-mini / gpt-4o-mini)
input=prompt
)
summary = res.output_text # ⑤ 生成された要約テキスト
# ⑥ 画面に出す + ファイル保存
print(summary)
pathlib.Path(OUTPUT_FILE).write_text(summary, encoding="utf-8")
print(f"\n✅ Saved: {OUTPUT_FILE}")
どう読む?(行ごとの“やさしい説明”)
- 入力テキストを読む:
read_text
はファイルの中身を1つの長い文字列として手に入れます。 - OpenAI クライアント:
OpenAI()
と書くと「AIにお願いする窓口」を作れます(キーは環境変数から自動取得)。(OpenAI Platform) - プロンプト:AIに何をして欲しいかを自然文で伝えるところです。今回は「日本語で要約+箇条書き」。
長文すぎると入らないことがあるので、まずは
text[:12000]
として先頭だけ渡しています(後で改良可能)。 client.responses.create(...)
:AIに「これを処理して」と依頼します。res.output_text
:返ってきた要約の本文だけを取り出すお手軽プロパティです。(OpenAI Platform)- 保存:
write_text
でMarkdownとして保存。まずはシンプルに“1ファイルに全部”でOKです。
うまくいきましたね!🎉 これで「日本語→要約」が完成です。
3-B: 英語の字幕を“日本語に翻訳して”要約しよう(最小コード)
何を作る?
Step 4(英語対応)で保存した transcript.txt
(英語の全文字幕)を読み込み、
内容を分かりやすい日本語に翻訳したうえで要約します。出力は summary_from_en_ja.md
。
まずコード
以下の内容で 03B_ai_summary_en_to_ja.py
を作成してください。
# 03B_ai_summary_en_to_ja.py
from openai import OpenAI
import pathlib
INPUT_FILE = "transcript.txt" # 英語の字幕ファイル
OUTPUT_FILE = "summary_from_en_ja.md" # 日本語要約の保存先
text = pathlib.Path(INPUT_FILE).read_text(encoding="utf-8")
client = OpenAI()
prompt = (
"次の英語テキストの内容を日本語に翻訳し、全体を300〜500字で分かりやすく要約してください。"
"最後に重要ポイントを3〜5個、短い日本語の箇条書きで示してください。"
"訳語は専門用語を避け、初学者に伝わる平易な表現を優先してください。\n\n"
f"=== Source (EN) ===\n{text[:12000]}\n"
)
res = client.responses.create(
model="gpt-4.1", # 例: gpt-4.1-mini / gpt-4o-mini でもOK
input=prompt
)
summary = res.output_text
print(summary)
pathlib.Path(OUTPUT_FILE).write_text(summary, encoding="utf-8")
print(f"\n✅ Saved: {OUTPUT_FILE}")
どう読む?(行ごとの“やさしい説明”)
- 英語→日本語へ:プロンプトの文章で「翻訳してから要約」という手順の希望をハッキリ伝えています。
- 平易な表現:読み手が初学者なので、難しい単語を避けるように頼んでいます。
- 処理の流れ:読み込み → プロンプト作成 →
responses.create
→output_text
取り出し → 画面+保存、というシンプルな直線です。
実行してみよう
日本語の要約
python 03A_ai_summary_ja.py
できあがった summary_ja.md
を開いて、内容がコンパクトにまとまっていることを確認しましょう。
英語→日本語で要約
python 03B_ai_summary_en_to_ja.py
summary_from_en_ja.md
を開いて、読みやすい日本語になっているか確認してみましょう。
🎉 おめでとうございます! ここまでで 「日本語も英語も、日本語の要約として使える」 ところまで来ました。
了解!**Step 3 の末尾に“そのまま足すだけ”**の最小ログ(verbose)を用意しました。 既存コードのロジックは変えず、送信前後にちょっとだけ print を足すだけです。
3-C(追記):見える化(A. 自分で出すログ)👀
対象:
03A_ai_summary_ja.py
と03B_ai_summary_en_to_ja.py
目的:何を送り、何が返って、何秒かかったかを毎回確認できるようにする
追記手順(両ファイル共通)
- 上の
import
にimport time
を1行足す client.responses.create(...)
の直前と直後に以下を追加
# ▼ 送信前ログ(どのモデルに / どれくらいの長さを / どんな指示で?)
print("▶ Request")
print(" - model: gpt-4.1") # 使っているモデル名(あなたのコードの指定に合わせて)
print(f" - input length (chars): {len(prompt)}")
print(f" - prompt preview: {prompt[:60]}...")
# ▼ 呼び出し本体(処理時間を計測)
start = time.time()
res = client.responses.create(model="gpt-4.1", input=prompt) # ← 元の1行をこのまま使う
elapsed = time.time() - start
# ▼ 返却メタ情報(ID / model / 所要時間)
print("\n✓ Response")
print(f" - response.id: {getattr(res, 'id', None)}")
print(f" - response.model: {getattr(res, 'model', None)}")
print(f" - elapsed: {elapsed:.2f}s\n")
# (この下は既存のまま)
summary = res.output_text
置き場所の目安: 既存の
> res = client.responses.create(model="...", input=prompt)
> summary = res.output_text
>
の間に入れるイメージです(上記コードはその行も含んでいるので、重複しないよう注意)。
何が見えるようになる?
- Request:モデル名/入力文字数/プロンプト冒頭
- Response:応答ID(問い合わせの識別子)/実際に使われたモデル名/処理秒数
実行イメージ
▶ Request
- model: gpt-4.1
- input length (chars): 4872
- prompt preview: 次の文章を日本語で300〜500字に要約し、最後に重要ポイントを...
✓ Response
- response.id: resp_abc123...
- response.model: gpt-4.1
- elapsed: 0.92s
これで、送ったものと返ってきたものを毎回目で確認できます。 「遅い?」と思ったら
elapsed
を、「思った文言じゃない?」と思ったらprompt preview
をまずチェックしましょう。
必要なのはこの追記だけ。レッスン本文の流れはそのままでOKです。 次は Step 4(StreamlitでUI化) に進みましょう!
うまくいかないとき(最初に見るチェックリスト)
- キーが未設定
- 環境変数
OPENAI_API_KEY
を設定したか 新しいターミナルを開き直したか
- 文字数が多すぎる
text[:12000]
の数字を小さくして再実行(まずは動かす)- ライブラリのインストール
pip show openai
で入っているか確認- 英語入力なのに日本語出力じゃない
プロンプトに「日本語で」を入れているか確認(言い方はとても大事)
ちょい発展(興味が出てきたら)
- 入力が長いときに**分割(チャンク)**して順番に要約 → 最後にまとめ直す
- 出力をセクション見出し・箇条書きできれいなMarkdownに整型
- モデルの種類を切り替えて、速度・精度・コストの違いを体験
- 要約の長さ(例:短い要約/長い要約)を引数で選べるようにする
参考(公式ドキュメント)
- OpenAI Python クライアント/Responses API の基本的な使い方(
from openai import OpenAI
,client.responses.create(...)
など)(OpenAI Platform)
次はいよいよ Step 4: Streamlit でUI化 に進みましょう。 同じ処理を“ボタン一発”の画面にすれば、毎回の作業がグッと楽になります ✨