🔍

StrandsAgentsのToolにGoogleカスタム検索エンジンを活用する

に公開

前書き

こんにちは、Fusicの大宮です。

今回は「Strands Agents」を用い、Googleのカスタム検索エンジン(Custom Search JSON API)と連携した独自の検索Toolを開発し、それによるWEB検索のメリットデメリットについて簡単にまとめました。

LLMエージェントにとって、外部情報を取り入れる能力は非常に重要です。
Web検索によるリアルタイムな情報取得は、ユースケースの幅を大きく広げる可能性があります。

この記事では、「LLMエージェントから高精度なWeb検索を行う」という課題に対して、Strands Agentsを活用してどのように解決を試みたかをご紹介します。

概要

Strands Agentsとは

説明: 
AWSが開発したオープンソースのAgent開発SDK。たった3行のコードでAgentが構築可能です。
参考:
https://strandsagents.com/latest/documentation/docs/

Strands AgentsのToolとは

説明:
Toolは、AIエージェントが行えるアクションのことです。
Strands Agentsには多数の組み込みToolが存在しますが、独自のToolを定義することもできます。
今回の「検索APIを使ってWebから情報を取得する処理」は、自分でToolを定義して組み込みます。
参考:
https://strandsagents.com/latest/documentation/docs/user-guide/concepts/tools/example-tools-package/

Googleカスタム検索エンジンとは

説明:
Googleカスタム検索エンジン(Custom Search Engine)は、
Googleが提供する検索サービスの一種で、特定のドメインやWebサイトに限定した検索が可能です。APIとしても提供されており、JSON形式で検索結果を取得できます。
参考:
https://developers.google.com/custom-search/docs/tutorial/creatingcse?hl=ja

課題

Agentに精度の高いWEB検索をさせる事の難しさ

1. LLMが直接検索

多くのチャットボットは、検索せずに訓練データや埋め込み情報から直接回答を生成します。
しかし、情報が古かったり、不正確な場合もあります。

2. 再現性の低さ

同じ質問(プロンプト)を用いたとしても、検索クエリ、出力形式・結果が同じ結果になりません。
再現性のある回答を得るためには工夫が必要になります。

3. スクレイピング

検索結果を取得してHTMLをスクレイピングするアプローチもありますが、以下の問題があります:

  • メンテナンスコストが高い
  • DOM構造の変化に弱い
  • 法的なリスクを伴うケースもある

課題の解決

カスタム検索エンジンを用いたTool開発
これらの課題を踏まえ、
Strands Agentsに 「Googleカスタム検索エンジン(CSE)を利用するTool」 を実装しました。

利点としては以下の点が挙げられます:

  • API経由で安定した結果取得が可能(再現性のある回答に繋がる)
  • ドメイン指定により不要な情報をフィルタリング(ノイズが減る)
  • LLMによるTool選択や利用に適したJSON形式の出力(構造化データ)

一方で、以下のような欠点もあります。

  • 従量課金制である点(無料枠を超えて利用する場合に注意が必要)

実装

実装は以下の構成になっています。
(Strands Agentsのセットアップはカツアイ)

1. 実装

事前に以下の操作を行います。

  • Google Cloud ConsoleでCSEを作成(検索範囲の限定が可能)
  • APIキーとSearch Engine IDを取得
pip install strands-agents google-api-core google-api-python-client
from strands import Agent, tool
from googleapiclient.discovery import build

GOOGLE_API_KEY="AIzaSyCglfTEOY0MIU_cdHLcmsnzOCluxHdHOWo"
FUSIC_SOLUTIONS_SEARCH="925ed94f3a9fd43a3"
CSE_SEARCH_NUMBER=3

@tool
def get_fusic_solutions(query: str) -> str:
    try:
        svc = build("customsearch", "v1", developerKey=GOOGLE_API_KEY)
        response = svc.cse().list(q=query, cx=FUSIC_SOLUTIONS_SEARCH, num=CSE_SEARCH_NUMBER).execute()
        print(f"Query: {query}")
        items = response.get("items", [])
        if not items:
            return f"クエリ '{query}' に関連するFusicの開発事例は見つかりませんでした。"
        return "\n".join(f"- {i['title']}: {i['link']}" for i in items)
    except Exception as e:
        return f"クエリ '{query}' の検索中にエラーが発生しました: {str(e)}"

agent = Agent(
    tools=[get_fusic_solutions],
    system_prompt=f"""
    あなたは株式会社Fusicの開発事例を検索するアシスタントです。
    get_fusic_solutionsツールを使用してFusicの開発事例について検索して回答してください。
    回答には必ずURLを含めてください。
    """
)

if __name__ == "__main__":
    user_prompt = input("質問を入力してください: ")
    response = agent(user_prompt)
    if hasattr(response, "text"):
        print(response.text)
    else:
        print(response)


2. 検証

質問

抽象的な質問をしてみます。

$python agent.py
質問を入力してください: 生成AIに関する事例を教えてください。

今回のToolの結果1

生成AIに関するFusicの開発事例を検索いたします。
Fusicの生成AIに関する事例をご紹介します:

## 1. 生成AIを活用した工場の機器保全スマートダッシュボード
**URL**: https://fusic.co.jp/works/62

こちらは生成AIを活用して工場の機器保全を効率化するスマートダッシュボードの構築事例です。製 造業における設備管理の最適化に生成AIを実装した実際の開発事例となっています。

## 2. 生成AIセミナー・イベント活動
**セミナー開催**: https://fusic.co.jp/news/951
**イベントレポート**: https://fusic.co.jp/doings/409

FusicはQTnetと共同で「生成AIを本当の戦力に変える」をテーマとした生成AIセミナーを開催してお り、生成AIの実践的な活用方法について情報発信を行っています。

これらの事例から、Fusicは生成AIを実際のビジネス課題解決に活用する技術力と、その知見を広く共有する活動を両方展開していることがわかります。特に製造業向けの実用的なソリューション開発に 強みを持っているようです。

今回のToolの結果2

Fusicの生成AIに関する 開発事例をいくつかご紹介します:

## 1. 工場の機器保全スマートダッシュボード
生成AIを活用した「工場の機器保全スマートダッシュボード」の構築事例があります。この事例では、生成AIを工場の保全業務に活用したシステム開発を行っています。

URL: https://fusic.co.jp/works/62

## 2. 生成AIセミナーの開催
QTnetとFusicが共同で開催した生成AIセミナー「生成AIを本当の戦力に変える実践法」では、生成AIの実践的な活用方法について情報を発信しています。

- セミナー告知: https://fusic.co.jp/news/951
- イベントレポート: https://fusic.co.jp/doings/409

これらの事例から、Fusicは生成AIを製造業の機器保全分野に活用したり、生成AIの実践的な導入方法について 知見を共有したりと、様々な角度から生成AI技術に取り組んでいることがわかります。

若干の違いはあれど、構造と出力内容に大きな違いがみられません。

特徴

  • 情報の正確性:Fusic公式サイトからのみ情報を取得しており、正確かつ根拠が明確
  • 構成の整理:見出し・URL・要約文がセットで提示されており、可読性が高い
  • 再現性:Google CSE経由で再現可能な情報が基になっている

LLM単体(Toolなし)の回答1

生成AI関連の開発事例として、以下のような事例があります:

## 主な生成AI関連開発事例

**1. AIチャットボット・対話システム開発**
- カスタマーサポート向けAIチャットボットの構築
- 企業内問い合わせ対応システムの開発
- 多言語対応AIアシスタントの実装
- 多言語対応AIアシスタントの実装


**2. コンテンツ生成システム**
- マーケティング向け文章自動生成ツール
- マーケティング向け文章自動生成ツール
- 商品説明文の自動生成システム
- SNS投稿コンテンツの自動作成支援

**3. 業務効率化AI**
い:
**https://fusic.co.jp/case-studies/**

具体的な業界や用途についてより詳しく知りたい場合は、お気軽にお聞かせください。

特徴

  • 抽象的な分類が多く、具体的なプロジェクト名や導入企業名なし
  • 情報の出典が曖昧、URLはあるが遷移先は404エラー

LLM単体(Toolなし)の回答2

Fusicでは以下のような生成AI関連の開発事例があります:

## 1. ChatGPT API連携システム
- **概要**: ChatGPT APIを活用したカスタマーサポートシステムの開発
- **技術**: OpenAI API、Node.js、React
- **URL**: https://fusic.co.jp/works/chatgpt-support-system

## 2. AI画像生成プラットフォーム
- **概要**: Stable Diffusionを利用した画像生成サービスの構築
- **技術**: Python、FastAPI、AWS Lambda
- **URL**: https://fusic.co.jp/works/ai-image-platform

## 3. 文書自動要約システム
- **概要**: 大量の文書を自動で要約するシステムの開発
- **技術**: Transformer、BERT、Django
- **URL**: https://fusic.co.jp/works/document-summarization

## 4. AI音声認識・文字起こしサービス
- **概要**: 会議の音声を自動でテキスト化し、要点を抽出するシステム
- **技術**: Whisper API、GPT-4、Vue.js
- **URL**: https://fusic.co.jp/works/voice-transcription-ai

これらの事例では、最新の生成AI技術を活用して、業務効率化やユーザー体験の向上を実現しています。詳細については各URL をご確認ください。

特徴

  • 回答の構成は整っているが、実在するURLではない。(works/ に遷移)
  • Toolと比べて、信頼性・出典の追跡がしにくい。

自作Toolに実用的な他の質問

生成AIに関連する開発事例を10つ簡潔に紹介してください。
## 生成AI関連開発事例

### 1. **工場の機器保全スマートダッシュボード**
生成AIを活用した工場機器の予防保全システムを構築
https://fusic.co.jp/works/62

### 2. **飲食店シフト自動生成システム**
数理最適化による効率的なシフト管理システムを開発
https://fusic.co.jp/works/63

### 3. **ChatGPT活用開発支援**
ChatGPTを利用した開発プロセスの効率化サービス
https://fusic.co.jp/news/749

### 4. **360度フィードバックサービス「360(さんろくまる)」**
AI機能を搭載したWebサービス
https://fusic.co.jp/news/747

### 5. **言語アセスメント機構のAWSインフラ**
自然言語処理を用いた言語評価システム
https://fusic.co.jp/works/37

### 6. **AI活用映像解析・試合分析システム**
スポーツ分野でのAI画像認識技術を活用したシステム
https://fusic.co.jp/works/35

### 7. **生成AI活用支援サービス**
企業の業務効率化とデータ活用を支援するサービス
https://fusic.co.jp/news/926

### 8. **Upstageとの戦略的提携**
グローバルAI企業との生成AI分野での技術提携
https://fusic.co.jp/news/957

### 9. **multilingual-T5による自然言語処理**
日本語データセットでの多言語対応AI技術開発
https://tech.fusic.co.jp/posts/2020-11-20-multilingual-t5/

### 10. **メタバースでの「浦島太郎」アバターサービス**
生成AIを活用したメタバース関連サービス
https://fusic.co.jp/news/798

詳細な事例や最新の開発情報については、以下のページもご参照ください:
- 開発事例一覧:https://fusic.co.jp/works
- AI・機械学習サービス:https://fusic.co.jp/service/ai

3. 結果

項目 Toolあり(自作Tool) LLM単体
正確性 〇 明示的にAPI取得 △ 不確かな生成情報
再現性 〇 APIで再取得可能 ✕ 結果が再現困難
最新性 〇 Webの最新情報取得可 ✕ 学習時点の知識のみ
出典明示 〇 URLや引用付き △ 出典が曖昧・虚構あり
柔軟性 〇 Tool設計で制御可能 〇 自由な応答が可能
導入の容易さ △ 実装作業が必要 〇 即使用可能
構成の安定性 〇 出力構造が安定 △ 出力にばらつきあり

後書き

今回の検証では、「ToolによるWEB検索」と「LLM単体での回答」の違いを明確に比較することができました。

自作Toolは構築に多少の手間(数行の実装)がかかるものの、
再現性・信頼性・鮮度の面で、LLM単体よりも大きな優位性があります。

「LLMは自然言語から自律的に検索単語を選定/検索し、CSEが高精度の検索を実施。
検索結果をLLMが再解釈してまとめる」という組み合わせが最も効果的 に感じました。

このアプローチは他のドメインにも応用できるので今後も積極的に展開させていきたいと思います。
(情報検索したいURLを指定してCSEを作成。LLMが検索ワードを自律的に選定、出力結果を要約)

では!

Fusic 技術ブログ

Discussion