构建可搜索网页的 Agent
构建网页搜索 Agent 时,主要有两种策略可供选择:
- LLM 的原生搜索 Tool:某些语言模型内置开箱即用的网页搜索能力。
- 实现自定义搜索 Tool:自行与搜索 Provider API 集成,以处理查询并检索结果。
前提条件前提条件的直接链接
- 已安装 Node.js
v22.13.0或更高版本 - 受支持的 Model Provider 提供的 API 密钥
- 现有的 Mastra 项目(按照安装指南设置新项目)
使用原生搜索 Tool使用原生搜索 Tool的直接链接
一些 LLM Provider 包含内置的网页搜索功能,无需额外集成 API 即可直接使用。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 dev在 Studio 中转到 “Search Agent” 并询问:“上周 AI 新闻中发生了什么?”
使用搜索 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” 并询问:“上周 AI 新闻中发生了什么?”