编辑
2026-01-21
技术漫谈
00
请注意,本文编写于 39 天前,最后修改于 28 天前,其中某些信息可能已经过时。

目录

导言
一、 Open WebUI:全能型 AI 交互前端
1. 什么是 Open WebUI?
2. 部署过程(以 Ubuntu 环境为例)
1. 环境准备
2. 使用 Docker 一键部署
3. 初始化配置
4. 对接在线大模型:以 DeepSeek 为例
1. 获取 DeepSeek API Key
2. 在 Open WebUI 中配置连接
💡 部署小贴士
二、 ScreenPipe:系统的“数字眼睛”与长效记忆
1. 什么是 ScreenPipe?
2. 详细部署过程 (Windows 端)
1. 下载源码及相关配套
1.ffmpeg下载安装
2.screenpipe下载安装
2. 联通运行测试
2. 必须警惕的“三大坑”
坑位一:端口转发与网络隔绝
坑位二:IPv6 监听陷阱(导致跨设备搜不到)
坑位三:参数冲突导致的 Tokio Runtime 崩溃
跨设备连通性最后验证
3. 编写黄金启动脚本 (Run-ScreenPipe.ps1)
📖 第三阶段:深度联动:编写 Open WebUI 工具调用 ScreenPipe
1. 详细配置步骤
核心代码 (Python):
2. 在聊天中激活联动
💡 联动成功的关键细节
📖 第四阶段:让“大脑”保持冷静
1. 存储空间的“断舍离”
2. 硬件健康监控
第五阶段:进阶玩法:解锁 AI 记忆的无限可能
1. 跨设备的“云大脑”:HomeLab 深度集成
2. 自动化日报生成:从记录到输出
3. 多模态记忆:加入音频转录
结语

Gemini_Generated_Image_y5b6pvy5b6pvy5b6.png

导言

你是否在下班前想不起今天干了什么?或者找不回三小时前在屏幕上闪过的一行代码?

本文将教你如何利用 Open WebUI(前端)、ScreenPipe(后端)搭建一套全自动、低功耗、跨平台的个人记忆库。


一、 Open WebUI:全能型 AI 交互前端

1. 什么是 Open WebUI?

Open WebUI(原名 Ollama WebUI)是一个极其强大、可扩展且用户友好的自托管 Web 界面。它不仅仅是一个聊天框,更是一个集成了模型管理、知识库(RAG)、插件工具和多用户协作的大模型操作系统

  • 多模型支持:支持本地的 Ollama 模型,也完美兼容 OpenAI 格式的第三方 API(如 DeepSeek)。
  • 工具集成:支持通过 Python 编写自定义工具(Tools),这正是我们接入 ScreenPipe 记忆的关键。
  • 交互体验:拥有类似 ChatGPT 的流畅体验,支持代码高亮、Markdown 渲染和多模态交互。

2. 部署过程(以 Ubuntu 环境为例)

为了确保环境隔离与部署的便捷性,我们强烈建议使用 Docker 进行部署。

1. 环境准备

确保你的 Ubuntu 系统已经安装了 Docker 和 Docker Compose。

bash
# 更新并安装 Docker sudo apt-get update sudo apt install docker.io docker-compose -y

2. 使用 Docker 一键部署

你可以选择带有集成 Ollama 功能的版本,或者仅部署 WebUI 本身(本教程推荐仅部署 WebUI,因为我们会外部连接 Windows 的 ScreenPipe 和云端的 DeepSeek)。

运行dockercompose:

dockercompose
version: "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 端口。

3. 初始化配置

  1. 访问页面:在浏览器打开 http://<你的服务器IP>:18080
  2. 注册管理员:第一个注册的账号将自动获得 管理员 (Admin) 权限。
  3. 进入面板:点击头像进入“管理员面板” -> “设置”,你会看到熟悉的配置界面。

在完成 Open WebUI 的基础部署后,接下来的核心环节是为其注入“灵魂”——通过对接 DeepSeek V3 等高性能在线大模型,让 AI 具备处理 ScreenPipe 海量历史数据的逻辑分析能力。

4. 对接在线大模型:以 DeepSeek 为例

虽然本地模型隐私性好,但面对 ScreenPipe 产生的海量文本(上下文可能高达数万 Token),DeepSeek V3 凭借超长上下文和极低的价格,是目前最完美的平衡方案。

1. 获取 DeepSeek API Key

  1. 访问 DeepSeek 开放平台官网。
  2. 进入“API Keys”页面,创建一个新的密钥(Key)并妥善保存。

2. 在 Open WebUI 中配置连接

进入 管理员面板 -> 设置 -> 外部连接 界面进行如下配置 :

URL: 填写官方 API 地址 https://api.deepseek.com/v1

认证方式: 选择 密钥 (Bearer),并在右侧输入框粘贴你获取的 API Key 。

“模型 ID” 栏手动输入 deepseek-chat,然后保存并回到主页 。

模型选择: 在聊天界面左上角确保选中了刚刚添加的 deepseek-chat

DeepSeek 支持高达 128k 的上下文,这使得它能一口气读完你过去数小时的操作记录而不丢失细节。

💡 部署小贴士

提示

  • 安全性:如果你的服务暴露在公网,请务必在“管理员设置”中关闭“新用户注册”功能,以防 API 额度被盗刷。
  • 内网连接:将来在配置连接 Windows 端的 ScreenPipe 时,请确保 Ubuntu 容器能正常 Ping 通 Windows 的内网 IP(如 10.10.158.165)。

二、 ScreenPipe:系统的“数字眼睛”与长效记忆

1. 什么是 ScreenPipe?

ScreenPipe 是一款开源的跨平台库,旨在捕获你数字生活的完整上下文。它不仅是一个录屏工具,更是一个高效的后台数据采集器:

  • 全方位记录:通过录制屏幕画面进行 OCR(文字识别),并转录麦克风或系统音频。
  • 本地索引:所有数据均存储在本地(默认路径为 %USERPROFILE%\.screenpipe\data),保障隐私安全。
  • 记忆检索:提供API 接口,让 Open WebUI 等工具能够像检索搜索引擎一样检索你的“历史瞬间”。

2. 详细部署过程 (Windows 端)

1. 下载源码及相关配套

1.ffmpeg下载安装

手动下载 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。如果有输出版本信息,说明配置成功。

2.screenpipe下载安装

访问 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

2. 联通运行测试

这一部分非常关键,在进入自动化阶段前,我们必须通过手动测试来排除网络和端口的干扰。

进入你的程序目录并运行最精简的测试命令:

powershell
cd C:\Users\Admin .\screenpipe.exe --fps 1 --ocr-engine windows-native

成功标志:如果你看到控制台输出了 Starting video recording 以及 Starting meeting events polling,说明核心引擎已正常唤醒。

2. 必须警惕的“三大坑”

根据实战经验,大多数人的失败都卡在以下几个地方:

坑位一:端口转发与网络隔绝

在手动测试阶段,你可能会发现:明明 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):

PowerShell
netsh 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

坑位二:IPv6 监听陷阱(导致跨设备搜不到)

这是一个深坑:ScreenPipe 默认优先监听 IPv6 端口([::]:3030)。

  • 问题:当你的 Ubuntu 容器尝试通过 IPv4 地址(如 10.10.158.165)访问 Windows 时,连接会被拒绝。
  • 解决办法:在 Windows 端以管理员权限运行以下命令,强制将 IPv4 的请求转发到本地监听端口:
powershell
netsh interface portproxy add v4tov4 listenport=3030 listenaddress=0.0.0.0 connectport=3030 connectaddress=127.0.0.1

坑位三:参数冲突导致的 Tokio Runtime 崩溃

某些版本中,加入 --disable-audio--disable-meeting-scheduling 可能会触发底层异步引擎的 Panic 报错。

  • 建议:如果手动运行报错,请尝试减少可选参数,仅保留 --fps 1 --ocr-engine windows-native 这一组最稳健的组合。

跨设备连通性最后验证

在 Windows 运行着 ScreenPipe 的情况下,去 Ubuntu 终端运行:

bash
curl http://<Windows_IP>:3030/health

只有看到返回 {"status":"healthy"} 或类似的 JSON 字符串,才算打通了任督二脉! 此时再进入下一阶段的自启动脚本部署,才是稳操胜券。


3. 编写黄金启动脚本 (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 工具调用 ScreenPipe

在完成了网络打通与大模型对接后,最后一步也是最硬核的一步:在 Open WebUI 中编写 工具 (Tools)。这能让 AI 拥有调用 ScreenPipe 接口的主动权,实现“大脑”对“眼睛”的指挥。

通过编写 Python 工具插件,我们可以让 DeepSeek 在需要查询你的记忆时,自动发送一个 HTTP 请求到 Windows 端的 ScreenPipe API(端口 3030),并将搜到的文字抓取回来进行总结。

1. 详细配置步骤

  1. 进入工具入口:在 Open WebUI 左侧菜单栏点击 “工作空间 (Workspace)” -> “工具 (Tools)” -> 点击右侧的 “+” (创建工具)
  2. 粘贴核心代码:在弹出的代码编辑器中,粘贴以下专为 ScreenPipe 优化的 Python 代码。

核心代码 (Python)

python
import 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)}"
  1. 保存并启用:点击右下角的 “保存”

2. 在聊天中激活联动

  1. 开启工具开关:回到聊天界面,点击输入框上方的 “+”“工具图标”,勾选你刚刚创建的 search_screen_memory 工具。
  2. 下达指令
  • 指令 A:“帮我看看我刚才在网页上看到的那个服务器内网 IP 是多少?”
  • 指令 B:“检索一下我刚才运行失败的那个 PowerShell 脚本报错信息。”

💡 联动成功的关键细节

  • IP 地址的精确性:代码中的 self.base_url 必须是你在 Windows 端通过 ipconfig 查到的那个 10.x.x.x 地址,不能写 localhost,因为 Docker 容器里的 localhost 指的是容器自己。
  • 端口转发的配合:必须确保你已经执行了上一步提到的 netsh 端口转发命令,否则 Ubuntu 端的工具无法突破 Windows 的防火墙。
  • 模型智商:强烈建议配合 DeepSeek V3 使用,因为它能根据工具返回的凌乱 OCR 碎片,自动拼凑出完整的逻辑并回答你。

📖 第四阶段:让“大脑”保持冷静

一套 24 小时运行的采集系统,如果不加维护,很快就会让你的电脑不堪重负。

1. 存储空间的“断舍离”

ScreenPipe 会产生两类数据:.db 数据库文件(存储文字索引,体积小)和 .mp4 视频分片(存储原始画面,体积大)。

  • 策略:我们在自启脚本中设置了 $DaysToKeep = 5
  • 理由:5 天前的视频画面通常不再需要,AI 只需要通过 .db 里的文字记录就能帮你回忆起 80% 的内容。

2. 硬件健康监控

长期 OCR 识别是非常吃资源的,务必定期观察:

  • 温度监控:如果 CPU 长期处于 70°C 以上,请检查脚本中是否漏掉了 --fps 1 参数。
  • 显存回收:如果你运行了本地 Ollama 模型,显存占用接近 93% 时,ScreenPipe 的 OCR 线程可能会发生死锁导致无法写入新数据。

第五阶段:进阶玩法:解锁 AI 记忆的无限可能

当你习惯了随时召唤 AI 检索记忆后,可以尝试以下“极客玩法”:

1. 跨设备的“云大脑”:HomeLab 深度集成

如果你家里有 NAS 或个人服务器,可以将 Open WebUI 部署在服务器上。

  • 玩法:在 Windows 笔记本上运行 ScreenPipe,在手机或平板上通过浏览器访问服务器的 Open WebUI。
  • 场景:躺在床上用手机问 AI:“帮我查一下今天下午我在华为交换机上配置的 VLAN 编号是多少?”

2. 自动化日报生成:从记录到输出

利用 Open WebUI 的 API,你可以编写一个简单的 Python 脚本,每天晚上 11 点定时调用 DeepSeek。

  • 指令“检索今天所有内容,按‘学习’、‘工作’、‘娱乐’三个维度为我生成一份 300 字的日报。”
  • 进阶:配合 VanBlog 或其他博客平台,实现每日自动化复盘推送。

3. 多模态记忆:加入音频转录

ScreenPipe 不仅记录画面,还能捕捉音频。

  • 进阶参数:确保 audio_manager 正常启动。
  • 场景:即使你没有在屏幕上打字,只要会议中有人提到了某个关键词,DeepSeek 也能通过转录的文字索引帮你找回那一刻的对话。

结语

从最初的端口不通、脚本闪退、到最后的完美运行,我们不仅仅是部署了一个软件,更是通过 Docker、PowerShell、网络转发和 Prompt Engineering 构建起了一个真正懂你的私人空间。

在这个信息爆炸的时代,与其去记忆所有的细节,不如把“记录”交给 ScreenPipe,把“理解”交给 DeepSeek,而把你的精力,留给更有价值的创造!

本文作者:小转圈

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!