Back to Weknora

添加网络搜索引擎

docs/wiki/集成扩展/添加网络搜索引擎.md

0.5.13.0 KB
Original Source

添加新的网络搜索引擎

本文档说明如何在 WeKnora 中添加一个新的网络搜索引擎类型(如 Brave Search、Searx 等)。

架构概述

搜索引擎的 API 端点硬编码在代码中,不向用户暴露 BaseURL,从源头消除 SSRF 风险。

internal/types/web_search_provider.go       # 实体定义 + Provider 类型元数据
internal/infrastructure/web_search/          # Provider 实现(bing/google/duckduckgo/tavily)
internal/container/container.go              # DI 注册
internal/types/interfaces/web_search.go      # WebSearchProvider 接口

类似的扩展开发模式参见 集成向量数据库

步骤

以添加 Brave Search 为例:

1. 注册类型常量

internal/types/web_search_provider.go 中添加:

go
WebSearchProviderTypeBrave WebSearchProviderType = "brave"

2. 添加类型元数据

GetWebSearchProviderTypes() 中添加:

go
{
    ID: "brave", Name: "Brave Search", Free: false,
    RequiresAPIKey: true, Description: "Brave Search API",
    DocsURL: "https://brave.com/search/api/",
}

3. 创建 Provider 实现

新建 internal/infrastructure/web_search/brave.go

  • 构造函数签名:func(types.WebSearchProviderParameters) (interfaces.WebSearchProvider, error)
  • API 端点硬编码为常量
  • 实现 interfaces.WebSearchProvider 接口:Name()Search()

4. 添加参数校验

isValidProviderType() 中添加新类型。

5. DI 注册

registerWebSearchProviders 中注册。

6. 验证

bash
go build ./...
# 调用 API 验证
curl http://localhost:8080/api/v1/web-search-providers/types

需要额外参数的情况

如果新引擎需要 API Key 以外的参数:

  • 方式一:使用 WebSearchProviderParameters.ExtraConfig 字段
  • 方式二:在 WebSearchProviderParameters 中添加专用字段

文件变更清单

文件操作
internal/types/web_search_provider.go添加常量 + 类型元数据
internal/infrastructure/web_search/brave.go新建 Provider 实现
internal/application/service/web_search_provider.goisValidProviderType 加新类型
internal/container/container.goregisterWebSearchProviders 注册

相关主题


反向链接