34.2 核心功能实现

生成模型:Claude Opus 4.6 (anthropic/claude-opus-4-6) Token 消耗:输入 ~355k tokens,输出 ~6k tokens(本节)


本节实现 MiniClaw 的核心骨架:WebSocket Gateway、消息路由、Agent 运行循环和基础工具系统。

34.2.1 搭建 WebSocket Gateway 骨架

Gateway 是 MiniClaw 的中枢,负责接受客户端连接并路由消息。

最小 RPC 协议

参考 OpenClaw 的帧协议(第 3 章),定义一个简化版:

// src/gateway/protocol.ts

export type RpcRequest = {
  type: "req";
  id: string;       // 请求 ID
  method: string;    // 方法名
  params?: unknown;  // 参数
};

export type RpcResponse = {
  type: "res";
  id: string;       // 对应请求 ID
  result?: unknown;  // 成功结果
  error?: string;    // 错误信息
};

export type RpcEvent = {
  type: "event";
  event: string;     // 事件名
  payload?: unknown;  // 事件数据
};

export type RpcFrame = RpcRequest | RpcResponse | RpcEvent;

WebSocket 服务器

这个 Gateway 实现了 OpenClaw 三帧协议的核心:请求-响应 + 事件广播。

34.2.2 实现消息路由与会话管理

会话存储

路由注册

在 Gateway 上注册核心 RPC 方法:

34.2.3 对接 LLM API

Anthropic 适配器

Agent 运行循环

参考 OpenClaw 的 pi-agent.ts(第 7 章),实现核心的工具调用循环:

这个循环实现了 OpenClaw Agent 运行时的核心逻辑:发送消息 → 检查工具调用 → 执行工具 → 将结果反馈给 LLM → 重复。MAX_TURNS = 10 是安全阀,防止无限循环。

34.2.4 实现基础工具系统

工具接口

Bash 工具

文件读取工具

入口文件

将所有组件组装在一起:


本节小结

  1. Gateway 实现了 OpenClaw 三帧协议(req/res/event)的简化版,支持 RPC 方法注册和事件广播。

  2. 会话存储 使用内存 Map,提供创建/读取/重置等基本操作。

  3. LLM 适配器 封装 Anthropic SDK,统一 API 接口。

  4. Agent 运行循环 实现了核心的"调用 LLM → 检查工具调用 → 执行工具 → 反馈结果"循环,最大 10 轮。

  5. 工具系统 以统一接口定义,Bash 工具包含超时(30s)和危险命令拦截,文件读取工具限制在工作目录内。

Last updated