第 1 篇:快速启动
看懂 npa() 的三层含义
1.1 最简启动
安装完成后,新建一个 Python 文件:
import norpagent as npa npa() while True: if npa.stop(): break保存为 hello.py,执行:
python hello.py控制台打印:
[norpagent] frontend web listening on 127.0.0.1:8787浏览器打开这个地址,看到一个聊天界面。输入一句话,Agent 用 mock 模型回复你。
你跑起来了第一个 Agent。
但这不是重点。重点是你需要理解:这一行 npa() 到底干了什么?
1.2 npa() 的三层含义
这一行 npa() 不是一个“启动函数”——它是三个层次的操作同时发生。把它拆开看,你才能理解 Norp 的工作方式。
第一层:启动引擎
npa() 创建了一个 NorpEngine 实例。这个引擎是 Norp 的“载体”——它持有注册表、架构层、循环系统、前端外壳,以及所有运行时状态。
引擎不是“正在运行”的进程,它是一个容器。它装着你装配好的所有东西,等待接收任务。
第二层:装配系统
npa() 的参数就是装配指令。你写了 npa(),没有传任何参数,但 Norp 有默认行为:
- 按 standard 预设装配:sqlite 会话、pooled 沙箱、persistent 调度器、全部内置工具
- 启动 Web 前端(默认端口 8787)
- 安装 9 层 29 个钩子
- 注册所有内置组件到注册表
这一层叫“装配”。它不是“启动”,它是“把零件拼起来”。
第三层:生命周期轮询
npa() 不阻塞。它在后台启动了前端线程、循环线程、工作池,然后立即返回。你的主线程继续执行 while 循环,反复检查 npa.stop()。
npa.stop() 返回 True 时,引擎已经收尾完毕,主线程可以退出。
这不是“启动函数”,这是“启动 + 装配 + 生命周期检查入口”三合一。
1.3 单次任务模式
如果你不想开 Web 界面,只想跑一次任务就退出:
import norpagent as npa npa(prompt="用一句话解释什么是元框架") while True: if npa.stop(): break print(npa.current().last_result.final_content)npa() 收到 prompt 参数后,自动切换到 headless 前端,任务完成后引擎自动停止。npa.stop() 返回 True,主线程退出。
你不需要写 Web 界面、不需要手动 submit、不需要管会话存储——单次任务模式把“跑一次就结束”这件事做到了最简。
1.4 最小安装 vs 完整安装
前面引言里给了完整的扩展包安装列表。但最简启动只需要:
pip install norpagent这个裸核包含:
- 自研事件循环(nasyncio)
- 完整内核(Registry、EventBus、AgentRuntime)
- 21 个内置工具(echo、file_read、exec_cmd、context_search……)
- 三种前端(Web、Console、Headless)
- 六种预设(standard、minimal、embedded……)
不装任何扩展包,你就能跑通完整的 Agent 循环——只是模型默认用 mock,联网工具用 urllib 降级兜底。
装扩展包是“接入外部协议”,不是“获得功能”。Norp 的功能在裸核里已经完整了。
1.5 理解 npa.stop()
npa.stop() 不是“停止 Agent”的指令,它是查询引擎状态的函数。
引擎生命周期有四个状态:
- STARTING:正在装配,还没准备好
- RUNNING:正常运行,接受任务
- STOPPING:收到停止请求,正在收尾
- STOPPED:已收尾完毕,进程可退出
npa.stop() 只在 STOPPED 时返回 True,其他状态返回 False。
所以 while 循环里的写法是“查询,不是指令”:
while True: if npa.stop(): # 查询引擎是否已停止 break如果你想让引擎停止,调用 npa.shutdown() 或 npa.current().request_stop(),或者前端界面点停止按钮,或者 Ctrl+C 中断。
npa.stop() 从不触发停止——它只告诉你“停了没有”。
1.6 你现在能做的事情
读完这篇,你已经能:
- 安装 NorpAgent 裸核
- 启动 Web 界面,在浏览器里跟 Agent 聊天
- 跑一次性任务,直接拿到结果
- 理解 npa() 是启动 + 装配 + 轮询三合一
- 理解 npa.stop() 是查询,不是指令
你还没有写任何自定义代码——全部是开箱即用的默认行为。但你已经理解了“这三个概念”:
- 引擎(NorpEngine)——容器
- 装配(参数 + 预设)——拼零件
- 轮询(npa.stop)——查状态
这些是后续所有操作的基础。
下一篇,你会学到注册表——怎么让内核认识组件。