当前位置: 首页 > news >正文

使用Screenpipe+本地大模型实现私人助手Agent

捕获屏幕信息并用本地大模型总结:我的 Screenpipe 实践记录(一)

一、引言

最近一直想使用大模型技术做些什么,其中一个想法就是做一个私人助手,可以记录每天的行为(浏览了哪些APP、访问了什么网页),每天自动总结生成报告;

这个项目的痛点有:

  1. 隐私化:我的日常行为包含一些工作内容、个人密钥,不能联网上传;
  2. 上下文:大模型分析依赖上下文,包括屏幕截图、录音等,这些数据如何保存、喂给大模型。

基于此,使用Screenpipe+Ollama+Cron,实现可以7*24在本地运行的私人助手

二、技术栈介绍

Screenpipe

img

Screenpipe是一个离线项目,它可以对你的电脑进行 24 小时监控,通过屏幕录制、OCR、音频输入和转录收集信息等途径,保存到本地数据库。

包括以下功能

  • 屏幕录制:24 小时全天候监控,实时录制屏幕,捕捉每一个操作画面。
  • OCR 文字识别:内置强大的 OCR 功能,支持中文及其他语言,轻松提取屏幕中的文字内容。
  • 音频输入与转录:支持捕获麦克风音频输入,并实时转录为文字,保存对话与语音笔记。
  • 本地数据库存储:所有信息都被安全地保存到本地数据库,保障数据隐私和安全。

Ollama

Ollama 是一个开源的大型语言模型(LLM)平台,它支持在本地启动、管理、对话自己的大模型;它支持所有主流大模型在本地启动。

NodeJs+Cron

考虑到项目需要数据管理、本地API调用、开始暂停、Web页面,因此使用NodeJs搭建;

同时,完整的天级数据会很大,本地模型算力有限,我们可以使用Cron定时5分钟记录一次,自动分析并落盘。

三、系统架构

img

四、项目流程介绍

完整项目开源:https://github.com/LittleCoolguy/screen-mic-agent

安装Screenpipe

Mac本地安装Screenpipe

curl -fsSL get.screenpi.pe/cli | sh

执行

screenpipe

执行后,出现如下日志,说明Screenpipe已经成功启动,屏幕数据记录ing。

img

安装ollame,启动模型

官网安装::https://ollama.com/download

启动ollama

ollama serve   # 新终端常驻;或在后台用 systemd/launchctl

安装模型,这里我选择的是qwen2.5:7b-instruct-q4_K_M

ollama run qwen2.5:7b-instruct-q4_K_M

测试一下,成功回答问题。

img

上下文+模型调用

这里主要是使用Screenpipe提供的SDK获取本地屏幕OCR数据、ollama的模型问答接口

模型调用逻辑示例

import { NextResponse } from "next/server";
import { buildPrompt } from "../../../lib/prompt";
import { getRecentContext } from "../../../lib/screenpipe";export const runtime = "nodejs";export async function POST(req: Request) {try {const body = await req.json().catch(() => ({}));const minutes = Math.max(1, Math.min(Number(body?.minutes || 5), 240));const question = (body?.question || "Summarize what I did recently.") as string;const context = await getRecentContext(minutes);const prompt = buildPrompt({ minutes, question, context });console.log(`[analyze] prompt built, context: ${context.length} chars`);const host = process.env.OLLAMA_HOST || "http://localhost:11434";const model = process.env.OLLAMA_MODEL || "llama3.1:8b";const res = await fetch(`${host}/api/generate`, {method: "POST",headers: { "Content-Type": "application/json" },body: JSON.stringify({model,prompt,stream: false})});if (!res.ok) {const errText = await res.text().catch(() => res.statusText);return NextResponse.json({ error: `Ollama request failed: ${errText}` }, { status: 500 });}const data = await res.json().catch(async () => ({ response: await res.text() }));const result = (data && (data.response || data.result || data.output)) || "No response.";return NextResponse.json({ result, minutes, usedModel: model });} catch (e: any) {return NextResponse.json({ error: e?.message || "Unknown error" }, { status: 500 });}
}

Screenpipe SDK调用示例

const { pipe } = await import("@screenpipe/js");const end = new Date();
const start = new Date(end.getTime() - minutes * 60 * 1000);console.log(`[screenpipe] querying for items from ${start.toISOString()} to ${end.toISOString()}`
);
const res = await pipe.queryScreenpipe({contentType: "ocr",          // 只抓 OCR// 如果你只想看某个浏览器,可以放开下一行(示例为 Edge):appName: "Google Chrome",startTime: start.toISOString(),endTime: end.toISOString(),includeFrames: false,limit: 400                   // 可按需调整
});

结果记录

img

五、后续优化

目前这个本地agent能够分析到笔者的屏幕行为并记录,但存在以下问题

  • 屏幕数据噪音多,模型不能很好的识别,需要再尝试性能更高、文本分析能力更适合的大模型;
  • 功能单一,后续计划结合Terminator插件,实现简单的自动化操作。
http://www.dtcms.com/a/347430.html

相关文章:

  • 【小宁学习日记4 Python】Python 变量与标识符全解:编程入门的基石
  • 简单AI:搜狐公司旗下AI绘画产品
  • 最新短网址源码,防封。支持直连、跳转。 会员无广
  • 部署PG一主一从
  • 使用Proxifier+vmware碰到的一些问题
  • GEO优化服务商:AI时代数字经济的新引擎——解码行业发展与技术创新实践
  • 蔬菜溯源系统的开发与设计小程序
  • 【基础-判断】使用http模块发起网络请求时,必须要使用on(‘headersReceive’)订阅请求头,请求才会成功。
  • 算法第五十五天:图论part05(第十一章)
  • 微服务架构中服务发现机制的实现与优化 NO.3(回复征途黯然.)
  • Navigation2 源码阅读 —— map_server 到底干了哈?
  • 53.Redis持久化-RDB
  • 【golang】制作linux环境+golang的Dockerfile | 如何下载golang镜像源
  • ESP-NOW详解(esp-idf)
  • NFC 电路理论计算
  • 支持电脑课程、游戏、会议、网课、直播录屏 多场景全能录屏工具
  • Python 学习(十六) 下一代 Python 包管理工具:UV
  • 1.十天通关常见算法100题(第一天)
  • 嵌入式LINUX-------------数据库
  • html-docx-js 导出word
  • Redis 从入门到精通:原理、实战与性能优化全解析
  • MySQL InnoDB Buffer Pool详解:原理、配置与性能优化
  • 单元测试的使用以及Vue3-Element Plus入门
  • 【假设微调1B模型,一个模型参数是16bit,计算需要多少显存?】
  • 雷卯针对香橙派Orange Pi 3G-IoT-B开发板防雷防静电方案
  • 结合 Kernel Memory 与 Ollama 实现文档处理与智能问答
  • 51单片机-实现外部中断模块教程
  • 力扣hot100 | 图论 | 200. 岛屿数量、994. 腐烂的橘子、207. 课程表、208. 实现 Trie (前缀树)
  • 【数据分享】2025年全国路网矢量数据道路shp数据
  • Ubuntu 系统中解压 ZIP 文件可以通过图形界面或命令行操作