一个尝试用大模型直接接管“推荐系统核心决策”的 iOS 原生应用。
ChirpAI 不是先打标签、算权重、做向量召回,再把结果拼回给用户,而是把“新闻筛选”“推荐理由生成”“用户画像更新”这三件核心事情直接交给大模型处理。应用基于 SwiftUI + SwiftData 构建,当前通过 RSS + GLM 的方式生成更像“私人推文管家”的阅读体验。
If TikTok / Twitter / News Feed 的推荐逻辑不再是一套隐形打分器,而是一个可以被你持续“调教”的语言智能体,会发生什么?
ChirpAI 是我对这个问题的一个产品化实验。
- 它不是“给信息流套一个 AI 总结层”,而是直接把推荐决策交给大模型
- 它把用户画像从标签系统改成了自然语言画像
- 它要求模型不仅选内容,还要解释“为什么是这条”
- 它把反馈闭环做成了可持续迭代的 agentic 流程,而不是一次性 prompt demo
主页
设置页
用户反馈记录
用户画像
传统信息流推荐系统常见做法是:
- 给内容打标签
- 给用户打标签
- 用规则或算法算一个匹配分
ChirpAI 的思路不同:
- 用自然语言维护用户画像
- 用大模型直接理解候选内容
- 用大模型直接决定“这条要不要推”
- 用大模型直接生成“为什么推荐给你”
换句话说,这是一个把推荐系统核心逻辑“语言化”的实验项目。
- 基于 RSS 拉取候选内容
- 通过大模型两阶段筛选并挑出最值得推荐的一条
- 为每条内容生成个性化推荐理由
- 基于点赞、一般、点踩和文字反馈持续重塑用户画像
- 支持在设置页直接“调教”画像
- 支持多组 AI 配置切换与连通性测试
- 支持 RSS 源增删改查、启停和探测
- 使用 SwiftData 本地存储新闻、反馈、画像和去重记录
SwiftUISwiftDataCombineRSSGLM Function Calling
git clone https://github.com/dolibali/openchirp.git
cd openchirp打开:
如果你要在真机运行,需要在 Xcode 中配置你自己的签名信息:
- 选中
ChirpAItarget - 打开
Signing & Capabilities - 勾选
Automatically manage signing - 选择你自己的 Apple Developer Team
- 把
Bundle Identifier改成你自己的唯一值,例如com.yourname.ChirpAI
如果你只是想先体验功能,直接选择 iPhone Simulator 运行即可。
App 不在仓库里硬编码 API Key。首次运行后请在应用内完成配置:
- 进入
设置 - 打开
AI 配置 - 新建或编辑一个配置
- 填入:
API KeyBase URL模型名称
- 点击“测试连通性”
当前默认值面向智谱 GLM:
- Base URL:
https://open.bigmodel.cn/api/coding/paas/v4 - Model:
GLM-4.7-FlashX
应用内置 RSS 源清单位于:
ChirpAI/Resources/rss_sources.json
你也可以在应用内的 RSS 源管理 页面:
- 开启或关闭源
- 新增源
- 编辑源
- 删除源
- 测试连通性
- 首次进入应用后完成 onboarding,告诉系统你的兴趣方向和额外偏好。
- 在首页点击“获取推文”,系统会抓取 RSS 候选内容。
- 大模型会结合你的画像与近期已看记录完成筛选。
- 应用只保留最值得推荐的内容,并生成推荐理由。
- 你可以点赞、一般、点踩,或者输入更具体的文字反馈。
- 用户画像会随着反馈持续迭代。
openchirp/
├── ChirpAI.xcodeproj
├── ChirpAI
│ ├── Models
│ ├── Services
│ ├── Utils
│ ├── ViewModels
│ ├── Views
│ ├── Resources
│ └── Assets.xcassets
└── Architecture.md
主要目录说明:
Models: SwiftData 数据模型与 AI 配置模型Services: RSS 拉取、解析、偏好管理、GLM 调用和 System PromptViewModels: Feed、设置、详情等页面状态管理Views: 首页、详情页、设置页、日志面板、AI 配置等界面Resources: RSS 源配置等资源文件
更完整的架构设计见:
当前主流程是:
NewsFetcher拉取并解析启用的 RSS 源- 用
SeenNews做去重 - 将候选内容和自然语言用户画像交给
GLMService - 通过 Function Calling 返回候选索引和推荐理由
- 用户行为再反向驱动画像更新
- 新闻、反馈、用户画像等数据存储在本地 SwiftData
- AI 配置当前保存在本地
UserDefaults - API Key 不会随仓库一起提交
注意:当前 AI 配置仍属于原型阶段实现,更适合个人开发和实验,不建议直接按现状用于高安全要求场景。
- 当前更偏向原型验证,而不是生产级推荐系统
- 真机运行需要你自己的签名和可用的 Bundle Identifier
- AI 配置目前保存在本地,没有接入 Keychain
- 推荐质量强依赖 RSS 源质量、Prompt 设计和模型表现
- 使用 Keychain 保存敏感配置
- 增强多轮画像演化与解释能力
- 优化推荐稳定性与多样性控制
- 增加更强的日志可视化和调试能力
- 支持更多模型服务商
这是一个围绕“Agentic LLM 能否直接承担推荐系统核心逻辑”展开的个人实验项目。
如果你也对“用自然语言替代传统推荐中间层”感兴趣,欢迎交流。



