做推荐系统两年多,基于对推荐系统的了解,沉淀了个工程框架。
复用性问题
可观测性问题
把推荐流程抽象成 7 个阶段,每个阶段都可以自定义策略,无论是调用外部接口还是自有实现,策略之间可以组合,每个阶段前后都可以自定义拦截器,比如性能埋点、曝光去重、结果记录这些通用逻辑。所有场景走同一套流水线:

每个阶段的策略都是独立组件,注册成 Spring Bean:
混合推荐和单业务推荐的区别,就是配置里组合的策略不同,代码完全复用。
整个流程用 YAML 配置,不用改代码:
不同场景、不同实验组,改配置就搞定,如果当前组件不满足需求,只用开发新的组件即可。完整的yaml可以在代码仓库中查看。
推荐过程有完整的推荐日志,一目了然,方便排查问题:
项目地址:https://github.com/xi-mad/prism
我是使用java25运行的,别的版本没有测试,跑起来访问 http://localhost:9990/,有个 Web 演示页面,可以直接编辑 YAML 配置,不同的策略组合就能看到不同的推荐结果和执行 Trace。不同的策略有不同的参数,可以再代码中查看,UI做的很简单,只是为了演示,实际应用时可以配置不同的场景,将配置信息存在数据库,业务根据场景id进行请求。
如果有能帮助到您的地方,十分荣幸。请帮忙star一下,万分感谢。
欢迎大家一起交流讨论~