很多家长希望孩子多了解一点真实世界,却没有时间每天从新闻、杂志、播客和信息流里筛选内容。孩子面对的选择更多,也更难判断什么值得花时间。
轻听把这件费心的事接过来。每天从可信来源中挑出少量内容,核对出处,重新编辑成适合耳朵理解的听稿。上学、放学或周末出行时,打开就能听。
它不是课程,也不要求打卡。我们更在意孩子是否愿意继续追问:为什么会这样,还有没有另一种看法?
| 原则 | 轻听怎么做 |
|---|---|
| 少而精 | 每期 2-6 篇,80 分是发布门槛。没有足够好的内容就少发。 |
| 真正分龄 | 每篇明确标注 6-9、10-12、13-16 中的一个或多个年龄段,不使用笼统的“适合 6-16 岁”。 |
| 来源透明 | 展示标准发布者、原文标题、原始链接、发布时间、获取时间与内容依据。 |
| 适合耳朵 | 不照读网页,不做生硬摘要。编辑时重组叙事、解释背景,并保留事实边界。 |
| 不制造焦虑 | 没有课程表、积分、排名和连续打卡,不把理解世界变成另一份作业。 |
| 最少儿童数据 | 账号属于家长,不建立儿童实名档案,不收集姓名、学校、生日或精确位置。 |
| 年龄段 | 学习阶段 | 内容尺度 |
|---|---|---|
| 6-9 岁 | 小学低年级 | 从故事、人物和可观察的现象出发,用具体例子讲清因果。 |
| 10-12 岁 | 小学高年级 | 开始解释机制、历史背景和不同观点,帮助孩子建立知识之间的联系。 |
| 13-16 岁 | 初中阶段 | 保留真实世界的复杂度,接触论证、证据、语境、文体和观点之间的张力。 |
高质量成人刊物不等于少年适读。文学批评、社会科学和公共议题来源都设置保守的最低年龄下限,具体文章还要根据概念密度、情绪安全和背景要求逐篇上调。
轻听覆盖科学、技术、社会、人文、生活和文化六个领域,也在持续增加更丰富的非虚构文本:文学随笔与批评、人物访谈、叙事历史、经济学解释、公共议题、传记和评论。
选择这些内容不是为了押题。我们希望孩子慢慢熟悉几件更长久的事:作者如何提出问题,证据怎样支撑结论,语境如何改变理解,不同观点为什么会出现,以及一种文体如何形成自己的声音。
当前受控源库包含 74 个中英文来源,其中 22 个来自中国大陆发布者。来源分为 realtime、analysis、depth 和 discovery 四种角色。发现源只提供线索,不能凭热度进入正式听稿。
国内现实与国际视野按数量近似 1:1 动态均衡:双方有足量达标内容时, 最终篇数差不超过 1;不为凑比例降低质量门槛。完整准入规则和配置可以直接查看:
docs/product-core.md:每天开始前重温的用户、核心功能与决策边界content/rubric.md:编辑评分、少年适配、双语与发布红线content/sources.json:受控来源、角色、时效窗口与最低适龄段docs/source-review-2026-07-19.md:来源核查与扩充记录docs/content-architecture.md:领域、内容形态与时效模型
边听边读 · 来源卡、逐句高亮与移动播放器 |
自然分享 · 少年刊风格内容卡片与直达二维码 |
- 无需登录即可收听:访客可以浏览、播放和分享全部公开内容。
- 可选的家长账号:邮箱验证码登录,不设密码。登录只用于跨设备同步年龄段、兴趣、收藏和收听偏好。
- 年龄段真正影响内容:切换年龄段会调整当期节目单和往期内容,不只是改变界面标签。
- 连续收听:整篇音频、逐句高亮、点句跳转、变速、音色切换和 Media Session 控制。
- 中英双语:只为取得足量完整原文且达到更高质量门槛的内容提供英文轨。
- 克制的配图:每天允许零张,最多两张编辑缩略图。敏感现场新闻不会自动生图。
- 移动端优先:主要体验针对手机 Web 与 PWA,桌面端保持完整可用。
受控 RSS / Atom 来源
↓
时效过滤 · 跨天去重 · 多源信号 · 国内内容可见度
↓
来源分层 · 编辑评分 · 逐篇分龄 · 领域编排
↓
获取完整原文 · 核对出处 · 重组为可听中文
↓
按需生成 0-2 张缩略图 · 敏感主题跳过
↓
朗读文本治理 · TTS 合成 · 句级时间轴
↓
来源卡 · 整篇音频 · 自动发布
GitHub Actions 每天北京时间 06:00 执行完整生产线。任务失败会自动创建 Issue,避免静默断更。同一天重复运行时,成本闸门默认跳过付费模型、语音和生图;只有手动勾选 force_regenerate 才会重新生成。
工作流见 .github/workflows/daily-curation.yml。
- Node.js 22
- npm
- 仅在本地生成整篇音频时需要
ffmpeg和ffprobe
git clone https://github.com/irisfeng/easylisten.git
cd easylisten
npm ci
npm run dev打开 http://localhost:3000。仓库包含示例内容和预生成音频,只浏览与收听不需要 API Key。
npm exec tsc -- --noEmit
npm run test:speech
npm run test:curation
npm run build复制环境变量模板:
cp .env.example .env.local| 变量 | 用途 |
|---|---|
AUTH_SECRET |
Auth.js 会话加密密钥,使用高强度随机值并长期保持稳定 |
TURSO_DATABASE_URL |
轻听独立 Turso 数据库地址 |
TURSO_AUTH_TOKEN |
数据库最小权限令牌 |
RESEND_API_KEY |
发送邮箱验证码 |
AUTH_EMAIL_FROM |
已验证域名下的发件人,例如 轻听 <login@mail.example.com> |
npm run db:migrate验证码只保存摘要,默认 10 分钟过期,使用后立即失效。接口限制同一邮箱与 IP 的请求频率。更多说明见 docs/prefs-sync.md。
精选脚本使用 OpenAI 兼容接口。在仓库 Settings > Secrets and variables > Actions 中配置以下任意一个 Secret:
| Secret | 服务 | 默认模型 |
|---|---|---|
DEEPSEEK_API_KEY |
DeepSeek | deepseek-chat |
DASHSCOPE_API_KEY |
阿里百炼 | qwen-plus |
OPENAI_API_KEY |
OpenAI 或兼容服务 | gpt-4o-mini |
其他可选配置:
| 类型 | 名称 | 用途 |
|---|---|---|
| Variable | LLM_MODEL |
覆盖默认精选模型 |
| Variable | LLM_BASE_URL |
覆盖 OpenAI 兼容接口地址 |
| Secret | MINIMAX_API_KEY |
生成中文语音,未配置时回落到 Edge TTS |
| Variable | MINIMAX_TTS_MODEL |
覆盖默认 MiniMax Turbo 语音模型;HD 会被成本闸门拒绝 |
| Variable | MINIMAX_MAX_CHARS_PER_RUN |
单次 MiniMax 计费字符硬上限,默认 12000 |
| Secret | ARK_API_KEY |
按需生成豆包 Seedream 编辑缩略图 |
| Variable | ARK_IMAGE_MODEL |
覆盖默认 Seedream 模型 |
| Variable | ARK_MAX_IMAGES_PER_RUN |
单次付费图片硬上限,范围 0-2 |
| Variable | DASHSCOPE_IMAGE_MODEL |
百炼兜底生图模型 |
| Variable | IMAGE_SELECTOR_MODEL |
判断文章是否值得配图的文字模型 |
完整原文通过 Firecrawl Keyless 获取,不需要单独配置 Firecrawl Key。配图失败不会阻断内容和语音发布。
SpeechEngine 按可用条件分层降级:
- 配置
MINIMAX_API_KEY时,新稿优先使用 MiniMax 中文语音。 - 未配置 MiniMax 时,生产管线回落到 Microsoft Edge 神经语音。
- 页面没有预生成音频时,使用浏览器 Web Speech API 兜底。
合成前会处理小数、年份、范围、比例、温度、缩写、字母数字型号和固定读音。朗读规则维护在 content/pronunciations.json,评估记录见 docs/tts-evaluation.md。
| 层 | 技术 |
|---|---|
| Web | Next.js 15 App Router、React 19、TypeScript、Tailwind CSS 4 |
| Account | Auth.js 5、Turso / libSQL、Resend 邮箱验证码 |
| Audio | MiniMax TTS、Microsoft Edge TTS、Web Speech API、Media Session API |
| Product | 移动 Web、PWA、Vercel Analytics、Capacitor 8 iOS 外壳 |
| Automation | GitHub Actions、OpenAI-compatible LLM、Firecrawl Keyless |
easylisten/
├── .github/workflows/ # 每日出刊、补生成语音与音色盲选
├── content/ # 来源、编辑标准、日刊和发音词典
├── db/migrations/ # 家长账号与偏好同步数据库结构
├── docs/ # 产品、内容、来源、TTS、同步与 iOS 文档
├── public/ # 图标、编辑缩略图和预生成音频
├── scripts/ # 召回、精选、审计、迁移、语音和策略测试
└── src/
├── app/ # 首页、收听页、登录、账号与 API
├── components/ # 通用交互组件
└── lib/ # 内容、账号、偏好、数据库和朗读引擎
欢迎通过 Issue 提交问题、推荐可靠来源或分享真实使用感受,也欢迎发起 Pull Request。
推荐新来源时,请说明发布机构、来源角色、主要领域、适合年龄和可信依据。来源数量不是目标。长期稳定地选出少数好内容,才是轻听想做好的事。
轻听 EasyListen

