建立可搜尋網路的 Agent
建立網路搜尋 Agent 時,主要可考慮兩種策略:
- 使用 LLM 的原生搜尋工具:部分語言模型提供整合式網路搜尋功能,無須額外設定即可使用。
- 實作自訂搜尋工具:自行整合搜尋供應商的 API,以處理查詢並擷取結果。
先決條件「先決條件」的直接連結
- 已安裝 Node.js
v22.13.0或更新版本 - 具備支援的 Model Provider 所提供的 API 金鑰
- 已有 Mastra 專案(請依照安裝指南設定新專案)
使用原生搜尋工具「使用原生搜尋工具」的直接連結
部分 LLM Provider 內建網路搜尋功能,不必整合額外的 API 即可直接使用。OpenAI 與 Google 的模型都提供原生搜尋工具,模型可在生成內容時呼叫這些工具。
安裝相依套件
- 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 dev在 Studio 中前往 「Search Agent」,並詢問:「What happened last week in AI news?」
使用搜尋 API「使用搜尋 API」的直接連結
若需要更精細地控制搜尋行為,可以將外部搜尋 API 整合為自訂 Tool。Exa 是專為 AI 應用程式打造的搜尋引擎,提供語意搜尋、可設定的篩選條件(類別、網域、日期範圍),並能擷取完整網頁內容。這個搜尋 API 會包裝在 Mastra Tool 中,由 Tool 定義輸入 schema、輸出格式與執行邏輯。
安裝相依套件
- 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 dev在 Studio 中前往 「Search Agent」,並詢問:「What happened last week in AI news?」