argo-search 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +410 -0
- package/backends/domain_profiles.json +364 -0
- package/backends/engine_registry.yaml +505 -0
- package/backends/quota_profiles.json +395 -0
- package/bin/argo.js +54 -0
- package/config.yaml +554 -0
- package/package.json +43 -0
- package/scripts/adaptive.py +179 -0
- package/scripts/benchmark.py +124 -0
- package/scripts/cache.py +374 -0
- package/scripts/clarify.py +689 -0
- package/scripts/config.py +262 -0
- package/scripts/crawl.py +73 -0
- package/scripts/engines.py +386 -0
- package/scripts/evidence.py +381 -0
- package/scripts/extract.py +69 -0
- package/scripts/fetch.py +118 -0
- package/scripts/health_check.py +437 -0
- package/scripts/health_probe.py +218 -0
- package/scripts/mcp_diag.py +81 -0
- package/scripts/mcp_server.py +488 -0
- package/scripts/query_rewriter.py +278 -0
- package/scripts/quota.py +196 -0
- package/scripts/research.py +499 -0
- package/scripts/route.py +341 -0
- package/scripts/search.py +508 -0
- package/scripts/search_types.py +72 -0
- package/scripts/tfidf_router.py +312 -0
- package/sub-skills/local-search/SKILL.md +104 -0
- package/sub-skills/local-search/config.yaml +328 -0
- package/sub-skills/local-search/engine_registry.py +298 -0
- package/sub-skills/local-search/health_check.py +347 -0
- package/sub-skills/local-search/local_search_adapter.py +56 -0
- package/sub-skills/local-search/parse_maps.yaml +184 -0
- package/sub-skills/local-search/search_v3.py +558 -0
- package/sub-skills/local-search/smart_router.py +215 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 taxueseek
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/assets/hero.svg" width="600" alt="Unified Search">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h3 align="center">统一搜索引擎</h3>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
你给它一个搜索查询,它自动路由到最合适的搜索引擎,融合多个结果后返回。覆盖中文/英文/学术/代码/购物/金融/新闻/百科/计算/深度研究等场景。
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="#快速开始">快速开始</a> ·
|
|
13
|
+
<a href="#架构设计">架构</a> ·
|
|
14
|
+
<a href="#引擎全景">引擎</a> ·
|
|
15
|
+
<a href="#使用示例">示例</a> ·
|
|
16
|
+
<a href="#安装配置">配置</a> ·
|
|
17
|
+
<a href="#版本历史">更新</a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 这是什么
|
|
23
|
+
|
|
24
|
+
**一个搜索引擎,替代所有搜索引擎。**
|
|
25
|
+
|
|
26
|
+
你问「贵州茅台股价」,它自动走东财;你问「transformer attention paper」,它自动走 arXiv;你问「React vs Vue 哪个好」,它同时打知乎和字节搜索,合并去重后返回。
|
|
27
|
+
|
|
28
|
+
不是又一个搜索 API 封装。它是一套完整的搜索基础设施:
|
|
29
|
+
|
|
30
|
+
- **40 个引擎**(12 API + 28 本地零成本),自动选最优路径
|
|
31
|
+
- **TF-IDF 语义路由**,理解查询意图,不靠关键词死匹配
|
|
32
|
+
- **双层缓存**(内存 LRU + SQLite),相同查询不重复花钱
|
|
33
|
+
- **四层降级链**(T1 API → T2 本地 → 缓存 → 报错),永不空手而归
|
|
34
|
+
- **零外部依赖**,Python 标准库 + PyYAML 即可运行
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
你输入查询
|
|
38
|
+
│
|
|
39
|
+
▼
|
|
40
|
+
┌─────────────────┐
|
|
41
|
+
│ TF-IDF 语义路由 │ ← 理解你想搜什么
|
|
42
|
+
│ + 正则硬规则 │
|
|
43
|
+
└────────┬────────┘
|
|
44
|
+
│
|
|
45
|
+
┌────┴────┐
|
|
46
|
+
▼ ▼
|
|
47
|
+
┌───────┐ ┌───────┐
|
|
48
|
+
│ T1 │ │ T2 │
|
|
49
|
+
│ API │→│ 本地 │ ← 降级链
|
|
50
|
+
│ 12个 │ │ 28个 │
|
|
51
|
+
└───┬───┘ └───┬───┘
|
|
52
|
+
│ │
|
|
53
|
+
└────┬────┘
|
|
54
|
+
▼
|
|
55
|
+
┌─────────────────┐
|
|
56
|
+
│ RRF 多源融合 │ ← 多引擎结果合并去重
|
|
57
|
+
│ + Bocha 精排 │
|
|
58
|
+
└────────┬────────┘
|
|
59
|
+
▼
|
|
60
|
+
统一 JSON 输出
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 为什么需要它
|
|
64
|
+
|
|
65
|
+
| 普通做法 | Unified Search |
|
|
66
|
+
|---------|---------------|
|
|
67
|
+
| 一个 API Key 绑死一个引擎 | 40 个引擎自动切换,哪个好用哪个 |
|
|
68
|
+
| 中文搜用百度(CAPTCHA 拦截 10s+) | 自动走搜狗(0.91s)或字节搜索 |
|
|
69
|
+
| 缓存要么全有要么全无 | 金融 5 分钟 / 新闻 10 分钟 / 常青 24 小时分级 TTL |
|
|
70
|
+
| 引擎挂了就挂了 | 四层降级链,T1 挂了走 T2,T2 挂了读缓存 |
|
|
71
|
+
| 搜索结果直接拼接 | RRF 融合 + 语义精排,去重后按相关性排序 |
|
|
72
|
+
| 每次搜索都花 token | 28 个本地引擎零成本,缓存命中零延迟 |
|
|
73
|
+
|
|
74
|
+
## 快速开始
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# 克隆
|
|
78
|
+
git clone https://github.com/taxueseek/unified-search.git
|
|
79
|
+
cd unified-search
|
|
80
|
+
|
|
81
|
+
# 安装依赖(仅 PyYAML)
|
|
82
|
+
pip install pyyaml
|
|
83
|
+
|
|
84
|
+
# 搜索
|
|
85
|
+
python3 scripts/search.py "Python asyncio"
|
|
86
|
+
|
|
87
|
+
# JSON 输出
|
|
88
|
+
python3 scripts/search.py "贵州茅台股价" --json
|
|
89
|
+
|
|
90
|
+
# 显示路由决策
|
|
91
|
+
python3 scripts/search.py "transformer attention paper" --explain
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 引擎全景
|
|
95
|
+
|
|
96
|
+
### T1 — 直连 API(首选层)
|
|
97
|
+
|
|
98
|
+
| 引擎 | 覆盖 | 延迟 | 成本 | 状态 | 说明 |
|
|
99
|
+
|------|------|------|------|------|------|
|
|
100
|
+
| **anysearch** | 通用/技术 | 2s | 免费 | ✅ | 通用搜索主力,本地 CLI |
|
|
101
|
+
| **zhihu** | 中文/评测 | 1.5s | API | ✅ | 知乎搜索,中文观点/评测 |
|
|
102
|
+
| **eastmoney** | 金融/股票/基金 | 1.2s | 免费 | ✅ | 东方财富,金融数据首选 |
|
|
103
|
+
| **byted** | 通用/新闻/中文 | 1.5s | API | ✅ | 字节搜索 API |
|
|
104
|
+
| **tavily** | 通用 | 3s | API | ✅ | Tavily AI 搜索 |
|
|
105
|
+
| **github** | 代码 | 2s | API | ✅ | GitHub 代码搜索 |
|
|
106
|
+
| **arxiv** | 学术 | 3.5s | 免费 | ✅ | arXiv 论文搜索 |
|
|
107
|
+
| semantic_scholar | 学术 | 3s | 免费 | ⏸️ | Semantic Scholar |
|
|
108
|
+
| openalex | 学术 | 4s | 免费 | ⏸️ | OpenAlex 开放学术 |
|
|
109
|
+
| crossref | 学术 | 3s | 免费 | ⏸️ | Crossref DOI |
|
|
110
|
+
| bocha | 中文/通用 | 1.5s | API | ⏸️ | 博查搜索 |
|
|
111
|
+
| brave | 通用 | 1.5s | API | ⏸️ | Brave Search |
|
|
112
|
+
| metaso | 中文/通用 | 3s | API | ⏸️ | 秘塔搜索 |
|
|
113
|
+
| felo | 通用/技术 | 4s | API | ⏸️ | Felo AI 搜索 |
|
|
114
|
+
| uapi | 通用 | 2s | API | ⏸️ | UAPI 聚合搜索 |
|
|
115
|
+
| duckduckgo | 通用 | 1.5s | 免费 | ⏸️ | DuckDuckGo |
|
|
116
|
+
| wolframalpha | 事实/数学 | 2s | API | ⏸️ | WolframAlpha |
|
|
117
|
+
| wikipedia | 百科 | 1s | 免费 | ⏸️ | Wikipedia |
|
|
118
|
+
|
|
119
|
+
### T2 — 本地引擎(零成本层)
|
|
120
|
+
|
|
121
|
+
| 引擎 | 覆盖 | 延迟 | 说明 |
|
|
122
|
+
|------|------|------|------|
|
|
123
|
+
| **bing** | 通用 | 610ms | Bing 网页搜索 — 最佳通用 |
|
|
124
|
+
| **sogou** | 中文 | 910ms | 搜狗搜索 — 最佳中文(替代百度) |
|
|
125
|
+
| duckduckgo | 通用 | 1013ms | DuckDuckGo 搜索 |
|
|
126
|
+
| mojeek | 通用 | 2121ms | Mojeek 独立搜索 |
|
|
127
|
+
| yandex | 通用 | 3071ms | Yandex 搜索 |
|
|
128
|
+
| startpage | 通用 | 3515ms | Startpage 隐私搜索 |
|
|
129
|
+
| wikipedia | 百科 | 747ms | Wikipedia 百科 |
|
|
130
|
+
| arxiv | 学术 | 3403ms | arXiv 论文 |
|
|
131
|
+
| pubmed | 医学 | 1516ms | PubMed 生物医学 |
|
|
132
|
+
| crossref | 学术 | 2094ms | Crossref DOI |
|
|
133
|
+
| bing_news | 新闻 | 782ms | Bing 新闻 |
|
|
134
|
+
| google_news | 新闻 | 4006ms | Google News |
|
|
135
|
+
| github | 代码 | 1414ms | GitHub 仓库 |
|
|
136
|
+
| stackoverflow | 代码 | 1981ms | Stack Overflow |
|
|
137
|
+
| gitlab | 代码 | 1947ms | GitLab 项目 |
|
|
138
|
+
| npm | 代码 | 2389ms | npm 包搜索 |
|
|
139
|
+
| imdb | 影视 | 2637ms | IMDb 电影 |
|
|
140
|
+
| goodreads | 图书 | 489ms | Goodreads 图书 |
|
|
141
|
+
|
|
142
|
+
## 路由决策
|
|
143
|
+
|
|
144
|
+
查询进来后,系统做三层判断:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
查询 → 特征提取 → 三路并行判断
|
|
148
|
+
│
|
|
149
|
+
┌───────────┼───────────┐
|
|
150
|
+
▼ ▼ ▼
|
|
151
|
+
正则硬规则 TF-IDF 语义 主题分类
|
|
152
|
+
(13 个域) (余弦相似度) (5 个主题)
|
|
153
|
+
│ │ │
|
|
154
|
+
└─────┬─────┘ │
|
|
155
|
+
▼ │
|
|
156
|
+
融合决策 ←─────────────┘
|
|
157
|
+
│
|
|
158
|
+
▼
|
|
159
|
+
引擎组合 + 搜索深度
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 13 个领域路由
|
|
163
|
+
|
|
164
|
+
| 域 | 触发词 | 首选引擎 | 典型场景 |
|
|
165
|
+
|----|--------|---------|---------|
|
|
166
|
+
| `stock_query` | 股价/涨跌/K线/大盘 | eastmoney | 贵州茅台股价 |
|
|
167
|
+
| `fund_query` | 基金/ETF/基金经理 | eastmoney | 基金净值排行 |
|
|
168
|
+
| `financial_news` | 研报/财报/宏观 | byted | 美联储加息 |
|
|
169
|
+
| `zhihu_content` | 知乎/怎么看待/推荐 | zhihu | 笔记本推荐 |
|
|
170
|
+
| `academic` | 论文/paper/arXiv | arxiv | transformer attention |
|
|
171
|
+
| `tech_deep` | research/综述/深度 | semantic_scholar | 深度学习综述 |
|
|
172
|
+
| `code_search` | github/代码/函数 | github | Python asyncio |
|
|
173
|
+
| `fact_check` | what is/是什么/天气 | duckduckgo | 北京天气 |
|
|
174
|
+
| `news_realtime` | 最新/今天/突发 | byted | 诺贝尔奖 |
|
|
175
|
+
| `shopping` | 评测/推荐/值得买 | zhihu | 笔记本电脑推荐 |
|
|
176
|
+
| `chinese_general` | 中文通用 | bocha | 中文通用搜索 |
|
|
177
|
+
| `general_search` | 兜底 | byted | 其他查询 |
|
|
178
|
+
|
|
179
|
+
### 搜索深度自动选择
|
|
180
|
+
|
|
181
|
+
| 深度 | 触发条件 | 说明 |
|
|
182
|
+
|------|---------|------|
|
|
183
|
+
| `ultra_fast` | what/who/when/多少 | 事实/数字查询 |
|
|
184
|
+
| `fast` | tutorial/how to/教程 | 教程/指南 |
|
|
185
|
+
| `balanced` | vs/对比/评测 | 对比/评测 |
|
|
186
|
+
| `deep` | research/综述/深度分析 | 深度研究 |
|
|
187
|
+
|
|
188
|
+
## 使用示例
|
|
189
|
+
|
|
190
|
+
### 金融搜索
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
$ python3 scripts/search.py "贵州茅台股价" --explain
|
|
194
|
+
|
|
195
|
+
[路由] 中文 + 金融向 → 命中域 [stock_query] → 东方财富
|
|
196
|
+
=== 5 results (1200ms via eastmoney)
|
|
197
|
+
[0.95] 贵州茅台(600519)股票价格_行情_走势图
|
|
198
|
+
https://quote.eastmoney.com/sh600519.html
|
|
199
|
+
[0.87] 贵州茅台最新行情分析
|
|
200
|
+
...
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 学术搜索
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
$ python3 scripts/search.py "transformer attention mechanism paper" --json
|
|
207
|
+
|
|
208
|
+
{
|
|
209
|
+
"query": "transformer attention mechanism paper",
|
|
210
|
+
"engine": "arxiv",
|
|
211
|
+
"engines": ["arxiv", "semantic_scholar", "openalex"],
|
|
212
|
+
"domain": "academic",
|
|
213
|
+
"elapsed_ms": 3400,
|
|
214
|
+
"results": [
|
|
215
|
+
{
|
|
216
|
+
"title": "Attention Is All You Need",
|
|
217
|
+
"url": "https://arxiv.org/abs/1706.03762",
|
|
218
|
+
"snippet": "We propose a new simple network architecture, the Transformer...",
|
|
219
|
+
"score": 0.95,
|
|
220
|
+
"source": "arxiv"
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### 多引擎融合
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
$ python3 scripts/search.py "React vs Vue 2026" --tier api
|
|
230
|
+
|
|
231
|
+
# 同时查询知乎 + 字节搜索,RRF 融合去重
|
|
232
|
+
=== 8 results (2100ms via zhihu+byted)
|
|
233
|
+
[0.92] React vs Vue: 全面对比 2026
|
|
234
|
+
https://...
|
|
235
|
+
[0.88] Vue 3 vs React 19 性能对比
|
|
236
|
+
...
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## 作为库使用
|
|
240
|
+
|
|
241
|
+
```python
|
|
242
|
+
from scripts.search import super_search
|
|
243
|
+
|
|
244
|
+
# 自动路由
|
|
245
|
+
result = super_search("Python asyncio", n=5)
|
|
246
|
+
print(result["results"])
|
|
247
|
+
|
|
248
|
+
# 指定引擎
|
|
249
|
+
result = super_search("黄金价格", engine="eastmoney", n=3)
|
|
250
|
+
|
|
251
|
+
# 跳过缓存
|
|
252
|
+
result = super_search("最新新闻", skip_cache=True)
|
|
253
|
+
|
|
254
|
+
# 进度回调
|
|
255
|
+
def on_progress(stage, data):
|
|
256
|
+
print(f"[{stage.value}] {data}")
|
|
257
|
+
|
|
258
|
+
result = super_search("深度学习", on_progress=on_progress)
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## 安装配置
|
|
262
|
+
|
|
263
|
+
### 环境要求
|
|
264
|
+
|
|
265
|
+
- Python 3.10+
|
|
266
|
+
- PyYAML(`pip install pyyaml`)
|
|
267
|
+
- 无需 Node.js、SearXNG 或其他外部服务
|
|
268
|
+
|
|
269
|
+
### 配置 API Key(可选)
|
|
270
|
+
|
|
271
|
+
以下引擎需要 API Key,不配置则自动跳过:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# .env 或系统环境变量
|
|
275
|
+
export TAVILY_API_KEY="tvly-xxx" # Tavily AI 搜索
|
|
276
|
+
export BOCHA_API_KEY="xxx" # 博查搜索
|
|
277
|
+
export BRAVE_API_KEY="xxx" # Brave Search
|
|
278
|
+
export METASO_API_KEY="xxx" # 秘塔搜索
|
|
279
|
+
export FELO_API_KEY="xxx" # Felo AI 搜索
|
|
280
|
+
export ZHIHU_ACCESS_SECRET="xxx" # 知乎搜索
|
|
281
|
+
export GITHUB_TOKEN="ghp_xxx" # GitHub 代码搜索(可选,提高限频)
|
|
282
|
+
export WOLFRAM_APPID="xxx" # WolframAlpha
|
|
283
|
+
export WEB_SEARCH_API_KEY="xxx" # 字节搜索
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
> **零配置可用**:不配任何 Key,18+ 个免费引擎(anysearch + 28 个 T2 本地引擎)即可工作。
|
|
287
|
+
|
|
288
|
+
### API Key 配置(可选)
|
|
289
|
+
|
|
290
|
+
`anysearch` 和 `eastmoney` 引擎支持 API Key 提升配额。不配置则使用匿名访问(限频较低)。
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
export ANYSEARCH_API_KEY="as_sk_xxx" # AnySearch API Key(可选)
|
|
294
|
+
export EASTMONEY_APIKEY="xxx" # 东方财富 API Key(可选)
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### 缓存配置
|
|
298
|
+
|
|
299
|
+
```yaml
|
|
300
|
+
cache:
|
|
301
|
+
db_path: ~/.cache/unified-search/cache.db # 缓存数据库路径
|
|
302
|
+
enabled: true
|
|
303
|
+
max_size_mb: 500 # 最大缓存 500MB
|
|
304
|
+
ttl: 3600 # 默认 TTL 1 小时
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
分级 TTL(自动生效):
|
|
308
|
+
|
|
309
|
+
| 域 | TTL | 说明 |
|
|
310
|
+
|----|-----|------|
|
|
311
|
+
| 金融(股票/基金) | 5 分钟 | 数据变化快 |
|
|
312
|
+
| 新闻 | 10 分钟 | 时效性要求高 |
|
|
313
|
+
| 实时事件 | 15 分钟 | 突发/赛事 |
|
|
314
|
+
| 通用搜索 | 1 小时 | 默认 |
|
|
315
|
+
| 深度研究 | 2 小时 | 论文/综述 |
|
|
316
|
+
| 常青内容 | 24 小时 | 百科/定义 |
|
|
317
|
+
|
|
318
|
+
## 文件结构
|
|
319
|
+
|
|
320
|
+
```
|
|
321
|
+
unified-search/
|
|
322
|
+
├── README.md # 本文档
|
|
323
|
+
├── LICENSE # MIT License
|
|
324
|
+
├── .gitignore
|
|
325
|
+
├── config.yaml # 域路由 + 引擎注册 + 缓存/执行配置
|
|
326
|
+
├── backends/
|
|
327
|
+
│ ├── engine_registry.yaml # 三层引擎注册表(T1+T2 元数据)
|
|
328
|
+
│ ├── domain_profiles.json # TF-IDF 领域文档(语义路由用)
|
|
329
|
+
│ └── quota_profiles.json # 配额/成本配置
|
|
330
|
+
├── scripts/
|
|
331
|
+
│ ├── search.py # CLI 主入口
|
|
332
|
+
│ ├── route.py # 双层路由 + 降级链
|
|
333
|
+
│ ├── engines.py # 统一引擎执行器(18+ 解析器)
|
|
334
|
+
│ ├── config.py # 配置加载器(热加载)
|
|
335
|
+
│ ├── cache.py # 双层缓存(L1 LRU + L2 SQLite)
|
|
336
|
+
│ ├── tfidf_router.py # TF-IDF 语义路由引擎
|
|
337
|
+
│ ├── health_check.py # 引擎健康检测
|
|
338
|
+
│ ├── quota.py # 配额管理
|
|
339
|
+
│ ├── search_types.py # 结果标准化类型
|
|
340
|
+
│ └── benchmark.py # 性能基准测试
|
|
341
|
+
├── local-search/ # T2 本地引擎层(28 个零成本引擎)
|
|
342
|
+
│ ├── search_v3.py # 搜索执行 + 健康检查
|
|
343
|
+
│ └── config.json # 本地引擎配置
|
|
344
|
+
├── tests/
|
|
345
|
+
│ ├── test_unit.py # 单元测试
|
|
346
|
+
│ ├── test_integration.py # 端到端验收
|
|
347
|
+
│ ├── test_full.py # 完整集成测试
|
|
348
|
+
│ └── test_new_engines.py # 新引擎集成测试
|
|
349
|
+
└── docs/
|
|
350
|
+
└── architecture.md # 架构文档
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## 设计哲学
|
|
354
|
+
|
|
355
|
+
1. **零依赖优先。** Python 标准库 + PyYAML 即可运行。不引入 requests、httpx、flask 等第三方库。
|
|
356
|
+
2. **降级不报错。** 任何引擎失败都不影响整体。T1 挂了走 T2,T2 挂了读缓存,缓存没有返回空结果 + 明确错误信息。
|
|
357
|
+
3. **配置驱动。** 新增引擎只需在 `engine_registry.yaml` 加一行 + `config.yaml` 加路由规则,不改代码。
|
|
358
|
+
4. **缓存分级。** 金融数据 5 分钟过期,常青内容 24 小时。不一刀切。
|
|
359
|
+
5. **路由透明。** `--explain` 输出完整路由决策链,方便调试和优化。
|
|
360
|
+
|
|
361
|
+
## CLI 参数
|
|
362
|
+
|
|
363
|
+
```
|
|
364
|
+
用法: python3 scripts/search.py [选项] 查询词
|
|
365
|
+
|
|
366
|
+
选项:
|
|
367
|
+
--engine, -e 搜索引擎(默认 auto)
|
|
368
|
+
--max-results, -n 最大结果数(默认 5)
|
|
369
|
+
--depth, -d 搜索深度(ultra-fast/fast/balanced/deep)
|
|
370
|
+
--tier 引擎层级(api/local/all)
|
|
371
|
+
--no-cache 禁用缓存
|
|
372
|
+
--explain 显示路由决策
|
|
373
|
+
--json JSON 输出
|
|
374
|
+
--timeout, -t 超时秒数(默认 10)
|
|
375
|
+
--list-engines 列出可用引擎
|
|
376
|
+
--progress 打印进度阶段(调试用)
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
## 适用平台
|
|
380
|
+
|
|
381
|
+
作为 Python 脚本,任何支持命令行调用的环境都能用:
|
|
382
|
+
|
|
383
|
+
- **AI Agent 集成**:Claude Code / Grok Build / Codex 等,作为搜索后端
|
|
384
|
+
- **脚本调用**:Shell / Python / Node.js 子进程
|
|
385
|
+
- **Web 服务**:包装为 Flask/FastAPI 接口
|
|
386
|
+
- **CI/CD**:自动化测试中的搜索验证
|
|
387
|
+
|
|
388
|
+
## 版本历史
|
|
389
|
+
|
|
390
|
+
| 版本 | 日期 | 变更 |
|
|
391
|
+
|------|------|------|
|
|
392
|
+
| **v1.0.0** | 2026-07 | 首次公开发布。40 引擎(12 T1 + 28 T2),TF-IDF 语义路由,双层缓存,四层降级链,Bocha Reranker 精排 |
|
|
393
|
+
|
|
394
|
+
## 贡献
|
|
395
|
+
|
|
396
|
+
欢迎提交 Issue 和 Pull Request。
|
|
397
|
+
|
|
398
|
+
1. Fork 本仓库
|
|
399
|
+
2. 创建特性分支(`git checkout -b feature/amazing-feature`)
|
|
400
|
+
3. 提交更改(`git commit -m 'Add amazing feature'`)
|
|
401
|
+
4. 推送到分支(`git push origin feature/amazing-feature`)
|
|
402
|
+
5. 创建 Pull Request
|
|
403
|
+
|
|
404
|
+
## License
|
|
405
|
+
|
|
406
|
+
MIT License © 2026 [taxueseek](https://github.com/taxueseek)
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
> 好的搜索引擎不是让你搜得更多,是让你搜得更准。输入查询,它替你选路。
|