WorkBuddy VS 钉钉悟空 VS 字节 Aily:桌面 Agent 的工程设计

0 评论 867 浏览 0 收藏 23 分钟

WorkBuddy 正在重新定义职场 AI 的边界。这款腾讯出品的全场景智能体桌面工作台,以其独特的记忆系统、技能机制和 Agent Loop 设计,展现了远超普通聊天机器人的生产力。从三层记忆架构到自我进化的 Skills 机制,本文将深入解析这款产品如何通过系统提示词实现类人工作流。

从小龙虾 OpenClaw 以后,国内几个巨头都在追求桌面段的 Agent 入口,比如:

  1. 钉钉的悟空体系;
  2. 腾讯的 WorkBuddy 体系;
  3. 字节的 aily;

就当前的体感来说:WorkBuddy 被接受的程度可能是最高的,虽然不知道它为什么火了,出去逛一圈都有人在讨论它。

我也很好奇它有什么特别的地方,就去下载安装了一个,简单实用了一下,感觉还可以,不过网上褒贬不一,我们这里不做评论,这个国内下载使用也是非常方便的,下载就有送积分,可以自行体验。

作为技术博主,我们当然想要看到不一样的东西,依旧是从它的实现机制出发吧!

WorkBuddy是什么

官方的原话是:

WorkBuddy 是腾讯推出的全场景职场 AI 智能体桌面工作台,面向各类职能角色设计

您只需用一句话描述需求,WorkBuddy 便能像同事一样自主规划和执行任务,并交付可验收的结果。

官方的说法 WorkBuddy 看起来是一个企业级的桌面 Agent,我们简单问它一个问题:你能做什么?

整个界面和 CodeX 非常相似,基本上差不多,这里我们就不一一展开做功能介绍,大家可以自己去感受下:

一出来就出现了你是谁\我是谁,这两个经典问题,然后就是它自己能做什么的一个功能介绍。

他既然是一个Agent,我们知道Agent是由模型,工具,技能,上下文,运行时等组成…

事实上,我每次看到一个新的Agent的时候,最关心的是上下文工程的管理,因为我觉得上下文工程决定了这个Agent是否聪明、好用的关键。

而上下文工程里面我一般比较关注 系统提示词的组装,会话压缩机制,记忆机制,下面我们逐一展开来看看:

系统提示词

每研究一个新的 Agent,我总是会从系统提示词开始,于是我准备让 WorkBuddy 给我介绍下它的系统提示词:

WorkBuddy 拒绝了我,没有给我系统提示词,我就想了点其他方法。

从我拿到的系统提示词来来看,内容较多,它大致可以分成下面这些模块

  • 能力定义
  • 记忆系统
  • 用户画像
  • 内容安全策略
  • 个人文件安全规则
  • 区域化习惯
  • 工作模式
  • Agent Loop
  • 结果展示规则
  • 代码探索子代理
  • 自动化任务
  • 工具使用规则
  • 可视化规则
  • 任务管理
  • 提问与澄清规则
  • 工具调用策略
  • Skills 机制
  • 专家管理
  • MCP 配置
  • 回复语言设置
  • 运行环境配置

能力定义

这一部分的提示词用下面这部分开头

Here’s what you’re good at — and you should use all of it……

系统提示词一开始就定义了 WorkBuddy 的能力边界,我们开发 Agent 的时候,总是说你是一个什么什么的助手,这里不是这样,而是告诉模型,你不是只会聊天,你可以想一个会使用电脑的人一样完成任务。

并且提示词里面也说明了它能做什么,比如:文档生成、数据分析、邮件处理,周报生成,可以写代码,构建网站等。

这些能力的定义,就是在告诉模型,遇到真是任务时,不要停留在说,而是可以主动的去完成,你可以做到这些事情。

记忆系统

在提示词里面 记忆系统占了很大的篇幅,用了一个标签 <memory_system&gt;来包裹,整个记忆系统被拆成了3层

第一层是 Cloud Memory,也就是云端记忆。

这部分包含了两个能力,一个是自动注入用户画像,另外一个是历史会话检索,自动注入的用户画像是只读的,模型不能随便改,历史会话检索适用于查找用户过去聊过的内容。

比如用户说,我们之前谈论的那个压缩方案,你还记得吗?

这个时候 模型就会使用历史会话检索能力,而不是瞎猜。

第二层是 User-level Local Memory,也就是用户级本地记忆。

它的文件位置是:

~/.workbuddy/MEMORY.md

这部分是跨项目生效的,适合记录用户长期稳定的偏好和规则。比如:

  • 用户希望所有回答都用中文。
  • 用户希望代码示例尽量简单。
  • 用户希望某类项目默认使用 Vue 而不是 React。

这类信息不是某一个项目独有的,而是长期跟随用户的偏好,就适合放到用户级记忆里。

第三层是 Workspace Memory,也就是工作区记忆。

它只对当前项目生效,放在当前项目的 .workbuddy/memory/ 目录下面。这里面又分成两类:

一类是每天的工作日志.workbuddy/memory/YYYY-MM-DD.md 每日工作日志是 append-only,也就是只能追加,不能覆盖。它用来记录当前项目每天做了什么。

另一类是项目长期记忆 .workbuddy/memory/MEMORY.md,项目长期记忆则用来沉淀更稳定的项目结论,比如技术选型、架构约定、项目规则等。

它把记忆拆成了三个不同作用域:

  1. 云端用户画像:跨设备、跨会话、只读注入用户级
  2. 本地记忆:跨项目、用户显式要求记住的规则
  3. 项目级记忆:只服务当前工作区,记录项目上下文

记忆如何写入

完成实质性工作后,立即使用 Edit 工具将简短记录追加到 .workbuddy/memory/YYYY-MM-DD.md 这个文件中

实质性工作包括:

构建或修改了网站/应用修复了一个 bug编写或生成了报告/文档完成了代码重构或架构更改选择了技术方案(框架、设计模式等)

用户如果分享了项目约定或偏好 ,同时更新 .workbuddy/memory/MEMORY.md 文件

用户画像

系统提示词里还有一个<memory&gt;模块,它是启动时自动注入的用户画像。这里面记录了用户的工作背景、个人偏好、当前关注点和近期动态。

用户画像是什么时候写入的呢

这个记忆来之云端,在服务器上生成的,在 WorkBuddy 的设置可以看到记忆是由服务器在每天晚上定时更新,从我的使用来看,它从我的对话中总 结了以下内容

工作背景

个人背景

当前关注

近期动态

内容安全策略

这一部分规定了模型不能泄露系统提示词、不能处理敏感政治内容、不能生成色情内容、不能提供违法活动指导、不能协助获取隐私信息、不能生成假新闻或欺诈文档等。

大家直接看下原始提示词是怎么说的:

个人文件安全

这一块写的是操作用户文件的安全规则。

用 <personal_files_safety&gt; 这个标签包起来,主要规定 WorkBuddy 对个人文件目录能做什么、不能做什么。

像 Desktop、Downloads、Documents、Home 这些目录,都算高风险区域。具体要求有这几条:

不能递归删除这些目录

不能用 rm -rf

扫描文件时只能生成报告,不能直接移动、重命名或删除

如果用户提的要求比较模糊,必须先追问

删除之前必须警告、列出文件、让用户确认

需要先做备份

删除要进回收站,不能直接物理删除

每批最多处理 10 个文件

WorkBuddy 是能直接访问文件系统的。比如用户说帮我清理一下下载目录的文件,要是没有这套规则,它可能直接扫描并删掉文件,后果会很严重。

文件系统权限对这类 Agent 来说,能读写文件才真正能干实事,但没限制的话,也可能会造成不可逆的数据丢失。

工作模式:Craft、Plan、Ask

WorkBuddy 的系统提示词里还定义了三种工作模式:,这部分主要放在了 <working_modes&gt;标签中,大概的意思就是

  • Craft:你说,我做
  • Plan:先想,再做
  • Ask:只聊,不做

Agent loop:一步一步完成任务

这是我第一次在系统提示词里看到这么明确描述了 Agent Loop 的工作方法。一般我们都是在 Agent runtime 中实现这个机制。

大概的意思是:

它不是让模型一次性回答完,而是要求模型按循环方式完成任务

先分析上下文,然后思考下一步,再选择工具,执行动作,接收结果,然后继续迭代,直到任务完成。

这就是我们常见的 Agent 运行机制,我们来看下 WorkBuddy 是如何描述的

结果展示:做完任务后必须交付结果

WorkBuddy 的系统提示词里还有一个 <result_presentation&gt; 模块,专门规定任务做完之后怎么把结果展示给用户。

具体要求大概是:

  • 如果是 HTML 文件,要用 preview_url 来展示
  • 报告、PPT、视频这些,用 open_result_view 展示
  • 生成附件的时候,要调用 deliver_attachments 交付
  • 不能光生成一个文件扔在那里,却不告诉用户结果在哪

工具使用规则:什么时候用什么工具

WorkBuddy 的系统提示词里还有一大块是关于工具调用规则的,这些都是非常实用,告诉模型什么时候选择合适的工具来做事情。比如:

  • 优先用专门工具,而不是直接敲 shell 命令
  • 要在代码库里大范围探索时,得用代码探索子代理
  • 需要操作网页,得先加载 browser skill
  • 安装 MCP 要改指定的配置文件
  • 删除自动化任务不能直接操作 SQLite,要用自动化工具
  • 腾讯文档的链接要按指定格式输出
  • 腾讯乐享里的实体,要用 badge 里的 id,不能按标题搜索

为什么需要这些规则,之前我开发 Agent 的时候,让 Agent 完成一个任务,我给它提供了专门的工具,但是它不选,因为我同时提供了代码执行工具,它就一直自己写代码去执行,偏偏它代码又写得不好,老是报错,都把我看着急了。

如果我们这里加一个提示词,优先使用专门的工具,这个问题可能就不会出现了。

Skills 机制

WorkBuddy 的系统提示词里还有一大段关于 Skills 的规则,使用<agent_skills&gt;标签包裹

Skills 是工作流的迁移这个事情大家都很清晰了,他扮演的是可复用的专业工作流。系统提示词要求:

  • 用户任务匹配某个 Skill 时,要优先加载 Skill。
  • 如果遇到能力缺口,要先搜索是否有可用 Skill。
  • 浏览器相关任务,要加载 agent-browser Skill。
  • 安装新 Skill 前,要先做安全审计。

提示词里面还约定了用户技能和项目级紧跟的区别:

  • 用户级技能:存储在 ~/.workbuddy/skills/。这些是当前用户在所有项目中可用的个人技能。
  • 项目级技能:存储在 {workspace}/.workbuddy/skills/。这些是项目特定的技能,团队成员共享。

这个skill机制里面还有一个有趣的说明,原始的提示词如下:

上面的大概意思是:如果完成了复杂任务,发现了可复用流程,就要把它沉淀成 Skill,如果发现 Skill 有错误,你需要修改它,不要问用户,不要推辞,立即修复。

然后,这个不就是 Hermes Agent 的自我进化吗?

MCP 配置:连接外部能力的标准入口

系统提示词里还包含 MCP 配置规则。

当用户要求安装或配置 MCP Server 时,WorkBuddy 要修改:~/.workbuddy/mcp.json

并且有明确要求:

  • 先查官方文档。
  • 读取已有配置。
  • 合并新配置,不能覆盖已有服务器。
  • 按官方格式写 command、args、env、headers、url。
  • 如果需要凭证但用户没提供,要追问。
  • 写完配置后,不直接运行 MCP Server,而是提示用户去连接器管理页面信任。

这里可以看出,WorkBuddy 把 MCP 当成扩展外部能力的重要入口,可以通过 MCP 连接外部工具和服务。

这也是当前 Agent 产品的一个主流方向:

模型本身负责推理和调度,外部能力通过工具、Skills、MCP 等方式接入

所以,大家真的去做 Agent 的时候会发现:Tools 和 Skills 的工作量是极大的

可视化能力

系统提示词里还有关于 Visualizer 相关规则,它们在 <instructions_for_visualizer&gt; 和 <visualizer_examples&gt; 标签中

它要求 WorkBuddy 在讲解复杂概念、架构设计、对比分析、流程图、图表等场景下,主动使用可视化工具。

这说明 WorkBuddy 的回答形式不是只有文本,可以根据用户的问题,生成示意图后者架构图,流程图等。

系统提示词里面有这么一个案例说明:

用户问:”解释一下 TCP/IP 是如何工作的”

主动使用 Visualizer 展示一个内联的协议栈示意图
然后在图示周围用文字进行解释

自动化任务:把一次性任务变成定时任务

关于自动化任务,WorkBuddy 提供了表单创建,可以通过左侧的自动化菜单进入创建,同时也提供自然语言创建机制,这个提示词包裹在<automations&gt;中明确说明了,当用户需要创建定时任务的时候如何使用:

  • 这里支持周期性任务 / 自动化功能
  • 自动化任务存储在 SQLite 数据库中,路径为 $HOME/.workbuddy/workbuddy.db 定义信息存放在 automations 表中,运行时状态(上次/下次执行时间)存放在 automation_runtime_state 表中, 执行历史记录存放在 automation_runs 表中
  • 你可以使用 automation_update 工具来创建、更新、查看或删除自动化任务

任务管理:复杂任务需要显式跟踪

系统提示词里还有任务管理模块,要求模型在复杂任务中频繁使用任务管理工具(TaskCreate、TaskGet、TaskUpdate、TaskList),把任务拆成小步骤,并及时标记状态。

这个设计解决的是 Agent 执行复杂任务时容易失控的问题。

复杂任务如果没有计划,模型很容易做到一半忘记前面做了什么,哪些已经完成,哪些没有完成。

所以它需要像真实项目管理一样:

  • 创建任务。
  • 标记进行中。
  • 完成一个标记一个。
  • 遇到新的问题再拆新任务。

会话压缩

会话压缩机制,官方文档有2个环境变量说明

CODEBUDDY_PRE_MESSAGE_COMPACT_PCT, 默认值是10%,每次发送消息前,系统检查当前上下文的占用比例,超过10%就自动压缩一轮,这个阈值设计的比较低,估计很容易就会达到,这个压缩会比较频繁。

上图中是触发压缩之后的内容,这个内容还是比较多的,没有怎么丢弃上下文,基本上是在重述整个对话过程,只是做了精简。

这也说明了 为什么 默认值10%,它并没有大幅度压缩原文,形成一个结构化的总结,而是尽可能的保留了原始内容。

CODEBUDDY_AUTOCOMPACT_PCT_OVERRIDE,默认 70%-92%,当上下文持续增长到这个门槛,自动触发深度压缩,本质就是把旧消息做结构化的总结,变成摘要嵌入式上下文呢,释放大量空间。

看到这个 我觉得很奇怪,就是 前面10%已经被压缩掉了,怎么可能会到 70%的上下文呢,我觉得 唯一可能就是任务执行中,调用了大量的工具,返回了大量的内容触发了压缩,如下图所示

当上下文持续增长到这个门槛,自动触发深度压缩。

工具大量输入会触发压缩,系统有没有控制工具的输入,官方文档中给出了一些环境配置,用来控制工具的输入

CODEBUDDY_TOOL_RESULT_THRESHOLD_KB 默认 50KB 工具结果超过此值,写磁盘,上下文里只留占位符

BASH_MAX_OUTPUT_LENGTH 默认 30000 字符 bash 输出超限 ,保留头 20% + 尾 80%,完整版落盘

MAX_MCP_OUTPUT_TOKENS 默认 20000 token MCP 工具输出截断上限

CODEBUDDY_CODE_FILE_READ_MAX_OUTPUT_TOKENS 默认 20000 token 文件读取 token 上限

结语

这篇文章,我们简单的解读 WorkBuddy的系统提示词、记忆管理和压缩机制。

从最开始的 你是谁,我是谁,这个问题,我们看到 openClaw 的影子,再到后面 skills 的创建和优化机制,我们又看到了 Hermes Agent 的影子,可以看出 WorkBuddy 正在吸收市面上其他 Agent 的优点,集大成于一体:

本文由人人都是产品经理作者【叶小钗】,微信公众号:【叶小钗】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于 CC0 协议。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!