
关于
使用六阶段 Source→Hydrator→Filter→Scorer→Selector→SideEffect 框架设计可组合的推荐、排序和信息流管道
name: recsys-pipeline-architect description: "使用六阶段 Source→Hydrator→Filter→Scorer→Selector→SideEffect 框架设计可组合的推荐、排序和信息流管道" category: data-ai risk: safe source: community source_repo: mturac/recsys-pipeline-architect source_type: community date_added: "2026-05-16" author: mturac tags: [recommender-system, ranking, feed-algorithm, recsys, personalization, for-you-feed, rag-reranker, pipeline-architecture] tools: [claude, codex, cursor, gemini, opencode, cline, continue, windsurf] license: "MIT" license_source: "https://github.com/mturac/recsys-pipeline-architect/blob/main/LICENSE"
recsys-pipeline-architect
概述
一个用于构建可组合推荐、排序和信息流管道的规范与脚手架技能。它编码了由 xAI 开源的 For You 算法(Apache 2.0)推广的六阶段 Source → Hydrator → Filter → Scorer → Selector → SideEffect 框架。本技能是该模式的独立重新实现——未从原始代码复制任何内容——采用 MIT 许可。当你需要"为(用户,上下文)选择前 K 个项目"时使用它:社交信息流、内容 CMS、RAG 重排序器、任务优先级排序器、通知分类、搜索重排序、广告排序。
何时使用本技能
- 当用户想要构建任何为用户/上下文选择"前 K 个项目"的系统时使用
- 当用户问"我应该如何排序 X"或描述信息流/个性化问题时使用
- 当用户有评分函数并需要围绕它的管道基础设施时使用
- 当用户想从单一相关性分数迁移到具有可调权重的多动作预测时使用
- 当用户正在包装 LLM/ML 评分器并需要过滤器、水合器、副作用和可运行脚手架时使用(TypeScript / Go / Python)
工作原理
步骤 1:明确用例
向用户提出三个问题(仅问缺失的部分):
- 被排序的项目是什么?(帖子、产品、任务、警报、文档...)
- 输入上下文是什么?(用户 ID、搜索查询、当前文档、时间窗口...)
- 什么语言/运行时?(TypeScript/Node、Go、Python、Rust...)
步骤 2:遍历规范的八个步骤
完整技能遍历:明确用例 → 识别候选源 → 列出所需水合 → 列出过滤器 → 设计评分器链 → 选择器 → 副作用 → 生成脚手架。每个步骤都会暴露架构权衡(多动作 vs 单分数、候选隔离 vs 联合评分、在线 vs 离线批处理),让用户明确做出决策而非默默采用默认值。
步骤 3:生成可运行的脚手架
上游仓库提供三个可运行的示例脚手架——每个都通过测试套件:
- Strapi v5 插件(TypeScript、Jest、3/3 通过)— 添加
GET /api/feed/for-you,支持多动作评分和作者多样性 - Zentra 兼容管道(Go 泛型、3/3 通过)— engine.Module 兼容,可独立使用
- PMAI 任务优先级排序器(Python / FastAPI / pytest、3/3 通过)—
GET /tasks/next?user_id=42&limit=10
当用户的技术栈不匹配时,技能会根据 references/interfaces.md 中的接口定义(TypeScript、Go、Python、Rust)从头生成。
示例
示例 1:Strapi 内容信息流
用户:"我运行着一个有 5 万篇文章的 Strapi v5 实例。我想要一个基于每个登录用户阅读历史的个性化'为你推荐'信息流。"
技能遍历 8 个步骤,使用 Strapi 示例作为模板生成 Strapi 插件脚手架。
示例 2:RAG 检索重排序器
用户:"我的 RAG 从向量数据库返回前 50 个块。我想用更昂贵的评分器重新排序并返回前 5 个。"
技能识别这是一个单源管道,带有评分器链(廉价检索 + 昂贵重排序)。生成 Python 异步管道。
示例 3:通知分类
用户:"我们发送了太多通知。我想要一个每日摘要,从过去 24 小时队列中选出前 10 条。"
技能识别这是一个离线批处理管道。生成定时任务脚手架。
最佳实践
- 明确暴露多动作 vs 单分数的权衡——不要默默采用默认值
- 按成本排序过滤器(廉价在前,昂贵在后);通用过滤器在用户特定过滤器之前
- 将副作用包装在即发即忘模式中(goroutines / 不 await 的 promises / asyncio tasks)——永远不要阻塞响应
- 保持评分确定性和可缓存;将多样性重排序作为单独阶段
- 生成输出时注明该模式"由 xAI 开源的 For You 算法推广"
- 不要编造基准或延迟数字——说"取决于工作负载,请自行运行"
- 不要将用户生成的产物命名为"X-like"或使用"For You"品牌——模式是免费的,品牌不是
- 不要将此与模型架构混淆:本技能是围绕模型的管道基础设施