功能描述
希望将 豆包搜索(Doubao Search / 火山引擎) 作为 AstrBot 原生“网页搜索提供商”加入 provider_settings.websearch_provider,与现有 Tavily、BoCha、百度 AI 搜索、Brave、Firecrawl、Exa 同级,而不是仅通过普通插件工具旁路接入。
我已经有一个可运行的 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”与“向聊天平台直接发送图片”耦合。
检查清单
功能描述
希望将 豆包搜索(Doubao Search / 火山引擎) 作为 AstrBot 原生“网页搜索提供商”加入
provider_settings.websearch_provider,与现有Tavily、BoCha、百度 AI 搜索、Brave、Firecrawl、Exa同级,而不是仅通过普通插件工具旁路接入。我已经有一个可运行的 AstrBot 插件原型用于验证豆包搜索 API:
目前插件形式虽然能工作,但它会把豆包搜索暴露为独立
llm_tool;用户真正需要的产品形态是:这与 AstrBot 当前的原生搜索架构更一致。
建议的最小实现范围
第一阶段只增加 网页搜索,不把图片搜索、网页正文提取或其他扩展能力放进本 PR,以保持改动聚焦。
建议新增:
websearch_provider = "doubao"provider_settings.websearch_doubao_key: []web_search_doubaobuiltin toolSearchResult(title, url, snippet, favicon)_apply_web_search_tools()中按 provider 注入DoubaoWebSearchToolweb_search_doubao加入 ChatUI 搜索引用工具集合豆包搜索响应存在“HTTP 200 但
ResponseMetadata.Error表示服务错误”的情况,建议实现时同时检查 HTTP 状态与 Provider 级错误,避免把额度/鉴权错误误判为“无搜索结果”。借鉴的现有实现
这个实现可以直接沿用 AstrBot 已有 Provider 模式,不需要引入新的搜索架构:
SearchResult→_search_result_payload()”,不必增加 extract/fetch 工具。因此预期是一个非破坏性、无新增依赖的 Provider 增量。
使用场景
豆包搜索对中文实时网页检索和中文信源覆盖有实际价值。对于已经使用火山引擎 / 豆包模型的 AstrBot 用户,如果豆包搜索能作为原生 Web Search Provider,就可以直接使用 AstrBot 现有的:
而不需要额外安装一个重复实现搜索生命周期的插件。
已有验证与后续 PR 计划
现有插件原型已经验证了豆包搜索 API 的基础调用与结果解析。若该方向认可,我愿意按 Exa / Brave 的现有代码模式提交一个最小 PR,并补充:
ruff/pytest结果图片搜索能力会继续保留在独立插件中,不纳入首个上游 PR,避免把“网页搜索 Provider”与“向聊天平台直接发送图片”耦合。
检查清单