OpenClaw ⚡ 个人 AI Agent 网关系统

C++17 HTTP/WebSocket LLM 集成 SQLite3 技能扩展

一个高性能、模块化的个人 AI 智能体网关,集成实时通信、LLM 对话、任务规划、记忆存储与技能执行能力。开箱即用,灵活扩展。

📖 概述

OpenClaw 是基于现代 C++17 构建的个人 AI Agent 网关系统。它通过 HTTP/WebSocket 提供统一的接入层,将用户消息路由至智能体核心,智能体调用 LLM 进行理解和任务规划,并通过技能系统执行具体操作(Shell、文件、网络等)。所有对话历史与用户偏好通过 SQLite3 持久化,实现长期记忆。

🌐 双协议网关

HTTP REST API + WebSocket 实时双向通信,支持连接管理、广播、健康检查。

🧠 智能体核心

LLM 对话理解、任务分解、多步执行、进度回调、会话管理。

🔧 技能引擎

shell 执行、文件读写、网络请求、记忆 recall/remember、延时等待。

💾 混合记忆

短期/长期记忆分离,偏好存储,关键词检索 + 相关性排序 + 时间衰减。

🔐 安全沙箱

命令黑名单、超时保护、路径遍历防护、连接数限流。

📊 可观测性

内置统计接口、分级日志、心跳监控、性能指标。

✨ 核心特性

⚡ 快速开始

最简单的使用方式:启动服务并通过 curl 发送消息。

# 1. 编译
git clone https://github.com/openclaw/openclaw.git
cd openclaw && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)

# 2. 配置 API Key(可选)
export OPENAI_API_KEY="sk-xxxxx"

# 3. 运行
./openclaw --config ../config.json

# 4. 发送消息
curl -X POST http://127.0.0.1:18789/message \
  -H "Content-Type: application/json" \
  -d '{"user_id":"alice","message":"帮我列出当前目录的文件"}'

# 5. WebSocket 连接
wscat -c ws://127.0.0.1:18789/ws?user_id=alice
💡 提示:默认配置允许 shell 执行,生产环境建议设置 allow_shell: false

📦 编译与依赖

依赖项: C++17 编译器、CMake ≥ 3.16、libcurl、SQLite3、nlohmann/json、cpp-httplib(header-only)。

# Ubuntu/Debian
sudo apt update
sudo apt install build-essential cmake libcurl4-openssl-dev libsqlite3-dev

# 下载 nlohmann/json (header)
wget https://github.com/nlohmann/json/releases/download/v3.11.2/json.hpp
sudo cp json.hpp /usr/local/include/

# 下载 cpp-httplib
wget https://raw.githubusercontent.com/yhirose/cpp-httplib/master/httplib.h
sudo cp httplib.h /usr/local/include/

# 编译
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4

🏗️ 架构设计

🌍 客户端
HTTP / WebSocket
📡 Gateway
路由 · 连接池 · 安全
🧠 Agent
对话 · 规划 · 回调
🔧 Skills
shell/file/web/...
💾 Memory
SQLite3 · 检索
🤖 LLM API
OpenAI 兼容

模块解耦,每个组件可独立测试与替换。

核心抽象:Gateway 处理网络通信,Agent 负责业务逻辑,Skills 提供可执行动作,Memory 持久化数据。所有模块通过回调与依赖注入连接。

🌐 Gateway 网关

class Gateway

基于 cpp-httplib 实现,提供 HTTP REST 端点和 WebSocket 实时通道。支持连接管理、消息收发、广播、统计信息收集。

HTTP 端点

WebSocket 端点

// 代码示例:创建网关并设置处理器
Gateway gateway;
gateway.setMessageHandler([](const std::string& msg, const std::string& uid) {
    return "Echo: " + msg;
});
gateway.start(18789, "127.0.0.1");

🧠 Agent 智能体

class Agent

核心智能体,负责 LLM 调用、任务规划、执行编排、会话管理与记忆集成。

💡 内部集成 Memory 检索,自动将相关记忆注入 LLM 提示词,提升上下文相关性。

🔧 Skills 技能系统

class Skills

技能注册与执行引擎,内置 12+ 常用技能,支持动态扩展。

内置技能列表

技能名描述示例
shell执行系统命令(带黑名单)shell "ls -la"
file_read读取文件内容file_read "/path/file.txt"
file_write写入文件file_write "note.txt" "content"
file_append追加内容file_append "log.txt" "new line"
file_list列出目录file_list "/home"
file_delete删除文件/目录file_delete "temp"
web_fetch获取网页内容web_fetch "https://example.com"
wait延时等待(ms)wait "1000"
remember存储记忆remember "user likes coffee"
recall检索记忆recall "coffee preference"
respond直接回复respond "Hello"
summarize今日摘要summarize
🔧 注册自定义技能: skills.registerSkill({"my_skill", "desc", {"arg1"}, myFunc});

💾 Memory 记忆系统

class Memory

基于 SQLite3 的混合记忆存储,支持短期/长期记忆、用户偏好、关键词检索与相关性排序。

// 记忆检索示例
auto results = memory.retrieve(userId, "meeting schedule", 5);
for (auto& entry : results) {
    std::cout << entry.content << " (score: " << entry.relevance << ")\n";
}

🛠️ Utils 工具库

通用工具集合,涵盖字符串、路径、文件、命令执行、时间、URL、JSON、日志、随机数等。

📝 字符串

split, trim, toLower, toUpper

📁 路径/文件

expandHomePath, ensureDirectory, readFile, writeFile

⏱️ 时间

getTimestamp, getCurrentTimeMillis, formatTime

🌐 URL

urlEncode, urlDecode

📊 日志

logInfo, logError, logDebug, setLogLevel

🎲 随机

generateId, generateRandomString

⚙️ 配置说明

配置文件 config.json 采用 JSON 格式,支持环境变量覆盖(OPENAI_API_KEY)。

{
    "gateway": {
        "port": 18789,
        "host": "127.0.0.1"
    },
    "llm": {
        "api_key": "",           // 或从环境变量读取
        "model": "gpt-4",
        "base_url": "https://api.openai.com/v1",
        "temperature": 0.7,
        "max_tokens": 1000
    },
    "memory": {
        "db_path": "~/.openclaw/memory.db",
        "workspace": "~/.openclaw/workspace"
    },
    "skills": {
        "allow_shell": true,
        "allow_file_ops": true,
        "sandbox": true
    },
    "heartbeat": {
        "enabled": true,
        "interval": 1800
    },
    "logging": {
        "level": "info"
    }
}

📌 示例代码

发送消息并获取响应

#include "Agent.h"
#include "Gateway.h"

int main() {
    Agent agent;
    agent.initialize("config.json");
    
    Gateway gateway;
    gateway.setMessageHandler([&](const std::string& msg, const std::string& uid) {
        return agent.processMessage(msg, uid);
    });
    gateway.start(18789, "127.0.0.1");
    
    std::cout << "Server running...\n";
    std::cin.get();
    return 0;
}

自定义技能注册

Skills skills;
skills.registerSkill({
    "greet",
    "Say hello",
    {"name"},
    [](const std::vector<std::string>& args, std::string& out) -> bool {
        std::string name = args.empty() ? "friend" : args[0];
        out = "Hello, " + name + "!";
        return true;
    }
});

📡 API 接口

HTTP POST /message

请求: {"user_id": "alice", "message": "列出文件"}
响应: {"response": "file1.txt\nfile2.txt\n", "user_id": "alice", "timestamp": 1234567890}

WebSocket 消息格式

// 客户端发送
{"message": "帮我记住明天开会"}

// 服务端响应
{"type": "response", "message": "已记住", "user_id": "alice", "timestamp": 1234567890}

📊 性能指标

指标典型值说明
连接并发1000+基于 epoll/kqueue 的 cpp-httplib
消息延迟<50ms不含 LLM 调用时间
记忆检索<10msSQLite 索引优化
技能执行取决于操作shell 命令受 OS 限制
监控端点 /stats 提供实时运行数据。

⚖️ 许可证

MIT License

Copyright (c) 2026 OpenClaw Contributors

允许自由使用、修改、分发,需保留版权声明。不提供任何担保。

🐚 OpenClaw · 个人 AI Agent 网关 · 文档生成于 2026-03-25