Peek搜索
](https://www.npmjs.com/package/peeky-search) 
找到你真正想要的答案。
内置的网络搜索为您提供摘要。peeky搜索为您提供了Stack Overflow的答案,包括代码修复、有人调试您的确切问题的GitHub讨论、实际解释边缘情况的文档段落。
没有LLM摘要层。仅基于IR的提取(BM25+结构启发式),直接从源中提取相关段落。
npx peeky-search --search --query "zod transform vs refine" --max 3# Search Results for: "zod transform vs refine"
Found 3 of 3 pages with relevant content.
## Zod: .transform() vs .refine() - Stack Overflow
Source: https://stackoverflow.com/questions/73715295
Use `.refine()` when you want to add custom validation logic that returns
true/false. Use `.transform()` when you want to modify the parsed value
before it's returned.
### Key difference
`.refine()` validates and returns the same type. `.transform()` can change
the output type entirely:
const stringToNumber = z.string().transform(val => parseInt(val));
// Input: string, Output: number这是给谁的
- 开发人员调试奇怪的问题 -在GitHub讨论或Stack Overflow中显示您的确切错误答案
- 代理商和RAG建设者 -带有来源归属的可验证摘录,而非综合摘要
- 任何厌倦了“这里有一个概述”的人 -当你需要特定的修复,而不是教程时
证据与总结
内置的网络搜索工具使用LLM 总结 页。你会得到一个完美的概览,但边缘的情况会变得平滑。
偷窥搜索摘录 证据 -来源的实际段落,按相关性排序。您可以确切地看到文档所说的内容,维护人员在GitHub线程中写的内容,以及公认的Stack Overflow答案所推荐的内容。
| 你得到了什么 | 偷窥搜索 | 内置WebSearch |
|---|---|---|
| 输出 | 您可以验证的源代码摘录 | AI解释摘要 |
| 边缘案例 | 从实际讨论中得出的表面 | 经常被总结出来 |
| 归因 | 确切知道哪个页面说了什么 | “根据我的搜索……” |
| LLM处理 | 无-纯IR提取 | 隐藏摘要调用 |
| 速度 | ~3-4秒 | ~20-25秒 |
总结遗漏了哪些表面
总结会让你达成共识。peeky为您提供了实际解决问题的具体细节:
| 查询 | peeky提取了什么 |
|---|---|
| vitest模拟计时器 | 边缘情况: vi.stubGlobal 用于模拟未定义的属性 |
| node.js背压 | _readableState.pipes.once('drain') 破解转换流 |
| Zod.transform() | as const satisfies 图案, readonly 数组陷阱 |
| Next.js水合错误 | 材质UI出错: Typography 默认为 ` |
| ` | |
| CVE-2024-3094 xz后门 | 链接到Filippo Valsorda的分析和xzbot复制库 |
| Bun vs better-splite3 | GitHub讨论,维护者揭穿了基准方法论 |
这些是隐藏在搜索结果第3页、评论线程和“相关”侧栏中的详细信息——人类可以通过点击找到这些内容,但这些摘要会被掩盖。
示例:找到真正的答案
对于 Bun SQLite vs better-sqlite3 performance:
内置WebSearch 返回了Bun的官方声明(速度快3-6倍)和一些普遍的怀疑。
偷窥搜索 发现了GitHub上的实际讨论,其中better squelite3维护者分析了基准测试具有误导性的原因,表明对于真正的SQLite重查询,better squilite3实际上可以更快。
这就是区别:总结给你营销。peeky为您提供了有人实际调查的GitHub线程。
安装
需要 码头工人 运行SearXNG搜索后端。
npx peeky-search setup这将:
- 检查先决条件(Docker已安装并正在运行)
- 在Docker中启动本地SearXNG实例
- 输出MCP配置以添加到您的客户端
然后将配置添加到MCP客户端并重新启动。
隐私
peeky搜索完全在本地运行:
- 瑟克斯NG 在您的机器上运行Docker
- 搜索不会影响Anthropic、OpenAI或任何第三方
- 无查询记录、无遥测、无数据收集
内置的网络搜索工具通过人工智能提供商路由查询。您无法了解这些查询会发生什么。
命令
npx peeky-search setup # One-time setup
npx peeky-search setup --port 9999 # Use custom port
npx peeky-search status # Check if SearXNG is running
npx peeky-search start # Start SearXNG
npx peeky-search stop # Stop SearXNG
npx peeky-search uninstall # Remove everythingMCP客户端配置
运行安装程序后,将以下内容添加到MCP客户端配置中:
{
"mcpServers": {
"peeky-search": {
"command": "npx",
"args": ["-y", "peeky-search", "mcp"],
"env": {
"SEARXNG_URL": "http://localhost:8888"
}
}
}
}在何处添加此内容:
- 克劳德代码:运行
claude mcp add并提供配置或编辑~/.claude/settings.json - 光标:添加到
.cursor/mcp.json在您的项目或~/.cursor/mcp.json全球范围内 - 其他MCP客户端:检查客户的文档,了解MCP服务器配置的位置
用法
MCP工具
配置后,您的MCP客户端将可以访问两个工具:
peeky_web_search
搜索网络并获取摘录。
输入:
{
"query": "react useEffect cleanup function",
"maxResults": 5,
"diagnostics": false
}| 参数 | 类型 | 说明 |
|---|---|---|
query | string | 搜索查询。支持 site:, "quotes", -exclude |
maxResults | number | 要获取的页面(默认5,最多10) |
diagnostics | boolean | 包含筛选详细信息(默认为false) |
sessionKey | string | 用于跨调用重复数据删除的键。对于不同的查询,可以重新获取相同的URL(使用 url:tokens 复合键)。 |
输出: 从多个带有源URL的页面中提取摘录。
peeky_fetch_page
获取并阅读一个网页。
输入:
{
"url": "https://react.dev/learn/synchronizing-with-effects",
"query": "cleanup function"
}| 参数 | 类型 | 说明 |
|---|---|---|
url | string | 要获取和读取的URL |
query | string | 可选。重点提取此查询。如果省略,则返回完整的已清理内容。 |
输出: 已清理带有标题和源URL的markdown格式的页面内容。如果 query 返回与查询相关的重点摘录。
命令行界面
搜索模式 (使用SearXNG):
npx peeky-search --search --query "prisma vs drizzle orm" --max 5URL模式 (摘自特定页面):
npx peeky-search --url "https://docs.example.com/auth" --query "JWT refresh tokens"提取模式 (清除页面内容):
npx peeky-search --fetch --url "https://react.dev/learn"
npx peeky-search --fetch --url "https://react.dev/learn" --query "useState"文件模式 (从本地HTML中提取):
npx peeky-search --query "authentication" --file docs.html --debug其他选项:
--timing或-t:显示性能时间细分--diagnostics:逐页显示提取详细信息(搜索模式)
运作原理
搜索管道
SearXNG → Dedupe URLs → Block JS domains → Title filter → Session dedupe
↓
Scrape pages
↓
Extract → Rank → Budget- 搜索:查询本地SearXNG的URL
- 预刮过滤:跳过被阻止的域,按标题/代码段相关性过滤(40%查询令牌阈值)
- 会话重复数据删除:跳过已为类似查询获取的URL
- 刮擦:具有超时处理的并行获取
- 提取并排名:运行提取管道,按组合相关性排名
- 预算:在字符限制内拟合结果
提取管道
HTML → Strip boilerplate → Extract blocks → Segment sentences
↓
BM25 + Heuristics
↓
Rank → Select anchors
↓
Expand context → Deduplicate
↓
Assemble excerpts (budget)- 预处理:删除脚本、样式、导航、广告和样板
- 片段:将块(标题、段落、列表、代码)提取成句子
- 质量门:拒绝低质量的页面(句子太少,大部分是片段)
- 得分:BM25用于术语相关性+9结构启发式
- 选择:选择位置/内容多样的顶级句子
- 扩展:围绕锚点构建上下文,尊重部分边界
- 组装:在角色预算内调整摘录
演出
代币效率
与获取原始HTML/makdown并将其发送到上下文相比:
| 度量 | 原始获取 | 窥视搜索 |
|---|---|---|
| 每页内容 | 30-80KB | 1-4KB |
| 每页代币 | ~15000-40000 | ~500-2000 |
| 5页搜索 | 约200KB,约50k个令牌 | 约12KB,约3000个令牌 |
与原始HTML提取相比,减少了约95%。 内置的网络搜索也会压缩内容(通过摘要),但使用隐藏的LLM调用来实现——peeky使用纯IR实现了类似的令牌计数,没有中间模型。
速度
- 提取:每页约20-50ms(纯计算,无LLM)
- 搜索:约3-4s共5页(网络版)
- 无隐藏成本你所看到的就是你所付出的
评分系统
BM25 (权重:0.6):经典词频逆文档频率。
启发法 (重量:0.4):
| 度量 | 重量 | 它测量什么 |
|---|---|---|
| headingPath | 0.17 | 节标题中的查询词 |
| 覆盖率 | 0.16 | IDF加权期限覆盖率 |
| 接近度 | 0.14 | 查询词出现的接近程度 |
| headingProximity | 0.11 | 到匹配航向的距离 |
| 结构 | 0.11 | 块类型(标题,代码值较高) |
| 密度 | 0.09 | 查询词集中度 |
| 离群值 | 0.09 | 高值句子的异常检测 |
| metaSection | 0.08 | 惩罚引言/结论/元内容 |
| position | 0.05 | 早期内容奖励 |
提取模式
- 严格:用于单页提取。需要强有力的多期匹配。
- 搜索:用于多页搜索。放宽阈值,接受部分匹配。
配置
管道默认值
{
bm25Weight: 0.6,
heuristicWeight: 0.4,
maxAnchors: 5,
minScore: 0.25,
diversityThreshold: 0.4,
contextBefore: 5,
contextAfter: 8,
maxExcerpts: 3,
charBudget: 6000
}MCP默认值
{
searxngUrl: "http://localhost:8888",
maxResults: 5,
timeout: 5000,
perPageCharBudget: 3000,
totalCharBudget: 12000
}提示
禁用内置网络搜索
如果启用了内置的网络搜索工具,模型可能会默认使用该工具。为确保模型使用peeky搜索:
- 克劳德代码:在设置中禁用网络搜索,否则模型将更喜欢WebSearch而不是MCP工具
- 其他客户:检查是否可以禁用内置的网络/浏览器工具
添加规则或内存
除非明确指示,否则某些型号无法识别MCP工具。添加如下规则:
使用peeky_web_search进行网络搜索。使用peeky_fetch_page读取URL。
在何处添加此内容:
- 光标:添加到
.cursorrules或项目规则 - 其他客户:添加到系统提示、内存或自定义指令中
致谢
免责声明
此工具从可公开访问的网页中获取和提取内容。用户有责任确保其使用符合适用法律和访问的任何网站的服务条款。作者对误用不承担责任。
许可证
麻省理工学院
