Cloudflare Computer celld示例实战:Celld JavaScript运行时上的聊天Agent(完整教程)
2026/8/31 10:26:20 网站建设 项目流程

Cloudflare Computer celld示例实战:Celld JavaScript运行时上的聊天Agent(完整教程)

【免费下载链接】computerGive your agent a computer 👾项目地址: https://gitcode.com/GitHub_Trending/computer1/computer

Cloudflare Computer是一个把虚拟文件系统装进 Durable Object 的持久化工作区项目,口号就是 "Give your agent a computer 👾"。本文带你实战它的celld 示例:一个运行在 Celld JavaScript 运行时上的聊天 Agent——Agent 拥有持久化工作区(Workspace),能用 8 个文件工具读写自己的文件,还能在隔离的 Dynamic Worker 里执行 JavaScript 模块,全程只需一个终端就能跑起来。

为什么这个 celld 示例值得看

大多数 Agent 示例都依赖容器或重型运行时,而 celld 示例展示了一条"轻"路线:

  • 只依赖一个 Durable Object:聊天历史和工作区文件存在同一个 SQLite 数据库里,没有额外存储;
  • 不写 RPC 接口:Agent 通过 src/index.ts 中的withWorkspace混入直接获得工作区能力;
  • 终端即客户端:用 AI SDK TUI 做聊天界面,一条npm run chat命令进入对话。

注意:该示例是原型(Prototype),当前 celld 为 v0.1.0 级别,适合学习和实验。

celld 聊天 Agent 架构解析

整体数据流非常简单:

终端(npm run chat) │ AgentClient WebSocket ▼ /agents/celld-agent/<name> ▼ CelldAgent(AIChatAgent + withWorkspace) ├─ 聊天历史(SQLite) ├─ @cloudflare/computer Workspace(同一 SQLite) │ └─ read / ls / find / grep / write / edit / delete 工具 ├─ celld-javascript 运行时后端 │ └─ 当 env.LOADER 可用时提供 exec 工具 └─ Cloudflare Workers AI(REST API)

关键设计点:

  1. 单对象持久化CelldAgent同时是聊天对象和工作区宿主,--name每指定一个新名字,就多一个独立的 Agent 实例(独立历史 + 独立工作区);
  2. 工具由框架生成:src/index.ts 中onChatMessage()调用getWorkspace(this)拿到 Workspace,再传给createAITools()(源码见 packages/computer/src/tools/ai.ts),模型的工具循环自动获得全部文件工具;
  3. 执行后端可插拔:只有当 celld 注入了env.LOADER时才注册celld-javascript后端,实现见 src/celld-javascript-backend.ts。

快速上手:5步跑通聊天Agent

仓库地址:https://gitcode.com/GitHub_Trending/computer1/computer

第一步:安装 celld 并确保 PATH 可用

curl -fsSL https://celld.dev/install.sh | sh export PATH="$HOME/.local/bin:$PATH" celld --version

celld deploy还需要esbuild在 PATH 中,安装本仓库依赖后它就在node_modules/.bin里。

第二步:安装依赖并构建工作区包

工作区包通过dist目录解析,部署前必须先构建:

npm install npm run build --workspace @cloudflare/computer export PATH="$PWD/node_modules/.bin:$PATH"

第三步:配置 Cloudflare 凭据

celld 不提供托管的 Workers AI 绑定,Agent 直接用账户 ID + API Token 调 Workers AI REST API。创建具有 Workers AI 读权限的 API Token 后:

export CLOUDFLARE_ACCOUNT_ID=<account-id> export CLOUDFLARE_API_TOKEN=<api-token>

⚠️ Token 只放在本地环境变量里,不要写进 wrangler.jsonc 等被跟踪的文件。

第四步:启动本地服务

npm run dev:local --workspace @example/computer-celld

这一步(由 script/local-dev.mjs 驱动)会自动:启动本地 S3 兼容 shim(script/local-s3-shim.mjs)、部署 Worker、启用 celld Worker Loader 作为env.LOADER,并监听http://127.0.0.1:8080

第五步:打开终端聊天

另开一个终端:

npm run chat --workspace @example/computer-celld

想给 Agent 起独立身份:

npm run chat --workspace @example/computer-celld -- --name demo

聊天客户端是 cli/chat.mjs,支持--worker URL--name NAME--title TITLE三个参数,也可作为celld-chat命令使用。

聊天Agent能做什么:8个Workspace工具

Agent 通过@cloudflare/computer/tools自动获得这些工具:

工具用途
read读取工作区文件
ls列出目录
find按路径查找
grep搜索文件内容
write创建或替换文件
edit做定向替换修改
delete删除文件或目录
exec在 celld Dynamic Worker 中执行 ECMAScript 模块(仅当env.LOADER注入时存在)

这些工具直接操作CelldAgent拥有的 Workspace,因此文件操作是完整可用的。

exec 工具使用要点:只能跑完整模块

exec不是"跑一个文件名"或"跑一段脚本",它要求传入一个完整的 ECMAScript 模块源码,并且必须有默认导出。导出的函数会收到(input, ctx)两个参数,ctx里包含envcwdstdin

export default async function main(input, ctx) { console.log("cwd:", ctx.cwd); return { received: input }; }

两个新手常见的"坑"要知道:

  • 隔离区看不到文件系统ctx.cwd只是元数据,目录并未挂载进 Dynamic Worker,ctx.fs方法会直接抛错。需要文件操作时,用read/write等工具在exec外部完成;
  • 输出不是流式的:结果会缓冲到执行结束才返回,而非实时流式打印。

快速验证:一条命令的冒烟测试

不确定链路通没通?跑一下非交互的 WebSocket 冒烟测试:

npm run smoke --workspace @example/computer-celld

它会通过 Agents WebSocket 协议发一条消息,并要求回复里包含celld smoke reply(可用CELLD_PROMPT/CELLD_EXPECT自定义,实现见 script/smoke.mjs)。

文件导读

文件作用
examples/celld/README.md示例完整说明
examples/celld/src/index.ts聊天 Agent 与 Worker 入口
examples/celld/src/celld-javascript-backend.tscelld Worker Loader 运行时后端
examples/celld/cli/chat.mjsAI SDK 终端聊天客户端
examples/celld/wrangler.jsonccelld 支持的 Worker 配置(含 Durable Object 定义)
examples/celld/script/local-dev.mjs本地部署与启动脚本

总结

celld 示例用最小依赖演示了 Cloudflare Computer 的核心思想:SQLite 是文件系统的唯一真相源,执行运行时是可插拔的。把 Celld JavaScript 运行时接进来之后,一个聊天 Agent 就同时拥有了持久记忆(聊天历史)、持久工作区(文件工具)和隔离执行能力(exec)。如果你想对比其他运行时,可以继续看 examples/think-compare-runtimes/ 里"同一任务在多运行时并行对比"的示例。

【免费下载链接】computerGive your agent a computer 👾项目地址: https://gitcode.com/GitHub_Trending/computer1/computer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询