跳至主要內容

建立可搜尋網絡的 Agent

建立網絡搜尋 Agent 時,主要有兩種策略可供考慮:

  1. LLM 的原生搜尋 Tool:部分語言模型提供開箱即用的整合式網絡搜尋功能。
  2. 實作自訂搜尋 Tool:自行與搜尋 Provider 的 API 整合,以處理查詢及擷取結果。

先決條件
先決條件 的直接連結

  • 已安裝 Node.js v22.13.0 或更新版本
  • 由支援的模型 Provider 提供的 API 金鑰
  • 現有的 Mastra 項目(按照安裝指南設定新項目)

使用原生搜尋 Tool
使用原生搜尋 Tool 的直接連結

部分 LLM Provider 內置網絡搜尋功能,無需額外整合 API 即可直接使用。OpenAI 和 Google 的模型均提供原生搜尋 Tool,模型可在生成內容期間調用這些 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 中,由 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 新聞有甚麼新消息?」