Files
search-hub/docs/providers.md

108 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 搜索源接入指南
## 新增一个搜索源
### 1. 创建 Provider 类
`providers/` 下新建文件,继承 `BaseProvider`:
```python
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()`
```python
from providers.my_provider import MyProvider
_providers = {
# ... 已有源 ...
'mysearch': MyProvider(_raw_config),
}
```
### 3. 添加配置加载config.py
`load_config()` 返回值中加入配置:
```python
'mysearch': {
'api_key': my_api_key,
'base_url': my_base_url,
},
```
### 4. 添加字段 Schemahub/config_manager.py
`get_source_schema()` 中加入字段定义:
```python
'mysearch': [
{'key': 'api_key', 'label': 'API Key', 'type': 'password', 'required': True},
{'key': 'base_url', 'label': 'API 地址', 'type': 'text', 'required': False},
],
```
### 5. 添加本地配置config.yaml
```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` | 发布日期(可选) |