GPTに聞いてみた
最初は単純に、GPTに「GPT APIで最新のニュースを取得するコードを作成して」と尋ねてみました。
- GPTは「できます!」と答え、
gpt-4o-miniを指定したコードを提案してきました。 - しかしこのモデルは Web検索やRAGに対応していません。当然コードは動かず、結果はエラー。
さらに新しいチャットで聞くと、今度は「GPT API単体ではWeb検索はできません」という逆の回答。結局どちらが正しいのか分からず、2時間以上を無駄にしました。翌日Google検索で、gpt-4o-search-preview ならWeb検索が可能と判明。最初から外部情報を確認していればよかった、というのが正直な感想です。
GPTの回答とWebからのデータ取得は別物
今回分かったのは、GPTが回答を生成することと、Webから最新データを取得することは全く別だということです。
- GPTは学習済みデータやコンテキストから答えを生成するAI。
- Webの最新情報を得るには、別途「検索」や「外部データ連携」が必要。
Web版ChatGPTは裏で検索を組み合わせるため「GPTが検索してきた」ように見えますが、GPT API単体ではそうはいきません。このように「検索(Retrieve)」と「生成(Generate)」を組み合わせる仕組みを RAG(Retrieval-Augmented Generation) と呼びます。
アプローチを切り替える
- Google検索で情報確認:まずは「gpt-4o-search-preview 実例」を探し、Pythonサンプルを確認。
- GASに変換:サンプルをGoogle Apps Scriptに書き換えて実行し、ニュース取得に成功。
- スプレッドシート連携:貼付や整形など、運用に必要な最小実装を追加。
コードサンプル(GAS)
/**
* スクリプトプロパティに OPENAI_API_KEY を設定してから実行してください。
* ファイル > プロジェクトのプロパティ > スクリプトのプロパティ
*/
function searchWebGAS(query) {
const apiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
if (!apiKey) throw new Error('OPENAI_API_KEY が未設定です');
const endpoint = 'https://api.openai.com/v1/chat/completions';
const payload = {
model: 'gpt-4o-search-preview', //
messages: [
{ role: 'user', content: query }
],
web_search_options: {
search_context_size: 'medium',
user_location: {
type: 'approximate',
approximate: { country: 'JP' }
}
}
};
const res = UrlFetchApp.fetch(endpoint, {
method: 'post',
contentType: 'application/json',
headers: { Authorization: `Bearer ${apiKey}` },
payload: JSON.stringify(payload),
muteHttpExceptions: true
});
const text = res.getContentText();
if (res.getResponseCode() >= 300) {
throw new Error('OpenAI API error: ' + text);
}
const data = JSON.parse(text);
const content = data?.choices?.[0]?.message?.content || '';
Logger.log(content);
return content;
}
// ===== 実行例 =====
function runSample() {
const out = searchWebGAS('今日の主なニュースを5つ教えて。 ・タイトル・要約・引用元・ニュースの解説(300文字以内) ・引用元は、全文表示されるものを選ぶこと(この先は有料というページは不要) ・ニュースの解説は、以下のような内容から選んで追加して -公式サイト -用語の解説 -他のニュースソースでの伝え方');
Logger.log(out);
}
出力結果の一部
以下に、2025年9月16日(火)の主なニュースを5つご紹介します。
村山市で「クマ被害防止対策研修会」が開催
要約: 市街地に現れたクマへの発砲を、市町村長の判断で可能とする「緊急銃猟」が始まったことを受け、関係機関が新たな制度について学ぶ研修会が村山市で開かれました。
引用元: (tenki.jp)庄内町役場で警察・消防などによる合同災害訓練実施
要約: 頻発する災害への対応力強化を目的に、自治会の緊急連絡網を使った情報伝達訓練が行われました。
引用元: (tenki.jp)
APIを試して分かった課題
- 取得結果が不安定:タイトル・要約は揃うものの、ニュースの重要度や内容バランスは一定しません。プロンプト設計の工夫が必要です。
- コード生成も不安定:GPTが提案するコードは、そのままでは動かないことが多く、手動での修正と検証が必要です。
- コストが高め:数回のテストでも約0.1ドル程度。やや割高に感じます。
次に進むために
今回の実験で、GPT APIだけに頼らず、他の手段で外部ニュースを取得し、要約部分だけGPTを使う方が現実的だと分かりました。また、RAG的な構成が必要だという気づきも大きな収穫です。将来的には、ローカルLLMに検索機能を組み合わせることで、より安定した「しずかなニュースの仕組み」を実現できるかもしれません。

