用 TypeScript 运行 Bash 命令?(简直是天才之作)

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00让 AI 智能体变得更强大的最简单方法之一,就是给它们
00:00:03访问 Bash 的权限,但这操作起来可能有点复杂。你需要真实的 Shell、文件系统、
00:00:09服务器和容器,总之需要大量的底层架构。至少以前是这样的。
00:00:13但如果我告诉你有一种更简单的方法呢?你其实可以直接使用 Typescript 实现的
00:00:18Bash 环境。听起来可能有点疯狂,但相信我,这超级酷,
00:00:22甚至还能帮你省钱。让我带你看看是怎么回事。
00:00:30这是一个名为 justbash 的新软件包,你可以在自述文件中看到,它被描述为“一个
00:00:34用 Typescript 编写的、带有内存虚拟文件系统的模拟 Bash 环境”。这是
00:00:38专门为需要安全、沙盒化 Bash 环境的 AI 智能体设计的。
00:00:42但在展示如何将其连接到 AI 智能体以增强其能力之前,
00:00:45我想先给你看一些非常简单的代码,让你了解一下它的运行原理。
00:00:48这里我通过 justbash 软件包启动了一个新的 Bash 环境,
00:00:53我们可以在其中运行 Bash 命令。这里我们调用 env.exec,
00:00:57运行 Bash 命令 echo hello,并将其保存到名为
00:01:01greeting.txt 的文件中。接下来的下一行,我在同一个环境中再次运行 exec,
00:01:06读取那个 greeting.txt 文件。你可以看到我们实际上可以打印出
00:01:10返回结果的标准输出、退出码以及环境变量。
00:01:14当我运行这段代码时,可以看到它成功写入了文件并读取了它。
00:01:18我们得到了退出码 0,还有模拟 Bash Shell 中的环境变量。
00:01:22但这里要记住的关键点是,正如我所说,这只是一个模拟的
00:01:26Bash Shell,它其实就是用 Typescript 重新实现的一套 Bash 命令。
00:01:30所以它并没有连接到任何真实的 Shell,只是单纯地将我们给出的命令
00:01:34转换成 Typescript 并运行。那个叫 greeting.txt 的文件
00:01:39也不存在于任何真实文件系统中,它其实是在内存里的虚拟文件系统,虽然你
00:01:44也可以选择连接到真实系统。理解它工作原理的一个简单方法是,
00:01:47它只是提取我们在 exec 函数中编写的 Bash 命令,
00:01:51并将其转换为一个 Javascript 函数来运行,这意味着它不需要
00:01:55真实的 Shell。我们可以在代码库中看到这一点。当我把 echo 放入
00:01:59exec 时,它实际上运行的是这个 Javascript 函数。我们可以看到这段逻辑
00:02:03只是在解析 Bash 中 echo 命令的各种参数,并将它们转换为 Javascript,
00:02:08然后直接打印出 echo 之后的内容。你可以看到
00:02:11它最后返回一个对象,包含标准输出的 Javascript 字符串、标准错误和退出码。
00:02:15如果你觉得它无法处理 Bash 的所有基础功能,你可以看看这个
00:02:19受支持命令的列表,它真的支持很多命令,比如 cat、copy、awk、
00:02:23base64,还有像 jq、python 3 和 sqlite 这样用于数据处理的高级工具,
00:02:27你甚至可以使用 curl 来运行网络请求。你可以设置白名单,
00:02:33所以它是非常安全的。下面还有 Shell 特性,比如管道、重定向、
00:02:36命令链,它真的提供了基础 Bash Shell 拥有的一切。
00:02:41所以你可以看到这个包非常酷,功能也很强大。但你可能还在
00:02:45纳闷,为什么需要用 Typescript 实现 Bash,以及这如何帮助你的智能体
00:02:48并为你省钱。为了回答这个问题,让我用一个非常简单的聊天应用展示它的一个用例。
00:02:53假设在这个聊天应用中,我想讨论这个 JSON 文件,
00:02:57这个文件包含大量记录,我想让 AI 检索其中的
00:03:02特定信息,或者对某些字段进行分析。你可以看到
00:03:06这是一个非常巨大的文件。实现这一目标最简单但绝对错误的方法之一,
00:03:11就是把整个文件的内容都塞进提示词里。这里
00:03:15我使用了 AI SDK 和 GPT 5.2。如果我们运行这个智能体
00:03:19并让它获取特定的记录,你可以看到助手会给出回复。
00:03:24我可以确认这是正确的,因为这些大模型非常擅长从
00:03:28超长上下文中检索数值。但问题是,这消耗了 133,000 个 Token。
00:03:33而且如果你问一些更高级的问题,比如进行数据操作
00:03:39或询问特定范围内的数据,这种方法就会开始失效。
00:03:43正如我所说,那显然是错误的做法。接下来你可能尝试过
00:03:48RAG 方法,甚至是给智能体一个沙盒,让它运行 Bash 命令
00:03:51来处理数据。但这些方法的缺点是,你需要大量的底层设施支持。
00:03:56相反,让我们用 justbash 来模拟这一切。要在 AI SDK 中实现这一点,
00:04:00你可以直接使用基于 justbash 构建的 bash-tool 包。
00:04:05它允许我们在聊天的 API 端点中创建一个新的 Bash 工具,
00:04:09传入任何我们想要放入模拟 Bash 环境的文件。在我的案例中,
00:04:13我传入了之前那个巨大的 JSON 文件,然后我也设置了
00:04:17这些文件的存放路径,它们会进入模拟的 /workspace 目录。
00:04:21之后,我们只需要在 AI SDK 的流处理中
00:04:26把 Bash 工具传进去就行。我也传了一些
00:04:31智能体指令,你可以在 node_modules 文件夹中找到。这些只是
00:04:34该软件包提供的简单指令,能帮助你的 AI 智能体理解如何使用
00:04:39这个 Bash 工具。现在,通过这种简单的设置,如果我们问助手
00:04:42完全相同的问题,即从 JSON 文件中获取一条信息,
00:04:46它不再使用自己的上下文去大海捞针,
00:04:50而是直接去运行一些 Bash 命令。同样,这是在我们的模拟 Typescript 环境中运行的。
00:04:54在这个例子中,它尝试运行 jq 命令但报错了,所以
00:04:58接着它运行了 head 命令来查看文件的实际格式,
00:05:02这样它就获取了正确的格式,修正了 jq 命令并给出了答案。
00:05:06虽然我们得到了相同的答案,而且可能耗时稍长了一点点,但关键点在于
00:05:10你可以看到它只用了 6,000 个输入 Token,而另一种方法用了
00:05:15133,000 个。这绝对是处理长上下文的一种更优方法。
00:05:19而且这还不是它唯一的优势。当你开始问一些
00:05:24更深入的数据问题时,它会变得更加强大。例如,如果我问
00:05:28在 1000 到 2500 之间有多少条记录的 metadata.active 为 true,
00:05:33它只需要运行一条 Bash 命令就能立即给出答案。如果你在
00:05:37另一个版本中尝试这样做,首先它会占用大量上下文,其次
00:05:41它很可能只是基于猜测给你一个错误的答案。而这种方法
00:05:45会准确得多,因为你本质上是在告诉智能体:“嘿,你可以完全访问 Bash Shell”,
00:05:49即使技术上它并没有。说实话,这真是一个简单且免费的增值功能,
00:05:53可以让你的智能体更强大,且不需要额外的基础设施。
00:05:57这就是我非常喜欢它的原因。希望我已经展示了它的其中一个用例,
00:06:01但相信我,还有更多用例。正如我们之前看到的,
00:06:05你可以运行基础的 Python、SQL 和 curl 命令,
00:06:10如果你愿意,你还可以将其连接到真实的文件系统。欢迎在评论区
00:06:14告诉我你对 justbash 的看法。顺便订阅一下,
00:06:18咱们下期视频见。

Key Takeaway

justbash 提供了一种无需真实服务器即可在 TypeScript 中运行 Bash 的天才方案,能显著降低 AI 成本并提升其数据处理的精确度。

Highlights

介绍一款名为 "justbash" 的新软件包,它是用 TypeScript 编写的模拟 Bash 环境。

核心原理是将 Bash 命令转换为 TypeScript 函数运行,并结合内存虚拟文件系统,无需真实 Shell。

相比传统的 RAG 或沙盒容器,justbash 不需要繁琐的底层基础设施,更加轻量且安全。

支持包括 cat、jq、python 3、sqlite 及 curl 等多种高级命令,功能覆盖全面。

通过 AI SDK 集成 bash-tool,显著降低了 AI 智能体在处理大型文件时的 Token 消耗(从 133k 降至 6k)。

增强了 AI 智能体在复杂数据操作和精确信息检索方面的可靠性,避免大模型“幻觉”。

Timeline

传统 Bash 环境的挑战与新方案

视频开篇指出了赋予 AI 智能体访问 Bash 权限的重要性,但这在过去通常意味着需要复杂的底层架构,如服务器和容器。演讲者提出了一种名为 justbash 的新方法,这是一款直接用 TypeScript 实现的模拟 Bash 环境。这种方法不仅能够简化开发流程,还能显著降低运行成本。它打破了传统上必须依赖真实操作系统 Shell 的局限。这为开发者提供了一个更轻量、更安全的 AI 增强方案。

justbash 的核心工作原理与演示

演讲者展示了 justbash 作为一个带有内存虚拟文件系统的模拟环境是如何工作的。通过代码演示,可以看到如何调用 env.exec 来运行 echo 命令并将结果保存到虚拟文件 greeting.txt 中。实际上,这个过程并未触及真实的文件系统,而是完全在内存中完成的。程序能够返回标准输出、退出码以及模拟的环境变量,展示了极高的还原度。这种模拟方式使得代码在任何支持 JavaScript 的环境下都能运行。

代码逻辑解析与支持的功能列表

这部分深入探讨了 justbash 的内部逻辑,即如何将输入的 Bash 字符串解析并映射到对应的 JavaScript 函数。例如,当用户输入 echo 时,后台实际上是在运行一段处理参数并返回对象的 TypeScript 代码。除了基础命令,它还支持 jq、python 3、sqlite 等高级工具,甚至支持网络请求 curl。它还完美复刻了管道符、重定向和命令链等 Shell 特性。通过设置白名单,开发者可以精确控制智能体能够执行的操作,确保了极高的安全性。

解决 AI 处理大型 JSON 文件的痛点

演讲者通过一个具体的聊天应用案例展示了 justbash 的实战价值。在处理一个巨大的 JSON 文件时,传统的做法是将整个内容塞进 Context 中,但这会造成巨大的 Token 浪费且容易失效。示例中显示,直接喂给 GPT-5.2 会消耗高达 133,000 个 Token。虽然 RAG 或真实沙盒是可选方案,但它们要么效率不高,要么架构太重。这时候引入模拟 Bash 工具就显得尤为明智。

集成 bash-tool 优化 Token 消耗与准确性

通过集成基于 justbash 构建的 bash-tool,AI 智能体可以像使用真实 Shell 一样操作数据。在这个演示中,智能体尝试运行 jq 报错后,能自动运行 head 命令查看文件格式并自我修正。最终,智能体给出了完全正确的答案,但 Token 消耗仅为 6,000 个,比之前的方法节省了约 95%。这种方法不仅极大地降低了费用,还缩短了上下文处理的负担。这证明了模拟环境在处理“大海捞针”式任务时的优越性。

高级数据查询与总结

演讲者进一步展示了更复杂的查询,如根据特定逻辑条件筛选记录,智能体通过一条 Bash 命令即可精准完成。相比之下,传统的上下文检索在面对复杂逻辑计算时往往会产生“幻觉”或给出猜测性的错误答案。justbash 让智能体拥有了逻辑执行能力,而不需要额外投资昂贵的基础设施。最后,视频总结了该工具在 Python、SQL 处理及网络请求方面的广泛用途。演讲者鼓励开发者订阅并尝试这一几乎“免费”的 AI 性能增值工具。

Community Posts

View all posts