docs/wiki/集成扩展/添加网络搜索引擎.md
本文档说明如何在 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 为例:
在 internal/types/web_search_provider.go 中添加:
WebSearchProviderTypeBrave WebSearchProviderType = "brave"
在 GetWebSearchProviderTypes() 中添加:
{
ID: "brave", Name: "Brave Search", Free: false,
RequiresAPIKey: true, Description: "Brave Search API",
DocsURL: "https://brave.com/search/api/",
}
新建 internal/infrastructure/web_search/brave.go:
func(types.WebSearchProviderParameters) (interfaces.WebSearchProvider, error)interfaces.WebSearchProvider 接口:Name() 和 Search()在 isValidProviderType() 中添加新类型。
在 registerWebSearchProviders 中注册。
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.go | isValidProviderType 加新类型 |
internal/container/container.go | registerWebSearchProviders 注册 |