站点图标 高效码农

钉钉悟空App技术架构解析:Rust内核如何重构AI Agent生态

阿里钉钉悟空App技术架构深度剖析:从Rust核心到AI Agent生态

前言:为什么要了解悟空的技术设计?

当你在电脑上运行一个应用程序时,你看到的只是表面——漂亮的界面、流畅的交互。但在这背后,有着复杂的技术架构在支撑这一切。阿里钉钉团队开发的”悟空”(Wukong)就是这样一款应用,它不仅仅是一个聊天窗口,更是一个能够控制电脑、操作浏览器、执行代码的智能体平台。

那么,悟空究竟是如何运作的?它采用了哪些技术?为什么这样设计?接下来,我们将从逆向分析的角度,逐层剖析这个应用的技术架构。

悟空应用的基本身份:你需要知道的首要信息

在深入技术细节之前,让我们先了解悟空应用的基本信息。就像认识一个人要先知道他的名字和背景一样,了解一个应用也要从基本身份开始。

属性 具体值
官方名称 Wukong(悟空)
内部代号 Real
应用包标识 com.dingtalk.real
可执行文件名 DingTalkReal
应用版本 0.9.0
最低系统要求 macOS 14.0 及以上
处理器架构 arm64(Apple Silicon)
开发团队 钉钉(DingTalk)/ 阿里巴巴集团
构建系统 Jenkins CI(实例名:real-wukong-release)
构建用户 yuanzhan
自定义URL协议 wukong://

为什么这些信息很重要? 这些基本信息告诉我们悟空是专门为Apple Silicon优化的应用,采用了最新的macOS系统特性,并且有完整的企业级构建流程。

核心技术栈:悟空采用的技术基础

主要框架选择:Tauri而非Electron

首先要说的是,悟空没有选择目前流行的Electron框架来开发跨平台应用,而是选择了相对较新的Tauri框架。这个选择背后有深层的考虑。

Tauri是什么?简单来说,Tauri是一个使用Rust编写的框架,它让开发者可以用Web技术(HTML、CSS、JavaScript)来开发用户界面,同时底层由高效的Rust代码来处理复杂的逻辑。相比Electron动辄数百MB的应用包,Tauri的应用包体积更小,启动速度更快,内存占用更低。

悟空采用的技术组成方案如下:

  • 主程序:完全使用Rust编写,基于Tauri 2.x框架
  • 用户界面:Web应用运行在WebView内,通常采用React、Vue或Svelte等前端框架
  • 应用内通信:使用Tauri自定义的IPC机制,协议名为tauriipc://,具有完整的Isolation Pattern安全隔离功能

这样的设计意味着什么?它意味着悟空既能获得Web开发的灵活性,又能获得原生应用的性能。而且,Rust语言的内存安全特性可以减少许多安全漏洞。

系统级能力支撑:Mac系统为悟空提供了什么

如果说Tauri是悟空的骨架,那么macOS系统提供的各类框架就是为这个骨架赋予能力的肌肉。让我们看看悟空利用了macOS系统的哪些核心能力:

系统框架 主要用途 实际应用场景
WebKit + JavaScriptCore 网页渲染和JavaScript执行 悟空的用户界面显示和前端逻辑运行
AVFoundation、AVFAudio、CoreMedia 音频和视频处理 语音输入、视频播放、媒体编辑等功能
ScreenCaptureKit 屏幕截图和录制 悟空可以捕获你的屏幕内容进行分析
CoreLocation 地理定位 天气查询、位置相关的任务
UserNotifications 系统通知 弹出提醒用户的通知消息
OSAKit AppleScript自动化 控制终端和其他应用执行自动化任务
Metal + QuartzCore GPU图形渲染 高效的图形显示和动画
CloudKit iCloud数据同步 用户数据的云端备份和同步
CoreData 本地数据存储 离线情况下的数据管理
Security框架 密钥链和加密功能 保护API Key和登录凭证
IOKit 硬件交互 与计算机硬件的底层交互
SystemConfiguration 网络配置管理 监测网络状态和连接
CoreImage、ImageIO、ColorSync 图像处理 图片编辑和处理功能
CoreText 文本渲染 高质量的文字显示
CoreVideo + IOSurface 视频和表面管理 视频流处理和内存管理

这些框架就像是建筑工地的各种工具,开发者根据需要选择使用。悟空对这些框架的充分利用,使得它能够完成许多复杂的任务。

应用内部结构:悟空的文件组织方式

如果你下载了悟空的应用包并查看其内部结构,你会看到一个清晰的文件夹层级。这个结构反映了悟空的设计理念:

Wukong.app/
│
├── Info.plist                          
│   应用元数据文件,包含应用的基本信息
│
├── _CodeSignature/                     
│   代码签名目录,用于验证应用的完整性和来源
│
├── MacOS/
│   │
│   ├── DingTalkReal                    
│   │   主可执行文件(122MB)
│   │   arm64架构,由Rust编写
│   │
│   └── real-cli                        
│       命令行工具(2.8MB)
│       用于命令行操作悟空的功能
│
├── Frameworks/                         
│   当前为空(没有额外的第三方framework)
│
└── Resources/
    ├── icon.icns                       
    │   应用图标
    │
    ├── zh-Hans-CN.lproj/               
    │   简体中文本地化资源
    │
    ├── zh-Hans.lproj/                  
    │   简体中文本地化资源
    │
    ├── python/                         
    │   预留的Python目录(用于未来扩展)
    │
    └── resources/
        ├── browser-runtime/            
        │   浏览器自动化运行时
        │   使用TypeScript编写
        │
        ├── bundled-skills/             
        │   内置技能包(zip格式)
        │   包含Office文档处理等
        │
        ├── dws/                        
        │   DWS内部服务
        │   钉钉内部服务组件
        │
        ├── environment/                
        │   运行环境管理
        │   管理各类运行时环境
        │
        ├── mbb-skills/                 
        │   浏览器增强技能
        │   针对特定网站的自动化操作
        │
        └── real_networking/            
            网络层实现
            包含GaeaMac.framework

这个结构意味着什么? 这个组织方式表明悟空是一个高度模块化的应用。每个功能都有自己的位置,使得代码维护和功能扩展变得容易。

Agent运行时架构:悟空的智能大脑

现在我们来到了悟空最核心的部分——它的Agent运行时架构。这是悟空能够进行复杂任务的关键。

什么是”Real Loop”和”Spark Loop”?

从悟空的源代码结构可以看出,它有两套Agent引擎:

Real Loop —— 这是主要的Agent循环引擎,控制着Agent的基本运作流程:

  • loop_engine.rs:核心循环逻辑,不断接收任务、处理任务、返回结果
  • commands.rs:处理各种命令
  • types.rs:定义内置工具和类型
  • message_converter.rs:负责消息格式的转换
  • memory_summarizer.rs:管理对话历史,防止历史记录过长
  • sensitive_paths.rs:过滤敏感目录,保护用户隐私
  • session_approval_memory.rs:记录用户的权限决策(人在环功能)
  • skill_snapshot.rs:发现和注入可用技能
  • sandbox_policy_loader.rs:加载沙箱安全策略

Spark Loop —— 这是钉钉自研的Agent引擎,使用DDD(领域驱动设计)架构:

  • Application层:处理Agent流和会话内存刷新
  • Domain层:包含Agent压缩、LLM调用、会话实体等核心业务逻辑
  • Infrastructure层:处理LLM适配器(支持阿里云MaaS、通义千问、OpenAI)、沙箱网关等基础设施

Agent能支持的多种类型

悟空不是单一的Agent,而是一个多Agent宿主平台。它可以同时运行多种不同的Agent引擎:

Agent类型 标识符 说明
Spark spark 钉钉自研Agent引擎
Native native 原生驱动
Claude claude Claude Code集成
Gemini gemini Google Gemini CLI集成
Codex codex OpenAI Codex CLI集成
iFlow iflow 工作流引擎
Builtin builtin 内置Agent
Local local 本地模型Agent
Discovered 自动发现的Agent

这意味着什么? 你可以在同一个悟空应用中使用多个不同的AI引擎,选择最适合当前任务的Agent。

大语言模型支持:悟空如何利用AI

三大LLM后端支持

悟空不会被限制在某一个大语言模型上,而是支持多个LLM提供商:

MaaS(Model as a Service)—— 阿里云模型服务

阿里云提供的模型服务,悟空可以通过这个接口调用各种模型。支持的高级特性包括:

  • prompt_cache_hit_tokens:提示词缓存命中统计,这有助于减少重复查询的成本
  • enable_thinking:启用”思考模式”,让模型在回答前进行更深入的思考

这就像给模型配上了”思考帽子”,它在回答之前会进行更多的分析。

Qwen(通义千问)—— 阿里自家的大模型

通义千问是阿里自主研发的大模型,悟空对其有完整的支持。特别地,悟空还支持本地部署版本的通义千问,这意味着你可以在完全离线的情况下运行AI功能。

功能支持包括:

  • 流式输出
  • 工具调用选择
  • 并行工具调用
  • 使用情况跟踪

OpenAI API —— 接入ChatGPT

当然,悟空也支持OpenAI的API,这样用户就可以使用ChatGPT或其他基于OpenAI的模型。

为什么要支持多个LLM? 这样用户可以选择最适合自己的模型,并且不会被单一提供商绑定。同时,多个模型可以互为备份,提高可用性。

内嵌运行时环境:自包含的执行能力

悟空的一个独特之处是它内嵌了完整的开发和执行环境。这意味着用户不需要单独安装这些工具,开箱即用:

组件 版本 用途
Bun 1.2.17 主JavaScript/TypeScript运行时
Node.js 22.19.0 备用JavaScript运行时
Python 3.12 (CPython) Python脚本执行
uv 0.7.13 Python包管理器
Chromium 145.0.7632.160 内嵌浏览器,用于自动化任务
Qwen 0.10.0 本地通义千问模型,支持离线推理
DWS 0.2.19 内部服务守护进程

这带来了什么好处? 用户不需要配置复杂的开发环境,一切都已经为你准备好了。这就像你买一辆车时,所有必要的工具和配件都已经装在里面了。

浏览器自动化系统:悟空如何操作网页

悟空内置了一个强大的浏览器自动化系统,位于resources/browser-runtime/目录下。这是一个独立的TypeScript微服务。

浏览器自动化的技术基础

  • Playwright(版本1.58.2):行业标准的浏览器自动化引擎
  • Express 5:轻量级HTTP API服务框架
  • WebSocket(ws 8.19.0):实时双向通信
  • Bun:作为运行时容器

浏览器控制的核心模块

browser-runtime/
├── main.ts              
│   入口文件
│
├── browser/             
│   浏览器控制核心
│   ├── cdp.ts           
│   │   Chrome DevTools Protocol客户端
│   │   用于底层浏览器控制
│   │
│   ├── chrome.ts        
│   │   Chrome启动和管理
│   │
│   ├── client.ts        
│   │   高级浏览器客户端
│   │
│   ├── client-actions.ts 
│   │   页面操作API
│   │   包括点击、输入、观察等
│   │
│   ├── control-api.ts   
│   │   对外暴露的控制接口
│   │
│   ├── control-auth.ts  
│   │   认证机制
│   │
│   ├── bridge-server.ts 
│   │   桥接服务器
│   │
│   ├── extension-relay.ts 
│   │   Chrome扩展中继
│   │
│   ├── navigation-guard.ts 
│   │   导航守卫,控制页面跳转
│   │
│   ├── profiles.ts     
│   │   浏览器Profile管理
│   │   保存浏览器配置和登录信息
│   │
│   ├── form-fields.ts   
│   │   表单字段自动识别和填充
│   │
│   └── pw-ai-module.ts  
│       Playwright AI模块
│       增强型的AI驱动的页面理解
│
├── cli/                 
│   命令行接口
│
├── config/              
│   配置文件管理
│
├── gateway/             
│   网关层
│
├── infra/               
│   基础设施模块
│
├── logging/             
│   日志记录
│
├── media/               
│   媒体处理
│
├── process/             
│   进程管理
│
├── security/            
│   安全模块(CSRF防护等)
│
└── utils/               
    工具函数库

浏览器自动化的安全保证

悟空在浏览器自动化中内置了多层安全机制:

  • Bridge Auth Registry:桥接认证注册,验证请求的来源
  • CSRF防护:防止跨站请求伪造
  • Control Auth:带有自动令牌的控制身份验证
  • HTTP Auth:HTTP级别的身份验证
  • Extension Relay Auth:扩展中继授权

这些安全措施确保了即使悟空控制你的浏览器,恶意请求也无法通过。

技能系统:扩展悟空的能力

技能系统是悟空的能力扩展方式。不同类型的技能负责不同的工作。

内置技能包

悟空预装了几个核心的技能包,用于处理常见的办公任务:

技能包 用途
钉钉工作台 与钉钉工作流和任务管理集成
Word文档处理 创建、编辑和操作Word文档
PowerPoint处理 创建和编辑PPT演示文稿
Excel处理 电子表格数据处理和分析
PDF处理 PDF文档读取和转换
PDF转Word 将PDF转换为Word格式
技能创建器 用于开发和发布自定义技能的元工具

浏览器增强技能(MBB Skills)

这些是针对特定网站的自动化操作技能:

技能ID 名称 目标网站
12306-train-query 12306火车票查询 铁路12306
ctrip-flight-search 携程航班查询 携程
dianping-info-query 大众点评信息查询 大众点评

技能如何工作

从悟空的代码中可以看出,技能的管理包括:

  • search_skills:在已安装的技能中搜索
  • use_skill(skill_name, level="preview"|"full"):激活某个技能,可以选择预览或完全使用
  • cli_skills_install_local / cli_skills_install_url:从本地或远程URL安装技能
  • cli_skills_toggle_enabled:启用或禁用某个技能
  • cli_skills_delete:删除已安装的技能
  • 支持渐进式披露:常用技能优先显示,更多技能可通过搜索找到
  • 支持技能注入策略:可以显式指定或自动选择

这个设计的妙处是什么? 用户不会被一堆技能淹没,而是根据需要逐步发现和启用。

内置工具库:悟空的具体能力清单

悟空内置了一系列工具,这些工具代表了它能直接执行的操作:

工具名称 功能描述 工作原理
understand_image_content 图像内容分析 使用本地Vision模型分析,如果失败则回退到云端
parse_file 文件解析 PDF使用本地处理,其他格式使用云端服务
text2image 文本生成图像 根据文字描述生成对应的图像
image2image 图像变换 基于已有图像进行修改或风格转换
text2video 文本生成视频 将文字描述转换为视频内容
read_url_v2 网页内容读取 从指定URL读取和解析网页内容
reader_html_content HTML内容解析 提取和理解HTML页面结构
internet-search 互联网搜索 在互联网上搜索相关信息
browser_start 启动浏览器 启动自动化浏览器实例
browser_stop 停止浏览器 关闭浏览器实例
browser_screenshot 浏览器截图 捕获当前浏览器显示的内容
browser_wait_for_download 等待文件下载 监测并等待文件下载完成
browser_status 浏览器状态查询 检查浏览器当前的运行状态
execute_shell Shell命令执行 在安全沙箱内执行系统命令
cron_* 定时任务管理 创建、更新、删除定时执行的任务

多渠道通信:悟空如何连接用户

悟空不仅仅运行在Mac的桌面上,它还能通过多个渠道与用户交互:

钉钉渠道(主渠道)

  • 实现方式:AI Card流式卡片 + Stream长连接
  • 消息模板:使用dtv1.card模板
  • 支持场景:IM_ROBOT(机器人消息)和IM_GROUP(群组消息)
  • 特点:流式卡片可以实时更新内容,用户能看到任务的实时进展

Slack集成

  • 认证方式:OAuth API
  • 验证方式:通过auth.test接口验证
  • 支持特性:thread_ts线程回复,能够在特定线程中进行对话

WhatsApp集成

  • 实现方式:独立模块集成
  • 用途:在WhatsApp上与用户交互

Agent Device

  • 实现方式:RPC API
  • 主要操作:设备注册、更新、列表查询、删除、启用等

消息事件流

悟空在处理任务时会经历这样的消息流:

任务开始 → 工具使用前 → 工具使用后 → 权限请求 → 任务完成/任务错误

这确保了每个步骤都能被正确地记录和监控。

安全架构:悟空如何保护用户

在一个能够自动化操作计算机的应用中,安全是最重要的。悟空采用了多层防护:

沙箱隔离系统

  • 配置管理:SandboxV2Config用于精细的沙箱配置
  • 级别划分:支持不同的沙箱级别
  • 权限根:定义授权的文件系统根目录
  • 状态管理:支持沙箱快照保存和恢复,就像可以”回滚”系统状态

人在环(Human-in-the-Loop)权限审批

这是一个关键的安全特性:

  • 决策记录:session_approval_memory记录用户的允许/拒绝决策
  • 持久化权限:is_always_allowed和is_always_denied可以保存用户的权限设置
  • 评估模式:EvalAutoAllow允许在评估模式中自动允许某些操作

这意味着什么? 用户可以看到悟空要做什么,有机会拒绝,并且决定可以被记住以加快未来的操作。

敏感路径过滤

  • 保护目录:屏蔽~/.real/.acp等包含敏感信息的内部目录
  • 白名单机制:只允许访问白名单中的路径

Prompt安全护栏

  • 配置:PromptGuardrailsConfig用于配置提示词的安全限制
  • 目的:防止通过精心设计的提示词让AI做出有害的操作

Tauri安全机制

  • 隔离模式:Isolation Pattern确保前端和后端之间的通信是隔离的
  • CSP保护:内容安全策略防止注入攻击

凭证安全

  • 加密存储:PreferenceCrypto对所有凭证进行加密
  • 自动迁移:系统自动将明文凭证迁移到加密存储
  • 动态管理:LLM凭证支持过期和刷新机制

辅助二进制和网络层

二进制文件

悟空不仅仅是一个可执行文件,它还包含了多个辅助的二进制工具:

文件名 大小 架构 用途
DingTalkReal 122MB arm64 主可执行文件,包含所有Rust代码
real-cli 2.8MB arm64 独立的命令行工具
real_networking universal (x86_64 + arm64) 网络层二进制
dws arm64 DWS服务守护进程

网络层框架

  • GaeaMac.framework:这是阿里内部的网络框架(Gaea),包含AI、Aladdin、Base、Bridge等子模块,支持Wukong专用头文件
  • libdtfbase.dylib:钉钉基础库,提供钉钉特定的网络功能

数据存储策略

数据是应用的生命血液。悟空采用了分层的存储策略:

存储方式 用途 特点
SQLite Agent记忆、消息持久化、定时任务 本地结构化存储
CoreData 本地数据管理 macOS原生框架
CloudKit 云端数据同步 自动同步到iCloud
JSON配置文件 MCP服务器配置、环境清单 易于编辑和版本控制
加密偏好设置 LLM API Key、登录凭证 安全的敏感信息存储

这样的设计确保了数据的安全性、可用性和可扩展性。

系统权限声明:悟空需要的权限

作为一个能够自动化电脑操作的应用,悟空需要特定的系统权限。这些权限都是合理的,用户可以看到悟空为什么需要它们:

权限类型 用途描述
AppleEvents 控制Terminal和其他应用执行自动化任务
Camera 拍照和视频录制
Location (Always) 用于天气预报、导航等位置相关任务
Microphone 语音输入和音频捕获
Screen Capture 分析界面内容和执行自动化操作
Notifications 提醒用户任务执行状态和重要事件

每一个权限都有明确的用途,而且悟空在应用层面也实现了额外的安全控制。

架构总结与核心特征

Wukong Architecture Overview

悟空的本质是什么?

通过以上的详细分析,我们可以总结出悟空的核心特征:

技术选择的优越性

Tauri + Rust原生架构是一个关键决定。为什么选择它而不是Electron?

  • 性能:Rust的高性能和低内存占用
  • 包体积:主二进制仅122MB,相比Electron的400MB+更小
  • 安全性:Rust的内存安全特性减少漏洞
  • 启动速度:原生应用启动快,用户体验更好

多引擎并存的灵活性

悟空不是被锁定在单一的AI引擎中。它支持:

  • 自研的Spark引擎
  • Claude Code集成
  • Google Gemini
  • OpenAI的Codex
  • 本地模型

这意味着用户有最大的选择自由度。

全栈的Agent能力

悟空不仅仅是一个聊天界面,它是一个完整的Agent平台:

  • 代码执行能力(Bun、Node.js、Python)
  • 浏览器自动化(Playwright)
  • 屏幕截图和UI自动化
  • 文件处理(Word、Excel、PDF等)
  • 文生图和文生视频
  • 搜索和网页访问

MCP协议的扩展性

MCP(Model Context Protocol)原生支持意味着悟空可以连接到外部服务,无限扩展工具能力。

完善的技能系统

从内置技能到浏览器增强技能再到用户自定义技能,悟空提供了分层的能力扩展机制。

多渠道分发

同一个Agent可以通过钉钉、Slack、WhatsApp等多个渠道与用户交互。

本地AI能力

内置Qwen模型,支持离线推理。用户不需要依赖云端服务就能获得AI能力。

自包含的运行环境

Bun、Node.js、Python、Chromium都内置了。用户不需要配置开发环境。

企业级安全防护

  • 沙箱隔离
  • 人在环权限审批
  • 敏感路径过滤
  • Prompt安全护栏
  • 凭证加密

DDD架构的代码设计

AllSpark内核采用域驱动设计,分层清晰:

  • Application层:应用逻辑
  • Domain层:核心业务逻辑
  • Infrastructure层:基础设施

这样的设计使代码易于维护和扩展。

常见问题解答

Q: 悟空和ChatGPT有什么区别?

A: ChatGPT主要是一个对话AI,而悟空是一个智能体(Agent)平台。悟空可以执行代码、控制浏览器、管理文件、操作系统等。悟空可以整合ChatGPT作为其LLM后端之一,但它的能力远超过ChatGPT。

Q: 为什么悟空采用Tauri而不是Electron?

A: Tauri比Electron更轻量高效。Electron应用通常很大且耗内存,因为它内嵌了整个Chromium浏览器。Tauri利用系统的WebKit框架,应用包更小,启动更快。

Q: 悟空能做什么具体的工作?

A: 悟空可以:编写和执行代码、自动化网页操作(订机票、查快递等)、处理Office文档、截图和分析屏幕内容、定时执行任务、与钉钉集成处理工作流。

Q: 悟空的安全性如何保证?

A: 悟空采用了多层安全机制:操作前需要用户批准(人在环)、沙箱隔离防止恶意代码、敏感路径过滤保护系统文件、凭证加密存储。

Q: 能否离线使用悟空?

A: 可以。悟空内置了本地Qwen模型,可以离线进行推理。但某些需要网络的功能(如搜索、访问网页)仍需要网络。

Q: 悟空支持哪些大语言模型?

A: 悟空支持阿里云MaaS、通义千问、OpenAI等多个LLM提供商。用户可以根据需要选择。

Q: 怎样扩展悟空的能力?

A: 通过三种方式:安装官方技能包、安装浏览器增强技能、自定义开发技能。MCP协议支持也允许连接外部服务。

结语

悟空代表了AI Agent应用的一种先进形态。它不是简单地将大语言模型包装成对话界面,而是构建了一个完整的、安全的、可扩展的智能体平台。

从底层的Rust实现到顶层的多渠道分发,从沙箱隔离到人在环控制,悟空在性能、安全、功能、易用性之间找到了精妙的平衡。

对于想要理解现代AI应用如何设计和实现的开发者、想要探索AI自动化可能性的用户,亦或是关注企业级AI应用安全的安全专家,悟空都提供了值得深入研究的参考案例。


补充说明

本文基于对悟空应用包的逆向分析,包括检查应用的二进制符号、动态库依赖、资源文件等。所有的技术细节都来自对实际应用文件的分析。

退出移动版