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

从OpenClaw到Nanobot:轻量级AI Agent核心原理与实现解析 AI Agent(智能体)作为连接大语言模型与现实世界的关键技术,其核心在于实现自主推理与工具调用。其底层原理通常围绕一个简洁的“消息循环”架构展开:Agent接收用户指令,通过精心设计的提示工程引导大模型进行思考与规划,解析出结构化的工具调用指令,随后在安全的执行环境中调用注册的工具函数,并将结果反馈至上下文,循环往复直至任务完成。这种设计模式在工程上实现了逻辑的清晰解耦与高效调度,是构建自动化助手、智能客服等应用的基础。本文聚焦于轻量级Agent框架Nanobot,它正是对这一核心原理的极致简化实践,旨 阅读详情

背景

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

nanobot gateway命令

gateway 是 Typer 子命令,用于 启动 nanobot 网关进程:加载配置、同步工作区模板、创建消息总线与 LLM Provider、会话管理、Cron、AgentLoop、
ChannelManager(各聊天频道)、Heartbeat,最后用 asyncio.run 并发跑 agent 主循环 + 所有channel,并在退出时做清理.

def gateway(
    port: int | None = typer.Option(None, "--port", "-p", help="Gateway port"),
    workspace: str | None = typer.Option(None, "--workspace", "-w", help="Workspace directory"),
    verbose: bool = typer.Option(False, "--verbose", "-v", help="Verbose output"),
    config: str | None = typer.Option(None, "--config", "-c", help="Path to config file"),
):
参数说明
-p / --port端口;未传入时使用配置中的 config.gateway.port。貌似在这里也没有太大的作用
-w / --workspace覆盖配置中的工作区路径(经 _load_runtime_config 写回 Config)。
-v / --verbose为 True 时对标准库 logging 设置 DEBUG,便于查看更底层日志。
-c / --config指定配置文件路径(同样由 _load_runtime_config 处理)。
  1. 核心组件实例化
  • MessageBus():进程内入站/出站消息队列。
  • _make_provider(config):按当前默认模型解析 provider,构造具体 Provider 实例(含 generation 设置);若缺少 API key 等会 typer.Exit。
  • SessionManager(config.workspace_path):会话持久化(JSONL 等),与工作区目录绑定。
  • CronService(cron_store_path),随后将 cron.on_job 设为下文所述异步回调。

MessageBus
这是消息总线,主要包括从channel传递过来的Message,和需要发送给channel的Message:

 self.inbound: asyncio.Queue[InboundMessage] = asyncio.Queue()
 self.outbound: asyncio.Queue[OutboundMessage] = asyncio.Queue()

asyncio.Queue 是 Python asyncio 库中用于在异步协程(Coroutine)之间安全传递数据的先进先出(FIFO)数据结构。这里默认允许放入任意数量的元素。
它是协程同步的,能安全地在协程间共享数据,类似于线程同步。

make_provider
根据当前 Config(主要是默认 model 和 providers.*)构造并返回一个 LLM Provider 实例,供 gateway、agent 等命令里的 AgentLoop 使用。
这里的provider主要有以下几种:

  • azure_openai 对应 AzureOpenAIProvider
  • openai_compat 对应 OpenAICompatProvider
  • openai_codex 对应 OpenAICodexProvider
  • anthropic 对应 AnthropicProvider
    这些provider提供与大模型的交互

SessionManager
这里主要负责在工作区里 按「会话键」加载、缓存、保存对话会话。每个会话对应磁盘上的一个 JSONL 文件,键一般是 channel:chat_id
如下:

├── sessions
│   ├── cli_direct.jsonl
│   └── feishu_ou_52720638d0cxxxxf.jsonl

这里的目录在workspace/session下
2. Cron 服务
任务持久化路径:workspace/cron/jobs.json。
CronService(cron_store_path),下面会把 cron.on_job 设为异步回调

    if is_default_workspace(config.workspace_path):
        _migrate_cron_store(config)

    # Create cron service with workspace-scoped store
    cron_store_path = config.workspace_path / "cron" / "jobs.json"
    cron = CronService(cron_store_path)
    ...
    async def on_cron_job(job: CronJob) -> str | None:
        """Execute a cron job through the agent."""
        from nanobot.agent.tools.cron import CronTool
        from nanobot.agent.tools.message import MessageTool
        from nanobot.utils.evaluator import evaluate_response

        reminder_note = (
            "[Scheduled Task] Timer finished.\n\n"
            f"Task '{job.name}' has been triggered.\n"
            f"Scheduled instruction: {job.payload.message}"
        )

        cron_tool = agent.tools.get("cron")
        cron_token = None
        if isinstance(cron_tool, CronTool):
            cron_token = cron_tool.set_cron_context(True)
        try:
            resp = await agent.process_direct(
                reminder_note,
                session_key=f"cron:{job.id}",
                channel=job.payload.channel or "cli",
                chat_id=job.payload.to or "direct",
            )
        finally:
            if isinstance(cron_tool, CronTool) and cron_token is not None:
                cron_tool.reset_cron_context(cron_token)

        response = resp.content if resp else ""

        message_tool = agent.tools.get("message")
        if isinstance(message_tool, MessageTool) and message_tool._sent_in_turn:
            return response

        if job.payload.deliver and job.payload.to and response:
            should_notify = await evaluate_response(
                response, job.payload.message, provider, agent.model,
            )
            if should_notify:
                from nanobot.bus.events import OutboundMessage
                await bus.publish_outbound(OutboundMessage(
                    channel=job.payload.channel or "cli",
                    chat_id=job.payload.to,
                    content=response,
                ))
        return response
    cron.on_job = on_cron_job

on_cron_job 这个是在定时任务触发时调用该方法,主要是逻辑是
构建一个 Message 信息并直接 让大模型去处理对应的信息,并且保留该job对应的 channel 和 chat_id (这个会在消息处理的时候进行传递,
具体是在 _run_agent_loop 方法中调用 _set_tool_context),同时也会保留当前协程的上下文(用contextvars保留),防止在执行任务的增加任务而导致重复增加调度任务(具体见CronTool的execute方法中add的判断)
根据大模型的反馈来决定需不需要进行通知。

  1. ChannelManager
    ChannelManager(config, bus):按配置启动 feishu/dingding 等channel插件,与 MessageBus 对接,用于从channel发送消息到处理队列,以及传递消息给对应的Channel,
    这里会通过pkgutil.iter_modules(nanobot.channels) 遍历nanobot.channels路径下所有子模块和子包,
    并结合importlib.import_module(如果模块已导入,则直接返回) dir(mod)动态的获取模块的BaseChannel子类。

  2. Heartbeat 服务
    周期性的读取 Heartbeat.md 文件,并使用大模型总结该文件下的活跃任务调用大模型去执行,最后还是调用大模型去判断是否需要把任务的结果回传给Channel
    对于 heartbeat session则只会保留最近几条信息,默认是8条,由gateway.heartbeat.keepRecentMessages来决定,
    对于 回传给哪个 Channel,会按照激活的Channel从最新的活跃时间排序,取最新的Channel(排除纯本地(CLI) / 系统(System))

  3. 启动cron hearbeat 服务,并开启主流程循环,启动所有的channel

       await cron.start()
       await heartbeat.start()
       await asyncio.gather(
           agent.run(),
           channels.start_all(),
    

注意这里的AgentLoop.run是个死循环。所以该命令会使进程hang在这里。

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

相关推荐

MAS1102量产工具实战指南:从下载到开卡,附固件选择与RDT优化技巧

本文提供MAS1102量产工具的实战指南,涵盖从工具下载、短接识别到开卡操作的全过程。重点解析了固件选择策略与RDT优化技巧,帮助用户成功修复基于联芸MAS1102主控的固态硬盘,解决常见开卡错误并提升SSD性能与稳定性。

c2d3e4f的博客 2203

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

Nanobot是一款基于Typer、Rich、Questionary等工具的轻量级AI助手CLI工具。其onboard命令用于初始化配置和工作区,支持通过参数或交互式向导设置配置文件路径、工作区目录等。配置处理采用pydantic进行数据验证,向导界面利用Questionary和prompt_toolkit实现交互式操作,支持配置LLM提供商、聊天通道等功能。该命令会根据用户选择决定是否保存配置,提供灵活且美观的命令行体验。

monkeyboy_tech的博客 405

COMSOL 6.4安装全攻略:安装包获取、许可证配置与避坑指南

多物理场仿真是现代工程与科研中不可或缺的技术手段,其核心原理在于将电磁、结构、流体、传热等不同物理过程的耦合效应置于统一环境中求解,从而真实模拟复杂系统行为。这类仿真平台能大幅提升产品研发与设计验证效率,广泛应用于电子散热、声学分析、电力设备等领域。在部署最新版本仿真软件时,安装与许可证配置往往成为影响工作效率的关键环节。本文系统梳理COMSOL 6.4在Windows平台的安装全流程,涵盖安装包获取、系统依赖准备、许可证配置、常见报错排查等实用经验,帮助工程师与科研人员一次性完成环境搭建,把更多时间投入真

weixin_30000735的博客 1354

OpenClaw 内置 Cron 原理

OpenClaw的定时任务系统采用内置Cron调度器实现,通过维护Cron表达式周期性计算触发时间。任务配置存储在.openclaw/cron/jobs.json文件中,路径由数据目录和固定子路径组成。配置包含任务ID、执行代理、调度计划(支持三种类型:一次性、固定间隔和标准Cron)、执行内容等。系统支持自然语言配置,会自动将任务持久化到指定目录。运行状态包括下次触发时间、上次执行结果等信息,执行时可选择主会话或隔离会话模式。

西京刀客 3114

快速了解Spyder

一 面板介绍菜单栏:放置所有功能工具栏:放置快捷菜单,可以通过菜单栏中的View的Toolbars的复选框来勾选工作区:写代码的地方属性页的标题栏:可以显示当前代码的名字和位置查看栏:查看文件、调试时的对象及变量输出栏:查看程序的输出信息,也可以作为shell终端来输入Python语句状态栏:用来显示当前文件权限、编码,光标指向位置和系统内存二 注释功能注释功能为编写代码很常用功能,下面介绍Spy...

实践求真知 1万+

Coze实战:解锁多Bot协同与条件分支工作流的奥秘

本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 450

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

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

2509_94615068的博客 601

抖音移动端Web用户主页视频列表爬虫实战:逆向加密参数与高频采集方案

App端Hook/抓包:需要安卓逆向、Xposed或Frida,门槛高且容易被风控。官方开放API:限制极多,几乎不开放用户级视频列表。PC端Web:页面加载方式繁杂,且大量依赖懒加载与内部状态。移动端Web(:接口相对稳定,加密逻辑集中,且适合使用Requests/HTTPSession模拟,无需渲染引擎。本文聚焦于移动端Web下的用户主页视频列表爬取,采用Python 3.11 + httpx + PyExecJS + 正则/JSON解析的组合,破解X-Bogus签名和_signature。

2201_76125261的博客 851

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

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

lonelymanontheway的博客 704

基于STM32L4XX 、HAL库的TMC2226-SA-T步进电机驱动器驱动程序应用设计

集成的功率MOSFET可处理高达2A RMS的电机电流,并具备保护与诊断功能,确保运行稳健可靠。作为业界最先进的STEP/DIR步进电机驱动系列,该芯片通过升级设计实现无噪音、高精度运行,为用户提供高性价比且极具竞争力的解决方案。// 用于PDN_UART单线通信。// HAL_UART_Transmit - 注意PDN_UART是单线,收发共线。.huart = &huart1, // PDN_UART连接的USART。均方根步进/方向控制接口,提供8、16、32或64微步针设置,

PP_Cottage的博客 627

杰理JL703N的SDK内部MIDI 音色库功能使用教程

本文介绍了MIDI琴按键解码和MIDI文件解码的实现方法。MIDI琴解码通过audio_dec_midi_ctrl.c文件实现,MIDI文件(mfa格式)解码则使用audio_dec_midi_file.c。使用前需将音色文件存放在SD卡或内置flash中(需确保四字节对齐),并在download.c中配置路径。同时需在板级配置中将FLASH设置为16Mbit以解决编译问题。关键注意事项包括音色文件的文件夹结构对齐要求和MIDI数据流的正确配置。

qq_42014563的博客 390

openclaw平替之nanobot源码解析(八):Gateway进阶——定时任务与心跳机制

通过和,nanobot 完成了从“工具”到“助手”的蜕变。它不再仅仅等待指令,而是开始根据时间、计划和上下文,主动融入你的工作流。至此,nanobot 源码解析系列真正画上了句号。我们从最底层的配置,一路走到了最上层的自动化编排。希望这八篇文章能成为你探索 AI Agent 世界的一盏明灯。🐈✨。

优快云_Lrcx的博客 620

你以为你懂 Java 反射?看了这篇源码分析,我发现我以前都错了

摘要:本文讲述了一次生产环境Metaspace内存溢出的故障排查经历。事故源于一个通用数据导出功能中频繁使用反射调用method.invoke(),触发了JVM的"膨胀机制":当同一Method对象调用超过15次时,JVM会动态生成GeneratedMethodAccessor类,导致Metaspace被撑爆。文章分析了问题根源在于循环中反复调用getMethods()创建新Method对象,并提出了三种解决方案:缓存Method对象、改用MapStruct/MethodHandle工具

BUG猿的博客 770

极简部署指南:基于 Docker 部署 nanobot

本文介绍了在Windows11环境下使用Docker部署NanoBot AI助手的过程。主要内容包括:1)环境准备,需安装Docker Desktop并获取Kimi API Key;2)项目初始化,通过GitHub下载NanoBot并执行官方引导命令;3)核心配置,编辑config.json文件设置AI模型参数;4)容器化部署,启动Gateway服务;5)维护指令,包括交互对话、状态检查和日志监控等功能。所有工作目录挂载到D:\nanobot-lab实现数据持久化,通过Docker命令实现服务管理和交互操作

歪西的博客 1033

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Nanobot 项目研读(一)

摘要:本文解析了命令行工具nanobot的核心功能与运行机制。主要包括:1)状态检查命令(status/version);2)配置初始化(onboard);3)两种交互模式(单次direct消息处理和持续agent会话);4)网关模式(整合agent、渠道、定时任务和心跳检测)。重点分析了消息总线的工作流程(inbound/outbound消息传递)和关键连接点,同时指出plugins/channels登录等属于外围功能。整体呈现了一个基于消息总线的智能体系统架构,支持同步/异步、单次/持续等多种交互方式。

weixin_55688516的博客 411

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Nanobot与Claude code best协作

本文介绍了Nanobot 0.2.0与Claude-code-best 2.6.6的MCP服务配置方法。主要内容包括:1)在Nanobot配置文件中添加MCP服务参数,指定bun执行路径和CCB目录;2)Windows环境下对CCB的调整,将package.json中的"bun"替换为"bun.exe";3)Nanobot WebUI的初始化步骤;4)通过对话验证Claude MCP服务可用性;5)建议使用nanobot onboard命令更新配置文件。

liangma的专栏 264

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

gitblog_00191的博客 679

超简单!3步完成nanobot的QQ机器人配置与部署

本文介绍了如何在星图GPU平台自动化部署🐈 nanobot:超轻量级OpenClaw镜像,快速搭建智能QQ聊天机器人。该镜像集成Qwen3-4B模型,支持自然语言对话和系统命令执行,可应用于社群管理、技术咨询等场景,实现轻量级AI助手的高效部署。

weixin_35671843的博客 401

nanobot超轻量级AI助手:5分钟快速部署与QQ机器人接入指南

本文介绍了如何在星图GPU平台上自动化部署🐈 nanobot:超轻量级OpenClaw镜像,快速搭建个人AI助手。该镜像内置Qwen3-4B-Instruct-2507模型,支持通过chainlit界面或QQ机器人进行交互,适用于智能问答、任务提醒等日常辅助场景,5分钟内即可完成部署。

weixin_42608299的博客 190

零基础玩转nanobot:手把手教你搭建QQ聊天机器人

本文介绍了如何在星图GPU平台自动化部署🐈 nanobot:超轻量级OpenClaw镜像,快速搭建QQ聊天机器人。该镜像内置Qwen3-4B模型,通过简单配置即可实现智能对话、系统命令执行和信息查询等功能,为用户提供便捷的AI助手服务。

weixin_35797963的博客 882

小白也能搞定!nanobot轻量AI助手从部署到使用完整教程

本文介绍了如何在星图GPU平台上自动化部署🐈 nanobot:超轻量级OpenClaw镜像,快速搭建个人AI助手。该镜像以仅4000行代码实现完整功能,支持自然语言指令处理、系统管理及QQ机器人接入,特别适合轻量级AI应用开发与日常任务自动化。

weixin_35916518的博客 243

【OpenClaw】通过 Nanobot 源码学习架构---(2)外层控制逻辑

对于 Nanobot 来说,gateway()函数是 Nanobot 网关的启动入口,负责初始化并串联所有核心组件(消息总线、Agent 循环、通道管理、定时任务、心跳服务等),仅通过轻量化的代码组织就完成了 OpenClaw 同等核心的 “多通道交互 + 定时任务 + 心跳检测” 能力,体现了 Nanobot “3000 行 Python 实现同等核心能力” 的极致轻量化设计理念。agent()是CLI的核心实现,是nanobotagent命令的具体函数实现,是nanobot系统的交互式对话入口点。

罗西的思考 560

【OpenClaw】通过Nanobot源码学习架构---(2)外层控制逻辑

对于 Nanobot 来说,gateway()函数是 Nanobot 网关的启动入口,负责初始化并串联所有核心组件(消息总线、Agent 循环、通道管理、定时任务、心跳服务等),仅通过轻量化的代码组织就完成了 OpenClaw 同等核心的 “多通道交互 + 定时任务 + 心跳检测” 能力,体现了 Nanobot “3000 行 Python 实现同等核心能力” 的极致轻量化设计理念。agent()是CLI的核心实现,是nanobotagent命令的具体函数实现,是nanobot系统的交互式对话入口点。

wWEB10Ym3的博客 587

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

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

gitblog_00606的博客 1018

开箱即用的nanobot:快速体验智能对话与QQ机器人功能

本文介绍了如何在星图GPU平台上自动化部署🐈 nanobot:超轻量级OpenClaw镜像,快速搭建智能对话与QQ机器人应用。该镜像内置Qwen3-4B模型,支持通过chainlit界面进行自然语言交互,并能轻松配置为QQ群聊助手,实现自动答疑、社群管理等功能,为用户提供开箱即用的AI体验。

weixin_42400643的博客 357

5步搞定!nanobot超轻量AI助手部署与使用教程

本文介绍了如何在星图GPU平台上自动化部署🐈 nanobot超轻量级OpenClaw镜像,快速搭建个人AI助手。该镜像基于Qwen3-4B模型,支持通过chainlit界面进行智能对话交互,并能接入QQ机器人实现自动客服应答,大幅降低AI应用部署门槛。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值