返回博客列表

OpenDots 官网拆解:这个 AI Agent 产品页的设计与功能,值得逐帧学习

2026-10-13T17:30:00+08:00
OpenDotsAI Agent前端设计SVG 动画交互设计Web 设计

OpenDots 官网拆解:这个 AI Agent 产品页的设计与功能,值得逐帧学习

这是近期第三个名字里带 "OpenDot" 的项目了。前两个分别是 CopilotKit 的 OpenDots(软件里的持久化 AI 同事)和 opendot.ai 的 OpenDot(真机语音 Agent 平台)。而今天这个 open-dots.dev 又是完全不同的第三个项目——它既不是一个能 clone 下来的开源框架,也不是硬件平台,而是一个 $OPENDOTS 代币项目。

但它有一个特别扎眼的地方:官网做得太漂亮了。

我把它整个下载下来看了一眼——一份 83KB 的单文件 HTML,一个前端框架都没用,所有动画、所有角色、那个"跟真人聊天"的演示,全是原生 JavaScript 手写的。在动辄几百 MB 依赖的今天,这种克制本身就值得单独写一篇。

所以这篇文章不谈代币值不值得买,只做两件事:把它的功能一个个列清楚,再把它的设计一层层拆开。


目录


一、先搞清楚它是什么

首页第一句话就点明了主题:

Meet your dot. OpenDots are always-on agents that run on open weights, live on their own cloud computer, hold their own wallet and learn your standards. They work 24/7 so you get your time back.

翻译一下:OpenDots 是一群 always-on(常驻在线)的 Agent。它们跑在开放权重的模型上,拥有自己的云电脑和自己的钱包,会学习你的标准,7×24 小时替你干活。

网页顶部滚动的那条黑色横条,基本把这个产品的全部卖点喊完了:

ALWAYS ON · OPEN WEIGHTS · OWN CLOUD COMPUTER · OWN WALLET ·
LEARNS YOUR STANDARDS · YOU STAY IN CONTROL · $OPENDOTS

核心概念就是 dot(点)——一只只独立的 AI 助手。你可以给主 dot 起名字,再按需要添加"专科 dot",它们共享上下文、互相交接工作。它把 AI 助手从"一次性对话"重新包装成了"一群你雇佣的同事"。

二、功能全清单

2.1 六个角色,各管一摊

官网给了六个具名角色,每个都有固定的职责、配色和"性格":

角色 领域 一句话职责 接入的东西
Otto Research 帮你读完所有资料,新证据出现时重跑分析并标出变化 论文 / 数据 / 报告
Pixel Code 盯反馈、定位修复、构建测试,最后给你带变更视频的 PR GitHub / 测试 / 部署
Nib Content 学你的文风,剪 Space 片段、起草推文和节目笔记 X / 剪辑 / 话题串
Hex Onchain 全天候盯钱包、资金池和叙事,只在限定额度内交易 钱包 / 资金池 / 告警
Bloop Community 用你的语气回私信和工单,维持 Discord 秩序,该升级的升级给你 Discord / Telegram / 客服
Ward Guard "看管其他 dot 的 dot",审查风险操作、拦截可疑授权,随时暂停任何一只 规则 / 审查 / 急停

这套命名和配色不是随便搭的——后面设计部分会讲,它们其实是程序化生成出来的。

2.2 每个 dot 的能力:有自己的电脑

这块是整个产品的骨架,也是它和"普通聊天机器人"最大的区别:

  • Own cloud computer(独立云电脑):每个 dot 独享一个隔离的 microVM,里面有真实的浏览器、shell 和文件系统。你的笔记本电脑还是你自己的,除非你主动连接它。
  • Always on, many projects(常驻在线,多项目并行):随手丢新任务给它,它能同时推进多个项目,不需要你开新会话、也不需要你一步步喂指令。
  • You approve what matters(关键动作由你拍板):dot 把完成好的工作交给你——带预览、diff 和回执。任何有后果的操作,都停下来等你点头。

配合一个 Activity View(活动视图):任何时候打开它的"屏幕",都能看到它在干嘛;你回来时也能用活动视图补看这段时间发生了什么。官网用了一个会自己滚动的实时事件流来演示这个视图——Otto 在重跑分析、Hex 在报一个钱包动向并附上「Approve / Deny」按钮、Ward 在拦截一笔可疑授权。

2.3 dot-1 模型家族

它宣称自研了一个 dot-1 模型家族,专门为"长时间运行的 agent 任务"训练,工具调用、浏览、写代码、记忆都是原生能力而非后挂上去的:

模型 参数 上下文 定位
dot-1 Nano 8B dense 128K 端侧:聊天、语音、路由;能跑在笔记本或手机上,默认隐私
dot-1 Core 72B dense 256K 每个 dot 的"默认大脑":规划、浏览、写作、写码,能连续跑几小时不跑偏
dot-1 Swarm 480B MoE(32B 激活) 1M 长周期项目:多 dot 协作、拆活、互相审查

外加三个配套能力:dot-voice(实时语音,低于 300ms 的轮次切换)、dotmem(长期记忆引擎,学你的偏好和"什么算好")、dot-guard(独立的审查模型,在风险动作发生前先过一遍你的规则)。

官网还贴了这么一行:

$ ollama pull opendots/dot-1-core

并配了一句口号:"Weights, runtime and protocol are open. Run a dot on our network or fully on your own hardware."

2.4 五层技术栈

它把一个 dot 拆成五层,每层都号称开源且可替换——"没有哪一家公司能决定你的 dot 能做什么":

层 名称 职责
01 Brain dot-1 模型负责规划、推理、挑工具;按任务在 Nano / Core / Swarm 之间路由
02 Hands 一台私有云电脑,带浏览器、shell 和 1000+ 个 MCP 原生工具与应用连接器(dot-runtime)
03 Memory dotmem 跨所有渠道保存笔记、偏好和项目状态
04 Wallet 每个 dot 拥有一个带每日额度的智能账户,密钥放在安全飞地,从不进入模型
05 Guard dot-guard 用你的规则审查每个动作,允许 / 询问 / 拦截,能瞬间暂停一只 dot

2.5 它能出现在哪些渠道

dots 的目标是"你在哪它就在哪",上下文跟着它走:

  • 已支持:Telegram、Discord、X、Farcaster、Web app、Voice
  • 即将支持:Slack、SMS

官网用了三组聊天气泡来演示:在 Telegram 里让 Pixel 修个 bug、在 Discord 里让 Hex 报一笔交易、在语音里让 Otto 汇报论文变化——同一个 dot,不同入口,记忆是连续的。

2.6 规则系统:允许 / 询问 / 拦截

这是我最喜欢的一块交互。默认有四条"永远属于你"的护栏:

  • Read-only background:主动研究只用只读工具,能看不能发
  • Keys stay sealed:密码和钱包密钥在使用时也不会展示给模型
  • Spend limits:链上动作在钱包层面按天封顶,不是靠提示词约束
  • Kill switch:dot-guard 发现异常可立即暂停一只 dot

再往下是自定义规则,每条都有三档开关——Allow / Ask / Block:

规则 档位 说明
用我的语气回私信 Allow 直接放行
开 Pull Request Allow 直接放行
发推 Ask 每次问你
额度内的交易 Ask 由智能钱包强制执行额度
向未验证合约做代币授权 Block 内置,永远开启 🔒
修改密码或密钥 Block 永远归你 🔒

带锁的两条不可修改(界面上直接变灰、禁用点击)——把"安全底线"从可配置项变成了硬约束,这个设计取舍很聪明。

2.7 造点器:自己捏一个 dot

官网给了个完全可玩的 builder,你可以:

  • 起名字(默认叫 Pip)
  • 选 Shape(圆 / 方 / 三角 / 六边形 / 胶囊 / 星形)
  • 选 Color(黄 / 橙 / 粉 / 紫 / 蓝 / 薄荷 / 红)
  • 选 Eyes(Big / Dots / Sleepy / Happy / Wink / None)
  • 选 Wearing(圆眼镜 / 方眼镜 / 墨镜 / 单片镜 / 领结 / 耳机 / 皇冠 / 毛线帽 / 天线)
  • Shuffle 一键随机、Download PNG 把头像导出成 1024×1024 的图片当 PFP

而且,你捏的形状会实时同步到下面那个对话演示里——同一个 localStorage 状态驱动两处 UI。不同形状还对应不同人设:圆形是 "all-rounder"、方形是 "builder"、三角是 "researcher"、六边形是 "onchain analyst"、胶囊是 "community lead"、星形是 "guardian"。

2.8 实时演示:和一只醒着的 dot 对话

首页最狠的一点:那个聊天框是真的。它明确标注:

This one is real. It runs on open-weight models, calls live tools, reads Robinhood Chain, searches the web and remembers you.

演示里挂了一组真实工具:

opendots_stats   wallet_lookup   token_lookup   web_search   read_url   remember

你可以问它 $OPENDOTS 链上在干嘛、查任意 Robinhood Chain 钱包、让它上网搜、或者告诉它你的偏好让它记住。左侧还有一个 dotmem 计数器,每记住一条就 +1,配一个「Forget everything」按钮。对话和记忆都存进 localStorage,刷新不丢。

有意思的是,演示窗口上标着它当前用的模型是 gpt-oss-120b——一个真实存在、确实开放权重的模型。也就是说,"开放权重"这句口号至少在演示里是能对上的。

2.9 代币、路线图与 FAQ

$OPENDOTS 是这个项目的经济层,页面给了四项用途:Fuel(为更深的活儿付费)、Spawn(添加专科 dot)、Nodes(质押运行承载云电脑的 Dot Node 并赚收益)、Govern(投票决定上哪些模型、默认安全规则、国库如何资助开放研究)。

项 值
Ticker $OPENDOTS
Chain Robinhood Chain
Supply 1,000,000,000
Contract 0x93bb40175cc357e937d6046aa2c960369f017a07

路线图分三栏:Shipped(dot-1 Nano/Core 开放权重、Dot Runtime、dotmem、智能钱包、Telegram/Discord/X 渠道)、Now($OPENDOTS 上线、dot-1 Swarm、面向持有者开放造点、Farcaster 与语音通话、公开 Activity View)、Next(Dot Nodes 质押、专科 dot 市场、Slack 与 SMS、移动端、社区治理的 dot-2 训练)。

三、设计拆解:为什么它好看

功能可以堆,但"好看"是手艺。下面这些都不是巧合。

3.1 色彩与字体:暖纸张 + 一抹彩色

整站的基础色不是常见的纯白或冷灰,而是一套暖纸张色系:

--bg:   #F5F3EE   /* 暖白纸张 */
--bg2:  #ECE9E1   /* 次级背景 */
--ink:  #111111   /* 正文墨色 */
--ink2: #55524C   /* 次级文字(带一点暖调)*/
--ink3: #8C877E   /* 三级文字 */
--dark: #0E0E0E   /* 深色区块 */

点缀色则是一整套高饱和的"点的颜色":黄 #F6C31C、橙 #FF7A1A、粉 #F03FC8、紫 #7B5CFF、蓝 #1E8BFF、薄荷 #2FD69A、红 #FF4B4B。暗色区块用纯黑铺底、浅色区块用暖纸色铺底,两种底交替出现,段落节奏就出来了。

字体只用三款,各司其职:

  • Inter Tight:全站主字体,字距收得很紧(标题 letter-spacing: -.055em),大标题能撑到 clamp(54px, 9.4vw, 128px),撑满一屏。
  • Instrument Serif(斜体):专门用来点缀。
  • JetBrains Mono:终端、参数、代码,一律等宽。

3.2 角色是"算"出来的,不是画出来的

这是全站最精彩的一处。那六只可爱的小家伙,没有一个是图片素材——它们全是 JavaScript 现场生成的 SVG。

生成函数 dotSVG() 把一只 dot 拆成几个参数:

  • 6 种形状:圆、方、三角、六边形、胶囊、星形,每种用一个 draw() 返回几何路径;
  • 6 种眼睛:dots / big / sleepy / happy / wink / none,各是一小段内联 SVG 路径;
  • 9 种配饰:分成"眼镜组"和"帽子组",同组互斥(选方眼镜自动摘掉圆眼镜),外加一个领结。

真正让它们"有质感"的是两个 SVG 滤镜:

feTurbulence(fractalNoise) → feDisplacementMap

用分形噪声做位移,给每个形状加上手绘般的轻微抖动边缘——所以它看起来不像规整的矢量图形,而像贴了毛毡。再叠一层径向渐变做左上方高光 + 边缘暗角,脚底画一个椭圆当投影,角色就"落地"了。

最后,每只 dot 的眨眼节奏是随机的(4-8 秒一个循环),六只站一起就永远不会同步眨眼——这个细节,是把"程序生成"变成"有生命感"的关键。

3.3 眼睛会跟着你的鼠标转

全站所有带瞳孔的 dot,眼睛都会追随你的光标。实现很省:一个全局 pointermove 监听,用 requestAnimationFrame 做节流,算出光标相对每只 dot 的方向,再把瞳孔 translate 过去。有瞳孔的(big eyes)动 5px,没瞳孔的整体动 3.5px,配饰层则以一半速度跟动——所以眼镜和眼睛之间有微妙的视差。

同样的机制也用在了 hero 区那块 canvas 点阵上:一屏随机着色的点阵,平时微微呈波浪起伏,光标靠近时,附近的点会"隆起来"并显色(半径随距离衰减)。这不是 GIF,是每帧画的。

3.4 滚动叙事,一格一格喂给你

  • Marquee:黑底横条无缝滚动(translateX(-50%) 无限循环),每个词后面缀一个彩色小圆点。
  • Statement:中间那段大字是逐词点亮的——根据滚动进度,把每个词的透明度从 rgba(17,17,17,.16) 渐变到纯墨色,像有人在你读的时候把字一个个"按亮"。
  • Reveal:卡片进场用 IntersectionObserver 触发,只播一次就 unobserve。
  • Sticky Terminal:架构区右侧那个终端窗口是 position: sticky 的,滚到才启动打字机循环,打完停 6 秒再重播。
  • 导航栏:滚过 20px 后变半透明毛玻璃(backdrop-filter: blur(14px))。

3.5 那些"拟真"的小 UI

  • Activity View:深色终端窗口 + 顶部渐隐遮罩(mask-image),事件从底部滑入,一条条替换,最多留 9 条。带「Approve / Deny」的事件点下去会变成「Approved by you」,它真的会回你。
  • 规则开关:绿色=放行、琥珀色=询问、红色=拦截,上锁的两条直接 pointer-events: none 变灰。
  • 造点器导出:把 SVG 序列化后画到 canvas 上导出 PNG,还会按名字自动命名文件(pip-opendot.png)。

3.6 克制:一份文件,一个框架都不用

打开 DevTools 会有点不适应——全站没有一个 React/Vue/Svelte,没有打包器,没有 CSS 框架。整个页面就是一份 index.html,内联一个 <style>(约 370 行)和一个 <script>(约 370 行)。外部依赖只有一个 Google Fonts。

它还懂得"省电":requestAnimationFrame 循环在 document.visibilityState !== "visible" 时会自动降频(改用 setTimeout 500ms 兜底),devicePixelRatio 上限锁到 2。一个营销页,做到了接近原生的性能。

四、整体技术架构

把上面这些东西串起来,就是这样一个结构:

flowchart TB
  Visitor["Visitor browser"] --> Static["Single-file HTML: inline CSS + vanilla JS"]
  Static --> Grid["Hero canvas dot grid"]
  Static --> Gen["Procedural SVG dot generator"]
  Static --> Builder["Dot builder + PNG export"]
  Static --> Store["localStorage: dot, memory, chat"]
  Static -->|POST /api/chat| ChatAPI["Chat API (streaming NDJSON)"]
  ChatAPI --> Model["Open-weight model (demo shows gpt-oss-120b)"]
  Model --> Tools["Live tools: stats, wallet, token, web search, read url, remember"]
  Tools --> Chain["Robinhood Chain data"]
  Tools --> Web["Web search"]
  ChatAPI -.->|events: tool, memory, text| Static
  Fonts["Google Fonts (only external dependency)"] -.-> Static

聊天部分的流式协议值得一提:后端返回的是 NDJSON 事件流,前端按行解析,事件分四类——tool(开始调用工具)、tool_result(工具返回摘要)、memory(写入一条长期记忆)、text(正文,前端用打字机效果逐字渲染)。工具调用会在气泡上方**长出一行"正在使用 xxx"**的中间态,这就是那种"看着它干活"的观感来源。

五、几个值得注意的细节

夸完了,也得说点实话:

  1. 它自称开源,但站内找不到仓库。 页面反复强调 "open weights / open protocol / each layer is open source and swappable",还给了 ollama pull opendots/dot-1-core 这条命令,但整站没有指向 GitHub 或文档站的链接——唯一的跳转是 X(@opendotsRH)。所以目前"开源"更像是一句承诺,而不是可以立刻 clone 下来的事实。

  2. 它本质上是个代币项目,而且是"代币先行"。 页面有独立的代币区块、购买按钮、合约地址,路线图里 "Now" 一栏的第一条就是 $OPENDOTS launch,造点功能也是"先向持有者开放"。产品叙事很完整,但完成度要靠后续兑现。

  3. "Robinhood Chain" 以它的说法为准。 页面反复提到这条链和"读 Robinhood Chain",这是项目方自己的描述,本文只做转述,不代它背书。

  4. 演示用的不是 dot-1。 官方喊的是 dot-1 家族,但实时演示窗口标的是 gpt-oss-120b——一个真实开放的权重模型。这算是诚实,也说明 dot-1 目前可能还没到能在网页里跑起来的状态。

一句话总结:这是一个"官网完成度远高于产品完成度"的典型样本。功能讲得极全,设计做得极细,值得任何做 AI 产品页的人逐帧扒一遍;但它承诺的那套开源 dot 生态,现在还得先打个问号。

想自己感受,直接打开 open-dots.dev——捏一只自己的 dot,再跟它聊两句,就知道这套东西的完成度在哪了。


🔗 官网: https://open-dots.dev/ 🔗 X: https://x.com/opendotsRH ⛓️ Chain: Robinhood Chain(项目方说法) 📄 合约: 0x93bb40175cc357e937d6046aa2c960369f017a07 🧩 技术形态: 单文件 HTML(内联 CSS + 原生 JS,无框架)

作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。

分享给朋友