2.7 KiB
2.7 KiB
搜索源接入指南
新增一个搜索源
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. 添加字段 Schema(hub/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 |
发布日期(可选) |