
你是否在下班前想不起今天干了什么?或者找不回三小时前在屏幕上闪过的一行代码?
本文将教你如何利用 Open WebUI(前端)、ScreenPipe(后端)搭建一套全自动、低功耗、跨平台的个人记忆库。
Open WebUI(原名 Ollama WebUI)是一个极其强大、可扩展且用户友好的自托管 Web 界面。它不仅仅是一个聊天框,更是一个集成了模型管理、知识库(RAG)、插件工具和多用户协作的大模型操作系统。
为了确保环境隔离与部署的便捷性,我们强烈建议使用 Docker 进行部署。
确保你的 Ubuntu 系统已经安装了 Docker 和 Docker Compose。
bash# 更新并安装 Docker
sudo apt-get update
sudo apt install docker.io docker-compose -y
你可以选择带有集成 Ollama 功能的版本,或者仅部署 WebUI 本身(本教程推荐仅部署 WebUI,因为我们会外部连接 Windows 的 ScreenPipe 和云端的 DeepSeek)。
运行dockercompose:
dockercomposeversion: "3.8" services: open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui volumes: - ./data:/app/backend/data ports: - 18080:8080 extra_hosts: - host.docker.internal:host-gateway restart: always environment: - HF_ENDPOINT=https://hf-mirror.com
-p 18080:8080:将容器的 8080 端口映射到宿主机的 18080 端口。http://<你的服务器IP>:18080。在完成 Open WebUI 的基础部署后,接下来的核心环节是为其注入“灵魂”——通过对接 DeepSeek V3 等高性能在线大模型,让 AI 具备处理 ScreenPipe 海量历史数据的逻辑分析能力。
虽然本地模型隐私性好,但面对 ScreenPipe 产生的海量文本(上下文可能高达数万 Token),DeepSeek V3 凭借超长上下文和极低的价格,是目前最完美的平衡方案。
进入 管理员面板 -> 设置 -> 外部连接 界面进行如下配置 :
URL: 填写官方 API 地址 https://api.deepseek.com/v1 。
认证方式: 选择 密钥 (Bearer),并在右侧输入框粘贴你获取的 API Key 。
在 “模型 ID” 栏手动输入 deepseek-chat,然后保存并回到主页 。
模型选择: 在聊天界面左上角确保选中了刚刚添加的 deepseek-chat 。
DeepSeek 支持高达 128k 的上下文,这使得它能一口气读完你过去数小时的操作记录而不丢失细节。
提示
10.10.158.165)。ScreenPipe 是一款开源的跨平台库,旨在捕获你数字生活的完整上下文。它不仅是一个录屏工具,更是一个高效的后台数据采集器:
%USERPROFILE%\.screenpipe\data),保障隐私安全。手动下载 ffmpeg-n7.1-latest-win64-gpl-7.1.zip
注
解压文件: 把下载的压缩包解压。您会看到一个文件夹,点进去找到 bin 文件夹。
里面应该有 ffmpeg.exe, ffprobe.exe 等文件。
配置环境变量 (PATH):
复制路径: 点击这个 bin 文件夹地址栏,复制完整路径(例如 C:\Downloads\ffmpeg-n7.1...\bin)。
打开设置: 按 Win 键,搜索 “编辑系统环境变量” 并打开。
点击按钮: 右下角的 “环境变量”。
找到 Path: 在 “系统变量”(下面那个框)里找到 Path,选中它,点 “编辑”。
添加路径: 点右侧 “新建”,把刚才复制的 bin 文件夹路径粘贴进去。
保存: 一路点 “确定” 关闭所有窗口。
验证并重启:
打开一个新的 PowerShell 窗口,输入 ffmpeg -version。如果有输出版本信息,说明配置成功。
访问 GitHub Releases 页面:https://github.com/mediar-ai/screenpipe/releases
找到最新版本的 Assets,下载 screenpipe-...-x86_64-pc-windows-msvc.zip。
下载直链(建议检查版本是否有更新)
解压到一个固定目录,例如 C:\Users\Admin\。
注
进入 bin 目录,找到 screenpipe.exe 并运行。
接下来如果正常识别我们之前安装好的ffmpeg,则会进入下一步语音模型的下载。
这里十有八九会报错 Connection Failed: Connect error: connection timed out
因为模型托管在 HuggingFace 上,这个网站在国内访问非常不稳定(通常是被墙了)。
解决办法很简单:
第一步:设置国内镜像加速(魔法命令)
PowerShell运行
$env:HF_ENDPOINT = "https://hf-mirror.com"
(这行命令回车后不会有任何提示,是正常的)
第二步:再次启动(这次它会飞快)
PowerShell运行
.\screenpipe.exe
这一部分非常关键,在进入自动化阶段前,我们必须通过手动测试来排除网络和端口的干扰。
进入你的程序目录并运行最精简的测试命令:
powershellcd C:\Users\Admin .\screenpipe.exe --fps 1 --ocr-engine windows-native
成功标志:如果你看到控制台输出了 Starting video recording 以及 Starting meeting events polling,说明核心引擎已正常唤醒。
根据实战经验,大多数人的失败都卡在以下几个地方:
在手动测试阶段,你可能会发现:明明 screenpipe.exe 正在运行,Windows 浏览器访问http://localhost:3030/health 也正常,但从同局域网 Ubuntu 虚拟机里 curl 却是报错。
ScreenPipe 默认只监听 127.0.0.1。
你可以通过以下命令验证这个现象:
netstat -an | findstr 3030
观察结果:如果你看到的是 127.0.0.1:3030 而不是 0.0.0.0:3030,说明它确实处于“自闭模式”。
为了让虚拟机访问,必须执行转发。
以 管理员权限 打开 PowerShell,运行以下命令(我们将外部的 3030 流量转给内部的 3030):
PowerShellnetsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3030 connectaddress=127.0.0.1 connectport=3030
提示
listenaddress=0.0.0.0:表示监听所有网卡,不管是局域网还是虚拟机网桥都能接。
connectaddress=127.0.0.1:将接到的流量转给 ScreenPipe 所在的“卧室”。
在 Ubuntu 虚拟机中再次尝试:
curl http://<Windows_主机的_IP>:3030/health
成功标志:如果返回了 {"status":"healthy"},恭喜你,任督二脉已打通!
如何删除转发?:如果你以后想取消这个转发,运行以下命令即可:
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=3030
防火墙策略:如果 curl 依然不通,请确保 Windows 防火墙允许 3030 端口的入站规则。需以管理员权限运行此命令放行端口:
New-NetFirewallRule -DisplayName "Allow ScreenPipe" -Direction Inbound -LocalPort 3030 -Protocol TCP -Action Allow
这是一个深坑:ScreenPipe 默认优先监听 IPv6 端口([::]:3030)。
10.10.158.165)访问 Windows 时,连接会被拒绝。powershellnetsh interface portproxy add v4tov4 listenport=3030 listenaddress=0.0.0.0 connectport=3030 connectaddress=127.0.0.1
某些版本中,加入 --disable-audio 或 --disable-meeting-scheduling 可能会触发底层异步引擎的 Panic 报错。
--fps 1 --ocr-engine windows-native 这一组最稳健的组合。在 Windows 运行着 ScreenPipe 的情况下,去 Ubuntu 终端运行:
bashcurl http://<Windows_IP>:3030/health
只有看到返回 {"status":"healthy"} 或类似的 JSON 字符串,才算打通了任督二脉! 此时再进入下一阶段的自启动脚本部署,才是稳操胜券。
Run-ScreenPipe.ps1)为了实现长期稳定的“无感运行”,我们不能简单地双击运行,而需要通过优化后的脚本进行管理。
在 C:\Users\Admin\ 目录下创建一个 PowerShell 脚本,填入以下经过性能优化的代码:
powershell# ================= 完美配置区 ================= $WorkDir = "C:\Users\Admin" $ExePath = "$WorkDir\screenpipe.exe" $DaysToKeep = 5 # 自动清理5天前的录像,节省空间 # ============================================= Write-Host "--- ScreenPipe Perfect Loader ---" -ForegroundColor Yellow # 1. 强力清场:确保没有残留的僵尸进程占用 3030 端口 Get-Process -Name "screenpipe" -ErrorAction SilentlyContinue | Stop-Process -Force Start-Sleep -Seconds 5 # 2. 空间维护:删除旧的 .mp4 视频,只保留文字数据库 $DataPath = "$env:USERPROFILE\.screenpipe\data" if (Test-Path $DataPath) { Get-ChildItem -Path $DataPath -Include *.mp4 -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$DaysToKeep) } | Remove-Item -Force -ErrorAction SilentlyContinue } # 3. 完美状态启动: # --fps 1: 极低功耗,解决你之前的 71°C 高温问题 # --ocr-engine windows-native: 极低显存占用,解决之前的 93% 显存爆满问题 Set-Location $WorkDir $FinalArgs = "--fps 1 --ocr-engine windows-native" # 使用脱离模式在后台静默启动 cmd /c "start /b .\screenpipe.exe $FinalArgs" Write-Host "ScreenPipe is now guarding your memory in background!" -ForegroundColor Green
为了让这个脚本在开机时不弹黑框自动运行,请在管理员权限的 PowerShell 中执行以下命令:
PowerShell$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -WindowStyle Hidden -File ""C:\Users\Admin\Run-ScreenPipe.ps1""" $Trigger = New-ScheduledTaskTrigger -AtLogOn $Principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Highest $Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -Hidden Register-ScheduledTask -TaskName "ScreenPipe_Perfect_AutoStart" -Action $Action -Trigger $Trigger -Principal $Principal -Settings $Settings
这样每次开机就会在后台自动启动screenpipe进行监控。
可以通过以下方式验证运行状态:
进程验证:打开任务管理器 -> “详细信息”,确认能搜到 screenpipe.exe(而非 smartscreen.exe)。
文件验证:检查 .screenpipe\data 文件夹,应看到新的 .mp4 文件生成。
注:文件名采用 UTC 时间,若看到时间比北京时间慢 8 小时是完全正常的。
日志验证:若程序闪退,请查看 screenpipe_debug.log。如果提示 tokio-runtime 错误,通常是由于端口被占用或加了不支持的参数(如 --disable-meeting-scheduling)。
在完成了网络打通与大模型对接后,最后一步也是最硬核的一步:在 Open WebUI 中编写 工具 (Tools)。这能让 AI 拥有调用 ScreenPipe 接口的主动权,实现“大脑”对“眼睛”的指挥。
通过编写 Python 工具插件,我们可以让 DeepSeek 在需要查询你的记忆时,自动发送一个 HTTP 请求到 Windows 端的 ScreenPipe API(端口 3030),并将搜到的文字抓取回来进行总结。
pythonimport requests
import datetime
class Tools:
def __init__(self):
# 这里的 IP 必须填写你 Windows 主机的内网 IP
self.base_url = "http://10.10.158.165:3030"
def _utc_to_beijing(self, utc_str: str) -> str:
"""将 UTC 转换为北京时间"""
try:
utc_dt = datetime.datetime.fromisoformat(utc_str.replace('Z', '+00:00'))
beijing_dt = utc_dt + datetime.timedelta(hours=8)
return beijing_dt.strftime('%Y-%m-%d %H:%M:%S')
except:
return utc_str
def search_screen_memory(self, query: str) -> str:
"""查询用户屏幕操作历史或搜索特定记忆"""
url = f"{self.base_url}/search"
params = {"q": query, "limit": 15, "content_type": "ocr"}
try:
response = requests.get(url, params=params, timeout=5)
data = response.json()
if not data or "data" not in data:
return "未找到相关记忆。"
results = []
for item in data["data"]:
content = item.get("content", {}).get("text", "")
timestamp_raw = item.get("content", {}).get("timestamp", "未知")
# 转换时区显示
local_time = self._utc_to_beijing(timestamp_raw)
results.append(f"[{local_time}]: {content}")
return "\n---\n".join(results)
except Exception as e:
return f"连接失败,请检查网关或 IP: {str(e)}"
search_screen_memory 工具。self.base_url 必须是你在 Windows 端通过 ipconfig 查到的那个 10.x.x.x 地址,不能写 localhost,因为 Docker 容器里的 localhost 指的是容器自己。netsh 端口转发命令,否则 Ubuntu 端的工具无法突破 Windows 的防火墙。一套 24 小时运行的采集系统,如果不加维护,很快就会让你的电脑不堪重负。
ScreenPipe 会产生两类数据:.db 数据库文件(存储文字索引,体积小)和 .mp4 视频分片(存储原始画面,体积大)。
$DaysToKeep = 5。.db 里的文字记录就能帮你回忆起 80% 的内容。长期 OCR 识别是非常吃资源的,务必定期观察:
--fps 1 参数。当你习惯了随时召唤 AI 检索记忆后,可以尝试以下“极客玩法”:
如果你家里有 NAS 或个人服务器,可以将 Open WebUI 部署在服务器上。
利用 Open WebUI 的 API,你可以编写一个简单的 Python 脚本,每天晚上 11 点定时调用 DeepSeek。
ScreenPipe 不仅记录画面,还能捕捉音频。
audio_manager 正常启动。从最初的端口不通、脚本闪退、到最后的完美运行,我们不仅仅是部署了一个软件,更是通过 Docker、PowerShell、网络转发和 Prompt Engineering 构建起了一个真正懂你的私人空间。
在这个信息爆炸的时代,与其去记忆所有的细节,不如把“记录”交给 ScreenPipe,把“理解”交给 DeepSeek,而把你的精力,留给更有价值的创造!
本文作者:小转圈
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!