搜索引擎抽象。 当前实现: - SerpApiSearchProvider:商业聚合 API,需 API Key,开箱即用 - SearxngSearchProvider:开源元搜索引擎,需要本地或可访问的 SearXNG 实例,免费 让用户根据成本 / 数据合规 / 离线需求自由切换 provider。 后续如果新增 Brave / Tavily / Exa 等实现,只要继续实现这个接口,无需改动调用方。
| 14 | * 后续如果新增 Brave / Tavily / Exa 等实现,只要继续实现这个接口,无需改动调用方。 |
| 15 | */ |
| 16 | public interface SearchProvider { |
| 17 | |
| 18 | /** |
| 19 | * @return provider 名称(如 "serpapi"、"searxng"),用于错误信息和日志 |
| 20 | */ |
| 21 | String name(); |
| 22 | |
| 23 | /** |
| 24 | * @return 是否可用(如必要 API Key 已配置 / 服务地址可访问) |
| 25 | */ |
| 26 | boolean isReady(); |
| 27 | |
| 28 | /** |
| 29 | * @return 当 {@link #isReady()} 为 false 时给用户的提示,例如「请配置 SERPAPI_KEY」 |
| 30 | */ |
| 31 | String unavailableHint(); |
| 32 | |
| 33 | /** |
| 34 | * 执行搜索。 |
| 35 | * |
| 36 | * @param query 搜索关键词,不可为 null/blank |
| 37 | * @param topK 期望返回结果数量,实现可酌情截断 |
| 38 | */ |
| 39 | List<SearchResult> search(String query, int topK) throws IOException; |
| 40 | } |
no outgoing calls
no test coverage detected