内容
# Optifeed Radar
[](https://www.npmjs.com/package/optifeed-radar)
[](https://github.com/optifeed/optifeed-radar/actions/workflows/ci.yml)
[](LICENSE)
[](https://nodejs.org)
**开源 AI 可见性检查工具。现在可在 npm 上使用 - 使用 `npx optifeed-radar` 运行。**
您的品牌在买家询问 AI 时是否被推荐?Optifeed Radar 检查 ChatGPT、Perplexity、Gemini 和 Claude 是否实际推荐您,并告诉您与竞争对手的对比。它在本地运行,使用您自己的 API 密钥,没有 Optifeed 托管的后端。
它适用于两种 AI 代理:它衡量 AI 代理如何看待和推荐您,并且可以由您自己的 AI 代理(CLI、JSON 和 MCP 服务器)运行。人们也称之为 AI 可见性、生成引擎优化(GEO)、答案引擎优化(AEO)或 AI-SEO。
<p align="center">
<img src="https://raw.githubusercontent.com/optifeed/optifeed-radar/main/docs/assets/optifeed-radar-overview.png" alt="Optifeed Radar AI 可见性仪表盘和报告" width="900">
</p>
## 60 秒设置
无需安装 - `npx` 会获取并运行它。零密钥 `audit` 运行结束到结束,无需 API 密钥和 AI 调用:
```bash
npx optifeed-radar audit yourbrand.com
```
它检查 AI 爬虫访问(robots.txt)、llms.txt、schema.org 结构化数据、元基础和您的站点地图,然后打印 0-100 的 AI 准备就绪分数。
`check` 管道在您设置至少一个引擎 API 密钥后运行。将它放入 `.env` 文件中,或导出:
```bash
echo "OPENAI_API_KEY=sk-..." > .env # 任意一个引擎密钥即可开始
npx optifeed-radar check yourbrand.com
```
CLI 加载 `.env` 文件,因此没有 shell 设置步骤。导出密钥也可以使用(`export OPENAI_API_KEY=...`),导出的密钥始终优先于 `.env` 中的相同密钥。`config` 显示找到哪些密钥以及它们来自哪个文件,但不显示值。
它发现您的品牌,生成买家提示包,询问引擎,并将推荐、位置和语音份额评分到一个 AI 可见性分数。该分数仅读取无品牌的买家问题(AI 是否在未提示的情况下显示您);命名您品牌的提问单独报告为声誉。所有四个引擎都通过其生产 API 进行实时验证(2026-07-20)。
如果您从克隆版开始?运行 `npx tsx src/cli/index.ts <command>` 以使标志到达 CLI 不变,或者使用 `npm run dev` 脚本并在参数前加上 `--`(`npm run dev -- check yourbrand.com --report out.html`)。
### 查看实际操作
从终端运行完整的可见性检查,从品牌发现和买家提示生成到实时引擎查询和评分。
<p align="center">
<a href="https://github.com/optifeed/optifeed-radar/blob/main/docs/assets/optifeed-radar-cli.mp4">
<img src="https://raw.githubusercontent.com/optifeed/optifeed-radar/main/docs/assets/optifeed-radar-cli-preview.png" alt="观看 Optifeed Radar CLI 演示" width="760">
</a>
</p>
<p align="center"><a href="https://github.com/optifeed/optifeed-radar/blob/main/docs/assets/optifeed-radar-cli.mp4"><strong>观看 15 秒 CLI 演示</strong></a></p>
## 它做什么
Optifeed Radar 向真实的 AI 引擎提出真实的买家问题,并衡量您的品牌是否被推荐 - 不是您在搜索索引中的排名,而是 AI 给买家提供的答案是否提到了您。基于 Web 来源的引擎(它们引用 Web 来源)单独报告,因为它们的行为不同。引擎仅在回答中实际搜索时才被视为基于 Web 的引擎;询问基于 Web 的模式是一种请求,模型可以拒绝,因此报告显示引擎何时仅在部分答案中搜索。[METHODOLOGY.md](METHODOLOGY.md) 中有该公式。
问题与您销售的产品相符。如果您制作自己的产品,买家会被问到购买什么,并针对竞争对手进行衡量。如果您是一家销售其他公司产品的商店,买家会被问到在哪里购买 - 产品问题会得到制造商的答案,因此商店的评分会报告为零,这对商店来说毫无意义。该工具从您的站点中找出这一点,并将其存储在 `profile.json` 中;如果它猜测错误,请编辑它。
在更深入的层次上,`shopping` 对您命名的个别产品执行相同的操作(测试版)。每个产品都有自己的 0-100 可见性分数,报告按引擎执行的操作排序:它们回答但从未推荐的产品,因为这是值得阅读的发现,然后是其余产品按可见性排序,最后是无法衡量的产品。您列出产品的顺序不具有排名意义;它仅在分数相同的情况下打破僵局。每个产品都会被检查两次 - 类别购买问题从不命名它,以及直接询问产品的問題 - 当产品缺失时,报告会突出引擎命名的竞争对手产品,这是更有用的信息的一半。因为每个产品都有自己的问题,所以分数显示每个产品在其自身货架上有多大的影响力,而不是一个产品是否优于另一个产品。您命名产品;没有任何内容被导入或爬取。
## 从您的 AI 代理(MCP)使用它
`optifeed-mcp` 服务器向 AI 代理公开相同的功能。它通过 stdio 运行,`npx` 按需获取 - 无需克隆或构建。
<p align="center">
<img src="https://raw.githubusercontent.com/optifeed/optifeed-radar/main/docs/assets/optifeed-radar-claude-desktop.png" alt="Optifeed Radar 通过 MCP 在 Claude Desktop 上运行" width="760">
</p>
Claude Desktop(`claude_desktop_config.json`)。打开它的最快方法是设置 -> 开发者 -> 编辑配置,它会创建该文件(如果它不存在)。在磁盘上,它位于:
- macOS:`~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows:`%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"optifeed-radar": {
"command": "npx",
"args": ["-y", "--package=optifeed-radar", "optifeed-mcp"],
"env": {
"OPENAI_API_KEY": "sk-..."
}
}
}
}
```
Claude Desktop 在启动时读取该文件,因此在编辑后请重新启动它。
Claude Code(项目中的 `.mcp.json`):
```json
{
"mcpServers": {
"optifeed-radar": {
"command": "npx",
"args": ["-y", "--package=optifeed-radar", "optifeed-mcp"]
}
}
}
```
Cursor(`.cursor/mcp.json`)和 Windsurf(`mcp_config.json`)使用相同的结构:
```json
{
"mcpServers": {
"optifeed-radar": {
"command": "npx",
"args": ["-y", "--package=optifeed-radar", "optifeed-mcp"]
}
}
}
```
如果您从克隆版开始?先构建(`npm install && npm run build`),然后使用指向构建入口点的 `node` 运行服务器 - 将 `/path/to/optifeed-radar` 替换为您的克隆路径:
```json
{
"mcpServers": {
"optifeed-radar": {
"command": "node",
"args": ["/path/to/optifeed-radar/dist/mcp/index.js"]
}
}
}
```
### 示例提示
连接后,以自然语言询问您的 AI 代理。这些提示映射到五个工具及其接受的参数:
- “对 yourbrand.com 运行免费的 AI 就绪度审核。” -> `audit_store`,无需密钥,无成本。
- “Yourbrand.com 应该为哪些买家问题可见?” -> `generate_buyer_queries`,以便您在付费运行前查看提示包。
- “快速检查 yourbrand.com 的 AI 可见性,限制在 20 美分。” -> `check_visibility` 带有 `quick` 和 `max_cost`。
- “仅在 OpenAI 和 Perplexity 上检查 yourbrand.com。” -> `check_visibility` 带有 `engines`。
- “检查我的产品:Aria 2、Presto X、Brew Mini,按此顺序,用于 yourbrand.com。” -> `shopping_check`。输入顺序不是排名;它仅在分数相同时打破僵局。
- “检查 yourbrand.com 上的 Aria 2,一款安静的家用意式咖啡机,以及 Presto X,一款快速的双锅炉,限制在一美元。” -> `shopping_check` 带有每个产品的描述符和 `max_cost`。说明每个产品是什么是解救不透明模型名称的方法:没有它,问题会根据商店类别进行猜测。
- “Yourbrand.com 的可见性自上次运行后有何变化?” -> `get_snapshot_diff`,免费,并且它需要两次保存的运行才能进行比较。
首先使用审核提示:它不需要密钥,因此它确认服务器已连接。`check_visibility` 以非交互方式运行(无确认提示),因此 `max_cost` 上限是您的 AI 代理启动运行的限制 - 它默认为 0.50。`shopping_check` 更大,因此其默认上限按列表缩放,每个产品 0.20 美元。
## 工具和成本
| 界面 | 名称 | 功能 | 成本 |
| --- | --- | --- | --- |
| CLI | `audit` | 零密钥 AI 就绪度检查(robots.txt、llms.txt、schema、sitemap) | 免费,无 AI 调用 |
| CLI | `check` | 完整流程:买家提示、引擎、AI 可见性分数 | 自带密钥 |
| CLI | `shopping` | 您命名的产品:您的排名与 AI 的排名,以及竞争对手货架 | 自带密钥 |
| CLI | `diff` | 两个运行之间发生了什么变化 | 免费(读取保存的快照) |
| CLI | `sources` | AI 引用的域名,以及您的语音份额 | 免费(读取保存的快照) |
| CLI | `queries` | 显示或导出买家提示包 | 免费 |
| CLI | `config` | 设置了哪些引擎密钥,状态存储在哪里 | 免费 |
| MCP | `check_visibility` | 为域名运行可见性检查 | 自带密钥 |
| MCP | `audit_store` | 运行零密钥就绪度审核 | 免费 |
| MCP | `generate_buyer_queries` | 生成买家提示包 | 自带密钥(通常低于 0.05 美元) |
| MCP | `shopping_check` | 相同的产品检查,用于您的 AI 代理 | 自带密钥 |
| MCP | `get_snapshot_diff` | 比较两个保存的运行 | 免费 |
成本透明度:`audit` 查询没有 AI 引擎,成本为零。`check` 消耗您自己的 API 积分:测量后约为 0.09 美元的快速单引擎运行,四个引擎的成本在 0.41 美元至 0.46 美元之间,0.85 美元至 1.09 美元(使用 `--grounded`)。
`shopping` 于 2026-07-23 进行了测量:两个产品跨所有四个引擎在 `--grounded` 模式下运行 32 个答案,**0.70 美元 - 约 0.35 美元每种产品**。这是最昂贵的角落(基于 Web 的运行成本约为非基于 Web 的 3 倍),因此四引擎运行的非基于 Web 的运行成本远低于此。每个产品大约需要 4 个提示,每个引擎有密钥,产品在同一类别中共享其类别问题,一次提问并为每个产品评分。MCP 工具的默认上限为每个产品 0.20 美元,基于 Web 的运行将达到,因此如果您想要跨四个引擎进行基于 Web 的运行,请提高 `max_cost`。使用 `--max-cost` 并从两个或三个产品开始。
测量时间(以相同的方式测量,2026-07-22):
| 运行 | 测量时间 |
| --- | --- |
| 首次 `npx`(安装,一次) | 约 8 秒 |
| `audit` | 0.3 至 1.7 秒 |
| `check --quick`,四个引擎 | 47 至 51 秒 |
| `check --quick --grounded`,四个引擎 | 约 97 秒 |
安装数字是从打包的 tarball 中测量的,npm 缓存为空,因此冷 `npx optifeed-radar audit yourbrand.com` 从注册表应该在大约十秒内完成。`check` 等待引擎回答的时间:它查询其中几个引擎,等待时间是我们无法控制的提供商延迟。`check` 在运行时报告进度,因此您可以查看它处于哪个阶段,而不是监视空白终端。
每次运行都会报告实际支出,按设置(品牌发现和提示生成)和引擎调用拆分,因此您可以将其与提供商账单进行核对。拒绝确认提示仍然报告设置成本,因为发现运行在提示之前。
`--max-cost 0.20` 上限花费。上限在每次调用之前进行检查,达到上限时会返回带有上限标记的部分结果,而不会出现错误。它是一个强有力的约束,而不是绝对的天花板:引擎的成本直到其调用返回才知道,因此运行最多可以超过上限每个引擎一个未测量的调用。任何超出的部分都会被报告,从不隐藏。
有用的 `check` 标志:`--json`(原始信封),`--report report.html`(自包含报告),`--max-cost 0.50`,`--quick`(较小的提示包),`--grounded`(Web 搜索模式,如果引擎支持),`--fail-under 50`(退出阈值低于 CI),`--yes`(跳过成本提示,以便 AI 代理可以无人值守运行)。
## 示例
```bash
npx optifeed-radar audit example.com # 免费就绪度分数
npx optifeed-radar check example.com --quick --yes
npx optifeed-radar shopping example.com --products "Aria 2, Presto X" --yes
npx optifeed-radar diff example.com # 自上次运行后发生了什么变化
npx optifeed-radar sources example.com # AI 引用的内容
npx optifeed-radar config # 设置了哪些密钥
```
`config` 仅报告每个密钥是否存在,从不显示密钥值。
对于 `shopping`,每种运行列出最多 10 个产品,顺序无关紧要;仅显示前 10 个产品,报告按引擎执行的操作排序,而不是您输入的内容。文件
给每个产品一个描述符,这是解救不透明产品名称的方法:`Aria 2` 告诉引擎什么都不知道,“安静的家用意式咖啡机”告诉它一切:
```yaml
products:
- name: Aria 2
aliases: [Aria II]
descriptor: 安静的家用意式咖啡机
- name: Presto X
descriptor: 快速的双锅炉意式咖啡机
```
```bash
npx optife
- ["/path/to/optifeed-radar/dist/mcp/index.js"]
```