Files
search-hub/docs/providers.md

2.7 KiB
Raw Blame History

搜索源接入指南

新增一个搜索源

1. 创建 Provider 类

providers/ 下新建文件,继承 BaseProvider:

from providers.base import BaseProvider, SearchResult

class MyProvider(BaseProvider):
    name = 'mysearch'              # 唯一标识
    display_name = 'MySearch'       # 展示名称
    needs_api_key = False           # 是否需要 API key
    enabled = True                  # 是否默认启用
    priority = 35                   # 优先级(越小越优先)

    def __init__(self, config: dict):
        super().__init__(config)
        # 从 config 中读取配置
        mc = config.get('mysearch', {})
        self.api_key = mc.get('api_key')
        self.base_url = mc.get('base_url', 'https://api.mysearch.com')

    def is_available(self) -> bool:
        return True  # 或 return bool(self.api_key)

    def search(self, query: str, max_results: int = 10) -> list:
        # 调用外部搜索 API
        results = []
        # ... 解析响应 ...
        results.append(SearchResult(
            title='标题',
            url='https://example.com',
            content='摘要内容',
            score=0.8,
            source=self.name,
            published_date='2024-01-01',
        ))
        return results[:max_results]

2. 注册到 app.py

两处注册:初始化时 + _reload_providers()

from providers.my_provider import MyProvider

_providers = {
    # ... 已有源 ...
    'mysearch': MyProvider(_raw_config),
}

3. 添加配置加载config.py

load_config() 返回值中加入配置:

'mysearch': {
    'api_key': my_api_key,
    'base_url': my_base_url,
},

4. 添加字段 Schemahub/config_manager.py

get_source_schema() 中加入字段定义:

'mysearch': [
    {'key': 'api_key', 'label': 'API Key', 'type': 'password', 'required': True},
    {'key': 'base_url', 'label': 'API 地址', 'type': 'text', 'required': False},
],

5. 添加本地配置config.yaml

sources:
  mysearch:
    api_key: "sk-xxx"
    base_url: "https://api.mysearch.com"

Provider 基类属性

属性 类型 说明
name str 唯一标识,用于路由
display_name str UI 展示名
needs_api_key bool 管理面板是否显示编辑按钮
enabled bool auto 模式是否自动使用
priority int 越小越优先auto 模式排序用)

SearchResult 字段

字段 说明
title 标题
url 链接
content 摘要/内容
score 相关性分数0~1用于去重排序
source 来源标识
published_date 发布日期(可选)