OpenClaw+Phi-3-mini-128k-instruct智能书签:自动归档阅读进度
OpenClaw+Phi-3-mini-128k-instruct智能书签:自动归档阅读进度
1. 为什么需要智能书签?
作为一个每天要阅读大量技术文档和论文的人,我经常遇到这样的困扰:在电脑上看到一半的文章,换到手机或平板后就找不到阅读进度;或者隔几天再打开同一篇长文时,完全忘记上次看到哪里。传统的浏览器书签只能保存链接,无法记录具体的阅读位置和上下文。
更麻烦的是,当我需要回顾某篇文章的核心观点时,往往要重新通读全文。这种低效的阅读方式消耗了大量时间。直到我发现OpenClaw+Phi-3-mini-128k-instruct的组合,才真正实现了"阅读状态全自动归档"的工作流。
2. 技术方案设计思路
2.1 核心组件分工
这个自动化系统的三个关键部分各司其职:
OpenClaw:作为执行引擎,负责操控浏览器获取页面内容、识别滚动位置、触发后续处理流程。它的鼠标键盘操控能力可以模拟人类操作,而本地运行的特点保证了隐私安全。
Phi-3-mini-128k-instruct:作为认知引擎,负责理解页面内容结构、生成章节摘要、提取核心观点。选择128k上下文版本是因为技术文档往往很长,需要大上下文窗口才能保持连贯理解。
自建同步服务:我用简单的Flask API搭建了一个同步服务器,存储阅读进度和摘要,实现多设备间的状态同步。这部分也可以用现成的Notion API等替代。
2.2 工作流拆解
整个自动化流程被设计为四个阶段:
- 状态捕获:OpenClaw定期检测活跃浏览器标签,获取URL、页面标题、滚动位置等元数据
- 内容提取:对阅读时间超过30秒的页面,自动提取可见区域的文本内容
- 智能处理:将文本发送给Phi-3-mini进行章节识别和摘要生成
- 归档同步:把结构化数据保存到数据库,并推送到其他设备
3. 具体实现过程
3.1 环境准备
首先在MacBook上部署了OpenClaw和Phi-3-mini-128k-instruct:
# 安装OpenClaw curl -fsSL https://openclaw.ai/install.sh | bash openclaw onboard --install-daemon # 部署Phi-3-mini (使用vllm) docker run --gpus all -p 8000:8000 \ -v /path/to/models:/models \ vllm/vllm:latest \ --model microsoft/Phi-3-mini-128k-instruct \ --tensor-parallel-size 13.2 OpenClaw技能开发
为了实现浏览器监控,我开发了一个自定义Skill:
// browser-monitor.js module.exports = { name: 'browser-monitor', actions: { async captureReadingState() { const activeTab = await this.browser.getActiveTab(); const scrollPos = await this.browser.getScrollPosition(); const viewportText = await this.browser.extractVisibleText(); return { url: activeTab.url, title: activeTab.title, scrollPosition: scrollPos, textSnippet: viewportText, timestamp: new Date().toISOString() }; } } };这个技能会每5分钟自动执行一次,但只有检测到用户在某页面停留超过阈值时才会触发后续处理。
3.3 Phi-3-mini摘要生成
配置OpenClaw使用本地部署的Phi-3-mini:
// ~/.openclaw/openclaw.json { "models": { "providers": { "local-phi3": { "baseUrl": "http://localhost:8000/v1", "api": "openai-completions", "models": [ { "id": "phi-3-mini-128k", "name": "Local Phi-3 Mini", "contextWindow": 131072 } ] } } } }摘要生成的prompt经过多次优化,最终版本如下:
你是一个专业的技术文档分析助手。请根据提供的文本片段: 1. 识别所属章节标题(如存在) 2. 用50字以内总结该片段核心内容 3. 提取3-5个关键词 4. 判断内容类型:概念定义/代码示例/图表说明/理论推导/实践指南 文本片段:{{content}}3.4 同步服务集成
为了避免重复处理,我设计了一个简单的去重机制 - 对每个URL+滚动位置组合计算MD5哈希值作为唯一标识:
# sync_server.py from flask import Flask, request import hashlib app = Flask(__name__) reading_states = {} @app.route('/sync', methods=['POST']) def sync_state(): data = request.json state_id = hashlib.md5( f"{data['url']}-{data['scrollPosition']}".encode() ).hexdigest() if state_id not in reading_states: reading_states[state_id] = data # 触发同步到其他设备的逻辑 return {"status": "new"} return {"status": "duplicate"}4. 使用效果与优化
4.1 实际工作流示例
当我阅读一篇关于Rust并发模型的长文时,系统自动生成了这样的归档记录:
## [Rust的并发原语](https://example.com/rust-concurrency) **最后阅读位置**:第4章「Arc与Mutex」第2节 **最后访问时间**:2024-03-15 14:30 **当前片段摘要**:解释了Arc如何在多线程间安全共享所有权,配合Mutex实现内部可变性 **关键词**:原子引用计数、线程安全、内部可变性、Send/Sync **内容类型**:概念定义+代码示例这样的记录让我即使隔几周后回来,也能快速定位到关键内容。
4.2 遇到的挑战与解决
问题1:页面动态加载导致文本提取不全
解决方案:在OpenClaw技能中增加了滚动截图+OCR的备用方案,当直接文本提取失败时自动启用。
问题2:技术文档中的代码块干扰摘要质量
解决方案:在prompt中明确要求"忽略代码细节,专注解释性文字",并在发送到Phi-3前用正则表达式过滤掉代码块。
问题3:多设备同步冲突
解决方案:采用"最后写入胜出"策略,并为每个设备保留本地副本,人工查看差异时可以合并。
5. 扩展应用场景
这套基础架构经过简单调整,可以支持更多知识管理场景:
- 视频学习追踪:与浏览器插件配合,捕获视频时间戳并生成字幕摘要
- 电子书阅读助手:对接Calibre等电子书管理工具,构建个人注释体系
- 论文研究工具:自动整理参考文献中的关键结论,生成对比矩阵
目前我正尝试将输出接入到Obsidian,利用其图谱功能展示不同文档间的概念关联。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
