公司动态
元框架系列教程第一篇——快速启动NORP-Agent
第 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、AgentRuntime21 个内置工具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()或者前端界面点停止按钮或者 CtrlC 中断。npa.stop() 从不触发停止——它只告诉你“停了没有”。1.6 你现在能做的事情读完这篇你已经能安装 NorpAgent 裸核启动 Web 界面在浏览器里跟 Agent 聊天跑一次性任务直接拿到结果理解 npa() 是启动 装配 轮询三合一理解 npa.stop() 是查询不是指令你还没有写任何自定义代码——全部是开箱即用的默认行为。但你已经理解了“这三个概念”引擎NorpEngine——容器装配参数 预设——拼零件轮询npa.stop——查状态这些是后续所有操作的基础。下一篇你会学到注册表——怎么让内核认识组件。