1. 项目概述

PicoClaw 是 Sipeed 公司开发的一款超轻量级个人 AI 助手,采用 Go 语言从零重写。该项目的设计目标是:

  • 超低资源占用: <10MB 内存占用
  • 极低成本: 可在 $10 硬件上运行
  • 快速启动: 1 秒内启动 (0.6GHz 单核)
  • 跨平台: 支持 RISC-V、ARM、x86 单一二进制文件

项目灵感来源于 nanobot,并通过 AI 驱动的自举过程完成了架构迁移和代码优化。

2. 技术栈

类别 技术选型
编程语言 Go 1.25+
主要依赖 OpenAI SDK、Anthropic SDK、Telegram Bot SDK、Discord SDK 等
构建工具 GoReleaser、GoLangCI-Lint
目标平台 Linux (x86_64, ARM64, RISC-V, Loong64)、macOS、Windows

3. 系统结构

3.1 目录结构

picoclaw/
├── cmd/picoclaw/          # CLI 入口
│   ├── main.go            # 主程序入口
│   ├── cmd_agent.go       # Agent 交互命令
│   ├── cmd_gateway.go     # 网关服务命令
│   ├── cmd_onboard.go     # 初始化配置
│   ├── cmd_auth.go        # 认证管理
│   ├── cmd_cron.go        # 定时任务
│   └── cmd_skills.go      # 技能管理
├── pkg/                   # 核心包
│   ├── agent/             # AI Agent 核心逻辑
│   ├── providers/         # LLM Provider 抽象层
│   ├── channels/          # 通讯渠道集成
│   ├── tools/             # Agent 工具集
│   ├── config/            # 配置管理
│   ├── auth/              # 认证与 OAuth
│   ├── session/           # 会话管理
│   ├── state/             # 状态管理
│   ├── cron/              # 定时任务服务
│   ├── heartbeat/         # 心跳/周期任务
│   ├── devices/           # 硬件设备支持
│   ├── routing/           # 消息路由
│   ├── bus/               # 事件总线
│   ├── voice/             # 语音处理
│   └── ...
├── config/                # 配置文件示例
└── skills/                # 内置技能

3.2 系统结构图

4. 核心模块分析

4.1 Agent 模块 (pkg/agent/)

  • instance.go: Agent 实例管理
  • loop.go: Agent 循环处理逻辑
  • memory.go: 长期记忆管理
  • context.go: 上下文构建
  • registry.go: Agent 注册表

4.2 Provider 模块 (pkg/providers/)

支持多种 LLM 提供商,通过统一的接口抽象:

Provider 说明
openai_compat/ OpenAI 兼容协议 (含 15+ 供应商)
anthropic/ Anthropic Claude 原生支持
claude_provider.go Claude CLI 集成
codex_provider.go GitHub Copilot
antigravity_provider.go Google Gemini (OAuth)
factory.go Provider 工厂模式实现
fallback.go 多 Provider 降级机制
cooldown.go 请求频率控制

支持的模型供应商 (通过 OpenAI 兼容协议):

  • OpenAI、Anthropic、智谱 AI (GLM)、DeepSeek
  • Google Gemini、Groq、Moonshot、通义千问
  • NVIDIA、Ollama、OpenRouter、VLLM、Cerebras
  • 火山引擎、神算云、GitHub Copilot

4.3 Channels 模块 (pkg/channels/)

支持多种即时通讯平台:

渠道 文件 说明
Telegram telegram.go Bot API
Discord discord.go Discord Bot
QQ qq.go QQ 开放平台
钉钉 dingtalk.go 钉钉开放平台
LINE line.go LINE Messaging API
企业微信 wecom.gowecom_app.go 微信企业版
飞书 feishu_32.gofeishu_64.go 飞书开放平台
Slack slack.go Slack Bot
WhatsApp whatsapp.go WhatsApp Bridge
MaixCAM maixcam.go Sipeed 硬件相机

4.4 Tools 模块 (pkg/tools/)

Agent 可使用的工具集:

工具 功能
filesystem.go 文件读写、目录列表
edit.go 文件编辑
shell.go 命令执行
web.go Web 搜索 (Brave/DuckDuckGo)
message.go 消息发送
spawn.go / subagent.go 子 Agent 派生
cron.go 定时任务
skills_install.go 技能安装
i2c.go / spi.go 硬件 I2C/SPI 通信
toolloop.go 工具循环执行控制

4.5 其他核心模块

  • pkg/cron/: 定时任务调度服务
  • pkg/heartbeat/: 周期性任务 (默认 30 分钟)
  • pkg/migrate/: 配置迁移工具 (从 OpenClaw 迁移)
  • pkg/auth/: OAuth/PKCE 认证
  • pkg/routing/: 消息路由和会话管理
  • pkg/devices/: USB 设备事件监听
  • pkg/health/: 健康检查服务器
  • pkg/logger/: 日志系统

4.6 系统级Prompt

4.6.1. AGENT.MD — 系统指令层(System Instructions)

作用:定义 AI 的核心行为准则和交互规范

特性  说明
定位 最基础的系统级 Prompt
内容 任务执行方式、工具使用规则、记忆管理、用户沟通原则
影响 直接控制 AI 的"行为模式"——如何思考、如何行动、何时询问澄清
类比 相当于员工的岗位操作手册

关键指令:
- "Always explain what you're doing before taking actions" → 透明度要求
- "Use tools to help accomplish tasks" → 启用工具调用能力
- "Remember important information in your memory files" → 激活记忆功能

4.6.2. SOUL.md — 人格/角色层(Persona/Character)

作用:塑造 AI 的"性格"和交互风格

特性  说明
定位 人格化层面的补充
内容 性格特质(友好、简洁、好奇)、价值观(准确优先、隐私保护)
影响 决定语气、表达方式、情感色彩**,但不改变核心能力
类比 相当于品牌调性指南或人物小传

4.6.3. USER.md — 用户上下文层(User Context)

作用:提供个性化交互所需的背景信息

特性  说明
定位 动态填充的用户画像模板
内容 用户的沟通偏好、个人信息、学习目标(当前为占位符)
影响 让 AI 能因人而异地调整回答风格和内容深度
类比 相当于客户关系管理(CRM)档案
4.6.4. IDENTITY.md — 身份/产品层(Product Identity)

作用:定义 AI 产品的元信息和技术规格

特性  说明
定位 产品说明书 + 项目文档
内容 名称、版本、技术栈、功能列表、设计理念、开源信息
影响 当用户询问"你是谁"或技术细节时提供准确信息;也用于自我认知
类比 相当于产品白皮书或自我介绍名片


- 支持多 LLM 提供商(OpenAI、Anthropic、Zhipu 等)
- 强调硬件限制($10 开发板、<10MB RAM)→ 影响回答时的资源意识
- 包含社区链接 → 用于引导用户获取支持

4.6.5层级关系图
 Identity.md      │   我是谁(产品身份)│  (元信息、技术规格、项目背景)       
 SOUL.md        │  我是什么性格(人格)│  (性格、价值观、交互风格)     
  AGENT.md     │  我该怎么做"(行为准则)│  (系统指令、工具使用、任务执行)      
 USER.md        │ 我在和谁对话(用户上下文│  (用户偏好、个人信息、学习目标)        

5. CLI 命令

命令 说明
picoclaw onboard 初始化配置和工作空间
picoclaw agent -m "..." 与 Agent 对话
picoclaw gateway 启动网关服务
picoclaw status 显示状态
picoclaw cron list 列出定时任务
picoclaw skills install 安装技能
picoclaw auth login OAuth 登录

6. 安全特性

  • 工作空间沙箱restrict_to_workspace 配置限制 Agent 只能访问指定目录
  • 命令执行保护: 阻止危险命令 (rm -rfformatdd if=shutdown 等)
  • 会话隔离: 子 Agent 继承相同的安全限制

7. PicoClaw Gateway 运行流程

7.1 启动流程

7.2 消息处理流程

用户发送消息
    │
    ▼
Channel (Telegram/Discord/QQ/...)
    │
    ├─► 接收 Webhook/Polling 消息
    ├─► 验证用户权限 (allow_from 白名单)
    ├─► 转换为 InboundMessage
    └─► 发送到消息总线: bus.PublishInbound(msg)
    │
    ▼
MessageBus (消息总线)
    │
    ▼
AgentLoop.Run() 消费消息
    │
    ├─► 1. 路由解析 (routing.ResolveRoute)
    │       根据 Channel/AccountID/Peer 确定 Agent 和 Session
    │
    ├─► 2. 获取 Agent 实例
    │
    └─► 3. runAgentLoop() 处理
            │
            ├─► 构建消息历史
            │       - 从 Session 加载历史消息
            │       - 获取 Summary (摘要)
            │       - ContextBuilder.BuildMessages()
            │
            ├─► runLLMIteration() - LLM 调用循环
            │       │
            │       ├─► 调用 LLM: provider.Chat()
            │       ├─► 检查响应
            │       │       - 无 ToolCalls: 返回内容
            │       │       - 有 ToolCalls: 执行工具
            │       │
            │       └─► 执行工具调用
            │               tools.ExecuteWithContext()
            │
            └─► 保存助手回复到 Session
                │
                ▼
                发送响应到 Outbound
                    │
                    ▼
                    dispatchOutbound() 分发到对应 Channel

8. picoclaw agent 命令运行流程

8.1 命令行入口

picoclaw agent [options]

选项:
  -m, --message "内容"    # 单次对话
  -s, --session "键"      # 指定会话键 (默认: cli:default)
  --model, -model "模型"  # 临时覆盖模型
  -d, --debug             # 调试模式

8.2 两种运行模式

模式 说明
单次对话模式 有 -m 参数,直接执行并返回,然后退出
交互式模式 无 -m 参数,使用 readline 逐行读取,持续对话

8.3 核心处理流程 (ProcessDirect)

ProcessDirect(ctx, content, sessionKey)
    │
    ▼
ProcessDirectWithChannel(ctx, content, sessionKey, "cli", "direct")
    │
    ▼
构建 InboundMessage
    {
        Channel:    "cli",
        SenderID:   "cron",
        ChatID:    "direct",
        Content:   content,
        SessionKey: sessionKey
    }
    │
    ▼
processMessage(ctx, msg)
    │
    ├─► 路由解析: "cli" -> default agent
    ├─► 构建 processOptions
    │
    ▼
runAgentLoop(ctx, agent, opts)
    │
    ├─► Step 1: 更新工具上下文
    ├─► Step 2: 构建消息
    │       - Sessions.GetHistory()
    │       - ContextBuilder.BuildMessages()
    │       - BuildSystemPrompt() ← 包含 Skills 摘要
    │
    ├─► Step 3: 保存用户消息
    │
    ├─► Step 4: LLM 迭代循环
    │       runLLMIteration()
    │       │
    │       ├─► provider.Chat()
    │       ├─► 执行工具 (read_file, exec, web_search, etc.)
    │       └─► 工具结果添加到消息历史
    │
    ├─► Step 5: 保存助手回复
    │
    ├─► Step 6: 摘要优化 (可选)
    │
    ▼
返回 response 字符串

9. Skills 系统技术分析

9.1 Skills 概述

Skills 是 PicoClaw 的扩展机制,允许 Agent 通过读取额外的技能定义文件来增强能力。

9.2 Skills 存储位置

位置 优先级 说明
Workspace Skills ~/.picoclaw/workspace/skills/{skill-name}/
Global Skills ~/.picoclaw/skills/{skill-name}/
Builtin Skills {picoclaw-binary}/skills/{skill-name}/

9.3 Skills 加载流程

Agent Loop 初始化
    │
    ▼
NewAgentLoop(cfg, msgBus, provider)
    │
    ▼
NewAgentRegistry(cfg, provider)
    │
    ▼
registerSharedTools()
    │
    ▼
创建 FindSkillsTool / InstallSkillTool
    │
    ▼
ContextBuilder.Initialize()
    │
    ▼
SkillsLoader.ListSkills()  ◄─────────────┐
    │                                    │
    │  遍历三个目录:                      │
    │  - workspace/skills/              │
    │  - ~/.picoclaw/skills/            │
    │  - builtin/skills/                 │
    │                                    │
    │  读取每个 skill 的 SKILL.md        │
    │  提取 metadata (name, description) │
    │                                    │
    └────────────────────────────────────┘
    │
    ▼
BuildSystemPrompt() 时
    │
    ▼
skillsLoader.BuildSkillsSummary()
    │
    ▼
生成 XML 格式的技能摘要:
<skills>
  <skill>
    <name>github</name>
    <description>GitHub 集成...</description>
    <location>~/.picoclaw/workspace/skills/github/SKILL.md</location>
    <source>workspace</source>
  </skill>
  ...
</skills>
    │
    ▼
注入到 System Prompt

9.4 SKILL.md 的处理方式

重要发现:SKILL.md 不是直接作为 System Prompt 注入!

实际机制

  1. 启动时:只注入 Skills 摘要(XML 格式),包含:

    • Skill 名称
    • Skill 描述
    • SKILL.md 文件位置
  2. 运行时:LLM 自主决定需要哪个 Skill,然后:

    • 调用 read_file 工具读取完整 SKILL.md 内容
    • 读取结果作为 tool message(角色为 "tool")添加到消息历史
    • 再次发送给 LLM,让 LLM 根据 Skill 提示处理请求

9.5 Skill 执行完整流程

用户: "帮我创建一个 GitHub Issue"
    │
    ▼
runAgentLoop()
    │
    ▼
BuildSystemPrompt() ──► 包含 Skills 摘要 XML
    │
    ▼
provider.Chat() ──► 发送给 LLM
    │
    ▼
LLM 决策:
  - 用户要求 GitHub 相关操作
  - 查看 Skills 摘要,发现有 "github" skill
  - 需要读取 SKILL.md 获取完整提示词
  - 调用 read_file 工具
    │
    ▼
tools.ExecuteWithContext("read_file", {path: "~/.../skills/github/SKILL.md"})
    │
    ▼
ReadFileTool.Execute()
    ├─► 检查 workspace 权限
    ├─► 读取 SKILL.md 文件内容
    └─► 返回 ToolResult { ForLLM: "完整 SKILL.md 内容..." }
    │
    ▼
toolResultMsg := Message{Role: "tool", Content: "SKILL.md 内容..."}
    │
    ▼
messages = append(messages, toolResultMsg)  ◄── 作为 tool message
    │
    ▼
provider.Chat() ──► 再次发送给 LLM,包含 SKILL.md 内容
    │
    ▼
LLM 现在:
  - 已读取 GitHub Skill 的完整提示词
  - 知道如何使用 GitHub API
  - 可以执行创建 Issue 的操作
    │
    ▼
返回最终响应给用户

9.6 消息类型对比

消息类型 角色 (Role) 来源 用途
System Prompt system 启动时构建 基础指令、身份、Skills 摘要
User Message user 用户输入 本次请求
Assistant Message assistant LLM 回复 响应或工具调用
Tool Message tool 工具执行结果 read_file 读取的 SKILL.md 内容

9.7 远程 Skills 注册表

支持从远程注册表(如 ClawHub)安装 Skills:

配置 config.json:
{
  "tools": {
    "skills": {
      "registries": {
        "clawhub": {
          "enabled": true,
          "base_url": "https://clawhub.ai"
        }
      }
    }
  }
}

可用工具

  • find_skills: 搜索远程 Skills
  • install_skill: 从远程安装 Skill

10. IoT 相关业务流程

10.1 设备服务模块 (pkg/devices/)

PicoClaw 提供了硬件设备监控能力,主要包括:

10.1.1 目录结构
pkg/devices/
├── service.go           # 设备服务主逻辑
├── source.go            # 事件源接口定义
├── events/
│   └── events.go        # 设备事件定义
└── sources/
    ├── usb_linux.go     # USB 热插拔监控 (Linux)
    └── usb_stub.go      # USB 监控存根 (非 Linux)
10.1.2 核心组件

DeviceEvent: 设备事件结构

type DeviceEvent struct {
    Action       Action           // add, remove, change
    Kind         Kind             // usb, bluetooth, pci, generic
    DeviceID     string           // 设备 ID (如 "1-2" 表示 USB 总线 1 设备 2)
    Vendor       string           // 厂商名称
    Product      string           // 产品名称
    Serial       string           // 序列号
    Capabilities string           // 能力描述
    Raw          map[string]string // 原始属性
}

EventSource: 事件源接口

type EventSource interface {
    Kind() Kind                    // 事件类型
    Start(ctx context.Context) (<-chan *DeviceEvent, error)  // 启动监控
    Stop() error                   // 停止监控
}
10.1.3 USB 热插拔监控流程
配置中启用:
{
  "devices": {
    "enabled": true,
    "monitor_usb": true
  }
}
    │
    ▼
NewService(cfg, stateMgr)
    │
    ▼
创建 USBMonitor:
    sources.NewUSBMonitor()
    │
    ▼
service.Start(ctx)
    │
    ├─► 启动 USBMonitor
    │       │
    │       ▼
    │       exec.Command("udevadm", "monitor", "--property", "--subsystem-match=usb")
    │       │
    │       └─► 监听 udevadm 输出的 USB 设备事件
    │
    └─► handleEvents() goroutine
            │
            ▼
            接收 DeviceEvent
            │
            ▼
            sendNotification()
            ├─► 获取最后活跃的 Channel
            ├─► 解析 platform 和 userID
            └─► 发送到消息总线
                │
                ▼
                用户收到通知:
                🔌 Device Connected
                
                Type: usb
                Device: Logitech USB Receiver
                Capabilities: HID (Keyboard/Mouse/Gamepad)
10.1.4 设备事件通知流程
USB 设备插入/拔出
    │
    ▼
udevadm monitor 检测到事件
    │
    ▼
parseUSBEvent() 解析事件
    │
    ├─► ACTION: add/remove
    ├─► ID_VENDOR: 厂商名
    ├─► ID_MODEL: 产品名
    ├─► ID_SERIAL_SHORT: 序列号
    ├─► ID_USB_CLASS: 设备类别
    └─► DEVPATH: 设备路径
    │
    ▼
DeviceEvent.FormatMessage()
    │
    ▼
🔌 Device Connected
    
Type: usb
Device: Logitech USB Receiver
Capabilities: HID (Keyboard/Mouse/Gamepad)
Serial: 12345678
    │
    ▼
bus.PublishOutbound() 发送到用户

10.2 I2C 工具 (pkg/tools/i2c.go)

10.2.1 功能概述

I2C 工具允许 Agent 与 I2C 总线设备交互,用于读取传感器和控制外设。

10.2.2 支持的操作
操作 说明
detect 列出可用的 I2C 总线
scan 扫描总线上的设备
read 从设备读取字节
write 向设备写入字节
10.2.3 I2C 工具执行流程
LLM 调用: i2c({action: "detect"})
    │
    ▼
I2CTool.Execute(ctx, args)
    │
    ▼
检测操作系统:
    ├─► Linux: 正常执行
    └─► Other: 返回错误 "I2C is only supported on Linux"
    │
    ▼
根据 action 分发:
    │
    ├─► detect: filepath.Glob("/dev/i2c-*")
    │       │
    │       ▼
    │       返回可用总线列表:
    │       [
    │         {"path": "/dev/i2c-1", "bus": "1"},
    │         {"path": "/dev/i2c-2", "bus": "2"}
    │       ]
    │
    ├─► scan: 扫描总线上的设备
    │       │
    │       ├─► 打开 /dev/i2c-{bus}
    │       ├─► 设置 I2C 地址
    │       ├─► SMBus Quick Write 探测
    │       └─► 返回发现的设备列表
    │
    ├─► read: 从设备读取
    │       │
    │       ├─► 打开设备
    │       ├─► 设置从机地址
    │       ├─► 可选:写入寄存器地址
    │       ├─► 读取数据
    │       └─► 返回十六进制数据
    │
    └─► write: 向设备写入
            │
            ├─► 需要 confirm: true (安全保护)
            ├─► 打开设备
            ├─► 设置从机地址
            ├─► 可选:写入寄存器地址
            ├─► 写入数据
            └─► 返回写入结果
10.2.4 使用示例
// 检测 I2C 总线
{"action": "detect"}

// 扫描总线 1 上的设备
{"action": "scan", "bus": "1"}

// 从地址 0x38 读取 4 字节
{"action": "read", "bus": "1", "address": 0x38, "length": 4}

// 从地址 0x38 的寄存器 0x01 读取 2 字节
{"action": "read", "bus": "1", "address": 0x38, "register": 0x01, "length": 2}

// 向地址 0x38 写入数据
{
  "action": "write",
  "bus": "1",
  "address": 0x38,
  "data": [0xFF, 0x00],
  "confirm": true
}

10.3 SPI 工具 (pkg/tools/spi.go)

10.3.1 功能概述

SPI 工具允许 Agent 与 SPI 总线设备交互,用于高速外设通信。

10.3.2 支持的操作
操作 说明
list 列出可用的 SPI 设备
transfer 全双工发送/接收
read 接收字节 (发送零字节)
10.3.3 SPI 工具执行流程
LLM 调用: spi({action: "list"})
    │
    ▼
SPITool.Execute(ctx, args)
    │
    ▼
检测操作系统:
    ├─► Linux: 正常执行
    └─► Other: 返回错误 "SPI is only supported on Linux"
    │
    ▼
根据 action 分发:
    │
    ├─► list: filepath.Glob("/dev/spidev*")
    │       │
    │       ▼
    │       返回可用设备列表:
    │       [
    │         {"path": "/dev/spidev2.0", "device": "2.0"},
    │         {"path": "/dev/spidev2.1", "device": "2.1"}
    │       ]
    │
    ├─► transfer: 全双工传输
    │       │
    │       ├─► 打开 /dev/spidev{device}
    │       ├─► 配置: speed, mode, bits
    │       ├─► 设置 CS 模式和延迟
    │       ├─► 执行 transfer (同时发送和接收)
    │       └─► 返回发送/接收的数据
    │
    └─► read: 读取数据
            │
            ├─► 打开设备
            ├─► 配置参数
            ├─► 发送零字节,接收数据
            └─► 返回接收的数据
10.3.4 使用示例
// 列出 SPI 设备
{"action": "list"}

// 全双工传输
{
  "action": "transfer",
  "device": "2.0",
  "speed": 1000000,
  "mode": 0,
  "bits": 8,
  "data": [0xAA, 0x55, 0x01],
  "confirm": true
}

// 读取 8 字节
{"action": "read", "device": "2.0", "length": 8}

10.4 IoT 业务流程总结

11. 关键代码文件索引

功能模块 关键文件
CLI 入口 cmd/picoclaw/main.go
Agent 核心 pkg/agent/loop.gopkg/agent/context.go
Provider 工厂 pkg/providers/factory.go
消息总线 pkg/bus/bus.go
Channel 管理 pkg/channels/manager.go
工具注册 pkg/tools/registry.go
Skills 加载 pkg/skills/loader.go
设备服务 pkg/devices/service.go
I2C 工具 pkg/tools/i2c.gopkg/tools/i2c_linux.go
SPI 工具 pkg/tools/spi.gopkg/tools/spi_linux.go
会话管理 pkg/session/manager.go
定时任务 pkg/cron/service.go
心跳任务 pkg/heartbeat/service.go

12. 配置示例

完整配置示例

{
  "agents": {
    "defaults": {
      "workspace": "~/.picoclaw/workspace",
      "restrict_to_workspace": true,
      "model": "gpt4",
      "max_tokens": 8192,
      "temperature": 0.7,
      "max_tool_iterations": 20
    }
  },
  "model_list": [
    {
      "model_name": "gpt4",
      "model": "openai/gpt-5.2",
      "api_key": "sk-your-openai-key"
    }
  ],
  "channels": {
    "telegram": {
      "enabled": true,
      "token": "YOUR_TELEGRAM_BOT_TOKEN",
      "allow_from": ["YOUR_USER_ID"]
    },
    "discord": {
      "enabled": false,
      "token": "YOUR_DISCORD_BOT_TOKEN",
      "allow_from": []
    }
  },
  "tools": {
    "web": {
      "brave": {
        "enabled": false,
        "api_key": "YOUR_BRAVE_API_KEY"
      },
      "duckduckgo": {
        "enabled": true
      }
    },
    "skills": {
      "registries": {
        "clawhub": {
          "enabled": true,
          "base_url": "https://clawhub.ai"
        }
      }
    }
  },
  "devices": {
    "enabled": true,
    "monitor_usb": true
  },
  "heartbeat": {
    "enabled": true,
    "interval": 30
  }
}

13. 总结

PicoClaw 是一个设计精良的超轻量级 AI Agent 框架,其核心特点:

  1. 极简设计: 单二进制文件,无复杂依赖
  2. 模块化架构: Provider、Channel、Tools 解耦清晰
  3. 多平台支持: 从嵌入式设备到云服务器
  4. AI 原生: 95% 代码由 AI Agent 生成,体现现代 AI 工程实践
  5. 社区活跃: 支持多种通讯平台和 LLM 提供商
  6. IoT 能力: 内置 I2C/SPI 工具和 USB 设备监控,适配硬件场景

该项目的架构对于构建需要在资源受限环境下运行的 AI 应用具有重要参考价值,特别是嵌入式和 IoT 场景。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐