建立可搜尋網絡的 Agent
建立網絡搜尋 Agent 時,主要有兩種策略可供考慮:
- LLM 的原生搜尋 Tool:部分語言模型提供開箱即用的整合式網絡搜尋功能。
- 實作自訂搜尋 Tool:自行與搜尋 Provider 的 API 整合,以處理查詢及擷取結果。
先決條件先決條件 的直接連結
- 已安裝 Node.js
v22.13.0或更新版本 - 由支援的模型 Provider 提供的 API 金鑰
- 現有的 Mastra 項目(按照安裝指南設定新項目)
使用原生搜尋 Tool使用原生搜尋 Tool 的直接連結
部分 LLM Provider 內置網絡搜尋功能,無需額外整合 API 即可直接使用。OpenAI 和 Google 的模型均提供原生搜尋 Tool,模型可在生成內容期間調用這些 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 dev在 Studio 中前往 「Search Agent」,然後向它提問:「上星期 AI 新聞有甚麼新消息?」
使用搜尋 API使用搜尋 API 的直接連結
如要更精細地控制搜尋行為,你可以將外部搜尋 API 整合為自訂 Tool。Exa 是專為 AI 應用程式而設的搜尋引擎,提供語意搜尋、可設定的篩選條件(類別、網域、日期範圍),以及擷取完整網頁內容的功能。搜尋 API 封裝在 Mastra Tool 中,由 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 dev在 Studio 中前往 「Search Agent」,然後向它提問:「上星期 AI 新聞有甚麼新消息?」