You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

问询AWS Personalize GetRecommendations API分页及无重复拉取方案

基于AWS Personalize实现无重复无限滚动分页的可行方案

核心实现逻辑

  • 优先使用Personalize原生过滤器 + 游标分页的组合方案,完全不需要额外做结果去重,性能损耗最低:
    1. 先在AWS Personalize控制台创建自定义过滤器,过滤规则为 EXCLUDE itemId IN $EXCLUDED_ITEM_IDS
    2. 首次请求时调用GetRecommendations接口,numResults按单页展示数量设置(最高支持100),此时filterValues参数不需要传$EXCLUDED_ITEM_IDS,拿到结果后将本次返回的所有item ID存入服务端对应用户的缓存(可用Redis、会话存储等,过期时间可设为24小时或者用户会话有效期),将结果返回前端。
    3. 前端滚动到页面底部触发下一页请求时,服务端从缓存中取出该用户所有已展示的item ID列表,作为$EXCLUDED_ITEM_IDS参数传入filterValues调用GetRecommendations,此时接口返回的所有结果都是未展示过的内容。
    4. 每次请求完成后更新缓存中的已展示item ID列表,直到推荐结果返回为空时终止分页即可。
  • 如果你的推荐量级较大,已展示ID列表过长超过过滤器参数长度限制(Personalize单过滤器参数最多支持传入100个item ID),可以配合批量拉取+本地分页的方案补充:
    1. 每次前端触发分页时,如果已展示ID超过100个,先一次性拉取最多100条未过滤的推荐结果,在服务端和已展示ID列表做比对,过滤掉重复项后截取对应单页数量的结果返回给前端,剩下的非重复结果可以暂存到服务端缓存,下一次分页直接从缓存取,不需要重复调用Personalize接口。
    2. 当暂存的待展示结果不足单页数量时,再重复调用Personalize接口拉取新的批次即可。

注意事项

  • 已展示item ID的缓存要和用户ID绑定,避免不同用户的展示记录混淆,同时需要设置合理的过期时间,避免缓存资源占用过高。
  • 如果你的推荐场景允许极低概率的重复,也可以直接在前端做已展示ID的去重,不需要服务端缓存,实现成本更低。

内容的提问来源于stack exchange,提问作者Nando Sang Putra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:45:03