Files
agent-park/docs/integrations/n8n/DATAFLOW.md
T

322 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AgentPark n8n Dataflow
这份文档回答两个问题:
1. 这 8 条生产流程分别负责什么。
2. 数据怎样从外部源头进入 AgentPark,再进入数据库、API 和页面展示。
## 范围
当前纳入范围的 8 条生产流程:
1. `Topic项目计划新增`
2. `每日Github Trending项目计划新增`
3. `项目分析入库(多源)`
4. `GitHub Star 每日刷新`
5. `项目描述向量化`
6. `RAG项目搜索`
7. `前沿信号聚合(多源+AI Agent过滤)`
8. `项目标签重置`
不在这 8 条内,但已登记在 [registry.json](D:/Code/AI/agent-park/docs/integrations/n8n/registry.json) 的旁路流程:
- `AI对话网关(Agent Park`
## 系统边界
当前体系不是“单仓库闭环”,而是三层:
- 外部数据源层:GitHub Search API、GitHub Trending、Hacker News、Reddit、arXiv、Product Hunt、Hugging Face
- n8n 编排层:抓取、去重、AI 过滤、标签重置、向量化、信号结构化
- AgentPark 应用层:Postgres/Prisma、Next.js API、页面组件
还有一个明确存在但当前仓库里没有实现代码的外部服务边界:
- `Discovery Task Service`
- `GET/POST/PATCH /api/discovery/tasks`
- `POST /api/discovery/check-duplicates`
也就是说,项目发现与入库链路的“队列与去重接口”不在当前 Next.js 仓库中实现,但其输出最终进入当前仓库使用的数据库与项目展示链路。
## 核心实体
- `projects`
- 项目主体记录,供 `/api/projects`、详情页、搜索页、首页排行使用
- `external_links`
- 项目外链,尤其是 GitHub 链接,供 Star 刷新流程使用
- `tags`
- 标签池,供项目筛选、标签重置、入库分类使用
- `project_tags`
- 项目与标签的关系表
- `signals`
- 前沿讨论信号,供 `/api/signals` 和 Signals 页面使用
- `projects.embedding`
- 项目向量,供语义检索工作流使用
## 总流图
```mermaid
flowchart TD
subgraph Sources["External Sources"]
GHSearch["GitHub Search API"]
GHTrend["GitHub Trending"]
GHRepo["GitHub Repository API"]
HN["Hacker News"]
Reddit["Reddit"]
Arxiv["arXiv"]
PH["Product Hunt"]
HF["Hugging Face"]
Silicon["SiliconFlow Embeddings"]
end
subgraph N8N["n8n Workflows"]
W1["1 Topic项目计划新增"]
W2["2 每日Github Trending项目计划新增"]
W3["3 项目分析入库(多源)"]
W4["4 GitHub Star 每日刷新"]
W5["5 项目描述向量化"]
W6["6 RAG项目搜索"]
W7["7 前沿信号聚合"]
W8["8 项目标签重置"]
end
subgraph Discovery["External Discovery Service"]
Dedupe["/api/discovery/check-duplicates"]
Tasks["/api/discovery/tasks"]
Complete["/api/discovery/tasks/:id/complete"]
end
subgraph App["AgentPark App + DB"]
DBProjects["projects"]
DBLinks["external_links"]
DBTags["tags / project_tags"]
DBSignals["signals"]
APIProjects["/api/projects"]
APISearch["/api/search/ai"]
APISignals["/api/signals"]
APITagReset["/api/tags/reset-projects"]
UIProjects["Projects pages"]
UISignals["Signals page"]
UIHome["Home rankings"]
end
GHSearch --> W1
GHTrend --> W2
W1 --> Dedupe
W2 --> Dedupe
Dedupe --> Tasks
Tasks --> W3
W3 --> Complete
Complete --> DBProjects
Complete --> DBLinks
Complete --> DBTags
DBProjects --> W5
Silicon --> W5
W5 --> DBProjects
DBProjects --> W6
Silicon --> W6
W6 --> APISearch
APISearch --> UIProjects
DBProjects --> W4
DBLinks --> W4
GHRepo --> W4
W4 --> DBProjects
DBProjects --> UIHome
DBProjects --> UIProjects
HN --> W7
Reddit --> W7
Arxiv --> W7
PH --> W7
HF --> W7
W7 --> DBSignals
W7 --> Dedupe
DBSignals --> APISignals
APISignals --> UISignals
DBTags --> W8
DBProjects --> W8
W8 --> APITagReset
APITagReset --> DBTags
APITagReset --> UIProjects
```
## 主链路拆解
### 1. 项目发现链路
入口流程:
- `Topic项目计划新增`
- `每日Github Trending项目计划新增`
职责:
- 从 GitHub 搜索结果和 Trending 列表中找候选项目
- 先走 discovery 去重
- 再用 LLM 做保留/丢弃判断
- 最后把可入库项目写进 discovery 任务队列
注意:
- 这两条流程不会直接写 `projects`
- 它们只负责“造任务”
### 2. 项目入库链路
核心流程:
- `项目分析入库(多源)`
职责:
- 轮询 discovery 任务队列
- 把任务置为 `IN_PROGRESS`
- 用浏览器/AI 工具从入口 URL 收集事实
- 生成标准化项目内容、外链、标签候选
- 调用 completion 接口完成入库
- 失败时把任务置为 `FAILED`
当前仓库边界:
- 当前仓库没有 `/api/discovery/*` 的实现
- 但入库后的结果最终会出现在:
- [route.ts](D:/Code/AI/agent-park/src/app/api/projects/route.ts)
- [route.ts](D:/Code/AI/agent-park/src/app/api/projects/[slug]/route.ts)
- [useProjects.ts](D:/Code/AI/agent-park/src/hooks/useProjects.ts)
### 3. 项目检索链路
核心流程:
- `项目描述向量化`
- `RAG项目搜索`
职责分工:
- `项目描述向量化`
- 扫描 `embedding IS NULL` 的活跃项目
-`BAAI/bge-m3` 生成向量
- 写回 `projects.embedding``embeddingUpdatedAt`
- `RAG项目搜索`
- 接收 `ai-search` webhook
- 对用户输入生成向量
- 直接在 Postgres 中做向量相似度搜索
- 返回 `results[].id``similarity`
仓库接点:
- [route.ts](D:/Code/AI/agent-park/src/app/api/search/ai/route.ts)
- 转发到 n8n webhook
- 再根据 ID 批量回库拿完整项目
- [useProjects.ts](D:/Code/AI/agent-park/src/hooks/useProjects.ts)
- `getProjectsByIds()` 负责补全项目详情
最终展示:
- 项目搜索页
- 项目列表筛选结果
### 4. Signals 展示链路
核心流程:
- `前沿信号聚合(多源+AI Agent过滤)`
职责:
- 从 6 类外部源抓取讨论或发布内容
- 先做规则过滤和去重
- 再用 LLM 判断是否属于 AI Agent 相关信号
- 输出中英双语结构化字段
- 计算热度字段
- 通过 webhook 写入 `signals`
仓库接点:
- [route.ts](D:/Code/AI/agent-park/src/app/api/webhook/signals/route.ts)
- [route.ts](D:/Code/AI/agent-park/src/app/api/signals/route.ts)
- [validations.ts](D:/Code/AI/agent-park/src/lib/validations.ts)
最终展示:
- Signals 页数据流
- 讨论聚合展示卡片
副作用:
- 该流程还会从已保留信号中提取 GitHub 仓库链接,回流到 discovery 任务系统
### 5. 标签治理链路
核心流程:
- `项目标签重置`
职责:
- 拉取标签池与项目列表
- 逐项目调用 LLM 做 5 类标签归类
- 调用仓库内的标签重置接口
仓库接点:
- [route.ts](D:/Code/AI/agent-park/src/app/api/tags/reset-projects/route.ts)
- [auth.ts](D:/Code/AI/agent-park/src/lib/auth.ts)
- [validations.ts](D:/Code/AI/agent-park/src/lib/validations.ts)
最终影响:
- 项目筛选
- 详情页标签
- 入库后标签整洁度
### 6. Star 刷新链路
核心流程:
- `GitHub Star 每日刷新`
职责:
-`projects` + `external_links` 找出 GitHub 仓库
- 调 GitHub API 拉仓库详情
- 更新 `githubStars``githubStarsUpdatedAt`
最终影响:
- 首页排行
- 项目列表星标排序
- AI 搜索结果里的 `stars_desc` / `stars_asc`
## 当前“就绪状态”定义
现在仓库已经具备:
- 8 条生产流程的仓库内登记
- 代码触点与 workflow 的映射关系
- 从“源头 -> n8n -> DB/API -> 页面”的主链路图
- `.planning/codebase` 中可供 GSD 读取的 n8n 总览
但仍有 2 个外部依赖不在当前仓库闭环:
- discovery task service
- n8n credentials / secrets / runtime env
因此,“代码库就绪”应理解为:
- AI 和 GSD 已经能正确理解全局结构与边界
- 但不能假设当前仓库单独包含所有后端实现
## 建议维护规则
- 任何一条生产 workflow 变更时,优先更新:
- [registry.json](D:/Code/AI/agent-park/docs/integrations/n8n/registry.json)
- 对应 `workflows/*.md`
- 更新后执行:
- `pnpm n8n:context`
- 如果 discovery 服务代码后续被并入仓库,优先补齐 `/api/discovery/*` 的实现文档与路由映射