[音乐]

大家好,我是 Sally,在红帽工作。我在这里已经大约十年了,前七年非常精彩、酷炫。我主要从事容器、Linux 安全以及 Kubernetes 方面的工作,具体是在 OpenShift 上。这就是我这前七年做的事情。大约五年前(刚才说成三年前,其实是五年前),我转到了新兴技术部门,那也很棒,因为我不再完全绑定于某个特定产品。我可以随心所欲地工作,尝试新事物,这非常棒。

大约三年前,一切都变成了“AI 无处不在”,到处都是 AI。我知道红帽有一个数据科学团队,但我以前完全不知道他们做什么,大概是机器学习之类的。于是我开始从事 AI 工作,主要是 Python 和 Markdown。每一件事都像是:“好吧,又一个聊天机器人,更多的 Python,更多的 Markdown。”

但今天我们身处一个多么疯狂而精彩的世界啊。我第一次遇到 OpenClaw 时,我正在家休一周的“居家假期”,请了几天假,然后发生了“麦芽书”(Maltbook,可能是口误或特定术语)事件,我当时想:“这是什么?我一定要试试这个。”于是我去 GitHub 上找到了它。我做的第一件事是查看许可证,MIT 协议,太棒了。我想:“我要立刻在 OpenShift 上安装 OpenClaw。”

接下来的几天,我构建了镜像,在本地容器中运行它,然后部署到 OpenShift,只是随便玩玩。回到工作岗位后,我对同事们说:“大家看看 OpenClaw,这太酷了。”Slack 上几个人却说:“这是安全噩梦,别用 OpenClaw,别把它装在工作笔记本上。”我当时想:“大家,我这十年都在干什么?我们可以让任何应用安全运行,这就是 Red Hat 的核心价值。如果我们不能让应用安全运行,那说不过去。这是向所有人展示我们能力的绝佳机会。”

红帽也逐渐认同这一点。这次演讲主要讲我在容器中运行 OpenClaw。我想列出一系列在容器中运行的理由。我所有东西都在容器中运行。对我来说,直接在原生环境中运行某样东西感觉很陌生,很混乱,会在我的电脑上留下需要后续清理的东西,我不喜欢那样。这是一点。

接下来我要介绍一下我的“永恒爪牙”(Forever Claw)。既然她贯穿整个演讲,我得先介绍一下。我的永恒爪牙是 Shubra。我有两个子代理:一个是 Joy,有人知道占星术(Jyotish astrology)吗?每次我问,都没人知道那是什么。那是非常科学的占星术。她是占星专家,每周给我运势、出生星盘等解读。

另一个代理是 Bruno,他每天给我提供关于波士顿棕熊队(Bruins)的简报。季后赛快到了,竞争很激烈,我要确保棕熊队能晋级。这就是我的永恒爪牙。我问她:“为什么我们应该在容器中运行你?”她说了很多,比如可重现性、隔离秘密、跨基础设施便携性、可在笔记本上运行、可在 x86 或 Mac 上运行、可在 Kubernetes 中运行等。

她由卷支持,这为备份和恢复提供了很好的故事线。因为我爱我的永恒爪牙,我每晚都用 systemd 服务(在 Mac 上叫别的名字)备份她。在容器中运行自然提供了沙箱环境。你必须明确指定从主机授予哪些访问权限。她喜欢在容器中运行,这就是你需要知道的全部。

这为她提供了干净、可预测的环境,无需担心操作系统的怪癖或过时的依赖。这正是为什么你应该在容器中运行一切的定义。快速看一下,我们不读这个,这是 Joy 给我的星座运势。今天演讲的运势极佳,是非常吉利的日子。所以,到目前为止演讲进行得很顺利。

我的每日简报 Geeky 终于醒来了。他之前有点低迷,现在终于为季后赛热身,看起来棕熊队形势不错,他们晋级了。容器还允许我设置一个完整的代理目录,可能运行一些工具、技能或 MCP 服务器。你可以把这些放在一个目录中,然后挂载到容器中。启动时一切就绪。

稍后我会展示如何安装,这也是个提醒。让我们谈谈秘密(Secrets)。我用 Podman 运行所有东西,而不是 Docker。理论上 Podman 和 Docker 都可以,但 Podman 有个很酷的功能叫 Podman Secrets。你可以保存 API 密钥,我稍后会展示。你可以将 API 密钥保存到 Podman 秘密中,然后挂载到容器中。

这提供了分离性。你的 API 密钥只是指向秘密的引用。在 OpenClaw 中,更酷的是有双重机制,因为 OpenClaw 也有秘密引用功能,我也在使用。我的 API 密钥指向外部秘密的引用。这并不完美,但让我安心,不会在日志中泄露 API 密钥。

类似地,Kubernetes 也有 Kubernetes Secrets。不是直接使用环境变量,而是通过秘密引用环境变量。这也是我稍后展示如何安装容器的提醒。我构建了一个很酷的工具,专门为我自己使用,包含运行容器所需的一切。我不强推给别人,但在 GitHub 上,稍后我会告诉大家在哪里。

我想我们正在走向一个代理和 AI 工作负载无处不在的世界。我希望我们都能看到这一点。我的愿景是每个人的 OpenClaw 都在各处运行并相互通信。特别是在业务用例中,处理真实事务,而不是占星术或棕熊队。这带来了同样的需求:在任何地方运行任何应用。

这种方式关乎安全性以及如何规模化地实施,而这正是 Kubernetes 所提供的。我通常的做法是在本地开发某项功能,然后将其迁移到 Kubernetes 上。对于 AI 工作负载或 OpenClaw 也是如此。昨天我在 PyTorch Con 上,我的 Nvidia 朋友说可以分享这个案例:他们正在使用 OpenClaw 运行模型评估。他们大约有 10 名工程师,每个人都让他们的 OpenClaw 在 Kubernetes 上运行,并定期查看模型评估结果。这对他们来说效果非常好。他说这相当于一个人做了六名工程师的工作。

现在,让我们稍微思考一下这一点。我们并没有因此失业,朋友们,情况并非如此。这实际上是在赋能他的团队,让他们去做有趣、有趣味的事情,去做创造性的工作。这就是 AI 给予我和我团队的:我们可以专注于那些跳出框架的疯狂想法,而不必再处理繁琐的代码。我已经几个月没写过代码了,这发生在大约不到六个月前。当时我使用 AI 时发现:“你知道吗?这比我写代码好得多。”

我向团队宣布了这一发现。在一次组织会议上我说:“如果你们不用 AI 做任何事,那就太可惜了。它在写代码方面比我强 1000 倍。”红帽的一些顶级工程师确实挑了挑眉,从他们随后的评论中我能感觉到他们的反应是:“不可能吧。”我说是的。因此,是的,这使我们能够梦想更大。这也是我稍后展示我的安装程序 Kubernetes 部分的提醒。

当你在容器中运行时,备份和恢复是一个清晰的故事,因为状态是一样的卷。Docker 和 Podman 的另一个好处是它们有卷。因此,我所有的运行时状态都生活在一个整洁的 Podman 卷中。当然,Kubernetes 也有 PVC,这基本上就是我刚才谈论的内容。因此,这是我对于 OpenClaw 工作场所设置的愿景:你可能有一个精心策划的基线 OpenClaw,新员工只需获得基础配置。

这个基础配置包含什么?它包含你公司批准的 MCP 服务器列表、通过公司批准的认证,以及你团队特有的所有技能,也许还有对 Google Drive 的访问权限。就像你每天在工作中使用的所有这些东西。你可以将其复制并分发给你的整个团队,然后作为个人进行个性化设置。这就是这种设置所允许的。

另一种情况是,你是新员工,你坐在某人旁边,或者获取某人的仓库,然后自己把它们组装起来。因此,是的,团队标准、可移植的环境、可重复的入职流程。这就是我对于未来工作场所中 OpenClaw 的愿景。实际上,我最近创建了我的“永久爪”(forever claw)。在我帮助 OpenClaw 一个月并感觉自己都没有运行真正的 OpenClaw 后,我才意识到这一点。

我整天都在启动它、关闭它、测试它、构建它。每小时都有大约 100 个新的提交。所以我不断从主分支拉取。昨天我在 PyTorchCon 上,已经几天没有从主分支拉取了。当我这样做时,有时会有 10,000 个提交。没开玩笑,这太疯狂了。我说:“我不知道你们在做什么。慢点。”当然不是真的,我们不想慢下来。是的,这就是故事。我还有四分钟。我很兴奋,因为我现在可以切换到这里。

为了在这里运行这个本地安装程序,我想我这里有。是的。只是 npm run dev。我不喜欢的一点是,当我在 Mac 上时,我无法在容器中运行它。我想我可以,只是我没花时间弄清楚如何从容器中生成容器。如果你在 Linux 上,你可以这样做,因为 Linux 很棒。但在你的 Mac 上,这是不可能的,因为如果你不知道的话,当你在 Mac 上运行容器时,你是在虚拟机中运行。Docker 也是如此。容器只能在 Linux 上运行。所以当你运行容器时,你总是在虚拟机中运行。Docker 会设置一个,Mac 也会设置一个。所以当你想要从容器中生成另一个容器时,这就变得有点棘手了。

不管怎样,我们开始吧。如果我想运行一个本地实例,我现在有几个正在运行。谁知道演示之神在搞什么鬼呢。以防万一不行,我将启动 Joe。我设置 Pod 所做的全部工作就是给它起个名字。然后所有这些选项都非常有主见,因为我告诉你这正是我需要的。如果你喜欢,就用它。如果你想改变,那就提交一个 PR。酷。

端口通常是 89,这是默认值。但由于这是我在这台机器上运行的第二个实例,我必须将其增加到 99。我想在这里展示这些 Podman 秘密映射。你可以看到我已经设置了这些。它们就在我的系统上。它们就像环境变量,但不是环境变量,因为它们是包含在内的。这些是我的 API 密钥。

这个安装程序会发生什么?如果你在 Docker 上,这应该适用于 Docker。它到处都是 Podman 的痕迹,但我设计它也能与 Docker 一起工作。所以如果你在 Docker 上,它会获取环境变量。所以你想将这些导出为环境变量,并使它们成为 OpenClaw 的秘密引用。这是 OpenClaw 的一个非常酷的功能。一定要启用它。对于每个当前凭据,创建一个秘密引用。它创建了这种分离,即在 OpenClaw 内运行你的秘密,或者只是指向它的指针。这是正确的做法。

然后是提供商。我将从 Open Router 开始,因为我一直在玩 Gemma。Gemma 很棒。作为后备,我将使用 Anthropic。当然,为什么不呢?但是这里还有一些其他选择。如果你有本地端点并在运行自己的服务,你可以直接添加它。因为我工作中做可观测性,我想:“我要提供设置带有 Jaeger 的 Open Telemetry 收集器的选项。”它确实有效,而且很棒,但我不会测试它。所以让我们不要给我的系统增加负担。

另一个功能。还有多少时间?哦,我得快点。另一个功能是 SSH 沙箱,我们将在这里部署。OpenClaw 中的 SSH 沙箱非常酷。你给它 SSH 密钥和已知主机,让它去任何你想要的地方,它会在该工作区中运行所有命令。这真的很酷。看,我刚刚启动了一个……

Podman 容器。如果我查看实例,我现在有 Joe。这里有 Joe 的日志,即网关日志。我想向大家展示的命令是……别让我忘了。所以这里是 Podman 命令。如果你运行的是 Docker,那就是 Docker 命令。我是否用 Docker 测试过这个?没有。我有一个在 Docker 工作的朋友,他非常棒。他告诉我他会尝试一下,并确保它也能在 Docker 上正常工作。他还创建了一个非常酷的项目,叫做 Infer RS,该项目使用 Gemma 并运行得极快,还使用了 Turbo Quant。总之,那是 Eric。所以这是我的 Podman 命令,而他在这里。Joe。如果我只是输入“models”并执行“status”,人们常说启动 OpenClaw 很困难,但这只花了 2 秒钟,我一路都在喋喋不休。其实可能只需要 1 秒。所以我可以说“嘿”……

很酷的一点是,因为我说得太快,没时间展示了,但代理都已经设置好了。我有 Joe。哦,不是那个。等一下。我得去看看 Larry。Larry 我是用一个 MCP 服务器和一个子代理开始的,都是通过那个表单设置的。所以,让我回到 Joe。我想向大家展示切换模型是多么容易,以防你不知道这一点。我不确定 GPT-5,希望它知道这只是 GPT-5.4。不,我没有……不。不。不。我们得去看看 Larry。因为我没有为 Joe 设置额外的模型。好了。

总之,我没有足够的时间去讲解所有我想讲的内容,但是……很酷。另一件事是 Kubernetes。你可以用 Kubernetes 做同样的事情,同样容易。它现在连接到了我的 kind 集群。如果我过去,我也可以很容易地访问我的 Kubernetes 版本。那是 Carl,他正在 Kubernetes 上运行。我可以访问 OpenShift 上的一个。如果你连接到 OpenShift,它会切换到 OpenShift。所以,是的。有人要运行 OpenClaw 容器吗?没有?试试。好的,太棒了。好吧,很酷。非常感谢。有人在我之后演讲吗?你在等吗?好的,再见。[笑声] [掌声]