OpenClaw06_Gatway解析

针对中文版本openClaw进行源码阅读,当前项目针对openClaw安装中的gateway源码进行分析

文章目录



1-参考地址


2-知识整理

  • 1)setupCommand (基础设置)
  • 2)onboardCommand (完整向导流程)

3-Gateway源码梳理


1. 整体架构

基础设施层

业务逻辑层

网关核心层

协议层

客户端层

CLI 客户端

Web UI

移动端 App

WebSocket 协议

HTTP API

Gateway Server
server.impl.ts

认证模块
auth.ts

消息路由器
server-ws-runtime.ts

方法处理器
server-methods/

通道管理
server-channels.ts

节点注册
node-registry.ts

插件系统
server-plugins.ts

定时任务
server-cron.ts

技能管理
skills/

配置管理
config/

日志系统
logging/

运行时环境
runtime.ts

架构说明

客户端层

  • 支持多种客户端接入方式:CLI、Web UI、移动端 App

协议层

  • WebSocket:实时双向通信
  • HTTP API:兼容 OpenAI/OpenResponses 的 RESTful API

网关核心层

  • server.impl.ts - 网关服务器主实现
  • auth.ts - 认证和授权
  • server-ws-runtime.ts - WebSocket 连接管理
  • server-methods/ - 各种 RPC 方法实现

业务逻辑层

  • 通道管理:统一管理 WhatsApp、Telegram、Discord 等通信通道
  • 节点注册:分布式节点的注册和发现
  • 插件系统:动态加载和管理插件
  • 定时任务:Cron 作业调度
  • 技能管理:AI 助手技能的加载和执行

基础设施层

  • 配置管理:配置文件加载、验证、热重载
  • 日志系统:结构化日志记录
  • 运行时环境:运行时状态管理

2. 启动流程

无效

有效

未配置

已配置

非 loopback 无认证

认证有效

端口被占用且 --force

端口可用

WebSocket 消息

HTTP 请求

定时事件

节点事件

收到关闭信号

开始: openclaw-cn gateway run

加载环境变量
.env

加载配置文件
loadConfig

配置验证

抛出配置错误

检查模式

要求运行 setup
或设置 mode=local

解析认证配置
resolveGatewayAuth

认证检查

拒绝启动
要求配置认证

解析端口配置
默认 18789

端口检查

强制终止占用进程

启动网关服务器
startGatewayServer

初始化运行时环境

迁移工作区目录

迁移旧版配置

加载插件系统
loadGatewayPlugins

创建运行时状态
createGatewayRuntimeState

启动 HTTP/WebSocket 服务器

初始化通道管理器
createChannelManager

初始化节点注册表
NodeRegistry

启动设备发现服务
mDNS/Bonjour

启动定时任务服务
buildGatewayCronService

初始化技能监控
ensureSkillsWatcher

启动侧边车服务
浏览器控制等

附加 WebSocket 处理器
attachGatewayWsHandlers

启动配置热重载
startGatewayConfigReloader

记录启动日志
logGatewayStartup

网关运行中

处理消息循环

处理 WS 请求

处理 HTTP API

执行定时任务

处理节点通信

清理资源
close

结束

启动流程关键步骤说明

1. 环境准备 (src/index.ts)
  • 加载 .env 环境变量
  • 标准化环境变量
  • 确保 Clawdbot CLI 在 PATH 中
  • 启用控制台捕获
2. CLI 命令解析 (src/cli/gateway-cli/run.ts)
// 关键步骤
async function runGatewayCommand(opts: GatewayRunOpts) {
  // 环境和日志配置
  setConsoleTimestampPrefix(true);
  setVerbose(Boolean(opts.verbose));

  // 端口解析和验证
  const port = portOverride ?? resolveGatewayPort(cfg);

  // 认证配置
  const resolvedAuth = resolveGatewayAuth({...});

  // 启动网关服务
  await runGatewayLoop({
    runtime: defaultRuntime,
    start: async () => await startGatewayServer(port, {...}),
  });
}
3. 网关服务器启动 (src/gateway/server.impl.ts)
  • 环境准备:迁移工作区、加载配置
  • 插件加载:扫描并加载所有插件
  • 运行时状态创建:初始化 HTTP/WebSocket 服务器
  • 核心组件初始化:通道管理、节点注册、定时任务
  • 设备发现:启动 mDNS/Bonjour 服务
  • WebSocket 处理器附加:连接认证、消息路由

3. 消息处理流程

事件广播 业务逻辑 方法处理器 消息路由器 认证模块 WebSocket 层 客户端 事件广播 业务逻辑 方法处理器 消息路由器 认证模块 WebSocket 层 客户端 alt [认证失败] [认证成功] alt [方法不存在] [方法存在] 支持的方法: agent, chat, channels, config, sessions, skills, cron, nodes, health, system 等 建立连接 验证认证信息 返回认证错误 HelloOk 消息 发送请求 (RequestFrame) 路由到对应处理器 查找方法处理器 返回方法未找到错误 执行业务逻辑 触发事件 广播事件 返回结果 返回响应 (ResponseFrame)

消息协议定义

请求帧 (RequestFrame)
type RequestFrame = {
  type: "req";
  id: string;           // 请求唯一标识
  method: string;       // 方法名,如 "agent.create", "chat.send"
  params?: unknown;     // 方法参数
};
响应帧 (ResponseFrame)
type ResponseFrame = {
  type: "resp" | "error";
  id: string;           // 对应的请求 ID
  result?: unknown;     // 成功时的结果
  error?: ErrorShape;   // 失败时的错误信息
};
事件帧 (EventFrame)
type EventFrame = {
  type: "event";
  event: string;        // 事件名,如 "heartbeat", "agent", "skills"
  payload: unknown;     // 事件数据
};

4. 核心代码逻辑分析

4.1 主入口逻辑

核心文件: src/gateway/server.impl.ts

启动流程关键代码
// 1. 环境准备 (L204-212)
process.env.OPENCLAW_GATEWAY_PORT = String(port);
await migrateWorkspaceIfNeeded();

// 2. 配置加载与验证 (L224-279)
let configSnapshot = await readConfigFileSnapshot();
const autoEnable = applyPluginAutoEnable({
  config: configSnapshot.config,
  env: process.env
});
const cfgAtStart = loadConfig();

// 3. 插件系统初始化 (L299-305)
const { pluginRegistry, gatewayMethods: baseGatewayMethods } = loadGatewayPlugins({
  cfg: cfgAtStart,
  workspaceDir: defaultWorkspaceDir,
  log,
  coreGatewayHandlers,
  baseMethods,
});

// 4. 运行时状态创建 (L366-403)
const {
  canvasHost,
  httpServer,
  wss,
  clients,
  broadcast,
  agentRunSeq,
  dedupe,
  chatRunState,
  // ...更多状态
} = await createGatewayRuntimeState({...});

// 5. 核心组件初始化 (L407-454)
const nodeRegistry = new NodeRegistry();
const channelManager = createChannelManager({...});
let cronState = buildGatewayCronService({...});

// 6. 设备发现服务 (L459-471)
const discovery = await startGatewayDiscovery({...});

// 7. WebSocket 处理器附加 (L774-829)
attachGatewayWsHandlers({
  wss,
  clients,
  gatewayMethods,
  context: {
    deps,
    cron,
    nodeRegistry,
    // ...
  },
});

4.2 CLI 运行命令逻辑

核心文件: src/cli/gateway-cli/run.ts

// 关键步骤 (L55-308)
async function runGatewayCommand(opts: GatewayRunOpts) {
  // 1. 环境和日志配置 (L64-82)
  setConsoleTimestampPrefix(true);
  setVerbose(Boolean(opts.verbose));
  setGatewayWsLogStyle(wsLogStyle);

  // 2. 端口解析和验证 (L97-134)
  const port = portOverride ?? resolveGatewayPort(cfg);
  if (opts.force) {
    await forceFreePortAndWait(port, {...});
  }

  // 3. 认证配置 (L135-257)
  const resolvedAuth = resolveGatewayAuth({
    authConfig,
    env: process.env,
    tailscaleMode,
  });

  // 4. 启动网关服务 (L260-281)
  await runGatewayLoop({
    runtime: defaultRuntime,
    start: async () => await startGatewayServer(port, {...}),
  });
}

4.3 WebSocket 连接处理

核心文件: src/gateway/server-ws-runtime.ts

export function attachGatewayWsHandlers(params: {
  wss: WebSocketServer;
  clients: Set<GatewayWsClient>;
  port: number;
  resolvedAuth: ResolvedGatewayAuth;
  gatewayMethods: string[];
  events: string[];
  extraHandlers: GatewayRequestHandlers;
  broadcast: (event, payload, opts?) => void;
  context: GatewayRequestContext;
}) {
  // 调用底层连接处理器
  attachGatewayWsConnectionHandler({
    wss: params.wss,
    clients: params.clients,
    // ...
    buildRequestContext: () => params.context,
  });
}

5. 核心业务逻辑模块

5.1 认证模块

文件位置: src/gateway/auth.ts

认证流程

token

password

Tailscale

客户端连接

认证模式

验证 Token

验证密码

验证 Tailnet

认证成功?

允许连接

拒绝连接

认证配置解析:

function resolveGatewayAuth(opts: {
  authConfig: GatewayAuthConfig;
  env: NodeJS.ProcessEnv;
  tailscaleMode: TailscaleMode;
}): ResolvedGatewayAuth {
  // 支持三种认证方式
  // 1. token - 共享密钥认证
  // 2. password - 密码认证
  // 3. Tailscale - Tailnet 认证

  // 如果绑定非 loopback 地址,必须启用认证
  if (bind !== "loopback" && !hasSharedSecret) {
    throw new Error("Refusing to bind gateway without auth");
  }
}

5.2 节点管理系统

文件位置: src/gateway/node-registry.ts

节点管理

节点注册

节点注册表

订阅管理

事件路由

事件广播

移动节点

远程节点

本地节点

核心功能:

  • 节点注册和发现
  • 节点订阅管理
  • 节点事件路由
  • 移动节点特殊处理

关键接口:

class NodeRegistry {
  registerNode(nodeId: string, metadata: NodeMetadata): void;
  unregisterNode(nodeId: string): void;
  sendEvent(nodeId: string, event: string, payload: unknown): void;
  getConnectedNodes(): NodeInfo[];
}

// 节点订阅管理
const nodeSubscriptions = createNodeSubscriptionManager();
nodeSubscriptions.subscribe(sessionKey, event, callback);
nodeSubscriptions.unsubscribe(sessionKey);
nodeSubscriptions.sendToSession(sessionKey, event, payload);

5.3 通道管理

文件位置: src/gateway/server-channels.ts

通道管理

通道列表

WhatsApp

Telegram

Discord

Signal

iMessage

Web

通道管理器
createChannelManager

消息路由

状态同步

支持的通道:

  • WhatsApp Web
  • Telegram
  • Discord
  • Signal
  • iMessage (仅 macOS)
  • Web Provider

核心功能:

const channelManager = createChannelManager({
  loadConfig,
  channelLogs,
  channelRuntimeEnvs,
});

// 通道操作
channelManager.startChannels();      // 启动所有已配置通道
channelManager.startChannel(id);     // 启动指定通道
channelManager.stopChannel(id);      // 停止通道
channelManager.markChannelLoggedOut(id); // 标记登出

5.4 插件系统

文件位置: src/gateway/server-plugins.ts

插件加载流程:

  1. 扫描插件目录
  2. 加载插件定义
  3. 初始化插件实例
  4. 注册插件钩子
  5. 注册插件处理器

插件钩子类型:

  • before_skills_load - 技能加载前
  • after_skills_load - 技能加载后
  • before_agent_run - 代理运行前
  • after_agent_run - 代理运行后

5.5 定时任务系统

文件位置: src/gateway/server-cron.ts

功能:

  • Cron 表达式解析
  • 任务调度和执行
  • 任务状态管理
  • 执行日志记录

使用示例:

const cronService = buildGatewayCronService({ cfg, deps, broadcast });

// 添加任务
cron.add({
  name: "daily-report",
  schedule: "0 9 * * *",  // 每天早上 9 点
  command: "agent run daily-report",
});

// 列出任务
cron.list();

// 移除任务
cron.remove("daily-report");

5.6 技能管理系统

文件位置: src/agents/skills/

核心功能:

  • 技能文件监控
  • 技能加载和更新
  • 技能安全扫描
  • 技能状态管理

技能变更处理流程:

  1. 监控技能文件变化
  2. 触发技能安全扫描钩子
  3. 根据扫描结果启用/禁用技能
  4. 广播技能状态变更事件

6. 如何阅读源码

6.1 推荐阅读顺序

第一阶段:理解入口和初始化
  1. src/index.ts - 程序主入口

    • 理解环境变量加载
    • 理解全局错误处理
    • 理解 CLI 程序构建
  2. src/cli/program/build-program.ts - CLI 程序构建

    • 理解命令注册机制
    • 理解子命令结构
  3. src/cli/gateway-cli/register.ts - Gateway 命令注册

    • 理解所有 gateway 相关命令
第二阶段:理解核心启动流程
  1. src/cli/gateway-cli/run.ts - run 命令实现

    • 理解命令行参数处理
    • 理解认证配置
    • 理解端口绑定逻辑
  2. src/gateway/server.impl.ts - 网关服务器主实现 ⭐

    • 理解完整的启动流程
    • 理解核心组件初始化
    • 理解运行时状态管理
第三阶段:理解协议和通信
  1. src/gateway/protocol/index.ts - 协议定义

    • 理解消息帧结构
    • 理解验证器
  2. src/gateway/protocol/schema.ts - Schema 定义

    • 理解所有 API 的数据结构
  3. src/gateway/server-ws-runtime.ts - WebSocket 运行时

    • 理解连接处理
    • 理解消息路由
第四阶段:理解业务逻辑
  1. src/gateway/server-methods/ - 方法处理器

    • agent.ts - 代理管理
    • chat.ts - 聊天功能
    • channels.ts - 通道管理
    • config.ts - 配置管理
    • sessions.ts - 会话管理
    • skills.ts - 技能管理
  2. src/gateway/server-channels.ts - 通道管理器

    • 理解通道生命周期
    • 理解消息路由
  3. src/gateway/node-registry.ts - 节点注册表

    • 理解节点管理
    • 理解订阅机制
  4. src/gateway/server-plugins.ts - 插件系统

    • 理解插件加载
    • 理解钩子系统
第五阶段:理解基础设施
  1. src/config/config.ts - 配置系统

    • 理解配置加载
    • 理解配置验证
  2. src/logging/ - 日志系统

    • 理解结构化日志
    • 理解子系统日志
  3. src/runtime.ts - 运行时环境

    • 理解运行时状态
    • 理解错误处理

6.2 关键接口和数据结构

网关服务器接口
export type GatewayServer = {
  /**
   * 关闭网关服务器
   * @param opts - 关闭选项
   * @param opts.reason - 关闭原因
   * @param opts.restartExpectedMs - 预期重启时间(毫秒)
   */
  close: (opts?: {
    reason?: string;
    restartExpectedMs?: number | null
  }) => Promise<void>;
};
网关服务器启动选项
export type GatewayServerOptions = {
  /**
   * 绑定地址策略
   * - loopback: 仅绑定 127.0.0.1
   * - lan: 绑定 0.0.0.0
   * - tailnet: 仅绑定 Tailscale IPv4 地址
   * - auto: 优先 loopback,否则使用 LAN
   */
  bind?: GatewayBindMode;

  /**
   * 高级覆盖绑定主机地址
   */
  host?: string;

  /**
   * 是否启用控制面板 UI
   */
  controlUiEnabled?: boolean;

  /**
   * 是否启用 OpenAI Chat Completions API
   */
  openAiChatCompletionsEnabled?: boolean;

  /**
   * 是否启用 OpenResponses API
   */
  openResponsesEnabled?: boolean;

  /**
   * 认证配置覆盖
   */
  auth?: GatewayAuthConfig;

  /**
   * Tailscale 暴露配置覆盖
   */
  tailscale?: GatewayTailscaleConfig;
};
运行时状态
type GatewayRuntimeState = {
  // 服务器实例
  httpServer: HttpServer;
  httpServers: HttpServer[];
  wss: WebSocketServer;

  // 客户端管理
  clients: Set<GatewayWsClient>;

  // 广播功能
  broadcast: (event: string, payload: unknown, opts?) => void;

  // 业务组件
  nodeRegistry: NodeRegistry;
  cron: CronService;
  channelManager: ChannelManager;

  // 聊天状态
  agentRunSeq: number;
  chatRunState: ChatRunState;
  chatAbortControllers: Map<string, AbortController>;

  // 去重和版本控制
  dedupe: DedupeManager;
  getPresenceVersion: () => number;
  getHealthVersion: () => number;

  // ... 更多状态
};
请求上下文
export type GatewayRequestContext = {
  // 依赖注入
  deps: Deps;

  // 定时任务
  cron: CronService;
  cronStorePath: string;

  // 模型目录
  loadGatewayModelCatalog: () => ModelCatalog;

  // 健康状态
  getHealthCache: () => HealthCache;
  refreshHealthSnapshot: () => void;

  // 日志
  logHealth: Logger;
  logGateway: Logger;

  // 节点管理
  nodeSendToSession: (sessionKey: string, event: string, payload: unknown) => void;
  nodeSendToAllSubscribed: (event: string, payload: unknown) => void;
  nodeSubscribe: (sessionKey: string, event: string, callback: Function) => void;
  nodeUnsubscribe: (sessionKey: string, event: string) => void;
  hasConnectedMobileNode: () => boolean;
  nodeRegistry: NodeRegistry;

  // 聊天管理
  agentRunSeq: number;
  chatAbortControllers: Map<string, AbortController>;
  addChatRun: (run: ChatRun) => void;
  removeChatRun: (runId: string) => void;

  // 通道管理
  getRuntimeSnapshot: () => ChannelRuntimeSnapshot;
  startChannel: (channelId: string) => Promise<void>;
  stopChannel: (channelId: string) => Promise<void>;

  // 向导
  wizardSessions: Map<string, WizardSession>;
  findRunningWizard: (sessionKey: string) => WizardSession | undefined;

  // ... 更多上下文
};

6.3 核心文件说明

文件路径 功能说明 行数 重要程度
src/gateway/server.impl.ts 网关服务器主实现 ~950 ⭐⭐⭐⭐⭐
src/gateway/server-ws-runtime.ts WebSocket 运行时 ~75 ⭐⭐⭐⭐⭐
src/gateway/server-methods.ts 核心方法注册 ~200 ⭐⭐⭐⭐
src/gateway/server-channels.ts 通道管理器 ~300 ⭐⭐⭐⭐
src/gateway/node-registry.ts 节点注册表 ~400 ⭐⭐⭐⭐
src/gateway/server-plugins.ts 插件系统 ~300 ⭐⭐⭐
src/gateway/server-cron.ts 定时任务 ~200 ⭐⭐⭐
src/gateway/auth.ts 认证模块 ~150 ⭐⭐⭐⭐
src/gateway/protocol/index.ts 协议定义 ~590 ⭐⭐⭐⭐
src/cli/gateway-cli/run.ts run 命令 ~355 ⭐⭐⭐⭐
src/config/config.ts 配置系统 ~35 ⭐⭐⭐

6.4 调试技巧

启用详细日志
# 启用详细日志
openclaw-cn gateway run --verbose

# 启用 WebSocket 全量日志
openclaw-cn gateway run --ws-log full

# 启用 Claude CLI 日志
openclaw-cn gateway run --claude-cli-logs
查看日志文件
# 会话日志
~/.clawdbot-cn/agents/<agentId>/sessions/*.jsonl

# 实时日志
tail -f ~/.clawdbot-cn/sessions/gateway.log
健康检查
# 检查网关状态
openclaw-cn gateway status

# 健康检查
openclaw-cn gateway health

# 探测通道
openclaw-cn channels status --probe

7. 核心特性总结

7.1 架构特性

模块化设计
  • 每个功能独立模块,职责清晰
  • 依赖注入,易于测试和维护
  • 插件化架构,易于扩展
分布式架构
  • 支持多节点部署
  • 节点注册和发现
  • 节点间事件订阅和广播
多协议支持
  • WebSocket 实时双向通信
  • HTTP API 兼容 OpenAI/OpenResponses
  • 支持同时监听多个地址

7.2 功能特性

1. 认证和授权
  • Token 共享密钥认证
  • Password 密码认证
  • Tailscale Tailnet 认证
  • 绑定模式安全控制
2. 通道抽象
  • 统一的通道管理接口
  • 支持多种消息平台
  • 通道状态同步
  • 消息路由和分发
3. 插件系统
  • 动态插件加载
  • 插件生命周期管理
  • 丰富的钩子系统
  • 插件 RPC 方法注册
4. 技能管理
  • 技能文件监控
  • 技能安全扫描
  • 技能状态管理
  • 技能热重载
5. 定时任务
  • Cron 表达式支持
  • 任务持久化
  • 执行日志记录
  • 任务状态管理
6. 配置管理
  • JSON5 配置文件
  • 配置验证
  • 配置迁移
  • 配置热重载
  • 环境变量覆盖
7. 日志系统
  • 结构化日志
  • 子系统日志分类
  • 多级别日志
  • 日志轮转
8. 设备发现
  • mDNS/Bonjour 服务发现
  • 局域网发现
  • 广域网发现
  • Tailscale 网络发现

7.3 技术栈

核心技术
  • 语言: TypeScript
  • 运行时: Node.js 22+
  • WebSocket: ws
  • HTTP: node:http/https
  • 配置: JSON5
  • 验证: AJV
  • 日志: 自研结构化日志
依赖管理
  • 包管理: pnpm
  • 工作区: pnpm workspace
  • 构建: tsc
  • 测试: vitest
  • 代码检查: oxlint
  • 格式化: oxfmt

7.4 性能优化

消息去重
// 去重管理器
const dedupe = new DedupeManager();

// 检查并标记消息
if (dedupe.checkAndMark(messageId)) {
  // 消息已处理,跳过
  return;
}
消息丢弃策略
// 当客户端响应过慢时,丢弃非关键消息
broadcast("event", payload, { dropIfSlow: true });
状态版本控制
// 存在性版本和健康版本
const presenceVersion = incrementPresenceVersion();
const healthVersion = getHealthVersion();

// 避免重复推送相同状态
broadcast("state", data, {
  stateVersion: { presence: presenceVersion, health: healthVersion }
});

7.5 错误处理

全局错误处理
// src/index.ts
installUnhandledRejectionHandler();

process.on("uncaughtException", (error) => {
  console.error("[clawdbot] 未捕获异常:", formatUncaughtError(error));
  process.exit(1);
});
优雅关闭
// 清理资源
const close = createGatewayCloseHandler({
  bonjourStop,
  tailscaleCleanup,
  canvasHost,
  cron,
  heartbeatRunner,
  // ...
  wss,
  httpServer,
});

// 关闭时清理
await close({ reason: "SIGTERM", restartExpectedMs: null });
错误恢复
  • 配置自动迁移
  • 工作区自动迁移
  • 插件自动启用
  • 端口强制释放

附录

A. 快速参考

启动 Gateway
# 基本启动
openclaw-cn gateway run

# 指定端口
openclaw-cn gateway run --port 18789

# 绑定到局域网
openclaw-cn gateway run --bind lan --token YOUR_TOKEN

# 启用详细日志
openclaw-cn gateway run --verbose
常用命令
# 查看状态
openclaw-cn gateway status

# 健康检查
openclaw-cn gateway health

# 安装为系统服务
openclaw-cn gateway install

# 启动服务
openclaw-cn gateway start

# 停止服务
openclaw-cn gateway stop

B. 配置示例

基本配置
[gateway]
mode = "local"        # local | remote
port = 18789
bind = "loopback"     # loopback | lan | tailnet | auto

[gateway.auth]
mode = "token"        # token | password
token = "your-token-here"

[gateway.tailscale]
mode = "off"          # off | serve | funnel
resetOnExit = false

C. 故障排除

端口被占用
# 强制终止占用进程
openclaw-cn gateway run --force

# 或手动终止
lsof -ti:18789 | xargs kill -9
认证失败
  • 检查 token/password 配置
  • 检查环境变量 OPENCLAW_GATEWAY_TOKEN
  • 确认 bind 模式需要认证
通道连接失败
# 探测通道状态
openclaw-cn channels status --probe

# 重启特定通道
openclaw-cn channels restart <channel-id>

总结

OpenClaw-CN Gateway 是一个功能完整、设计精良的 AI 助手网关服务。它具有以下特点:

  1. 清晰的分层架构 - 客户端层、协议层、核心层、业务层、基础设施层
  2. 完整的启动流程 - 从环境准备到服务运行的完整链路
  3. 灵活的消息处理 - WebSocket + HTTP 双协议支持
  4. 丰富的业务功能 - 通道管理、节点注册、插件系统、技能管理
  5. 优秀的代码组织 - 模块化设计,职责清晰,易于扩展

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐