Clover浏览器
24.98M · 2026-02-07
为了测试和展示 Gorse 推荐系统的基本功能,博主打造了 GitRec——专门为 GitHub 仓库设计的推荐系统。这个项目既可以展示 Gorse 的基本能力,也能帮助开发者们在海量的开源项目中发现有趣且有用的仓库。
巧妇难为无米之炊,构建推荐系统的第一步是构造好物品、用户、反馈三种数据。
ItemId:为了方便拼接URL,仓库名称中的/被替换为:并统一为小写。Categories:仓库的主要编程语言,用户可以使用编程语言过滤推荐结果。Timestamp:仓库的最后更新时间。Labels是由两个字段组成的JSON:
text-embedding-v3 模型为每个仓库的描述(Description)生成了 512 维的向量嵌入。如果一个仓库没有描述,:GitRec 会使用 gpt-5-nano 大语言模型阅读其 README.md 文件,并生成一个单句摘要,然后再进行向量化。以下是 Gorse 仓库 在 Gorse 中的物品记录,Comment 字段使用仓库描述作为备注方便后台查看。
{
"ItemId": "gorse-io:gorse",
"IsHidden": false,
"Categories": [
"go"
],
"Timestamp": "2025-05-24T19:41:09Z",
"Labels": {
"embedding": [-0.0913363918662071, -0.0101912319660187, -0.0689065530896187, 0.0137317562475801, ...],
"topics": ["recommender-system", "collaborative-filtering", "go", "knn", "machine-learning"]
},
"Comment": "Gorse open source recommender system engine"
}
由于 GitHub 上的仓库数量庞大,GitRec 只收集 stars 数量超过 100 的仓库以在成本和覆盖率之间取得平衡。仓库主要由两种方式收集:
综合考虑之下,GitRec 选择不收集用户除了用户 ID 和反馈以外的任何个人信息,原因如下:
Gorse 中一条用户记录的UserId对应 GitHub 用户ID,而其他字段都为空。每当新用户登录 GitRec,系统会自动创建一条用户记录。
{
"UserId": "zhenghaoz",
"Labels": [],
"Comment": ""
}
通过 GitHub 的 API,实际上只能获取到用户对仓库的 star 行为,但是无法获取“已读”的行为。因此,GitRec 提供了一个浏览器插件,可以收集用户浏览仓库的记录。最终,GitRec 中的反馈定义如下:
正向反馈:
star: 用户在 GitHub 上为一个仓库点攒。like: 用户在 GitRec 网站上::likefill::一个仓库。read>=3: 用户查看一个仓库至少 3 次。浏览反馈:
read: 用户查看一个仓库。read反馈由浏览器插件收集,like反馈由 GitRec 网站收集,而star反馈通过 GitHub API 每天同步一次。read次数在每次用户访问仓库时累加,当次数达到 3 次时,系统会将其转换为正向反馈。
GitRec 推荐流水线的详细配置可以在仓库的 config.toml文件中找到,主要内容为:
most_starred_weekly:分数由自定义公式计算,推荐本周收藏数最多的仓库。neighbors:根据仓库描述的向量嵌入推荐相似的项目。neighbors:推荐来自收藏仓库重叠程度较高的用户所喜欢的项目。排序阶段合并上述的推荐结果和最新物品后使用训练好的因子分解机进行最终排序。如果生成的推荐结果不足,会依次使用物品到物品推荐和最新物品进行补全。下图为可视化推荐流程编辑器中看到的推荐流程:
GitRec 通过两种方式为用户提供服务。
网站仿照抖音提供了一个沉浸式的仓库发现体验:
README 内容。你可以选择:
浏览器插件将推荐无缝集成到 GitHub 页面中:
star 的项目提供初步的个性化推荐。到 2025 年底,GitRec 的数据规模如下:
Gorse 推荐系统以及数据库部署在一台 2 核 CPU、8GB 内存的云服务器上,花费330r民币/月。
GitRec 不仅仅是一个 GitHub 仓库推荐系统,更是 Gorse 推荐系统的试验场。欢迎使用 GitRec 网站 或安装浏览器插件(支持Chrome、Firefox和Edge),助力 Gorse 推荐系统的持续开发。