1. 为什么 TRAE 里的智能体总是“断片”
用 TRAE 写代码时,最让人抓狂的不是模型不会写,而是它不知道你刚才干了什么。你在 PowerShell 里跑python train.py报了个CUDA out of memory,切到浏览器翻了半天文档,又回终端试了两条命令,最后回到 TRAE 想让它接着分析——结果它一脸茫然,你只能把报错、命令、文档链接重新贴一遍。
这个问题的本质是:TRAE 能读当前工程文件,但读不到你桌面上的“过程”。浏览器标签、终端输出、报错弹窗,这些发生在编辑器之外的信息,对智能体来说是黑盒。英特尔 Agentic PC 想推的本地智能体体验,核心之一就是让 AI 能感知本机上下文,而 DeskMate 正好补上了“本地过程记忆”这一层。
DeskMate 是一个跑在 Windows 10/11 上的本地桌面活动记录工具。它定时截屏,用 OCR 和 Windows UI Automation 把窗口里的文字抠出来,连同应用名、窗口标题、时间戳一起存进本地 SQLite。基础检索走 FTS5 全文索引,不依赖大模型,也不用装 Ollama。更关键的是它自带标准 MCP Server,TRAE 可以通过 MCP 协议按需查询这些记录。
一句话理解链路:屏幕与窗口文字 → DeskMate 本地采集和索引 → TRAE 通过 MCP 搜索。适合谁?适合在 Windows 上做智能体开发、想让 Agent 跨会话记住“刚才发生了什么”的开发者。下面我把配置骨架、记忆读写接口、本地存储路径和一次完整的记忆回放验证拆开讲,你可以直接跟着做。
2. 前置准备:TaoToken 与 DeskMate 环境
在动手接 DeskMate 之前,先把模型调用这条链路理顺。TRAE 里的智能体要能分析 DeskMate 检索出来的历史上下文,背后得有稳定的模型服务。我这边习惯用 TaoToken 做统一入口,官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,它兼容常见的 OpenAI 风格调用,TRAE 里配置自定义模型端点时直接填这个就行。
你需要先拿到 API Key。进控制台创建密钥:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。创建完复制保存,后面在 TRAE 的模型设置里会用到。如果你还没想好接哪个模型,可以先去模型对话页试试手感:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite ,确认响应正常再往下走。
DeskMate 这边对环境有硬要求:Windows 10/11,Python 3.10 或更高。先确认版本:
python --version # 期望输出:Python 3.10.x 或更高如果版本不够,去 python.org 装一个 3.11 或 3.12 都行。另外建议把 DeskMate 放在一个独立目录,比如C:\deskmate,后面 MCP 配置里的绝对路径会用到。TRAE 本身装好并登录,能正常打开工程即可。
注意:DeskMate 会记录屏幕和窗口文字,可能包含源代码、账号或聊天内容。建议先在测试环境体验,并设置应用过滤、暂停采集和数据清理规则。数据默认存本机,但 TRAE 调用 MCP 工具时,被检索出的内容仍可能提交给当前使用的模型处理。
3. 可复制配置:DeskMate 安装与 MCP 接入
3.1 安装 DeskMate 并启动本地服务
打开 PowerShell,按顺序执行。先克隆仓库并进入目录:
git clone https://github.com/zhaohb/deskmate.git cd deskmate创建虚拟环境并激活:
python -m venv .venv .\.venv\Scripts\Activate.ps1如果激活时报执行策略错误,先跑一句Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass,再重新激活。接着安装依赖,注意 extras 里带上 OCR 和 MCP:
pip install -e ".[ocr-winrt,mcp]"安装完成后启动 UI:
deskmate ui启动后 DeskMate 会打开本地页面http://127.0.0.1:3030/ui。这个页面就是它的控制台,你能看到采集状态、存储路径和检索入口。默认数据落在本机用户目录下的 SQLite 文件里,具体路径在 UI 的设置区能看到,通常是%USERPROFILE%\.deskmate\deskmate.db这类位置。如果你想改存储路径,在启动前设置环境变量:
$env:DESKMATE_DATA_DIR = "D:\deskmate-data" deskmate ui这样索引和截图就都落到 D 盘,方便你单独管理和清理。
3.2 在 TRAE 里添加 DeskMate MCP Server
进入 TRAE 的设置 → MCP → 添加 → 手动添加,填入下面这段 JSON:
{ "mcpServers": { "deskmate": { "command": "C:\\deskmate\\.venv\\Scripts\\python.exe", "args": ["-m", "deskmate", "mcp"], "env": { "DESKMATE_API": "http://127.0.0.1:3030" } } } }把command换成你本机虚拟环境里python.exe的实际绝对路径。比如你把仓库放在C:\deskmate,那路径就是C:\deskmate\.venv\Scripts\python.exe。保存配置并启用 DeskMate MCP。启用成功后,TRAE 的工具列表里会出现deskmate_search这个工具。
3.3 记忆读写接口调用
DeskMate 的记忆读写分两层。写入层由采集器自动完成,你不需要手动调;读取层通过 MCP 暴露给 TRAE。核心工具是deskmate_search,它接受关键词、时间范围和数量限制。在 TRAE 对话里可以直接用自然语言触发,比如:
调用 DeskMate 搜索我最近一小时看到的 error 和 exception, 列出关键报错、出现时间和所在应用。TRAE 会解析成对deskmate_search的调用,参数大致是query="error exception"、since="1h"、limit=20。返回结果里每条记录包含时间戳、应用名、窗口标题和 OCR 文本片段。如果你想在脚本里直接调 HTTP 接口做验证,可以这样:
$body = @{ query = "error" since = "1h" limit = 10 } | ConvertTo-Json Invoke-RestMethod -Uri "http://127.0.0.1:3030/api/search" ` -Method Post -Body $body -ContentType "application/json"这个接口返回的就是本地 SQLite FTS5 的检索结果,不经过大模型,速度快、可离线。拿到结果后,TRAE 再结合当前工程做分析,就完成了“本地过程记忆 + 云端推理”的分工。
4. 验证请求:一次完整的记忆回放
配置完别急着写复杂逻辑,先用最小闭环验证链路通不通。我试过的做法是制造一个可控的报错,然后让 TRAE 把它找回来。
第一步,在 PowerShell 里故意跑一条会报错的命令:
python -c "import nonexistent_module_xyz"你会看到ModuleNotFoundError: No module named 'nonexistent_module_xyz'。保持这个终端窗口开着,等 DeskMate 采集一轮,默认间隔几十秒,你也可以在 UI 里点“立即采集”。
第二步,切到浏览器随便搜一下这个报错,让 DeskMate 记录到浏览器窗口的文字。然后回到 TRAE,输入:
调用 DeskMate 搜索我最近十分钟看到的 ModuleNotFoundError, 告诉我报错时间、所在应用和完整错误信息。第三步,观察 TRAE 的返回。正常情况它会调用deskmate_search,命中 PowerShell 和浏览器两条记录,整理出类似“14:32 在 Windows Terminal 出现 ModuleNotFoundError,14:33 在 Chrome 搜索了该错误”的线索。如果它能把这两条串起来,说明记忆回放链路已经跑通。
第四步,做一次跨会话验证。关掉 TRAE 再重新打开,重复上面的查询。因为记录存在本地 SQLite,不随会话消失,所以重启后依然能检索到。这一步是“跨会话上下文延续”的关键证据。
提示:如果第一次搜索没命中,先确认 DeskMate UI 里采集是开启状态,再检查时间范围是否覆盖了你操作的时间段。OCR 对深色主题终端偶尔会漏字,可以临时把终端背景调浅再试。
5. 本篇常见错排查
MCP 启用后 TRAE 里看不到 deskmate_search。九成是command路径写错。检查C:\deskmate\.venv\Scripts\python.exe是否真实存在,注意 JSON 里反斜杠要双写。另外确认 DeskMate UI 已经在跑,DESKMATE_API指向的http://127.0.0.1:3030能访问。
搜索返回空结果。先看 DeskMate UI 的采集状态,如果是暂停就恢复。再看存储路径是否被DESKMATE_DATA_DIR改到了别处,导致你查的库和采集的库不是同一个。最后确认查询时间范围,since="1h"只覆盖最近一小时。
OCR 文字乱码或缺失。Windows 的 OCR 语言包可能没装全。去“设置 → 时间和语言 → 语言和区域”确认中文和英文语言包都装了。深色背景、小字号、抗锯齿字体会影响识别率,测试阶段用浅色主题更稳。
TRAE 调用 MCP 超时。多半是 DeskMate 服务没起来或者端口被占。在 PowerShell 里跑Invoke-RestMethod http://127.0.0.1:3030/api/health看是否返回正常。如果 3030 被占用,可以在启动前用环境变量换端口,同时同步改 MCP 配置里的DESKMATE_API。
担心隐私想限制采集范围。DeskMate 支持应用过滤,在 UI 设置里把敏感应用加入排除列表,或者直接暂停采集。数据清理也在 UI 里,可以按时间范围删除记录。记住一点:本地存储不等于绝对安全,TRAE 检索出来的内容仍会进入模型上下文。
6. 把本地记忆接进你的智能体工作流
跑通最小闭环之后,DeskMate 的价值就不只是“找回报错”了。你可以把它当成智能体的本地过程记忆层,配合 TRAE 做更长的任务链。比如让 TRAE 在开始一个新任务前,先检索过去两小时的相关窗口记录,自动补全上下文;或者在调试循环里,每轮都把终端输出喂给 DeskMate,让 Agent 自己回溯哪次改动引入了回归。
如果你打算长期在 TRAE 里跑编码 Agent,建议把模型调用也固定下来。TaoToken 的 Coding Plan 适合这种持续编码场景:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,配合 DeskMate 的本地记忆,Agent 既有跨会话的“过程感”,又有稳定的模型后端。接入细节和参数说明看文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。如果你用的是 Claude Code 这类客户端,Anthropic 兼容接入方式也有对应说明:https://taotoken.net/claudecode-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claudecode&utm_campaign=rewrite 。
最后提醒一句,DeskMate 目前是早期开发版本,采用 PolyForm Noncommercial License 1.0.0,商业使用前需要联系作者获得授权。测试阶段建议单独开一个数据目录,定期清理,别把生产环境的敏感窗口记录长期留在本地。先把“报错回放”这个动作跑顺,再往上叠会议转写、日报生成这些进阶能力,链路会稳很多。