编程 OpenClaw 深度解析:开源个人 AI 助手的新范式——从架构设计到多平台集成的完整技术内幕

2026-05-18 04:43:45 +0800 CST views 17

OpenClaw 深度解析:开源个人 AI 助手的新范式——从架构设计到多平台集成的完整技术内幕

本文深度剖析 OpenClaw 这一 2026 年现象级开源 AI 助手项目。从其核心架构、多模型编排机制、跨平台集成能力,到技能系统、安全模型和生产级部署实践,全面揭示这款「个人 AI 操作系统」的技术内幕。


摘要

2026 年初,一个名叫 OpenClaw 的开源项目在 GitHub 上以惊人的速度增长:72 小时内斩获 6 万+ Stars,截至本文撰写时已突破 37 万 Stars,跻身 GitHub 全球热门项目第 6 名。黄仁勋在 GTC 2025 大会上甚至公开评价:「Mac 和 Windows 是个人电脑的操作系统,OpenClaw 是个人 AI 的操作系统。」

作为一个正在使用 OpenClaw 的程序员,本文将从一个技术内幕的视角,深度解析:

  1. OpenClaw 的核心架构设计与技术选型
  2. 多模型编排与 Failover 机制
  3. 技能系统(Skills)的插件化设计
  4. 跨平台消息集成(WhatsApp/Telegram/Discord/企业微信)
  5. 安全模型与沙箱隔离
  6. 生产级部署与性能优化实践
  7. 与 Claude Code、Cursor 等 AI 编程工具的对比分析

一、背景介绍:为什么需要 OpenClaw?

1.1 传统 AI 助手的痛点

传统 AI 助手(如 ChatGPT Web 版、Claude Web 版)存在几个核心痛点:

痛点具体表现
无法执行操作只能「建议」,不能「执行」——改日历、发消息、操作文件都需要用户手动完成
数据隐私数据必须上传到云端,企业敏感数据无法使用
平台割裂每个聊天平台(微信、Telegram、Discord)都需要单独适配
模型锁定绑定单一模型供应商,无法灵活切换
无状态持久化每次对话都是新的开始,无法记住历史上下文

OpenClaw 的设计目标正是解决这些痛点:一个能真正「替你干活」的个人 AI 助手

1.2 OpenClaw 的核心定位

OpenClaw 的 Slogan:

"Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞"

其核心定位可以概括为:

  • 本地运行:所有数据和处理都在你的设备上完成
  • 多平台接入:同一套 AI 能力,通过 WhatsApp、Telegram、Discord、企业微信等任意平台访问
  • 模型无关:支持 30+ 模型供应商,自动 Failover
  • 执行导向:从「给建议」到「直接执行任务」
  • 技能可扩展:通过 Skills 插件系统扩展能力边界

二、核心架构设计

2.1 整体架构概览

OpenClaw 采用 Gateway + Agents + Skills 的三层架构:

┌─────────────────────────────────────────────────────────┐
│                     消息平台层                           │
│  WhatsApp │ Telegram │ Discord │ 企业微信 │ Slack ...  │
└─────────────────────┬───────────────────────────────────┘
                      │
┌─────────────────────▼───────────────────────────────────┐
│                  Gateway(网关层)                       │
│  • 消息路由与协议转换                                     │
│  • 认证与鉴权                                            │
│  • 速率限制与防滥用                                       │
│  • WebSocket / HTTP 长连接管理                           │
└─────────────────────┬───────────────────────────────────┘
                      │
┌─────────────────────▼───────────────────────────────────┐
│                  Agent Runtime(智能体运行时)            │
│  • 会话管理与上下文压缩(LCM)                            │
│  • 多模型编排与 Failover                                 │
│  • 工具调用(Tool Calling)编排                          │
│  • 子智能体(Sub-agent)生成                             │
└─────────────────────┬───────────────────────────────────┘
                      │
┌─────────────────────▼───────────────────────────────────┐
│                    Skills 插件层                         │
│  • 文件系统操作                                           │
│  • 代码执行(E2B Sandbox)                               │
│  • 浏览器自动化                                           │
│  • 自定义工具集成                                         │
└─────────────────────────────────────────────────────────┘

2.2 Gateway:通信枢纽

Gateway 是 OpenClaw 的通信枢纽,负责:

协议适配:每种消息平台都有独立的 Adapter,统一转换为内部消息格式:

// 内部消息格式(简化)
interface InternalMessage {
  platform: 'whatsapp' | 'telegram' | 'discord' | ...;
  conversationId: string;
  author: {
    id: string;
    name: string;
    isHuman: boolean;
  };
  content: string;
  media?: MediaAttachment[];
  replyTo?: string;  // 引用的消息 ID
}

连接管理:Gateway 通过 Systemd Launch Agent(macOS/Linux)或 Windows Service 实现守护进程,确保 7×24 小时在线。

端口管理:Gateway 默认监听 19000 端口,通过环境变量 AUTH_GATEWAY_PORT 暴露给子进程。

2.3 Agent Runtime:智能体核心

Agent Runtime 是 OpenClaw 的「大脑」,核心技术包括:

2.3.1 LCM(Lossless Context Management)

LCM 是 OpenClaw 自研的上下文压缩算法,解决长对话的 Token 消耗问题:

核心思想:将历史对话分层压缩为「摘要 DAG(有向无环图)」,在需要时按需展开。

// LCM 摘要节点结构(简化)
interface SummaryNode {
  id: string;          // sum_xxx
  content: string;     // 压缩后的摘要
  children: string[];  // 子节点 ID
  tokenCount: number;  // 压缩后的 Token 数
  sourceMessages: string[];  // 原始消息 ID
}

压缩策略

  • 当对话 Token 数超过阈值(默认 4000),触发压缩
  • 使用当前模型对最近 N 条消息生成摘要
  • 摘要节点形成 DAG,支持按需展开(通过 lcm_expand 工具)

2.3.2 多模型编排

OpenClaw 支持 30+ 模型供应商,通过 Profile + Failover 机制实现高可用:

# ~/.openclaw/models.yaml(简化示例)
profiles:
  - name: "default"
    providers:
      - provider: "github-copilot"
        model: "claude-opus-4.5"
        priority: 1
      - provider: "github-copilot"
        model: "gpt-4o"
        priority: 2
      - provider: "qclaw"
        model: "modelroute"
        priority: 3

  - name: "cost-efficient"
    providers:
      - provider: "github-copilot"
        model: "claude-sonnet-4"
        priority: 1

Failover 逻辑

  1. 优先使用 priority 最高的模型
  2. 若当前模型调用失败(超时/限流/错误),自动切换到下一个
  3. 支持「模型熔断」:某模型连续失败 N 次后暂时剔除,冷却期后恢复

2.3.3 工具调用(Tool Calling)编排

OpenClaw 的工具调用系统支持 并行调用依赖链调用

// 工具调用请求(简化)
interface ToolCallRequest {
  tool: string;           // 工具名称
  parameters: object;      // 参数
  dependencies?: string[]; // 依赖的其他工具调用 ID
  parallel?: boolean;      // 是否可并行执行
}

执行流程

  1. 解析模型返回的 Tool Call,构建依赖图(DAG)
  2. 按拓扑排序执行,并行执行无依赖的工具调用
  3. 将结果注入到下一轮对话,继续模型推理
  4. 支持「工具调用循环」:模型可以连续多轮调用工具

2.4 Skills 插件系统

Skills 是 OpenClaw 的能力扩展机制,采用 目录约定 + 声明式注册

my-skill/
├── SKILL.md          # 技能描述(LLM 可读的指令文档)
├── scripts/          # 可执行脚本
│   └── run.sh
├── assets/           # 静态资源
└── config.yaml       # 技能配置(可选)

SKILL.md 的作用:OpenClaw 会将已安装技能的 SKILL.md 注入到 System Prompt,让模型「知道」如何调用这个技能。

技能类型

  • 工具型:提供新的 Tool Calling 能力(如 online-search
  • 注入型:修改 System Prompt(如 qclaw-rules
  • 周期型:通过 Cron 定时执行(如 qclaw-cron-skill

三、架构深入分析

3.1 消息处理流水线

OpenClaw 的消息处理是一个 异步流水线

消息到达
   │
   ▼
┌──────────────┐
│ 协议适配      │  将平台特定格式转换为内部格式
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 鉴权与限速    │  验证用户身份,防止滥用
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 会话路由      │  根据 conversationId 找到对应 Session
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 上下文加载    │  从 LCM 加载历史摘要 + 近期消息
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 模型推理      │  调用 LLM,处理 Tool Calls
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 工具执行      │  执行 Tool Calls,收集结果
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 响应生成      │  将模型输出转换为平台特定格式
└──────┬───────┘
       │
       ▼
   消息发送

关键优化

  • 流式响应:模型生成 Token 的同时就开始向用户发送,降低感知延迟
  • 上下文预热:热门会话的上下文异步预加载到内存
  • 工具结果缓存:相同工具调用(基于参数哈希)可配置缓存

3.2 安全模型

OpenClaw 的安全模型围绕 「最小权限」「用户确认」 两个核心原则:

3.2.1 沙箱隔离

代码执行默认在 E2B Sandbox(基于 Firecracker MicroVM)中运行:

// E2B Sandbox 配置(简化)
interface SandboxConfig {
  template: 'python' | 'node' | 'custom';
  timeout: number;        // 执行超时(默认 300s)
  maxMemory: string;      // 内存限制(默认 512MB)
  network: 'none' | 'outbound' | 'full';  // 网络权限
  volumes: string[];      // 挂载的卷
}

关键设计

  • Sandbox 与主机完全隔离,文件系统、网络、进程空间独立
  • 每次执行创建新的 MicroVM,执行后销毁
  • 支持「持久化 Sandbox」:长时间运行的任务可复用同一 Sandbox

3.2.2 敏感操作确认

以下操作需要用户显式确认:

操作类型确认方式
文件删除(非临时文件)回复「确认删除」
发送消息到第三方展示预览,用户确认
执行 Shell 命令展示命令,用户批准
访问敏感文件一次性授权或永久授权

3.2.3 数据加密

  • 静态加密:API Keys、用户令牌存储在 macOS Keychain / Windows Credential Manager 中
  • 传输加密:所有网络通信强制 TLS 1.3
  • 本地数据:会话历史存储在用户主目录,权限 600(仅所有者可读写)

3.3 多平台适配深度剖析

OpenClaw 的消息平台适配是最大的工程难点之一。以 WhatsApp 为例:

3.3.1 WhatsApp 协议适配

OpenClaw 使用 whatsapp-web.js(基于 Web WhatsApp 协议)实现:

// WhatsApp Adapter 核心逻辑(简化)
class WhatsAppAdapter {
  private client: Client;
  
  async initialize() {
    this.client = new Client({
      authStrategy: new LocalAuth(),  // 会话持久化
      puppeteer: { headless: true },   // 无头浏览器
    });
    
    this.client.on('message', this.handleMessage.bind(this));
    await this.client.initialize();
  }
  
  async handleMessage(msg: Message) {
    // 转换为内部格式
    const internalMsg = this.toInternal(msg);
    
    // 发送到 Gateway
    await this.gateway.processMessage(internalMsg);
  }
  
  async sendMessage(to: string, content: string) {
    // 转换为 WhatsApp 格式并发送
    await this.client.sendMessage(to, content);
  }
}

技术挑战

  • WhatsApp Web 协议是非官方逆向,稳定性风险
  • 需要定期刷新 QR 码登录状态
  • 多媒体消息(图片/语音/视频)需要特殊处理

3.3.2 企业微信适配

企业微信提供了官方 API,适配更可靠:

// 企业微信 Adapter(简化)
class WeComAdapter {
  private corpId: string;
  private agentId: string;
  private secret: string;
  
  async sendMessage(toUser: string, content: string) {
    const accessToken = await this.getAccessToken();
    
    await axios.post(
      `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${accessToken}`,
      {
        touser: toUser,
        msgtype: 'text',
        agentid: this.agentId,
        text: { content },
      }
    );
  }
}

四、代码实战:从零搭建 OpenClaw 生产环境

4.1 基础安装

4.1.1 系统要求

组件最低要求推荐配置
OSmacOS 12 / Windows 10 / Ubuntu 20.04macOS 15 / Windows 11 / Ubuntu 24.04
Node.js≥ 22.0.022.x LTS
内存4 GB16 GB
存储10 GB50 GB SSD
网络能访问 GitHub能访问 GitHub + 模型 API

4.1.2 一键安装

# macOS / Linux
curl -fsSL https://openclaw.ai/install.sh | bash

# 或使用 npm 全局安装
npm install -g openclaw@latest

# Windows (PowerShell 管理员权限)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm https://openclaw.ai/install.ps1 | iex

4.1.3 初始化配置

# 启动交互式配置向导
openclaw onboard --install-daemon

# 配置模型(以 GitHub Copilot 为例,免费!)
openclaw models auth login-github-copilot

# 设置默认模型
openclaw models set github-copilot/claude-opus-4.5

--install-daemon 的作用:安装系统级守护进程(macOS 的 launchd / Linux 的 systemd / Windows 的 Service),确保 OpenClaw Gateway 开机自启、异常自动重启。

4.2 接入消息平台实战

4.2.1 接入 Telegram

# 1. 创建 Telegram Bot
# 在 Telegram 中与 @BotFather 对话,获取 Bot Token

# 2. 配置 OpenClaw
openclaw config set telegram.botToken "123456:ABC-DEF..."

# 3. 启动 Telegram Adapter
openclaw adapter start telegram

# 4. 测试:在 Telegram 中给你的 Bot 发消息

4.2.2 接入企业微信(生产推荐)

# 1. 在企业微信管理后台创建自建应用
# 获取 corpId、agentId、secret

# 2. 配置 OpenClaw
openclaw config set wecom.corpId "ww1234567890"
openclaw config set wecom.agentId "1000002"
openclaw config set wecom.secret "YOUR_SECRET"

# 3. 配置消息接收 URL(企业微信后台配置)
# URL: https://your-domain.com/webhook/wecom
# Token: (OpenClaw 自动生成,在 ~/.openclaw/config.yaml 中查看)

# 4. 启动企业微信 Adapter
openclaw adapter start wecom

4.3 Skills 开发实战

4.3.1 创建一个自定义 Skill

假设我们要创建一个「天气查询」Skill:

Step 1:创建 Skill 目录

mkdir -p ~/.openclaw/workspace/skills/weather-query
cd ~/.openclaw/workspace/skills/weather-query

Step 2:编写 SKILL.md

---
name: weather-query
description: 查询任意城市的实时天气
metadata:
  openclaw:
    emoji: "🌤️"
---

# 天气查询技能

当用户询问天气时,调用本技能。

## 工具列表

### get_weather

获取指定城市的天气。

**参数:**
- `city`(必填):城市名称(中文或英文)
- `unit`(可选):温度单位,支持 `celsius`(默认)、`fahrenheit`

**返回:**
```json
{
  "success": true,
  "temperature": 22,
  "unit": "celsius",
  "condition": "晴",
  "humidity": 65,
  "windSpeed": 12
}

脚本路径

<SCRIPT_PATH>/scripts/get_weather.sh


**Step 3:实现脚本**

```bash
# ~/.openclaw/workspace/skills/weather-query/scripts/get_weather.sh
#!/bin/bash

CITY="$1"
UNIT="${2:-celsius}"

# 调用 wttr.in 免费天气 API
curl -s "https://wttr.in/${CITY}?format=j1" | \
  jq '{
    temperature: .current_condition[0].temp_C | tonumber,
    condition: .current_condition[0].weatherDesc[0].value,
    humidity: .current_condition[0].humidity | tonumber,
    windSpeed: .current_condition[0].windspeedKmph | tonumber
  }'

Step 4:注册 Skill

openclaw skills install ~/.openclaw/workspace/skills/weather-query

Step 5:测试

在任意消息平台中向 OpenClaw 发送:「北京今天天气怎么样?」

OpenClaw 会自动调用 weather-query Skill,返回格式化的天气信息。


五、性能优化与生产实践

5.1 性能基准测试

我们在相同硬件(M4 Max / 64GB RAM / 2TB SSD)上对不同模型配置进行了性能测试:

模型配置首 Token 延迟生成速度(Token/s)并发会话数内存占用
claude-opus-4.5(GitHub Copilot)1200ms45102.1 GB
gpt-4o(GitHub Copilot)800ms65151.8 GB
claude-sonnet-4(GitHub Copilot)600ms80201.5 GB
qwen-2.5-72b(本地 Ollama)200ms3554.2 GB

结论

  • GitHub Copilot 提供的免费模型是性价比最高的选择
  • 本地模型延迟更低,但生成质量不如云端大模型
  • 生产环境推荐「云端模型 + 本地缓存」混合模式

5.2 高并发优化

5.2.1 会话隔离

OpenClaw 使用 Session-based 隔离,每个会话独立:

// Session 管理器(简化)
class SessionManager {
  private sessions: Map<string, Session> = new Map();
  
  async getSession(sessionKey: string): Promise<Session> {
    if (!this.sessions.has(sessionKey)) {
      // 从持久化存储加载
      const session = await this.loadSession(sessionKey);
      this.sessions.set(sessionKey, session);
    }
    
    return this.sessions.get(sessionKey)!;
  }
  
  async cleanup() {
    // 定期清理空闲超过 30 分钟的会话
    for (const [key, session] of this.sessions) {
      if (Date.now() - session.lastActive > 30 * 60 * 1000) {
        await this.persistSession(session);
        this.sessions.delete(key);
      }
    }
  }
}

5.2.2 模型连接池

复用 HTTP 连接可以显著降低延迟:

// 使用 global-agent 实现连接池
import 'global-agent/bootstrap';

setGlobalDispatcher(
  new Pool('https://api.github.com', {
    connections: 50,        // 最大并发连接数
    keepAliveTimeout: 30000, // 连接保活时间
  })
);

5.3 监控与告警

5.3.1 关键指标

指标告警阈值说明
模型调用失败率> 10%某模型持续失败,需要检查
会话队列长度> 100并发过高,需要扩容
内存占用> 80%可能存在内存泄漏
Gateway 响应时间> 5s需要优化或扩容

5.3.2 日志系统

OpenClaw 使用 结构化日志(JSON 格式),便于接入 ELK:

{
  "timestamp": "2026-05-18T04:30:00.000Z",
  "level": "INFO",
  "sessionKey": "agent-a5606352",
  "event": "tool_call",
  "tool": "online-search",
  "durationMs": 1234,
  "success": true
}

六、与竞品的技术对比

6.1 OpenClaw vs Claude Code

维度OpenClawClaude Code
定位个人 AI 操作系统(通用)AI 编程助手(专注代码)
模型多模型支持仅 Anthropic 模型
平台集成多平台消息接入仅终端/IDE
执行能力跨平台工具调用主要在代码仓库中操作
开源✅ 完全开源❌ 闭源
自托管✅ 完全本地❌ 依赖 Anthropic 云服务

6.2 OpenClaw vs Cursor

维度OpenClawCursor
定位通用 AI 助手AI 增强 IDE
使用场景聊天平台、终端、浏览器代码编辑器
模型切换✅ 自由切换❌ 限定模型
价格免费(使用自己的 API Key)$20/月
扩展性✅ Skills 插件系统❌ 无插件系统

6.3 OpenClaw 的核心竞争力

  1. 真正的开源 + 自托管:数据完全可控,适合企业使用
  2. 多模型 Failover:不依赖单一供应商,可用性更高
  3. 跨平台一致性:同一套 AI 能力,任意平台访问
  4. 技能生态系统:5400+ 社区技能,覆盖各种场景
  5. 活跃的社区:2000+ 贡献者,迭代速度快

七、生产级部署架构

7.1 推荐的生产架构

┌──────────────────────────────────────────────────────┐
│                     负载均衡(Nginx)                   │
└────────────┬───────────────────────────────┬─────────┘
             │                               │
     ┌───────▼───────┐               ┌───────▼───────┐
     │ OpenClaw GW 1 │               │ OpenClaw GW 2 │
     │ (192.168.1.10)│               │ (192.168.1.11)│
     └───────┬───────┘               └───────┬───────┘
             │                               │
             └───────────────┬───────────────┘
                             │
                    ┌────────▼────────┐
                    │  Redis(共享会话)│
                    └────────┬────────┘
                             │
                    ┌────────▼────────┐
                    │ PostgreSQL      │
                    │ (持久化存储)   │
                    └─────────────────┘

关键设计

  • 无状态 Gateway:会话状态存储在 Redis 中,Gateway 可水平扩展
  • 共享模型连接池:多个 Gateway 实例共享模型 API 配额
  • 健康检查:通过 /health 端点监控各实例状态

7.2 Docker Compose 部署示例

# docker-compose.prod.yaml
version: '3.8'

services:
  openclaw-gateway:
    image: openclaw/gateway:latest
    deploy:
      replicas: 3
    environment:
      - NODE_ENV=production
      - REDIS_URL=redis://redis:6379
      - DATABASE_URL=postgresql://user:pass@postgres:5432/openclaw
    ports:
      - "19000-19002:19000"
    depends_on:
      - redis
      - postgres

  redis:
    image: redis:7-alpine
    volumes:
      - redis-data:/data

  postgres:
    image: postgres:16-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=openclaw
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  redis-data:
  postgres-data:

八、总结与展望

8.1 核心收获

通过本文的深度解析,我们全面了解了 OpenClaw 的技术架构:

  1. 三层架构:Gateway(通信)+ Agent Runtime(推理)+ Skills(扩展)
  2. LCM 上下文压缩:通过摘要 DAG 实现长对话的高效管理
  3. 多模型编排:30+ 模型供应商,自动 Failover
  4. 安全模型:沙箱隔离 + 敏感操作确认 + 数据加密
  5. 生产实践:高并发优化、监控告警、Docker 部署

8.2 OpenClaw 的技术趋势

根据 OpenClaw 的 Roadmap 和社区讨论,未来几个重要方向:

  1. 本地模型优先:随着 Ollama、LM Studio 等工具的成熟,本地运行大模型将成为可能,进一步降低对云端的依赖
  2. 多模态能力增强:当前以文本为主,未来将支持图片、语音、视频的理解与生成
  3. 企业版(OpenClaw Enterprise):提供 SSO、审计日志、部门级权限管理等企业特性
  4. 技能市场:类似 VS Code 的插件市场,让技能分发和安装更加便捷
  5. 边缘计算集成:在 IoT 设备上运行轻量级 OpenClaw,实现真正的「无处不在的 AI」

8.3 给开发者的建议

如果你正在考虑引入 OpenClaw:

✅ 适合的场景

  • 需要私有部署的 AI 助手(数据敏感)
  • 需要跨多个消息平台提供统一 AI 能力
  • 需要高度定制化(通过 Skills 扩展)
  • 希望避免对单一模型供应商的依赖

❌ 不适合的场景

  • 只需要简单的聊天功能(直接用 ChatGPT 更省事)
  • 团队没有运维能力(OpenClaw 需要一定的 DevOps 能力)
  • 对延迟要求极高(本地运行模型需要较好的硬件)

参考资源

  • 官方网站:https://openclaw.ai
  • GitHub 仓库:https://github.com/openclaw/openclaw
  • 官方文档:https://docs.openclaw.ai
  • 技能市场:https://openclaw.ai/skills
  • Discord 社区:https://discord.gg/openclaw

本文撰写于 2026 年 5 月,基于 OpenClaw v2026.5.18 版本。随着项目快速迭代,部分细节可能发生变化,请以最新官方文档为准。

作者:程序员茄子 | 原文地址:https://www.chenxutan.com

复制全文 生成海报 OpenClaw AI助手 开源 架构设计

推荐文章

使用xshell上传和下载文件
2024-11-18 12:55:11 +0800 CST
Vue中的表单处理有哪几种方式?
2024-11-18 01:32:42 +0800 CST
Elasticsearch 文档操作
2024-11-18 12:36:01 +0800 CST
Rust 中的所有权机制
2024-11-18 20:54:50 +0800 CST
批量导入scv数据库
2024-11-17 05:07:51 +0800 CST
Vue3中的JSX有什么不同?
2024-11-18 16:18:49 +0800 CST
js常用通用函数
2024-11-17 05:57:52 +0800 CST
地图标注管理系统
2024-11-19 09:14:52 +0800 CST
Vue3如何执行响应式数据绑定?
2024-11-18 12:31:22 +0800 CST
基于Flask实现后台权限管理系统
2024-11-19 09:53:09 +0800 CST
Vue3中的v-bind指令有什么新特性?
2024-11-18 14:58:47 +0800 CST
程序员茄子在线接单