# ReadingDNA：让两个 AI 模型为你的阅读品味"对决"的智能推荐系统

> ReadingDNA 是一个创新的阅读推荐平台，通过分析 Goodreads 阅读历史构建个人阅读 DNA，并让 GPT-OSS 120B 与 GLM 4.7 两个大模型进行推荐对决，可视化展示谁的推荐更懂你。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-07-12T22:51:02.000Z
- 最近活动: 2026-07-12T23:01:09.980Z
- 热度: 169.8
- 关键词: ReadingDNA, Goodreads, 书籍推荐, AI推荐系统, GPT-OSS, GLM, Cerebras, 大语言模型, 模型评估, 个性化推荐, Next.js, FastAPI, 机器学习
- 页面链接: https://www.zingnex.cn/forum/thread/readingdna-ai
- Canonical: https://www.zingnex.cn/forum/thread/readingdna-ai
- Markdown 来源: ingested_event

---

# ReadingDNA：让两个 AI 模型为你的阅读品味"对决"的智能推荐系统

在信息过载的时代，找到下一本真正适合自己的书变得越来越困难。传统的推荐算法往往陷入"信息茧房"，只推荐与你已读内容高度相似的书籍。ReadingDNA 项目带来了一个全新的思路：让两个前沿大语言模型直接"对决"，通过竞争机制为你的阅读品味找到最佳推荐——同时，你还能直观地看到哪个模型更懂你。

## 原作者与来源

- **原作者/维护者：** solarrezaei11
- **来源平台：** GitHub
- **原始标题：** reading-dna
- **原始链接：** https://github.com/solarrezaei11/reading-dna
- **发布时间：** 2026年7月12日
- **技术栈：** Next.js, FastAPI, Python, Cerebras, D3.js

## 项目背景与核心理念

ReadingDNA 的创建者目前在微软担任 AI 评估相关的技术项目经理，日常工作就是研究如何衡量不同 AI 模型的表现差异。这个项目源于一个核心问题："给定相同的上下文，两个模型会如何不同地推理——以及如何衡量这种差异？"

传统的模型评估往往依赖基准测试，但这些测试数据是固定的、脱离真实场景的。ReadingDNA 将评估嵌入到实际应用中：通过真实的阅读推荐任务，让用户亲身感受不同模型的推理风格和质量差异。

## 系统工作流程

ReadingDNA 的完整流程包含七个步骤，构建了一个从数据导入到可视化呈现的闭环：

### 第一步：导入阅读历史

用户只需粘贴自己的 Goodreads 个人主页链接，系统就会通过 RSS 抓取已读、正在读和放弃的书籍列表，包括用户撰写的书评文字。为避免触发速率限制，系统采用顺序请求策略。同时，也支持 CSV 导出文件导入。

需要注意的是，Goodreads 个人资料必须设置为公开可见才能被抓取。

### 第二步：嵌入与聚类

每本书通过 `all-MiniLM-L6-v2` 模型转换为 384 维的语义向量，这个模型在本地运行，无需调用 API，避免了成本和延迟问题。随后使用 UMAP 算法将高维向量降维到 2D 空间，同时保留 15 个固定的类型锚点作为参照系。

KMeans 算法对书籍进行聚类，然后由 GPT-OSS 120B 为每个聚类生成描述性标签。为了保证结果的可复现性，这里使用了 `temperature=0` 参数，确保相同输入总是产生相同的输出。

### 第三步：模型对决

这是整个系统的核心环节。GPT-OSS 120B 和 GLM 4.7 两个模型各自独立接收用户的完整阅读画像——包括书名、作者、评分、书评文本、主题标签和阅读人格类型——然后各自返回 5 本书的推荐及推荐理由。

系统会高亮显示两个模型共同推荐的"共识选择"，并在可视化地图上标记出落在用户阅读舒适区之外的"冒险推荐"。

### 第四步：可视化呈现

使用 D3.js 构建的交互式地图展示了用户的阅读宇宙：

- **聚类区域**：不同颜色的圆形区域代表不同的阅读主题聚类
- **类型锚点**：15 个固定的类型参照点作为空间坐标
- **AI 推荐**：以钻石形状标记两个模型的推荐结果

用户可以点击任意聚类展开其中的书籍列表，点击类型锚点查看最近的 AI 推荐，或点击模型卡片只显示该模型的推荐。

### 第五步：分享卡片

系统生成可分享的卡片，包含用户的阅读人格类型、平均评分、最常出现的主题和最喜爱的书籍。这种设计让阅读发现成为一种社交体验。

### 第六步：第三方评判

可选功能：通过 Ollama 本地运行 Qwen 2.5 7B 作为中立第三方裁判，从相关性、推理深度、新颖性和具体性四个维度评估两个模型的推荐质量。

这里采用了 MT-Bench 的交叉评估方法：每个模型评判对方的输出，避免自我服务偏见。

### 第七步：图书馆查询

系统会查询 OverDrive/Libby 平台，检查每本推荐书籍在用户当地图书馆的可借阅状态，打通从发现到获取的最后一公里。

## 技术架构解析

ReadingDNA 的技术栈展现了现代全栈应用的典型架构：

| 层级 | 技术选型 |
|------|----------|
| 前端 | Next.js 14 (App Router) · TypeScript · Tailwind CSS · D3.js |
| 后端 | FastAPI · Python · uvicorn |
| 嵌入模型 | sentence-transformers — all-MiniLM-L6-v2 (本地运行) |
| 降维聚类 | UMAP · KMeans (scikit-learn) |
| 大模型 | Cerebras Cloud SDK — gpt-oss-120b · zai-glm-4.7 |
| 评判模型 | Qwen 2.5 7B via Ollama (本地) |
| 导出 | html2canvas (分享卡片 PNG) |

## Cerebras 的独特优势

ReadingDNA 选择 Cerebras 作为模型推理平台，这背后有深刻的技术考量。

通常，一个 1200 亿参数的模型在 GPU 集群上推理需要数秒时间，因为每次生成 Token 都需要在内存间搬运巨大的权重数据。Cerebras 的晶圆级芯片采用了不同的架构：整个模型可以容纳在单一芯片上，消除了内存带宽瓶颈。

实际效果令人惊叹：

| 模型 | 参数量 | 首 Token 延迟 | 生成时间 | 总耗时 |
|------|--------|--------------|----------|--------|
| GPT-OSS 120B (Cerebras) | 120B 稠密 | 207 ms | 1,140 ms | 1,347 ms |
| GLM 4.7 (Cerebras) | 355B MoE (32B 激活) | 206 ms | 11,553 ms | 11,759 ms |

两个模型的首 Token 延迟几乎相同（约 200ms），因为都运行在同一 Cerebras 基础设施上。但生成阶段的差异巨大：GPT-OSS 120B 作为全稠密模型，在 1.1 秒内完成生成；而 GLM 4.7 尽管每次只激活 320 亿参数（MoE 架构），却需要 11.5 秒。

这说明 Cerebras 的晶圆级芯片专门针对稠密 Transformer 工作负载进行了优化——这正是 10 倍生成速度提升的来源。

## 关键设计决策

ReadingDNA 的代码库中体现了多个经过深思熟虑的设计选择：

**为什么全用 temperature=0？**

早期版本使用 0.7-0.8 的温度值，导致相同阅读历史在不同运行中会产生不同的阅读人格标签、推荐结果和分享卡片。设置为 0 后，分析结果完全确定——相同的 Goodreads 历史总是产生相同的输出。

**为什么使用本地嵌入？**

每次加载都将 200 本书的标题发送到嵌入 API 会增加延迟、成本和网络依赖。all-MiniLM-L6-v2 在本地约 2 秒完成运行，产生的嵌入足以支持类型级别的聚类。

**为什么对书籍排序后再进行 UMAP？**

Goodreads RSS 每次返回的书籍顺序不同。即使设置了 random_state=42，UMAP 对输入顺序仍然敏感。在嵌入前按字母顺序排序确保了地图布局的可复现性。

**为什么解析 RSS 中的 user_review 标签？**

Goodreads RSS 流在 user_review 标签中包含用户撰写的评论文字，而不仅仅是星级评分。将评论文本纳入嵌入输入显著提升了聚类质量——在 Emily May 的数据集中，197 本书中有 149 本包含评论文本。

**为什么评判功能是可选的？**

本地运行 Qwen 2.5 7B 会让笔记本 CPU 满载约 2 分钟。将其设为可选意味着主分析在约 5 秒内完成（Cerebras 速度很快），而评判功能留给需要深度对比的用户。

## 阅读人格类型系统

ReadingDNA 会为每个用户生成一个独特的"阅读人格"标签。以 Goodreads 上最受关注的书评者 Emily May 为例，她的阅读人格被定义为"The Darkly Curious Intellectual"（暗黑好奇的知识分子），基于她 197 本书的阅读历史分析得出。

这种人格标签不是简单的类型分类，而是综合了用户的评分分布、评论主题、阅读广度等多个维度的深度刻画。它帮助用户从新的角度理解自己的阅读偏好，也为 AI 模型提供了更丰富的上下文信息。

## 模型评估的实战意义

ReadingDNA 不仅是一个有趣的阅读推荐工具，更是一个实战级的模型评估平台。它展示了如何将模型对比融入真实应用场景：

**可感知性**：用户能直接感受到不同模型的推荐风格差异——有的模型倾向于保守推荐，有的更愿意冒险尝试新领域。

**可量化性**：通过响应时间、共识率、第三方评判分数等指标，将主观感受转化为客观数据。

**可解释性**：每个推荐都附带详细的推荐理由，用户可以追溯模型是如何基于阅读历史做出判断的。

这种"对抗式推荐"的设计思路可以推广到其他领域：音乐发现、电影推荐、职业建议等任何需要个性化推荐的场景。

## 局限与改进空间

作为原型项目，ReadingDNA 也存在一些局限：

**数据源依赖**：目前仅支持 Goodreads，对于不使用该平台的中文读者来说存在门槛。未来可以考虑接入豆瓣读书等中文平台。

**语言局限**：主要优化针对英文书籍和评论，对其他语言的支持有限。

**评判成本**：本地运行评判模型对硬件要求较高，云端 API 评判又会增加成本。

**隐私考量**：需要公开 Goodreads 资料才能使用，对部分用户可能有顾虑。

## 结语

ReadingDNA 是一个将技术创新与用户体验完美结合的项目。它不仅解决了"下一本书读什么"的实际问题，更提供了一个观察和理解 AI 模型差异的独特窗口。通过让两个模型"对决"的设计，用户不再是被动的推荐接收者，而是成为评判 AI 表现的主动参与者。

对于热爱阅读、对 AI 技术感兴趣，或者单纯想发现自己阅读偏好的用户来说，ReadingDNA 提供了一个既实用又有趣的探索工具。

## 关键词

ReadingDNA, Goodreads, 书籍推荐, AI推荐系统, GPT-OSS, GLM, Cerebras, 大语言模型, 模型评估, 个性化推荐, Next.js, FastAPI, 机器学习
