- 人工智能
- MCP 服务
【免费下载链接】web-search-mcp
A simple, locally hosted Web Search MCP server for use with Local LLMs
web-search-mcp 是一个面向本地大模型的 Web Search MCP 服务器,它内置了一套相关性评分算法(relevance scoring algorithm),用来判断每次搜索返回的结果是否"切题"。本文带你拆解这套算法的两大核心:关键词匹配加分与无关联惩罚机制,并附上 3 个可调参数,帮助新手快速理解"搜索结果为什么不准"以及如何改善它。
一、为什么搜索结果经常"跑题"?
多引擎搜索(Bing、Brave、DuckDuckGo)本身并不保证结果的切题程度,尤其在以下场景:
- 查询词太短或太泛(例如只搜一个词)
- 引擎返回了标题党、广告页、无关资讯
- 小众话题,不同引擎的召回质量差异很大
web-search-mcp 的解法是:先搜,再打分。每拿到一批结果,就用 assessResultQuality() 函数给它们打一个 0~1.0 的"质量分",分数太低就换下一个引擎再试。
二、评分算法的三步流程
整个评分过程可以概括为三步(源码见 src/search-engine.ts):
| 步骤 | 做什么 | 关键点 |
|---|---|---|
| 1. 提取查询关键词 | 清洗原始查询、过滤通用词 | 无有效关键词时直接给默认分 0.5 |
| 2. 逐条打分 | 每条结果单独计算得分 | 关键词命中 + 短语加成 − 无关联惩罚 |
| 3. 汇总平均 | 所有结果得分取平均值 | 得到整批结果的"质量分" |
💡 单条结果得分公式:
最终得分 = min(1.0, 关键词命中率 + 短语加成) − 惩罚值,下限为 0。
三、关键词匹配机制:如何判断"切题"
1. 关键词提取
算法先把查询转小写、去掉标点、按空格拆分,然后做两道过滤:
- 只保留长度大于 2 个字符的词(避免 "of"、"is" 这类噪音)
- 剔除约 30 个英文常见词(the、a、and、for、with、was 等停用词)
如果过滤后一个关键词都不剩(比如查询只有 "how"),算法会直接返回0.5的默认分,不再深入判断。
2. 短语加成(Phrase Bonus)
这是算法的精髓之一:单个关键词命中只能算"沾边",而查询中相邻词成对出现才算"真的相关"。
- 若查询有 2 个以上关键词,算法会构造所有相邻词对(如
web+search→ "web search") - 若关键词有 3 个以上,额外把前 3 个词组合成一个 3 词短语
- 结果文本(标题 + 描述 + URL)中每命中一个短语,加 0.3 分
3. 单条得分计算
- 关键词命中率 = 命中的关键词数 ÷ 查询关键词总数(0~1 之间)
- 单条得分 = min(1.0, 关键词命中率 + 短语加成)
也就是说,哪怕所有关键词都命中了,得分上限也是 1.0;而短语命中能让"命中率只有 50%"的结果照样拿高分——这正是它优先奖励"真正切题"结果的原因。
四、无关联惩罚机制:30 个"跑题话题"模式
光有加分还不够。算法内置了一份irrelevantPatterns清单,覆盖约30 个常见无关话题的正则模式(见 src/search-engine.ts),主要包括:
| 话题类别 | 示例模式 |
|---|---|
| 饮食烹饪 | recipe、cooking、food、restaurant |
| 天气 | weather、temperature、forecast |
| 购物促销 | shopping、sale、price、buy |
| 影视娱乐 | movie、film、tv show、entertainment |
| 体育游戏 | sports、game、score、team |
| 时尚 | fashion、clothing、style |
| 旅行 | travel、hotel、flight、vacation |
| 汽车 | car、vehicle、automotive |
| 房产 | real estate、property、house |
规则很简单:每命中一个无关话题模式,扣 0.2 分,且惩罚累加,最终得分最低被钳制在 0。
举个例子:你搜 "MCP server deployment",某条结果的标题里出现了 "movie" 和 "sale",就会被扣 0.4 分——即使它恰好包含全部关键词,排名也会被显著压低。这就是"无关联惩罚"名字的由来。
五、分数怎么用?引擎选择与提前返回
质量分算出来后,会在引擎选择逻辑中发挥作用(见 src/search-engine.ts):
- 按Bing → Brave → DuckDuckGo的顺序尝试三种搜索方式
- 每拿到一批结果就打分,始终记录当前最高分的那批
- 若质量分≥ 0.8:立即返回,不再尝试其他引擎
- 若质量分≥ 阈值(默认 0.3)且不是 Bing(首个引擎):也直接采用
- 若分数不达标:继续尝试下一个引擎;全部失败时退回分数最高的一批
这套"打分 + 换引擎"的机制,就是 web-search-mcp 保证搜索质量的核心:分数太低的结果会被整体替换,而不是把垃圾结果塞给大模型。
六、3 个环境变量:手动调节相关性评分
在 mcp.json 或启动配置中,可以用以下环境变量微调评分行为(说明见 README.md):
| 环境变量 | 默认值 | 作用 |
|---|---|---|
ENABLE_RELEVANCE_CHECKING | true | 开启/关闭质量校验。关闭后所有引擎质量分按 1.0 处理 |
RELEVANCE_THRESHOLD | 0.3 | 可接受的质量分下限(0.0~1.0),调高 = 更严格 |
FORCE_MULTI_ENGINE_SEARCH | false | 强制尝试所有引擎并返回分数最高的一批 |
实用建议:如果你发现 AI 引用的资料经常跑题,可以把RELEVANCE_THRESHOLD调到0.5,并开启FORCE_MULTI_ENGINE_SEARCH=true,让多个引擎"竞争"出最好的结果。
七、小结
web-search-mcp 的相关性评分算法虽然不长,但设计思路很值得借鉴:
- ✅关键词匹配:用命中率打底,用短语加成奖励真正切题的结果
- ✅无关联惩罚:30 个话题模式逐一扣分,压制广告页与跑题内容
- ✅引擎竞争:分数驱动的换引擎机制,差结果会被整体替换
想进一步阅读:评分完整源码见 src/search-engine.ts,查询清洗逻辑见 src/utils.ts,接口说明见 docs/API.md。理解这套"关键词匹配 + 无关联惩罚"机制后,你就能明白本地搜索 MCP 是如何为 LLM 过滤掉不相关搜索结果的了。
- 人工智能
- MCP 服务
【免费下载链接】web-search-mcp
A simple, locally hosted Web Search MCP server for use with Local LLMs
相关推荐
TheRemoteFreelancer搜索算法优化:关键词匹配与相关性排序
TheRemoteFreelancer搜索算法优化:关键词匹配与相关性排序 你是否在寻找远程自由职业机会时,面对海量平台却难以快速找到合适的项目?本文将深入解析
教程地理空间行业趋势分析:从Awesome Geospatial Companies看未来发展方向
地理空间行业趋势分析:从Awesome Geospatial Companies看未来发展方向 地理空间技术正在以前所未有的速度改变我们的世界!🌍 通过分析A
GIS文档AriaNg搜索算法优化:提升结果相关性
AriaNg搜索算法优化:提升结果相关性 在现代下载管理工具中,用户体验的核心在于高效定位和管理下载任务。AriaNg作为一款基于Web的Aria2前端管理工具
前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考