今回の疑問
今回は、疑問点の④を解消していきましょう。
④ 単語説明:難しい言葉に自動で説明をつける
まとめの中で難しい単語が出てきたら、自動で説明を付けてほしい。
→ これはAIにやってもらう?どうやって組み込む?
④ 難しい単語の自動説明:AIに任せる
どうやって実現するか
「LLM」「ファインチューニング」など、AIニュースには難しい単語がよく出てきます。
分からない内容が分からない単語によって説明される……想像しただけで疲れそうです。
今の時代、分からない単語はAIに聞けば一発ですけど、いちいち聞くのも面倒ですよね。
これをAIが自動で判定して説明を付けてくれると便利だなと思いました。
実現方法を調べました。
結論、
Gemini APIに説明も一緒に作ってもらうという方法が合っていそうです。
参考にしたのはこちらの記事です
「無料で使える!Google Gemini APIを使って生成AIをPythonから動かす方法」
https://s-p-net.com/knowledge/tech-knowledge/gemini-api-python-tutorial
え、またAPI出てきたんだが……??この間使わないと決めたばかりなのに??
一瞬そう思いましたが、「API」という言葉は同じでも、役割が全然違うとのこと。
| NewsAPI | Gemini API | |
|---|---|---|
| 何をするもの? | ニュース記事を取得する | AIに文章を処理させる |
| 今回使う? | ❌ 使わない(RSSに変更) | ✅ 使う |
以前「使わない」と決めたのはNewsAPI、つまりニュースを取得するためのAPIです。
AIに要約・説明をさせる部分は、Gemini APIを使います。
「ただのAI」ではダメなのか、という疑問ですが、実はダメではありません。
ClaudeやChatGPTに「このニュースを要約して」と聞けば、当然ですが答えてくれますよね。
でも今回はPythonのプログラムの中から自動で呼び出す必要があります。
そのためには「API」という形で提供されているAIを使う必要があるというわけです。
もうすでに混乱する……。でも理屈はなんとなく理解できますね。
そもそもAPIは以前の記事で触れたとおり、「外のサービスと話すための窓口」 です。
チャット画面でClaudeやGeminiと話すのと同じことを、プログラムの中から自動でやるイメージ、って感じでしょうか。
それを可能にしてくれるのが、AIが提供している「API」という仕組みなのだと理解しました。
AIにたくさん種類があるように、APIも色々なところが提供しているのだろうと思い調べたところ、選択肢として以下があると判明しました。
| AIサービス | API名 | 無料枠 | クレカ登録 |
|---|---|---|---|
| Google Gemini | Gemini API | ✅ あり | 不要 |
| Anthropic Claude | Claude API | ❌ なし | 必要 |
| OpenAI ChatGPT | OpenAI API | ❌ なし | 必要 |
「無課金での完成」という裏テーマがあるので、無料枠があってクレカ登録不要なGemini APIを選びます。
Geminiが要約しながら、難しい単語を自動で判定して説明を付けてくれるようにします。
特別な仕組みを追加する必要がなく、プロンプトを工夫するだけで実現できそうです。
入力する指示のイメージ
一旦、どんな感じにするかイメージしてみます!
プロンプトは以下のような感じを想定しています。
記事を要約するとき、専門用語や難しい単語が出てきた場合は、
その単語の後ろに「(※〇〇とは:〇〇のこと)」という形で
かんたんな説明を括弧書きで追加してください。
出力イメージ
前述の入力を参考に、出力をイメージします。
〇〇社がLLM(※LLMとは:大規模言語モデルのこと。ChatGPTなどのAIの基盤となる技術)
を活用した新サービスを発表しました。RAG(※RAGとは:検索拡張生成のこと。AIが外部の
情報を参照しながら回答する技術)を組み合わせることで、より正確な情報提供が可能になる
とのことです。
読んでいる人が「この単語わからない……」と感じたときに、括弧内の説明がすぐ目に入る形になります。
でも、これだと折角記事内容を要約しているのに、結局説明が入ると文章がだらだらしてしまいそうな気が……しないでもないような。
私の最初の理想は、右側に単語一覧で出す感じでした。
そうなると、要約と単語集は別々に作り込む必要がありそう?と言うのが想像できます。
調べましたところ、Geminiに本文と用語リストを別々に返してもらう方法があることがわかりました。
そしてJSON形式で返してもらうという方法が有用なようです。
参考にしたのはこちらの記事です:
『Gemini APIからJSON形式で結果を受け取る方法』
https://blog.future.ad.jp/gemini-api%E3%81%8B%E3%82%89json%E5%BD%A2%E5%BC%8F%E3%81%A7%E7%B5%90%E6%9E%9C%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B%E6%96%B9%E6%B3%95
そもそもJSONって何?
JSON(ジェイソン)とは、データを整理して保存するための形式です。
JSONは .json という拡張子のファイルとして保存されます。
これもよく出てきますよね。人の名前みたいなやつ……と最初は思っていました。
こんな形でデータを表します。
{
"名前": "田中",
"年齢": 25
}
「項目名」と「値」をセットで管理できる形式です。
人間が読んでも意味がわかりますし、プログラムで取り出すのも簡単です。
なぜJSONで返してもらうと便利なのか
GeminiにJSON形式で返してもらうと、こんな形でデータが届きます。
{
"summary": "〇〇社がLLMを活用した新サービスを発表しました。",
"terms": [
{"word": "LLM", "description": "大規模言語モデルのこと"},
{"word": "RAG", "description": "検索拡張生成のこと"}
]
}
summary(要約)と terms(用語一覧)が最初から分かれているので、
プログラム側で「要約はここに表示、用語一覧は右側に表示」と振り分けるのが簡単になります。
文章で返ってきた場合は「どこからどこまでが要約で、どこからが用語の説明か」をプログラムが判断しないといけません。これが意外と難しい。
JSON形式なら最初から整理された状態で届くので、そのまま使えるというわけですね!
Geminiへの指示はこうなります
ニュースを要約してください。
出力はJSON形式で、以下の2つを返してください。
1. summary:日本語で2〜3文の要約
2. terms:要約の中に出てきた専門用語・難しい単語のリスト
(word:単語名、description:かんたんな説明)
専門用語がない場合は terms を空リストにしてください。
プロンプトにJSON形式で返してほしいと書くだけで、Geminiが対応してくれるはず(やってみないとわかりませんが)
ただ、プロンプトだけでJSON形式を指定しても、Geminiが気まぐれを起こして余計な文字を混ぜてしまうことがあるそうです。
そこで今回は Structured Outputs(構造化出力) という機能を使います。
Structured Outputsとは、「この形式以外で返答しないでください」とAIに強制的に定義できる仕組みのことです。
おかげで summary(要約)と terms(用語一覧)が確実にPythonで受け取れる形で返ってきます。
私のような初学者がよく詰まる「JSONのパースエラー」を未然に防げるので、最初から使っておく方針にします。
改めて、表示される画面イメージはこんな感じです。
┌─────────────────────┬──────────────────┐
│ 本日のAIニュース │ 用語解説 │
│ │ │
│ 〇〇社がLLMを活用 │ ■ LLM │
│ した新サービスを… │ 大規模言語モデルの │
│ │ こと。 │
│ RAGを組み合わせる │ ■ RAG │
│ ことで… │ 検索拡張生成のこと │
└─────────────────────┴──────────────────┘
本文はスッキリしたまま、気になる単語だけ右側で確認できる形です。
本文に説明を詰め込まず、必要な人だけ右側で確認できる。
この方が読みやすいと判断しました。
補足:毎回同じ説明が付くのが気になる場合
「LLM」という単語が記事に3回出てきたら、3回同じ単語が並んで説明が付いてしまう可能性があるかもしれないなぁ、という懸念……。
でも、プロンプトに「初出のみ説明を付けてください」と追加すればOKそうですよね。一旦はその指示でどうなるか試してみます。
まとめ
- AIニュースの要約・単語説明は Gemini API に任せる(無料枠あり・クレカ登録不要)
- 要約と用語一覧は JSON形式 で別々に返してもらうことで、画面への振り分けが簡単になる
- Geminiの出力は Structured Outputs を使い、確実にJSON形式で受け取れるようにする
次回
引き続き、疑問点について考えます。