【研究日誌】Custom Search JSON API徹底検証と課題整理(2025/2/11)

研究日誌

皆さん、こんにちは!ブログ記事作成自動化プロジェクト、9日目です。

今日は、Custom Search JSON APIについて、がんばって検証してみました。

GCPの契約が必要であることに加え、Custom Search Engine(CSE)の設定も求められるため、使い始めるまでのハードルは高めでした。設定作業の途中で、どこかで設定ミスをしてしまったのではないかと不安になる場面もありましたが、何とか初期設定を完了することができました。

参考にした記事:https://qiita.com/zak_y/items/42ca0f1ea14f7046108c

■ 検証中に直面した具体的な課題

  1. Custom Search Engineのフィルタ制御の限界
    GUIで検索対象の国、言語、サイトなどを指定できるはずですが、実際の検索結果を見ると、設定どおりの厳密なフィルタがかかっておらず、対象外のデータが混じる傾向が見受けられました。そこで、私はCustom Search Engine自体のチューニングは断念し、APIリクエスト時のパラメータで制御する方法に切り替えることにしました。

    APIリファレンス:https://developers.google.com/custom-search/v1/reference/rest/v1/cse?hl=ja

     具体的なパラメータ設定は以下の通りです:
c2coff = 1           # かの国の言語を対象外にする 
cr = "countryJP" # 国指定(ここでは日本を指定)
lr = "ja" # 言語指定(ここでは日本を指定)
orTerms = "生成AI 機械学習 ディープラーニング" # qに加え、or条件で検索キーワードを指定(単語は半角スペースで区切る)
  1. 検索結果の取得件数制限
    APIリクエストでは、1回の検索で上位10件しか取得できません。
    そのため、最大100件まで検索結果を取得するために、以下のようなループ処理を組み直しました:
# --- Google検索実行(10件ずつ最大100件まで取得) ---
all_results = []
for start in range(1, 101, 10):
results = google_search(search_query, formatted_date, start)
if not results:
break
all_results.extend(results)
# 取得件数が10件に満たなければ、これ以上の結果はないと判断してループ終了
if len(results) < 10:
break
  1. Geminiの信頼性の問題
    同じGoogleのサービスということで、Geminiに質問すれば正確な回答が得られると思い込んでいましたが、実際にはハルシネーションの嵐で、全く使い物になりませんでした。最初からChatGPTに聞けばよかったです。。。

■ まとめ
Custom Search JSON APIの利用は、初期設定やパラメータ調整など、手間のかかる部分が多い上に、ナレッジも少なかったので、かなり苦戦を強いられましたが、記事の精度はかなり向上したと思います。

改善した記事:https://aiwebintersection.com/2025/02/11/2025%e5%b9%b42%e6%9c%8810%e6%97%a5%e5%85%ac%e9%96%8b%e3%81%aeai%e9%96%a2%e9%80%a3%e3%83%8b%e3%83%a5%e3%83%bc%e3%82%b9-%e3%81%9d%e3%81%ae2%ef%bc%882025%e5%b9%b42%e6%9c%8810%e6%97%a5%e5%85%ac%e9%96%8b/

今回の対応で以下の課題が新たに発生しましたので、明日以降対応を進めていきたいと思います。

・検索結果のスニペットから記事を要約しているのでハルシネーションが発生している。
・マイナーな情報がピックアップされている。
・検索対象の記事が既に削除されていてリンク切れになっている。

引き続き、プロジェクトの進展にご期待ください!

コメント

タイトルとURLをコピーしました