メインコンテンツへ移動

Web を検索できる Agent の構築

Web 検索 Agent を構築する際には、主に次の 2 つの方法があります。

  1. LLM のネイティブ検索 Tool:一部の言語モデルが提供する、すぐに利用できる統合 Web 検索機能を使用します。
  2. カスタム検索 Tool の実装:検索 Provider の API と独自に連携し、クエリの処理と結果の取得を行います。

前提条件
前提条件への直接リンク

  • Node.js v22.13.0 以降がインストールされていること
  • サポートされている Model Provider の API キー
  • 既存の Mastra プロジェクト(新しいプロジェクトをセットアップするには、インストールガイドに従ってください)

ネイティブ検索 Tool の使用
ネイティブ検索 Tool の使用への直接リンク

一部の LLM Provider には、追加の API 連携なしで直接使用できる Web 検索機能が組み込まれています。OpenAI と Google のモデルは、いずれも生成中にモデルが呼び出せるネイティブ検索 Tool を提供しています。

  1. 依存関係をインストールします

    npm install @ai-sdk/openai
  2. 新しいファイル src/mastra/agents/searchAgent.ts を作成し、Agent を定義します。

    src/mastra/agents/searchAgent.ts
    import { Agent } from '@mastra/core/agent'

    export const searchAgent = new Agent({
    id: 'search-agent',
    name: 'Search Agent',
    instructions: 'You are a search agent that can search the web for information.',
    model: 'openai/gpt-5.6-sol',
    })
  3. Tool をセットアップします。

    src/mastra/agents/searchAgent.ts
    import { openai } from '@ai-sdk/openai'
    import { Agent } from '@mastra/core/agent'

    export const searchAgent = new Agent({
    id: 'search-agent',
    name: 'Search Agent',
    instructions: 'You are a search agent that can search the web for information.',
    model: 'openai/gpt-5.6-sol',
    tools: {
    webSearch: openai.tools.webSearch(),
    },
    })
  4. src/mastra/index.ts ファイルで Agent を登録します。

    src/mastra/index.ts
    import { Mastra } from '@mastra/core'
    import { searchAgent } from './agents/searchAgent'

    export const mastra = new Mastra({
    agents: { searchAgent },
    })
  5. mastra dev コマンドを使い、Studio で Agent をテストできます。

    mastra dev

    Studio で 「Search Agent」 を開き、「先週の AI ニュースでは何がありましたか?」と質問します。

検索 API の使用
検索 API の使用への直接リンク

検索動作をより細かく制御するには、外部の検索 API をカスタム Tool として統合できます。Exa は AI アプリケーション専用に構築された検索エンジンで、セマンティック検索、設定可能なフィルター(カテゴリ、ドメイン、日付範囲)、ページ全体の内容を取得する機能を提供します。検索 API は、入力スキーマ、出力形式、実行ロジックを定義する Mastra Tool でラップします。

  1. 依存関係をインストールします

    npm install exa-js
  2. 新しいファイル src/mastra/agents/searchAgent.ts を作成し、Agent を定義します。

    src/mastra/agents/searchAgent.ts
    import { Agent } from '@mastra/core/agent'

    export const searchAgent = new Agent({
    id: 'search-agent',
    name: 'Search Agent',
    instructions: 'You are a search agent that can search the web for information.',
    model: 'openai/gpt-5.6-sol',
    })
  3. Tool をセットアップします

    src/mastra/tools/searchTool.ts
    import { createTool } from '@mastra/core/tools'
    import z from 'zod'
    import Exa from 'exa-js'

    export const exa = new Exa(process.env.EXA_API_KEY)

    export const webSearch = createTool({
    id: 'exa-web-search',
    description: 'Search the web',
    inputSchema: z.object({
    query: z.string().min(1).max(50).describe('The search query'),
    }),
    outputSchema: z.array(
    z.object({
    title: z.string().nullable(),
    url: z.string(),
    content: z.string(),
    publishedDate: z.string().optional(),
    }),
    ),
    execute: async inputData => {
    const { results } = await exa.searchAndContents(inputData.query, {
    livecrawl: 'always',
    numResults: 2,
    })

    return results.map(result => ({
    title: result.title,
    url: result.url,
    content: result.text.slice(0, 500),
    publishedDate: result.publishedDate,
    }))
    },
    })
  4. Agent に追加します

    src/mastra/agents/searchAgent.ts
    import { webSearch } from './tools/searchTool'

    export const searchAgent = new Agent({
    id: 'search-agent',
    name: 'Search Agent',
    instructions: 'You are a search agent that can search the web for information.',
    model: 'openai/gpt-5.6-sol',
    tools: {
    webSearch,
    },
    })
  5. src/mastra/index.ts ファイルで Agent を登録します。

    src/mastra/index.ts
    import { Mastra } from '@mastra/core'
    import { searchAgent } from './agents/searchAgent'

    export const mastra = new Mastra({
    agents: { searchAgent },
    })
  6. mastra dev コマンドを使い、Studio で Agent をテストできます。

    mastra dev

    Studio で 「Search Agent」 を開き、「先週の AI ニュースでは何がありましたか?」と質問します。