内容
开发者真正想知道的关于你的工具的信息
**对Hacker News开发者情绪的确定性解读**,适用于任何品牌、工具或库——在HN故事和评论中,情绪、提及量、重复主题和功能请求,通过 **四个可调用的MCP工具** 公开。区别在于 **判断和聚合,而不是原始访问**:它对公共HN讨论进行评分、聚类和挖掘,以便AI代理可以一次性调用,并返回原始匹配项以及聚合结果,以便每个数字都可审计。
**零设置 — 无需API密钥。** Hacker News(Algolia)API是开放的,因此这个Actor立即启动并返回数据。无需凭证,无需审批队列,无需首次运行摩擦。
分析层中没有LLM——情绪是一种透明的词汇加规则评分器,因此相同的帖子总是产生相同的答案。
## 适用对象
- **AI代理** 需要一次性读取开发者对某个产品的看法,然后再起草比较、发布帖子或支持回复。
- **DevRel和产品团队** 跟踪某个工具、框架或发布在Hacker News人群中的反响。
- **创始人和市场营销人员** 验证定位是否符合开发者在公开场合的实际言论。
## 为什么使用Hacker News开发者情绪?
- **零设置** — 无需API密钥,无需登录,无需审批流程。部署并调用。
- **一次调用,即可获得可用答案** — 情绪标签、净评分、提及量、热门主题和代表性样本,全部在一个结构化的响应中。
- **确定且可审计** — 无模型温度,无每次调用漂移。相同的帖子加上相同的配置总是产生相同的输出,原始项目与聚合结果一同返回。
- **为代理构建** — 一个备用MCP服务器,使用Streamable HTTP传输,因此任何MCP客户端都可以直接连接并调用它。
- **廉价且快速** — 每个查询一个HN有效载荷,缓存并在查询工具中共享。分析路径中无LLM成本。
## 如何使用Hacker News开发者情绪?
1. **部署Actor** — 在Apify上以备用模式运行。它在无需输入的情况下启动并立即返回数据。
2. **将您的MCP客户端** 连接到备用端点(`https://<your-standby-url>/mcp`),使用Streamable HTTP传输。
3. **调用`get_sentiment_summary`**,并附上查询(品牌、工具或主题),以获取标题读取。
4. **深入挖掘**,使用`search_mentions`、`get_feature_requests`或`get_trending_discussions`,当您需要详细信息时。查询工具共享相同缓存的有效载荷。
## 四个工具
`query`是一个品牌/工具/主题字符串(例如`"prisma"`、`"tailwind"`)。`channels`、`windowDays`和`limit`是可选的,默认为Actor配置的默认值。`channels`选择HN帖子类型 — `story`、`ask_hn`、`show_hn`、`comment` — 默认值为所有(故事**和**评论,因为HN意见存在于评论中)。
### `get_sentiment_summary` — 标题读取
查询的聚合情绪、提及量、热门主题和代表性样本。输入:`query`(必填)、`channels?`、`windowDays?`。
```jsonc
{
"query": "prisma",
"channelsQueried": ["story", "ask_hn", "show_hn", "comment"],
"windowDays": 30,
"mentionVolume": 52,
"netSentiment": 0.18,
"sentimentLabel": "Positive",
"breakdown": { "positive": 29, "neutral": 16, "negative": 7 },
"topThemes": [
{ "term": "type safety", "count": 15 },
{ "term": "migrations", "count": 12 },
{ "term": "query performance", "count": 7 }
],
"topSamples": [
{
"title": "Prisma 6 made our migrations painless",
"channel": "story",
"score": 312,
"url": "https://news.ycombinator.com/item?id=48800001",
"createdAt": "2026-06-02T14:11:00.000Z",
"sentiment": "Positive"
}
],
"fetchedAt": "2026-07-14T00:00:00.000Z"
}
```
`netSentiment`是`[-1, 1]`中的平均复合评分;`sentimentLabel`在±0.05处分桶。`topSamples`是三个参与度最高的项目。`topThemes`是过滤掉停用词和查询词的单/双词,按频率排名。
### `search_mentions` — 匹配项及每项情绪
提及查询的故事和评论,每项都经过评分,按评分然后按时间排序。输入:`query`(必填)、`channels?`、`windowDays?`、`limit?`。
```jsonc
{
"query": "prisma",
"channelsQueried": ["story", "comment"],
"windowDays": 30,
"count": 2,
"items": [
{
"id": "48800001",
"title": "Prisma 6 made our migrations painless",
"excerpt": "We migrated a 40-table schema with zero downtime and the typed client caught three bugs before...",
"channel": "story",
"score": 312,
"numComments": 88,
"url": "https://news.ycombinator.com/item?id=48800001",
"createdAt": "2026-06-02T14:11:00.000Z",
"sentiment": "Positive",
"sentimentScore": 0.74
}
],
"fetchedAt": "2026-07-14T00:00:00.000Z"
}
```
`excerpt`是截断为280个字符的项目文本。`sentimentScore`是每个项目的复合评分,在`[-1, 1]`范围内。评论的`title`为空,`numComments: 0`。
### `get_feature_requests` — 请求和痛点,按组
表达对查询的功能请求、愿望、差距、路线图问题或痛点的项目 — 按提示类别分组。输入:`query`(必填)、`channels?`、`windowDays?`、`limit?`。
```jsonc
{
"query": "prisma",
"channelsQueried": ["story", "ask_hn", "comment"],
"windowDays": 30,
"count": 3,
"items": [
{
"id": "48800042",
"title": "Ask HN: does Prisma support deep JSON filtering yet?",
"excerpt": "Please add deep JSON path filters to the query API.",
"cueCategory": "request",
"channel": "ask_hn",
"score": 54,
"url": "https://news.ycombinator.com/item?id=48800042",
"createdAt": "2026-06-09T18:30:00.000Z"
}
],
"byCategory": { "wish": 1, "missing": 1, "request": 1, "plans": 0, "painpoint": 0 },
"fetchedAt": "2026-07-14T00:00:00.000Z"
}
```
`cueCategory`是以下之一:`request` / `wish` / `missing` / `plans` / `painpoint`(按优先级匹配)。`excerpt`是匹配的句子。`byCategory`总数始终等于`count`。
### `get_trending_discussions` — 最热讨论(无需查询)
Hacker News中参与度最高的讨论,无需查询。输入:`windowDays?`、`limit?`。
```jsonc
{
"channelsQueried": ["story"],
"windowDays": 7,
"count": 2,
"items": [
{
"id": "48841676",
"title": "Postgres rewritten in Rust, now passing 100% of the regression tests",
"channel": "story",
"score": 980,
"numComments": 240,
"engagement": 1220,
"url": "https://news.ycombinator.com/item?id=48841676",
"createdAt": "2026-07-12T09:02:00.000Z",
"sentiment": "Neutral"
}
],
"fetchedAt": "2026-07-14T00:00:00.000Z"
}
```
`engagement`是`score + numComments`;项目按其降序排列。趋势仅在故事级别(评论被排除 — 它们没有线程参与度)。
## 输入
服务器启动时**无需输入**,立即返回数据 — Hacker News(Algolia)API无需凭证。以下所有字段均为可选。
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| `defaultChannels` | 数组 | `["story","ask_hn","show_hn","comment"]` | 工具调用未指定时搜索的HN帖子类型。允许:`story`、`ask_hn`、`show_hn`、`comment`。 |
| `windowDays` | 整数 | `30` | 默认 trailing look-back 窗口(天数)(1–90)。 |
| `cacheTtlMinutes` | 整数 | `20` | 查询的 fetched 有效载荷在重新获取之前被重用的时间(分钟)(1–240)。 |
| `maxItems` | 整数 | `100` | 每次调用的项目上限;每次调用的`limit`被限制在此(10–250)。 |
## 输出
每个工具返回一个结构化的JSON对象(上面每个工具都显示了)。响应是确定的 — 相同的帖子加上相同的配置总是产生相同的结果。每个响应都包含一个`fetchedAt`时间戳,反映了底层Hacker News有效载荷何时被拉取;缓存读取返回相同有效载荷(和时间戳)以获取该TTL窗口。
## 数据字段参考
| 字段 | 它告诉你什么 |
|---|---|
| `netSentiment` | 匹配项中平均复合情绪,在`[-1, 1]`范围内 |
| `sentimentLabel` | 正面 / 中立 / 负面,在±0.05处分桶 |
| `breakdown` | 正面 / 中立 / 负面项目计数 |
| `mentionVolume` | 窗口中匹配项的数量 |
| `topThemes` | 最频繁的单/双词(过滤掉停用词和查询词) |
| `topSamples` | 三个参与度最高的匹配项 |
| `sentimentScore` | 每项的复合情绪,在`[-1, 1]`范围内 |
| `channel` | HN帖子类型:`story` / `ask_hn` / `show_hn` / `comment` |
| `cueCategory` | 功能请求类别:request / wish / missing / plans / painpoint |
| `byCategory` | 每个提示类别的功能请求项计数 |
| `engagement` | 故事的`score + numComments`(趋势排名键) |
| `fetchedAt` | 底层Hacker News有效载荷被获取的时间 |
## 定价
此Actor在备用模式下运行,并根据使用情况付费。当处于暖和状态并提供请求时,会计算使用情况。读取是轻量级的 — 每个查询的HN数据仅获取一次,缓存(默认20分钟),并在查询工具之间共享,因此对同一个查询调用多个工具的成本是单个上游获取。分析路径中没有LLM,因此没有每次调用的模型成本,而Hacker News API是免费的。
## 提示
- **从`get_sentiment_summary`**开始获取标题,然后仅在需要时调用详细信息工具 — 查询工具共享相同的缓存有效载荷。
- **缩小`channels`**(例如`["ask_hn"]`)以关注征求意见的帖子,或删除`comment`仅查看故事级别的信号。
- **提高`cacheTtlMinutes`**在批量处理许多查询时;降低它时,您需要新鲜的读取。
- **扩大`windowDays`**(最多90)以捕捉更稳定的基线。
## 工作原理
1. MCP客户端发送工具调用(例如`get_sentiment_summary`)以及查询。
2. 服务器检查内存LRU + TTL缓存。如果未命中,则对选定的通道发出Hacker News(Algolia)搜索API的请求,并缓存原始项目。
3. HN文本(以HTML形式到达)被剥去标签并解码,然后纯分析函数对情绪进行评分(词汇 + 否定/强化/表情符号规则),聚合它,提取主题,挖掘功能请求提示,并排名 — 无需进一步的网络调用。
4. 匹配窗口被过滤到确切的天数计数,并工具的结构化结果 — 聚合 + 原始项目 + `fetchedAt` — 被返回给MCP客户端。
所有分析都是确定性的和时钟注入的(无需网络即可测试)。暂时性错误(网络闪烁,5xx)会重试并有界回退;速率限制(429)会显示一个`resetAt`供调用者处理。
## 适用场景
作为专注于代理的Apify Actors的小型产品之一:
- **[GitHub仓库智能MCP](https://apify.com/joeslade/github-repo-intelligence-mcp)** — 面向任何GitHub仓库的五个MCP工具的意见维护性裁决。
- **[SERP主题差距监测器](https://apify.com/joeslade/serp-topic-gap-monitor)** — 查找搜索结果覆盖范围中的主题差距,并生成评分的差距报告。
- **[文档MCP服务器](https://apify.com/joeslade/docs-mcp-server-starter)** — 一个MCP服务器,为AI助手提供可查询的框架文档访问。
## 常见问题和支持
**我需要API密钥或账户吗?**
不。Hacker News(Algolia)搜索API是开放的 — Actor启动并在无需设置的情况下返回数据。
**情绪来自LLM吗?**
不。情绪是一种透明的词汇加规则评分器(否定、强化、表情符号、VADER风格的归一化)。分析层中没有模型,这使得每次调用都是确定性和可审计的。
**它读取评论还是只是故事?**
两者,默认情况下 — HN意见存在于评论中。使用`channels`参数缩小到特定的帖子类型。
**输出稳定吗?**
是的。相同的项目加上相同的配置始终产生相同的聚合结果,并且返回原始匹配的项目以便审计。
**它返回了速率限制消息 — 我该怎么办?**
Hacker News速率限制(429)显示一个`resetAt`时间戳;在它之后重试。提高`cacheTtlMinutes`可以在批量处理时减少上游调用。
**发现了错误或需要功能?**
在Actor的**问题**选项卡上打开一个问题。可根据要求提供自定义变体。
## 致谢
情绪词汇表从 [VADER](https://github.com/cjhutto/vaderSentiment) (Hutto, C.J. & Gilbert, E.E., 2014)扩展而来,在其MIT许可下使用。Hacker News数据通过 [Algolia HN搜索API](https://hn.algolia.com/api) 提供。
## 许可证
版权 © 2026 Joe Slade.
在 [GNU Affero General Public License v3.0](LICENSE) (AGPL-3.0) 下许可。你可以免费使用、研究、修改和自我托管该软件;如果你在修改后的版本作为网络服务运行,AGPL要求你向用户提供修改后的源代码,遵循相同的许可。对于不受AGPL网络版权保护的商业许可,请联系作者。