OpenClaw、Claude Code 等 Agent 为什么都选择 Node.js?
写给迷茫中的前端开发者:你不是落伍了,你正站在浪潮之巅。
别再秃头不妨静下心来看完,也许会对你的职业规划有新的启发。
作为js、TS、 nodejs、 golang、 python、 LLM大模型开发的多栖古法非遗手工代码技艺传承人的我给你娓娓道来(不要喷我😄)

作者:吴佳浩
撰稿时间:2026-3-16
最后更新:2026-3-17
目录
- [什么是 AI Coding Agent:从 Chatbot 到自主执行](#什么是 AI Coding Agent:从 Chatbot 到自主执行 "#1-%E4%BB%80%E4%B9%88%E6%98%AF-ai-coding-agent%E4%BB%8E-chatbot-%E5%88%B0%E8%87%AA%E4%B8%BB%E6%89%A7%E8%A1%8C")
- [OpenClaw 与 Claude Code 做什么------读懂真实的代码](#OpenClaw 与 Claude Code 做什么——读懂真实的代码 "#2-openclaw-%E4%B8%8E-claude-code-%E5%81%9A%E4%BB%80%E4%B9%88%E8%AF%BB%E6%87%82%E7%9C%9F%E5%AE%9E%E7%9A%84%E4%BB%A3%E7%A0%81")
- [为什么技术栈几乎一样------从 package.json 看起](#为什么技术栈几乎一样——从 package.json 看起 "#3-%E4%B8%BA%E4%BB%80%E4%B9%88%E6%8A%80%E6%9C%AF%E6%A0%88%E5%87%A0%E4%B9%8E%E4%B8%80%E6%A0%B7%E4%BB%8E-packagejson-%E7%9C%8B%E8%B5%B7")
- [Node.js 为什么成为 Agent 标配------五个技术层面的答案](#Node.js 为什么成为 Agent 标配——五个技术层面的答案 "#4-nodejs-%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%90%E4%B8%BA-agent-%E6%A0%87%E9%85%8D%E4%BA%94%E4%B8%AA%E6%8A%80%E6%9C%AF%E5%B1%82%E9%9D%A2%E7%9A%84%E7%AD%94%E6%A1%88")
- [Python 在 AI 系统中的位置------两者不是对手](#Python 在 AI 系统中的位置——两者不是对手 "#5-python-%E5%9C%A8-ai-%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E4%BD%8D%E7%BD%AE%E4%B8%A4%E8%80%85%E4%B8%8D%E6%98%AF%E5%AF%B9%E6%89%8B")
- [AI Agent 标准架构------拆解 OpenClaw 的完整设计](#AI Agent 标准架构——拆解 OpenClaw 的完整设计 "#6-ai-agent-%E6%A0%87%E5%87%86%E6%9E%B6%E6%9E%84%E6%8B%86%E8%A7%A3-openclaw-%E7%9A%84%E5%AE%8C%E6%95%B4%E8%AE%BE%E8%AE%A1")
- 给前端开发者的话
- 参考资料
1. 什么是 AI Coding Agent:从 Chatbot 到自主执行
在搞清楚技术栈之前,我们先得明白一件事------AI Agent 和 Chatbot 到底有什么本质区别?
1.1 Chatbot:一问一答,无状态
传统 Chatbot 的工作模式极其简单,每一次对话都是独立的------LLM 不记得上一次说了什么(除非你把历史塞进 prompt),更不会主动去"做事"。
1.2 AI Agent:持续循环,主动执行
AI Agent 的工作模式是一个持续的 ReAct 循环(Reason + Act):
关键差异在于三点:
| 维度 | Chatbot | AI Agent |
|---|---|---|
| 执行模式 | 一次性响应 | 持续循环(ReAct Loop) |
| 状态管理 | 无状态(或短期对话) | 长期记忆 + 跨会话状态 |
| 行动能力 | 只输出文字 | 真实调用工具、操作系统 |
| 自主性 | 被动响应 | 主动规划、分解、执行 |
1.3 工具调用(Function Calling)是 Agent 的神经系统
现代 LLM 支持"工具调用"(Function Calling / Tool Use),这是 Agent 能够"行动"的核心机制。其原理是:
- 开发者预先定义一组工具的 JSON Schema(描述工具名称、参数类型)
- LLM 在推理时,如果判断需要使用工具,会输出一段结构化的 JSON,而非普通文字
- 宿主程序(Agent 框架)解析这段 JSON,调用真实的函数
- 将函数执行结果作为
tool_result再次输入 LLM,继续推理
这个循环可以执行数十次,直到任务完成。这正是 AI Agent 能够自主完成复杂任务的底层原理。
2. OpenClaw 与 Claude Code 做什么------读懂真实的代码
2.1 OpenClaw:3 个月从周末项目到 317k Star
OpenClaw 的历史本身就是一个传奇。这个项目由奥地利程序员 Peter Steinberger(PSPDFKit 作者)在 2025 年 11 月作为周末项目发布,最初叫 Clawdbot ,后因与 Anthropic 商标冲突改名 Moltbot ,三天后再改为 OpenClaw。
OpenClaw 是一款免费开源的自主 AI 代理,可通过大语言模型执行任务,以消息平台作为主要用户界面。
截止 2026 年 3 月,仓库已有 317,000+ Star,59,000+ Fork,18,372 次提交 ,ClawHub 社区技能仓库已收录超过 13,729 个社区技能。
它的核心定位:一个"真正能做事的 AI"------不只是回答问题,而是通过消息应用(txxxxxxm(掘金不让出现境外软件名称)、WhatsApp、Slack、Discord 等)作为界面,在你的本地机器上自主执行任务。
真实的 package.json(来自官方仓库)
这是 OpenClaw 仓库根目录的 package.json 关键字段,直接揭示了整个项目的技术选型:
json
{
"name": "openclaw",
"version": "2026.3.13",
"description": "Multi-channel AI gateway with extensible messaging integrations",
"license": "MIT",
"bin": {
"openclaw": "openclaw.mjs"
},
"type": "module",
"main": "dist/index.js",
"exports": {
".": "./dist/index.js",
"./plugin-sdk": {
"types": "./dist/plugin-sdk/index.d.ts",
"default": "./dist/plugin-sdk/index.js"
},
"./plugin-sdk/txxxxxxm(掘金不让出现境外软件名称)": "...",
"./plugin-sdk/discord": "...",
"./plugin-sdk/memory-core": "..."
}
}
几个关键信息一目了然:
"type": "module"--- 全面拥抱 ES Modules,使用最现代的 Node.js 模块系统"bin": { "openclaw": "openclaw.mjs" }--- 入口文件是.mjs,原生 ESM 格式./plugin-sdk/txxxxxxm(掘金不让出现境外软件名称)、./plugin-sdk/discord--- 多通道支持通过**子路径导出(subpath exports)**实现,而不是巨石应用- 版本号采用 CalVer(日历版本) :
2026.3.12代表 2026 年 3 月 17 日,发布节奏极快
仓库目录结构(官方,截自 GitHub)
bash
openclaw/
├── src/
│ ├── gateway/ # 核心:WebSocket RPC 网关
│ │ ├── server.ts # GatewayServer 主入口
│ │ ├── server-methods.ts # 所有 RPC 方法注册
│ │ ├── method-scopes.ts # 权限范围控制
│ │ └── protocol/ # 协议 Schema 定义
│ │ ├── schema.ts
│ │ └── schema/
│ │ ├── protocol-schemas.ts
│ │ └── types.ts
│ ├── agents/ # Agent 执行引擎
│ │ ├── tool-catalog.ts # 工具目录管理
│ │ ├── tool-policy.ts # 工具权限策略
│ │ └── tools/
│ │ └── gateway-tool.ts
│ └── discord/ # Discord 频道集成(已内置)
├── extensions/ # 插件扩展目录
│ ├── discord/ # Discord 插件
│ ├── memory-lancedb/ # LanceDB 向量记忆后端
│ ├── diagnostics-otel/ # OpenTelemetry 监控
│ └── nostr/ # Nostr 协议支持
├── skills/ # 内置技能包
│ ├── github/ # GitHub 操作
│ ├── notion/ # Notion 集成
│ ├── slack/ # Slack 操作
│ ├── coding-agent/ # 编程子 Agent
│ ├── obsidian/ # Obsidian 知识库
│ └── ...(50+ 内置技能)
├── ui/ # Control UI 前端(React + Vite)
├── apps/
│ ├── ios/ # iOS 原生客户端(Swift + XcodeGen)
│ ├── macos/ # macOS 原生客户端(Swift)
│ └── android/ # Android 原生客户端(Kotlin + Gradle)
├── docs/ # 官方文档
└── package.json # 主包(CalVer 版本)
注意 :这已经不只是一个命令行工具,而是包含 iOS、macOS、Android 原生客户端的全平台 AI Agent 基础设施。
2.2 OpenClaw 的心脏:Gateway 是一个 WebSocket RPC 服务器
根据 DeepWiki 对官方源码 src/gateway/server.ts 的分析,OpenClaw 的核心架构基于 WebSocket RPC 协议(Protocol Version 3):
这个架构的精髓在于:Gateway 是唯一的控制平面,所有客户端(无论是原生 App 还是浏览器 UI)都通过 WebSocket RPC 与它通信。这种设计让 OpenClaw 能够支持全平台,同时保持单一的业务逻辑中心。
2.3 SKILL.md:真实的技能定义格式
这是 OpenClaw 官方文档(docs/tools/creating-skills.md)给出的最小技能定义格式:
markdown
---
name: hello_world
description: A simple skill that says hello.
---
# Hello World Skill
When the user asks for a greeting, use the `echo` tool to say
"Hello from your custom skill!".
而 ClawHub 官方文档(clawhub/docs/skill-format.md)给出了完整的带依赖声明的格式:
yaml
---
name: todoist-cli
description: "Manage Todoist tasks, projects, and labels from the command line."
version: 1.2.0
metadata:
openclaw:
requires:
env:
- TODOIST_API_KEY # 声明需要的环境变量
bins:
- curl # 声明需要的二进制工具
primaryEnv: TODOIST_API_KEY
homepage: https://github.com/example/todoist-cli
---
# Todoist CLI Skill
When the user asks to manage tasks, use the todoist CLI tool...
## When to Use
- Creating new tasks
- Listing projects
- Setting due dates
这个设计有多巧妙?
- YAML frontmatter 声明元数据:版本、依赖的环境变量、需要的 CLI 工具
- Markdown body 是给 LLM 读的指令:何时使用、如何使用
- ClawHub 的安全分析系统会自动检查 frontmatter 声明与实际代码行为是否一致,防止恶意技能隐藏依赖
技能的加载优先级(来自官方文档 docs/tools/skills.md):
这套 SKILL.md 格式已经成为业内标准,Vercel Labs 发布的
npx skills工具明确支持 OpenClaw、Claude Code、Amp 等多种 Agent 使用同一套 SKILL.md 格式。
2.4 插件扩展系统:基于 npm 子路径导出
OpenClaw 的插件系统基于 npm 子路径导出(subpath exports),这是一个非常优雅的 TypeScript 设计:
typescript
// 插件开发者这样导入 SDK
import { createChannelPlugin } from 'openclaw/plugin-sdk'
import { txxxxxxm(掘金不让出现境外软件名称)BasePlugin } from 'openclaw/plugin-sdk/txxxxxxm(掘金不让出现境外软件名称)'
import { MemoryCorePlugin } from 'openclaw/plugin-sdk/memory-core'
// 每个 extension 的 package.json 声明入口点
{
"name": "@openclaw/extension-nostr",
"openclaw": {
"extensions": ["./dist/index.js"]
}
}
官方内置插件类型(来自 extensions/ 目录真实文件):
| 插件 | 类型 | 说明 |
|---|---|---|
extensions/discord |
通道插件 | Discord 集成 |
extensions/memory-lancedb |
记忆后端 | LanceDB 向量数据库 |
extensions/diagnostics-otel |
可观测性 | OpenTelemetry 监控 |
extensions/nostr |
通道插件 | Nostr 去中心化协议 |
extensions/bluebubbles |
通道插件 | iMessage 代理 |
2.5 Claude Code:Anthropic 官方 CLI Agent
Claude Code 和 OpenClaw 是同时代的产物,但定位完全不同------它专注于终端内的编程协作,而不是消息平台集成。
Claude Code 最令人称道的技术细节:约 90% 的代码由 Claude 模型自身编写。Anthropic 工程师之所以选择 TypeScript,正是因为在所有编程语言中,Claude 写 TypeScript 的准确率最高------这是训练数据中 JS/TS 占比极高的结果,一种"语言母语效应"。
3. 为什么技术栈几乎一样------从 package.json 看起
现在我们来看两个项目的技术栈对比,数据全部来自官方仓库:
| 维度 | OpenClaw | Claude Code |
|---|---|---|
| 版本号 | 2026.3.12(CalVer) |
npm: @anthropic-ai/claude-code |
| 运行时 | Node.js(ESM,"type":"module") |
Node.js |
| 核心语言 | TypeScript(316,330 行) | TypeScript(约 90% 由 AI 编写) |
| 包管理 | pnpm(monorepo,pnpm-workspace.yaml) |
npm |
| 构建工具 | tsdown(新一代 TS bundler) |
--- |
| 前端 UI | React + Vite(ui/ 目录) |
--- |
| 原生客户端 | iOS/macOS(Swift)+ Android(Kotlin) | --- |
| 插件系统 | npm 子路径导出 + extensions/ 目录 |
内置工具集 |
| 技能系统 | SKILL.md(Markdown + YAML frontmatter) | SKILL.md(同一套标准) |
| 分发方式 | npm install -g openclaw |
npm install -g @anthropic-ai/claude-code |
技术栈高度一致不是巧合。下一章我们深入分析为什么。
4. Node.js 为什么成为 Agent 标配------五个技术层面的答案
4.1 事件循环与 Agent 推理循环的结构同构
Node.js 的事件循环(Event Loop)和 AI Agent 的 ReAct 循环,在结构上是高度同构的:
这个对应关系不是比喻,而是真实的技术映射:
- Agent 等待 LLM 响应 = Node.js 等待网络 I/O(都是异步非阻塞)
- Agent 接收 tool_use 指令 = Node.js 处理事件回调
- Agent 流式接收 LLM 输出 = Node.js Stream API(完美契合)
- Agent 同时维护多个通道连接 = Node.js 事件循环天生支持高并发长连接
OpenClaw 同时维护 txxxxxxm(掘金不让出现境外软件名称)、Discord、WhatsApp 等多条 WebSocket 长连接,对 Python 的 asyncio 是巨大挑战,对 Node.js 是家常便饭。
4.2 流式输出(Streaming)的原生支持
所有现代 LLM 都支持流式返回(SSE/Server-Sent Events),这让用户不必等待整个回答生成完才看到内容。在 Node.js 中,这与内置的 ReadableStream、pipeline 完美集成:
typescript
// Node.js 处理 Anthropic 流式响应的典型代码
import Anthropic from '@anthropic-ai/sdk'
const client = new Anthropic()
// stream() 返回一个 AsyncIterable,Node.js 原生支持
const stream = await client.messages.stream({
model: 'claude-sonnet-4-6',
max_tokens: 1024,
messages: [{ role: 'user', content: '分析这段代码' }],
})
// for await...of 遍历流式 token
for await (const chunk of stream) {
if (chunk.type === 'content_block_delta') {
process.stdout.write(chunk.delta.text)
}
}
// 工具调用处理
const finalMessage = await stream.finalMessage()
if (finalMessage.stop_reason === 'tool_use') {
const toolUse = finalMessage.content.find(c => c.type === 'tool_use')
// 调用真实工具,将结果反馈给 LLM
}
for await...of 是 ES2018 的原生语法,Node.js 14+ 全部支持。这正是 TypeScript/JavaScript 在 Agent 开发中的"主场"。
4.3 npm 生态对消息平台的覆盖是决定性优势
OpenClaw 能在数周内集成 50+ 消息平台,根本原因是 npm 生态中存在高质量的官方和社区 SDK:
Python 在这些企业通讯平台的 SDK 支持上存在明显空白------绝大多数官方 SDK 都优先支持 Node.js,Python 版本要么是社区维护,要么功能不完整。
4.4 TypeScript 是 LLM 的"母语"
这是一个有趣的自我强化循环:
OpenClaw 的工具调用 Schema(Function Calling)本质上是一段 TypeScript 类型定义的 JSON 序列化版本:
typescript
// OpenClaw 的工具定义(TypeScript 类型安全)
interface ToolDefinition {
name: string
description: string
input_schema: {
type: 'object'
properties: Record<string, {
type: string
description: string
}>
required: string[]
}
}
// 一个真实的工具定义示例(bash 执行)
const bashTool: ToolDefinition = {
name: 'bash',
description: 'Execute a shell command and return stdout/stderr',
input_schema: {
type: 'object',
properties: {
command: {
type: 'string',
description: 'The shell command to execute'
},
timeout: {
type: 'number',
description: 'Timeout in milliseconds (default: 30000)'
}
},
required: ['command']
}
}
TypeScript 的静态类型系统让这类 Schema 定义在编写时就能检查错误,而不是等到运行时才崩溃。这对 Agent 这种"工具调用密集型"应用尤为重要。
4.5 ES Modules + 动态 import = 热插拔插件系统
OpenClaw 的插件系统能够在不重启 Gateway 的情况下加载新扩展,依赖的正是 Node.js ESM 的 import() 动态导入。
插件加载流程如下:
Node.js 16+ 对 import() 的支持是生产级别的,这让 OpenClaw 实现了真正的"插件热加载"------安装新技能无需重启服务。
typescript
// 来自 OpenClaw 插件加载逻辑(基于 DeepWiki 对源码的分析)
async function loadExtensions(extensionsDir: string) {
const entries = await fs.readdir(extensionsDir)
for (const entry of entries) {
const pkgPath = path.join(extensionsDir, entry, 'package.json')
const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf-8'))
// 检查是否声明了 openclaw.extensions 字段
if (pkg.openclaw?.extensions) {
for (const entryPoint of pkg.openclaw.extensions) {
// 动态 import:ESM 原生支持,无需重启
const module = await import(path.join(extensionsDir, entry, entryPoint))
module.register(gateway) // 向 Gateway 注册扩展
}
}
}
}
5. Python 在 AI 系统中的位置------两者不是对手
澄清一个常见误解:Node.js 在 Agent 领域的兴起,不代表 Python 在 AI 系统中退场。
5.1 两者的能力边界清晰
OpenClaw 本身就体现了这种分工。注意 extensions/memory-lancedb:
json
// extensions/memory-lancedb/package.json(官方仓库真实文件)
{
"name": "@openclaw/extension-memory-lancedb",
"openclaw": {
"extensions": ["./dist/index.ts"]
},
"dependencies": {
"vectordb": "^0.4.0"
}
}
LanceDB 是一个 Rust 编写、提供 Node.js 绑定的本地向量数据库。这里 Node.js 通过 Native Binding 调用了 Rust 的高性能计算能力------三层技术栈协作:TypeScript 编排 → Rust 计算 → 向量存储。
5.2 LangChain:Python 生态的 Agent 框架标杆
如果你想深入理解 Python 侧的 Agent 框架,推荐阅读以下两篇原创文章(作者:吴佳浩 Alben):
- LangChain v1.0+ 浅出 --- 从零上手 LangChain,理解 AI Agent 编排框架的设计思想
- LangChain v1.0+ 深入 --- 深入 Chain、Agent、Memory、Tool 的底层实现原理
LangChain 之于 Python,类似于 OpenClaw 之于 Node.js------但两者的侧重点不同:LangChain 更强调 AI 计算管道的编排,OpenClaw 更强调多通道消息集成和用户交互界面。两者在架构上是互补的,不是竞争的。
5.3 现实世界的分工模式
6. AI Agent 标准架构------拆解 OpenClaw 的完整设计
基于 DeepWiki 对 OpenClaw 官方源码(commit 17eaa59a)的分析,以及官方文档,我们可以还原出 2026 年 AI Agent 的标准架构。
6.1 完整系统架构图
6.2 SOUL.md:Agent 的人格系统
这是 OpenClaw 最独特的设计之一------SOUL.md。它是 Agent 的"人格定义文件",存储在本地 Markdown 中,完全可读、可版本控制:
markdown
# My Assistant's Soul
## Identity
You are a personal AI assistant running locally on this machine.
Your owner is [name]. You help with coding, research, and daily tasks.
## Personality
- Concise and direct in responses
- Proactive about suggesting better approaches
- Honest about limitations
## Long-term Memory
- Owner prefers TypeScript over JavaScript
- Preferred editor: Neovim
- Current project: Building an e-commerce platform with Next.js
## Behavioral Rules
- Always ask before deleting files
- Never send messages to external services without confirmation
- Keep responses under 200 words unless asked for detail
SOUL.md 在每次对话开始时被注入到 System Prompt,让 Agent 记住"自己是谁"和"用户的偏好"。这不是向量数据库,不是复杂的 Embedding 管道------就是一个 Markdown 文件。
这个设计的哲学是:对于个人 AI 助手,人类可读性 > 技术复杂性。你随时可以打开文件夹检查你的 Agent 记住了什么。
6.3 Context Compaction:上下文压缩
Agent 的长期运行面临一个根本性问题:LLM 的 context window 是有限的(即使 Claude 支持 200K tokens,也会用满)。OpenClaw 在 src/agents/ 中实现了 Context Compaction(上下文压缩)机制:
从 2026.3.12 的 changelog 中可以看到这个机制的细节:
"Agents/context-engine plugins: bootstrap runtime plugins once at embedded-run, compaction, and subagent boundaries so plugin-provided context engines and hooks load from the active workspace before runtime resolution."
这说明上下文压缩(compaction)是 Agent 生命周期中的一个关键边界点,甚至有专门的 plugin hook。
6.4 ACP:Agent 间通信协议
OpenClaw 2026 版本引入了 ACP(Agent Communication Protocol),允许多个 Agent 之间通信和协作:
从 2026.3.12 的 changelog 可以看到 ACP 的最新进展:
"ACP/Provenance: add optional ACP ingress provenance metadata and visible receipt injection so OpenClaw agents can retain and report ACP-origin context with session trace IDs."
这说明 ACP 已经支持来源证明(Provenance)------每条 Agent 间消息都可以附带追踪 ID,让你知道这个动作是哪个 Agent 触发的。这对多 Agent 系统的调试和审计至关重要。
6.5 安全边界:一个现实主义的设计
OpenClaw 的安全设计值得单独讲解,因为它揭示了 Agent 系统的根本性安全挑战。
从官方安全公告(GHSA-xw4p-pw82-hqr7)我们看到一个真实漏洞:
"在受影响的版本中,OpenClaw 的沙箱技能镜像使用技能的 frontmatter name 字段作为目标路径的一部分。一个包含路径穿越段(如
../)的精心构造的技能名称,可能导致文件被写入沙箱工作区之外。"
这个漏洞揭示了 Agent 系统的核心安全问题:Agent 拥有的权限太大了------访问文件系统、执行 Shell 命令、发送消息。任何一个环节的注入攻击都可能导致严重后果。
OpenClaw 的一位维护者 Shadow 在 Discord 上的告诫非常直接:"如果你不理解如何运行命令行,这个项目对你来说太危险了。"
这不是在劝退用户,而是在告诉所有 Agent 开发者:具身 AI(Embodied AI)的安全边界是当前最重要的工程问题之一。
7. 给前端开发者的话
如果你是一名前端开发者,你可能正在经历这样的焦虑:
- AI 会不会让我失业?
- 我要不要转型学 Python / Rust?
- 前端还有未来吗?
我想用一句话回答:你选对了赛道,只是还不知道而已。
7.1 你的技能树就是 Agent 开发的技能树
不信?我们来逐项对比:
不需要从零开始。你需要的只是一次认知升级:
从"写组件"到"写 Agent",本质是一样的------你在编排异步事件。只不过现在,事件处理函数里多了一个会思考的 LLM。
7.2 前端优势在 Agent 时代反而更珍贵
- 你懂流式 UI --- LLM 逐字输出需要实时渲染,这是前端的主场,后端工程师往往做不好
- 你懂用户体验 --- Agent 最终服务于人,"好用"比"能用"更难,这是前端的核心竞争力
- 你懂 TypeScript --- LLM 的母语,写 Tool Schema 和 Plugin SDK 手到擒来
- 你懂异步编程 --- Agent 工具调用链就是更复杂的 Promise 链,你已经熟悉这个思维模式
- 你懂 npm 生态 --- 看完本文,你应该意识到你已经用过很多 Agent 必需的 SDK
7.3 三步进入 Agent 时代
第一步:安装 Claude Code,用它完成一个真实项目
不要把它当成 Copilot。给它一个真实的任务,比如"重构这个组件,提取出通用 hooks,写单元测试"。观察它如何规划、执行、处理错误。这是最快理解 Agent 工作原理的方式。
第二步:安装 OpenClaw,接入一个消息平台
第三步:写一个最小 AI Agent
typescript
// 最小 AI Agent:约 70 行 TypeScript
import Anthropic from '@anthropic-ai/sdk'
import { execSync } from 'child_process'
import * as readline from 'readline'
const client = new Anthropic()
const tools = [{
name: 'bash',
description: 'Execute a shell command',
input_schema: {
type: 'object' as const,
properties: {
command: { type: 'string', description: 'Shell command to run' }
},
required: ['command']
}
}]
async function runAgent(userMessage: string) {
const messages: Anthropic.MessageParam[] = [
{ role: 'user', content: userMessage }
]
while (true) {
const response = await client.messages.create({
model: 'claude-sonnet-4-6',
max_tokens: 4096,
tools,
messages
})
// 将 assistant 回复加入历史
messages.push({ role: 'assistant', content: response.content })
if (response.stop_reason === 'end_turn') {
const text = response.content.find(c => c.type === 'text')
console.log('\nAgent:', text?.text)
break
}
if (response.stop_reason === 'tool_use') {
const toolResults: Anthropic.ToolResultBlockParam[] = []
for (const block of response.content) {
if (block.type === 'tool_use' && block.name === 'bash') {
console.log(`\n[执行命令]: ${block.input.command}`)
try {
const result = execSync(block.input.command as string, { encoding: 'utf-8' })
toolResults.push({ type: 'tool_result', tool_use_id: block.id, content: result })
} catch (e: any) {
toolResults.push({ type: 'tool_result', tool_use_id: block.id, content: e.message, is_error: true })
}
}
}
// 将工具结果反馈给 LLM,继续推理
messages.push({ role: 'user', content: toolResults })
}
}
}
const rl = readline.createInterface({ input: process.stdin, output: process.stdout })
rl.question('你想让 Agent 做什么? ', async (input) => {
await runAgent(input)
rl.close()
})
这 70 行代码,就是 OpenClaw 和 Claude Code 的最小化本质。剩下的 316,000 行 TypeScript,是这个核心循环的工程化、多平台化、安全加固、插件系统。
这个行业正在经历的变革,不是前端工程师的末日,而是前端技能的升华。
OpenClaw 317,000 Star 的背后,是 TypeScript、Node.js、React、WebSocket、npm 生态------这些你每天都在用的东西。
时代的浪潮不是来淹没你的,是来托举你的。
参考资料
官方仓库(本文所有技术细节的第一手来源)
-
--- 官方仓库(317k Star,MIT License)
package.json--- 版本2026.3.12,完整技术栈src/gateway/server.ts--- Gateway WebSocket RPC 核心src/agents/tool-catalog.ts--- 工具目录管理docs/tools/creating-skills.md--- 技能创建官方文档
-
--- 社区技能注册表(TanStack Start + Convex)
docs/skill-format.md--- SKILL.md 完整格式规范
-
vercel-labs/skills --- AgentSkills 标准格式(跨框架 SKILL.md 标准)
-
DeepWiki: openclaw/openclaw --- 基于官方源码自动生成的架构文档
深度阅读(作者:吴佳浩 Alben 原创作品)
以下两篇文章深入讲解了 Python 侧的 AI Agent 框架 LangChain,是理解完整 AI Agent 生态不可缺少的参考:
- LangChain v1.0+ 浅出 --- 从零上手 LangChain,理解 AI Agent 编排框架的核心设计思想
- LangChain v1.0+ 深入 --- 深入 Chain、Agent、Memory、Tool 的底层实现与源码分析
本文写于 2026 年 3 月。所有技术细节均有官方来源注释,架构图基于官方文档和源码非遗手工分析绘制。
OpenClaw 仍在快速迭代(最新版本 2026.3.13),具体你阅读到什么日期什么版本你自己去看 我虽然略懂周易 但是你得付费 😄。 哦对了 下一篇 大家希望我写点什么呢 给我留言吧!!!!!!