Nanobot 从onboard启动命令来看个人助理Agent的实现

Nanobot轻量AI代理:可审计、可调试、可复现的本地化实践指南 AI代理本质上是连接大语言模型与操作系统能力的执行层,其核心原理在于消息解析、工具调度与状态管理。技术价值不在于参数规模或云原生兼容性,而在于开发者能否在5分钟内定位故障、理解每行命令的执行路径,并确保所有IO行为完全可控。这直接支撑起三类关键应用场景:安全敏感型系统集成(如金融/医疗后端)、教学演示(向学生直观展示LLM如何调用grep或curl)、以及边缘/低功耗设备部署(树莓派、老款MacBook)。Nanobot正是这一理念的工程实现——它用Python 3.11的结构化匹配、文件系统级Statef 阅读详情

背景

在之前的文章中Nanobot 轻量级的个人AI助手,我们提到了两个命令
一个是nanobot onboard,另一个是nanobot gateway,
从整理上来看,该 nanobot用到了Typer,Rich,Questionary,prompt_toolkit这种现代、美观且交互式命令行界面 (CLI) 的强大工具组合。
Typer 用于定义 CLI 结构和参数;Rich 负责文本样式、表格、面板和 Markdown 渲染;Questionary 用于创建交互式问答界面
其中 Rich中的Console,Markdown,Table,Text用来进行渲染,支持颜色、表格、面板、语法高亮和 Markdown ,以更好的进行个性化的展示。

nanobot onboard命令

onboard 是 Typer 子命令,用于 首次或再次初始化 nanobot:处理配置文件路径、创建/更新 config.json、可选交互向导、合并channel插件默认配置、创建工作区并同步模板,最后打印下一步提示。

@app.command()
def onboard(
    workspace: str | None = typer.Option(None, "--workspace", "-w", help="Workspace directory"),
    config: str | None = typer.Option(None, "--config", "-c", help="Path to config file"),
    wizard: bool = typer.Option(False, "--wizard", help="Use interactive wizard"),
):
    """Initialize nanobot configuration and workspace."""
    ...
参数说明
-c / --config指定配置文件路径;若给出,会调用 set_config_path,后续读写均针对该文件。
-w / --workspace覆盖配置中的 agents.defaults.workspace(在内存中的 Config 上生效,保存时写入)。
--wizard启用交互式向导(nanobot.cli.onboard.run_onboard),由向导决定是否保存。
  1. 第一步便是配置文件的路径,如果指定了–config,就从这里进行查找,否则默认为 ~/.nanbot/.config.json :
if config:
        config_path = Path(config).expanduser().resolve()
        set_config_path(config_path)
        console.print(f"[dim]Using config: {config_path}[/dim]")
else:
    config_path = get_config_path()
  1. 创建或者更新config.json文件
  • 配置文件已存在

    • 如果是wizard: 只 load_config + 工作区覆盖,不在这里做覆盖/刷新的交互;后面交给向导统一保存。
    • 非 wizard:
      提示:已存在,用typer.confirm("Overwrite?")问是否 Overwrite。
      确认覆盖:Config() 全新默认 + 工作区覆盖 → save_config,相当于重置为默认。
      不覆盖:load_config + 工作区覆盖 → save_config,保留已有字段值,同时用 save_config 把结构写回到config路径下。
  • 配置文件不存在
    Config() 默认 + 工作区覆盖。
    非 wizard:立刻 save_config
    wizard:先不保存,等向导结束再决定是否写盘。
    注意这里json配置转换为python Config配置用到了 pydantic 的 BaseSettings Field(default_factory=...) 以及 model_validate用于将数据(如字典)转换并验证为模型实例的方法。

if config_path.exists():
        if wizard:
            config = _apply_workspace_override(load_config(config_path))
        else:
            console.print(f"[yellow]Config already exists at {config_path}[/yellow]")
            console.print("  [bold]y[/bold] = overwrite with defaults (existing values will be lost)")
            console.print("  [bold]N[/bold] = refresh config, keeping existing values and adding new fields")
            if typer.confirm("Overwrite?"):
                config = _apply_workspace_override(Config())
                save_config(config, config_path)
                console.print(f"[green]✓[/green] Config reset to defaults at {config_path}")
            else:
                config = _apply_workspace_override(load_config(config_path))
                save_config(config, config_path)
                console.print(f"[green]✓[/green] Config refreshed at {config_path} (existing values preserved)")
    else:
        config = _apply_workspace_override(Config())
        # In wizard mode, don't save yet - the wizard will handle saving if should_save=True
        if not wizard:
            save_config(config, config_path)
            console.print(f"[green]✓[/green] Created config at {config_path}")

  1. 进行向导式的配置
    如果配置了进行了向导式的操作,则利用 questionary包 进行引导式的操作,并且借助于prompt_toolkit 这个强大、交互式命令行界面(CLI)的纯 Python 库,
    具体见 onboard.py中的_select_with_back方法,使用KeyBindings捕获键盘的操作,用来锁定选择的配置,之后在利用python的 getattr 和 setattr以及_configure_pydantic_model方法 进行对应的配置
    并且会根据返回的值,判断是否进行持久化配置操作。
 try:
          answer = _get_questionary().select(
              "What would you like to configure?",
              choices=[
                  "[P] LLM Provider",
                  "[C] Chat Channel",
                  "[A] Agent Settings",
                  "[G] Gateway",
                  "[T] Tools",
                  "[V] View Configuration Summary",
                  "[S] Save and Exit",
                  "[X] Exit Without Saving",
              ],
              qmark=">",
          ).ask()
      except KeyboardInterrupt:
          answer = None

      if answer is None:
          action = _prompt_main_menu_exit(_has_unsaved_changes(original_config, config))
          if action == "save":
              return OnboardResult(config=config, should_save=True)
          if action == "discard":
              return OnboardResult(config=original_config, should_save=False)
          continue

      _MENU_DISPATCH = {
          "[P] LLM Provider": lambda: _configure_providers(config),
          "[C] Chat Channel": lambda: _configure_channels(config),
          "[A] Agent Settings": lambda: _configure_general_settings(config, "Agent Settings"),
          "[G] Gateway": lambda: _configure_general_settings(config, "Gateway"),
          "[T] Tools": lambda: _configure_general_settings(config, "Tools"),
          "[V] View Configuration Summary": lambda: _show_summary(config),
      }
  1. 同步配置channel
    对于已经配置好,或者没有配置的channel,都会写入到config.json文件中,
    没有配置的会写入默认值,配置的则覆盖默认值。
  2. 同步工作区配置
    把templates目录下的 AGENTS.md,HEARTBEAT.md,SOUL.md,TOOLS.md,USER.md等文件拷贝到工作目录下.
    形成如下的目录结构:
     ├── AGENTS.md
     ├── HEARTBEAT.md
     ├── memory
     │   ├── HISTORY.md
     │   └── MEMORY.md
     ├── skills
     ├── SOUL.md
     ├── TOOLS.md
     └── USER.md
    
51单片机——LCD12864驱动函数深度解析与实战优化 本文深入解析了51单片机驱动LCD12864液晶屏的核心驱动函数,从底层时序、关键延时到地址计算进行逐行剖析,并针对常见显示问题提供系统性的调试技巧与实战优化方案。重点探讨了如何将基础代码优化为稳定高效的驱动,涵盖延时精准化、批量写入及显示缓冲区等高级技巧,旨在帮助开发者从“点亮”屏幕进阶到“精通”驱动,确保显示稳定可靠。 阅读详情

相关推荐

JavaScript性能优化:全链路性能优化策略

JavaScript性能优化是提升Web应用质量的核心要素,直接影响用户体验与业务成果。研究表明,页面加载延迟1秒可能导致转化率下降7%。高效的JavaScript执行能减少主线程阻塞,避免动画卡顿或操作延迟,尤其在移动端低性能设备上更为关键。优化内存管理与减少冗余计算可降低浏览器资源消耗,防止因内存泄漏导致的崩溃,提升应用稳定性。在竞争激烈的互联网环境中,性能优势已成为产品差异化的关键因素,直接影响用户留存与商业价值。因此,性能优化应作为开发全周期的核心实践,而非事后补救措施。

weixin_49707375的博客 1272

Nanobot 从 gateway 启动命令来看个人助理Agent的实现

本文分析了nanobot gateway命令的实现细节。该命令用于启动AI助手网关进程,采用Typer、Rich等现代CLI工具构建交互界面。核心功能包括: 参数处理:支持自定义端口、工作区路径、日志级别和配置文件路径 核心组件初始化: 消息总线(MessageBus)管理进程内消息队列 根据配置实例化LLM Provider 会话管理器(SessionManager)实现对话持久化 定时任务服务: 通过CronService管理定时任务 任务触发时构建消息并调用AI处理 支持结果通知和响应评估 系统采用a

monkeyboy_tech的博客 565

如何实现VMware虚拟机上的ubuntu与windows主机共享文件夹

windows主机部分   在硬盘上任意位置新建文件夹,此处命名为Share,实际上随意。 接下来右键属性,操作如下系列图所示: 在硬盘上任意位置新建文件夹,此处命名为Share,实际上随意。 成功修改后,显示如下界面: VMware部分 ubuntu在关机状态下,点击“编辑虚拟机设置” 接下来,开启ubuntu系统,在终端输入: ·· vmware-hgfsclient ·· 将会显示如下画面,但是此时你可能找不到 /mnt/hgfs 这个路径,如果找不到该路径,则需要在虚拟

Mr.Sliver的博客 8218

:环境搭建、Debug 配置与 onboard 命令详解

是一个 CLI 工具,最专业的调试方式就是在 IDE(如 PyCharm 或 VS Code)中创建针对不同子命令的 Debug 配置。它会加载你的配置和工作空间,进入一个交互式的 loop。你只需要修改这些 Markdown 文件,就能改变 Agent 的行为,而不需要动一行 Python 代码。是 nanobot 的灵魂。这样你的 Debug 列表会非常整洁,一眼就能看出当前在调试哪个功能,这才是专业开发者的姿态。它像一个中转站,把各种聊天平台的信号接入到 nanobot 的核心逻辑中。

wd5i8kA8i的博客 452

M2DGR数据集在一些SLAM框架上的配置与运行:ORB-SLAM系列、VINS-Mono、LOAM系列、FAST-LIO系列、hdl_graph_slam

为了说明以上这些SLAM框架的测试与数据集适配,以M2DGR数据集为例进行各自的配置与运行,方便我以后适配自己的数据集,运行的SLAM框架包括:ORB-SLAM2、ORB-SLAM3、VINS-Mono、A-LOAM、LeGO-LOAM、LIO-SAM、LVI-SAM、FAST-LIO2、FAST-LIVO、Faster-LIO、hdl_graph_slam。实验基于Ubuntu20.04,其中ORB、VINS-Mono、和LOAM系列的安装参考我以前的博客,有详细的安装方法,其他的框架在后面会简单介绍一下

zardforever123的博客 1万+

手把手教你用示波器搞定PCIe 5.0 REFCLK时钟信号测量(附完整参数解读)

本文详细介绍了如何使用示波器进行PCIe 5.0 REFCLK时钟信号测量,包括示波器与探头的选择、关键参数的测量方法及解读,以及实战中的常见问题与解决方案。通过手把手教学和完整参数解读,帮助硬件工程师高效完成时钟信号测量,确保系统稳定性。

weixin_28704565的博客 359

nanobot多实例实战:为不同渠道和项目并行运行独立AI代理

**nanobot** 是一个用 Python 编写的超轻量级、开源、自托管个人 AI 代理框架,内置 WebUI、工具调用、长期记忆、MCP 集成与多智能体协作能力,可对接 Telegram、Discord、飞书等多种聊天渠道。当你需要为不同渠道和项目各跑一个"人格独立"的 AI 代理时,nanobot 的多实例机制就是为这种场景设计的——同一台机器上并行运行多个完全隔离的实例,各自拥有独立的配

gitblog_00606的博客 1018

高通Camera HAL3调试实战:如何用camxoverridesettings.txt高效抓取日志与dump图像数据

本文深入探讨了高通Camera HAL3调试中camxoverridesettings.txt文件的高效应用,重点介绍了如何通过该文件精准控制日志输出级别与dump图像数据,帮助开发者快速定位移动影像系统中的问题。文章详细解析了日志分级配置、图像数据捕获技巧及典型问题排查流程,为高通Camera HAL3项目开发提供了实用技术点。

weixin_30315905的博客 861

awesome-deepseek-agent 实战:nanobot 轻量级 Agent 接入 DeepSeek 配置教程

AI Agent 工具层出不穷,nanobot 凭借轻量级与易上手的特点脱颖而出,是普通用户接入 DeepSeek 的极简之选。本文是 awesome-deepseek-agent 精选指南中的 nanobot 配置教程,从安装、配置到首次对话全程图解,无需编程基础,几分钟即可跑通属于你的 DeepSeek Agent。核心流程只有三步:一键安装、修改配置文件、启动对话。 ## nanobot

gitblog_00008的博客 403

Cilium动手实验室: 精通之旅---1.Getting Started with Cilium

我们需要在 HTTP 层的第 7 层实施策略,以限制允许 tiefighter 调用的确切 API,以及不允许调用哪些 API。上仅需要的 API 资源的访问,从而为微服务之间的通信实施“最低权限”安全方法。船只上进行匹配,因此我们需要在该标签上进行匹配,此外,我们必须确保来自带有标签。为了模拟我们的连接测试,我们将使用 curl 执行简单的 API 调用。在我们立即开始更改策略之前,让我们考虑一下相应的网络策略应该是什么样子。的规则,该规则将通过 L3-L4 策略对死星的访问限制为仅帝国船只。

Q先生 1126

Luma AI技术浅析(一)

是一款基于人工智能的3D内容生成平台,旨在通过深度学习技术实现高效、高质量的3D场景、物体和动画的生成。Luma AI 主要利用了等技术,以实现从图像、视频到3D模型的转换和生成。

m0_75253143的博客 1728

如何让你的AI接入真实世界:nanobot MCP工具配置实战教程

nanobot 是一个用 Python 编写的超轻量、开源、可自托管的个人 AI Agent 框架,内置 WebUI、工具调用、长期记忆、MCP 集成与多渠道聊天应用。本文手把手教你通过 **MCP(Model Context Protocol)工具配置**,让你的 nanobot AI 智能体接入浏览器、Notion、GitHub、网页搜索等真实世界能力——全程只需几步,新手也能 10 分钟完成

gitblog_00242的博客 876

WiFi偏门协议(四):增强的传输机制802.11aa

区分Unicast和Multicast的优先级,以及设定不同的重传次数,以细化EDCA机制。 SCS(StreamClassification Service) 如上图,在VI,VO内各自又增加了一个queue, 对应不同的MAC header。VI和VO内的两个queue可以分别对应UC和MC。这样就提供了同一个AC内的更细粒度的优先级区分。当然还可以使用Drop Eligibility Indication子域来区分不同的重传次数。 改善Multicast数据传...

reekyli的专栏 1790

NanoBot 源码环境搭建全流程教程

NanoBot 凭借精简的代码架构、清晰的模块设计和便捷的部署流程,为 AI 助手开发提供了优质的学习与实践平台。通过本文介绍的配置步骤,你已具备从源码层面探索和定制 AI 助手的基础能力。后续可深入研究其 Agent 循环机制、记忆管理模块和工具调用系统,逐步构建符合个人需求的智能助手。无论是作为开发学习项目还是实际应用工具,NanoBot 都展现出了 "小而美" 的独特价值。

2509_94615068的博客 601

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HKUDS开源NanoBot:简介、源码、原理、实战

Agent-Loop、架构、核心方法、工具调用处理、会话管理、MCP服务器连接、进度回调、子代理:、最佳实践、实战

lonelymanontheway的博客 704

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

openclaw最强平替之nanobot 源码解析(一):环境搭建、Debug 配置与 onboard 命令详解

学习任何一个开源项目,第一步永远是:把它跑起来,然后看它怎么动。nanobot 的安装和配置非常简单,但简单背后隐藏着很多 Agent 设计的精妙之处。今天,我们就来拆解它的“启动仪式”。

优快云_Lrcx的博客 1391

nanobot日志初使用:用 TaoToken 统一 Key 打通 AI Agent 智能体框架配置

nanobot 日志初上手,把 log.level 调成 DEBUG 就能看清请求与返回。本文给出 config.toml 与 settings.json 可复制骨架,用 TaoToken 统一 Key 接入 AI Agent 智能体框架,并附一次日志验证动作确认请求发出与返回。官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end

Ceshi01的博客 13

让AI代理完成长任务:nanobot持续目标与后台Gateway运行实战

**nanobot** 是一个超轻量、开源、可自托管的 Python 个人 AI 代理(AI Agent)框架,它通过**持续目标(sustained goals)**、持久会话、定时自动化和后台 **Gateway** 进程,让 AI 代理能够跨越多个回合持续推进长任务,而不是"一问一答"就结束。本文将带你快速上手:如何安装 nanobot、如何用 `/goal` 下达长任务目标、如何用 Gat

gitblog_00191的博客 679

如何把公司内部 OpenAI 兼容网关接入 nanobot:apiBase 与 model preset 配置

公司通常会自建一套 LLM 网关:对外暴露 OpenAI 兼容的 `/v1` 接口,用内部凭证鉴权,模型以网关自己的模型 ID 提供服务。nanobot 支持把这类「未被内置 provider 命名」的端点作为自定义 provider 接入——在 `~/.nanobot/config.json` 里写一个 provider 块提供 `apiBase` 与 `apiKey`,再建一个 model p

gitblog_00627的博客 939

小白也能玩转AI:nanobot一键部署教程

本文介绍了如何在星图GPU平台上一键自动化部署超轻量级AI助手🐈 nanobot镜像,实现智能对话与系统命令执行。该镜像基于Qwen3模型,支持Web界面和QQ机器人交互,适用于个人AI助手开发、自动化运维等场景,极大降低了AI应用部署门槛。

weixin_35294091的博客 297

理解整数在计算机中的表示

命名规范:建议采用 nanobot: [command] 的格式,例如 nanobot: onboard、nanobot: agent 或 nanobot: gateway。Debug 小贴士:如果你想调试 nanobot 的启动逻辑,直接定位到 nanobot/cli/commands.py,从 app 对象开始追踪即可。指定入口:当你输入 nanobot 时,它实际上调用的是 nanobot/cli/commands.py 文件中的 app 对象。安装完成后,你会获得一个 nanobot 命令。

pxlv23P2s的博客 239

PHP 图像处理实战 GD/Imagick 从入门到精通,构建高性能图像服务

命名规范:建议采用 nanobot: [command] 的格式,例如 nanobot: onboard、nanobot: agent 或 nanobot: gateway。Debug 小贴士:如果你想调试 nanobot 的启动逻辑,直接定位到 nanobot/cli/commands.py,从 app 对象开始追踪即可。指定入口:当你输入 nanobot 时,它实际上调用的是 nanobot/cli/commands.py 文件中的 app 对象。安装完成后,你会获得一个 nanobot 命令。

2501_94611622的博客 226

PicoClaw 上手全指南:用 Go 打造 10MB 级超轻量 AI 助手(安装、配置、Provider、Channel、Skill 与 MCP 实战)

本篇指南围绕 picoclaw 项目(仓库根目录 [README.md](https://link.gitcode.com/i/37b45cd37d98ea73c9e2012a91a799da))展开,完整讲解这一款完全用 **Go 语言**从零构建的轻量级个人 AI 助手:从核心设计理念、资源开销对比、源码编译与 Docker 部署,到 WebUI Launcher / Android / Te

gitblog_00070的博客 321

OpenClaw相关项目:Awesome系列、PicoClaw、ClawWork、ClawX、MetaClaw、OpenClawInstaller、Clawra、MicroClaw、OneClaw

OpenClaw相关项目:awesome-openclaw-skills、awesome-openclaw-usecases、PicoClaw、ClawWork、ClawX、MetaClaw、OpenClawInstaller、Clawra、MicroClaw、OneClaw

lonelymanontheway的博客 2033

Understand Anything 多智能体知识图谱管线:从代码扫描到可交互 Dashboard 的实现解析

本文以 Understand Anything 的官方文档为主线,系统拆解它如何用一条「Tree-sitter 静态分析 + LLM 语义理解」的多智能体管线,把任意代码库 / 知识库 / 文档转换成可探索、可检索、可问答的知识图谱,并落到一个可交互的 Web Dashboard。读完你应能掌握:如何安装并在 Claude Code / Codex / Cursor / Copilot / Gem

gitblog_00799的博客 1037

IronClaw Telegram 渠道接入指南:从 BotFather 建号、HTTPS 隧道到 Webhook 配置与故障排查

本文以 IronClaw 官方中文渠道文档 [docs/zh/channels/telegram.md](https://link.gitcode.com/i/bf1da26da126fb4a335b7d4a55f876a8) 为核心骨架,结合仓库中 Telegram 扩展的清单文件与源码实现,系统讲解如何将 IronClaw 实例接入 Telegram 机器人:涵盖前提条件、BotFather

gitblog_00983的博客 869
上一篇: Nanobot 轻量级的个人AI助手
下一篇: Nanobot 从 gateway 启动命令来看个人助理Agent的实现
鸿乃江边鸟
博客等级 码龄6年 3746粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值