Skip to content

feat: 添加 ExaSearchTool 独立内置搜索工具(优先级高于 WebSearchTool) #424

@X1F2Y3

Description

@X1F2Y3

问题描述

目前 Claude Code 的 WebSearchTool 在第三方 API 代理环境下存在以下问题:

  1. 云端搜索受限:当 ANTHROPIC_BASE_URL 指向第三方代理(如 http://localhost:3456)时,isFirstPartyAnthropicBaseUrl() 返回 false,导致 WebSearchTool 的云端搜索适配器无法正常工作
  2. Exa 适配器埋得太深:虽然 WebSearchTool 内部有 Exa 适配器,但作为 fallback 路径存在,模型无法明确感知和优先选择
  3. 模型选择权不足:没有独立的搜索工具让模型根据任务需求自主选择搜索源

方案

添加 ExaSearchTool 作为独立的内置工具,直接调用 Exa AI 的公开 MCP 端点:

优势

  • 独立于 API 提供商:不依赖 Anthropic 官方 API,适用于任意第三方代理
  • 模型可明确感知:工具描述清晰,模型可在 Exa Search 和 Web Search 之间智能选择
  • 优先级更高:注册在 WebSearchTool 之前,工具排序更靠前
  • 功能完整:支持查询、结果数量、实时抓取模式、搜索深度等参数

实现变更

  1. 新工具目录

    • packages/builtin-tools/src/tools/ExaSearchTool/ExaSearchTool.ts — 工具主体实现
    • packages/builtin-tools/src/tools/ExaSearchTool/prompt.ts — 工具描述与常量
    • packages/builtin-tools/src/tools/ExaSearchTool/UI.tsx — 工具使用/结果渲染
  2. 工具注册src/tools.ts

    • 添加 import:import { ExaSearchTool } from '@claude-code-best/builtin-tools/tools/ExaSearchTool/ExaSearchTool.js'
    • getAllBaseTools() 中注册于 WebSearchTool 之前
  3. Barrel 导出packages/builtin-tools/src/index.ts

    • 添加导出:export { ExaSearchTool } from './tools/ExaSearchTool/ExaSearchTool.js'

API 来源

ExaSearchTool 调用 https://mcp.exa.ai/mcp(公开端点),无需额外 API Key。

相关文件

已实现的文件已在本地的 packages/builtin-tools/src/tools/ExaSearchTool/ 目录中,可以协助提交。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions