Files
xinmi/docs/wiki/集成扩展/添加网络搜索引擎.md
T
yawan f7fc992f57
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
2026-09-22 16:19:06 +08:00

3.2 KiB
Raw Blame History

title, tags, aliases, source
title tags aliases source
添加网络搜索引擎
集成扩展
搜索
网络搜索
Provider
网络搜索
WebSearch
搜索引擎扩展
添加新的网络搜索引擎.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 为例:

1. 注册类型常量

在 internal/types/web_search_provider.go 中添加:

WebSearchProviderTypeBrave WebSearchProviderType = "brave"

2. 添加类型元数据

在 GetWebSearchProviderTypes() 中添加:

{
    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. 验证

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 注册

相关主题


反向链接