Web を検索できる Agent の構築
Web 検索 Agent を構築する際には、主に次の 2 つの方法があります。
- LLM のネイティブ検索 Tool:一部の言語モデルが提供する、すぐに利用できる統合 Web 検索機能を使用します。
- カスタム検索 Tool の実装:検索 Provider の API と独自に連携し、クエリの処理と結果の取得を行います。
前提条件前提条件への直接リンク
- Node.js
v22.13.0以降がインストールされていること - サポートされている Model Provider の API キー
- 既存の Mastra プロジェクト(新しいプロジェクトをセットアップするには、インストールガイドに従ってください)
ネイティブ検索 Tool の使用ネイティブ検索 Tool の使用への直接リンク
一部の LLM Provider には、追加の API 連携なしで直接使用できる Web 検索機能が組み込まれています。OpenAI と Google のモデルは、いずれも生成中にモデルが呼び出せるネイティブ検索 Tool を提供しています。
依存関係をインストールします
- OpenAI
- Gemini
- npm
- pnpm
- Yarn
- Bun
npm install @ai-sdk/openaipnpm add @ai-sdk/openaiyarn add @ai-sdk/openaibun add @ai-sdk/openai- npm
- pnpm
- Yarn
- Bun
npm install @ai-sdk/googlepnpm add @ai-sdk/googleyarn add @ai-sdk/googlebun add @ai-sdk/google新しいファイル
src/mastra/agents/searchAgent.tsを作成し、Agent を定義します。- OpenAI
- Gemini
src/mastra/agents/searchAgent.tsimport { 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',})src/mastra/agents/searchAgent.tsimport { 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: 'google/gemini-2.5-flash',})Tool をセットアップします。
- OpenAI
- Gemini
src/mastra/agents/searchAgent.tsimport { 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(),},})src/mastra/agents/searchAgent.tsimport { google } from '@ai-sdk/google'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: 'google/gemini-2.5-flash',tools: {webSearch: google.tools.googleSearch({mode: 'MODE_DYNAMIC',}),},})src/mastra/index.tsファイルで Agent を登録します。src/mastra/index.tsimport { Mastra } from '@mastra/core'import { searchAgent } from './agents/searchAgent'export const mastra = new Mastra({agents: { searchAgent },})mastra devコマンドを使い、Studio で Agent をテストできます。mastra devStudio で 「Search Agent」 を開き、「先週の AI ニュースでは何がありましたか?」と質問します。
検索 API の使用検索 API の使用への直接リンク
検索動作をより細かく制御するには、外部の検索 API をカスタム Tool として統合できます。Exa は AI アプリケーション専用に構築された検索エンジンで、セマンティック検索、設定可能なフィルター(カテゴリ、ドメイン、日付範囲)、ページ全体の内容を取得する機能を提供します。検索 API は、入力スキーマ、出力形式、実行ロジックを定義する Mastra Tool でラップします。
依存関係をインストールします
- npm
- pnpm
- Yarn
- Bun
npm install exa-jspnpm add exa-jsyarn add exa-jsbun add exa-js新しいファイル
src/mastra/agents/searchAgent.tsを作成し、Agent を定義します。src/mastra/agents/searchAgent.tsimport { 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',})Tool をセットアップします
src/mastra/tools/searchTool.tsimport { 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,}))},})Agent に追加します
src/mastra/agents/searchAgent.tsimport { 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,},})src/mastra/index.tsファイルで Agent を登録します。src/mastra/index.tsimport { Mastra } from '@mastra/core'import { searchAgent } from './agents/searchAgent'export const mastra = new Mastra({agents: { searchAgent },})mastra devコマンドを使い、Studio で Agent をテストできます。mastra devStudio で 「Search Agent」 を開き、「先週の AI ニュースでは何がありましたか?」と質問します。