Skip to content

[Feature] Add Doubao Search as a native web search provider / 新增豆包搜索提供商 #9666

Description

@zjj1280637679-ship-it

功能描述

希望将 豆包搜索(Doubao Search / 火山引擎) 作为 AstrBot 原生“网页搜索提供商”加入 provider_settings.websearch_provider,与现有 TavilyBoCha百度 AI 搜索BraveFirecrawlExa 同级,而不是仅通过普通插件工具旁路接入。

我已经有一个可运行的 AstrBot 插件原型用于验证豆包搜索 API:

目前插件形式虽然能工作,但它会把豆包搜索暴露为独立 llm_tool;用户真正需要的产品形态是:

配置 → 网页搜索 → 网页搜索提供商
Tavily / BoCha / 百度 AI 搜索 / Brave / Firecrawl / Exa / 豆包

这与 AstrBot 当前的原生搜索架构更一致。

建议的最小实现范围

第一阶段只增加 网页搜索,不把图片搜索、网页正文提取或其他扩展能力放进本 PR,以保持改动聚焦。

建议新增:

  • websearch_provider = "doubao"
  • provider_settings.websearch_doubao_key: []
  • web_search_doubao builtin tool
  • 豆包 API 返回结果映射到现有 SearchResult(title, url, snippet, favicon)
  • _apply_web_search_tools() 中按 provider 注入 DoubaoWebSearchTool
  • web_search_doubao 加入 ChatUI 搜索引用工具集合
  • WebUI 配置元数据 / i18n / 中英文 Web Search 文档
  • 单元测试:结果映射、请求参数、HTTP/Provider 错误、空结果、Key 配置与 provider dispatch

豆包搜索响应存在“HTTP 200 但 ResponseMetadata.Error 表示服务错误”的情况,建议实现时同时检查 HTTP 状态与 Provider 级错误,避免把额度/鉴权错误误判为“无搜索结果”。

借鉴的现有实现

这个实现可以直接沿用 AstrBot 已有 Provider 模式,不需要引入新的搜索架构:

因此预期是一个非破坏性、无新增依赖的 Provider 增量。

使用场景

豆包搜索对中文实时网页检索和中文信源覆盖有实际价值。对于已经使用火山引擎 / 豆包模型的 AstrBot 用户,如果豆包搜索能作为原生 Web Search Provider,就可以直接使用 AstrBot 现有的:

  • 原生 Web Search 开关与 Provider 选择器
  • Main Agent 搜索工具注入
  • ChatUI 搜索引用机制
  • 多配置文件 / 会话配置体系

而不需要额外安装一个重复实现搜索生命周期的插件。

已有验证与后续 PR 计划

现有插件原型已经验证了豆包搜索 API 的基础调用与结果解析。若该方向认可,我愿意按 Exa / Brave 的现有代码模式提交一个最小 PR,并补充:

  • mock 单元测试
  • 脱敏的实际 API 请求/响应结构验证
  • AstrBot ChatUI 端到端截图
  • ruff / pytest 结果

图片搜索能力会继续保留在独立插件中,不纳入首个上游 PR,避免把“网页搜索 Provider”与“向聊天平台直接发送图片”耦合。

检查清单

  • 我已搜索现有 Issue / PR,没有发现“Doubao Search / 豆包搜索作为原生 Web Search Provider”的重复提案。
  • 该建议属于 AstrBot 本体的网页搜索 Provider 能力,而不是仅针对某个插件。
  • 我已阅读并同意项目的贡献者行为准则。
  • 我愿意提交 PR 以帮助实现该功能。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:providerThe bug / feature is about AI Provider, Models, LLM Agent, LLM Agent Runner.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions