80 lines
3.4 KiB
Markdown
80 lines
3.4 KiB
Markdown
# Frontier Signals Workflow
|
|
|
|
## Goal
|
|
|
|
Aggregate frontier discussions from multiple platforms, keep only **AI Agent-related** signals via AI filtering, and ingest into `POST /api/webhook/signals`.
|
|
|
|
## Workflow
|
|
|
|
- Workflow name: `前沿信号聚合(多源+AI Agent过滤)`
|
|
- Workflow ID: `bAxNZKGq2ApUUiw9`
|
|
- Status: `active`
|
|
- Trigger: every 4 hours (`Schedule Trigger`)
|
|
- Activated at: `2026-02-23`
|
|
|
|
## Source Research (Endpoints + Extracted Elements)
|
|
|
|
| Source | Endpoint | Node Type | Extracted Elements |
|
|
| --- | --- | --- | --- |
|
|
| Hacker News | `https://hacker-news.firebaseio.com/v0/topstories.json` + `.../item/{id}.json` | HTTP Request | `title`, `url`, `text`, `score`, `descendants`, `time` |
|
|
| GitHub | `https://api.github.com/search/repositories` | HTTP Request | `full_name`, `html_url`, `description`, `topics`, `stargazers_count`, `pushed_at` |
|
|
| arXiv | `https://export.arxiv.org/api/query?...` | RSS Read | `title`, `link`, `content/contentSnippet`, `pubDate/isoDate`, `categories` |
|
|
| Reddit | `https://www.reddit.com/r/LocalLLaMA/new.json?limit=40` | HTTP Request | `title`, `permalink`, `selftext/url`, `ups`, `num_comments`, `created_utc` |
|
|
| Product Hunt | `https://www.producthunt.com/feed` | RSS Read | `title`, `link`, `content/contentSnippet`, `published/updated` |
|
|
| Hugging Face | `https://huggingface.co/blog/feed.xml` | RSS Read | `title`, `link`, `content/contentSnippet`, `published/updated` |
|
|
|
|
## Why These Nodes
|
|
|
|
- `Schedule Trigger`: periodic ingestion
|
|
- `HTTP Request` / `RSS Read`: source fetching with stable machine-readable endpoints
|
|
- `Code`: per-source normalization and schema-safe cleanup
|
|
- `Merge (append)`: multi-source union
|
|
- `Remove Duplicates`: `source + sourceUrl` dedupe before/after AI
|
|
- `Limit`: cap candidate volume before AI
|
|
- `LLM Chain + Structured Output Parser`: relevance filtering + structured sections
|
|
- `If`: keep only `shouldKeep=true`
|
|
- `HTTP Request` (POST): write to `/api/webhook/signals`
|
|
|
|
## Target Contract Mapping
|
|
|
|
The workflow emits payload compatible with `SignalWebhookPayloadSchema`:
|
|
|
|
- `apiKey`: from `$env.WEBHOOK_API_KEY`
|
|
- `signals[]`:
|
|
- `source` -> one of:
|
|
- `hacker_news`
|
|
- `github`
|
|
- `arxiv`
|
|
- `hugging_face`
|
|
- `reddit`
|
|
- `product_hunt`
|
|
- `sourceUrl`, `title`, `summary`, `topic`, `tags`, `sections`, `engagement`, `publishedAt`, `isActive`
|
|
|
|
Sections are constrained to:
|
|
|
|
- style: `focus | debate | evidence | action | risk`
|
|
- max 6 sections, max 6 items per section
|
|
|
|
## AI Filtering Policy
|
|
|
|
The AI node does **not** score ideas by novelty/reliability/feasibility.
|
|
It only decides whether a signal is about AI Agent topics and then structures content for reading efficiency.
|
|
|
|
- Keep (`shouldKeep=true`) if discussion is materially agent-related
|
|
- Drop (`shouldKeep=false`) if clearly unrelated to AI Agent
|
|
- Ambiguous cases bias to keep
|
|
|
|
## Manual Configuration (No Env)
|
|
|
|
This workflow is intentionally configured without `$env` usage.
|
|
|
|
- Node `构建 Webhook Payload`:
|
|
- set `apiKey` to your real webhook key (replace placeholder string)
|
|
- Node `发送到 Signals Webhook`:
|
|
- set the target URL to your actual API base (current default is `https://agentpark.fun/api/webhook/signals`)
|
|
|
|
## Notes
|
|
|
|
- Reddit source uses JSON API with explicit `User-Agent` headers to reduce 403 blocking risk.
|
|
- `n8n_test_workflow` cannot trigger schedule-only workflows via API; runtime verification should be done by waiting for scheduled execution or manual run in n8n UI.
|