养慢虾哲学:nanobot适配低速大模型
本文适合:部署本地低速 LLM、用 #nanobot# #养慢虾# 时发现各种抽风的朋友。不堆术语,只讲怎么动手。
一、 nanobot初始配置
# 1.1 初始化
先给个建议,请安装在虚拟机或容器中。以下为安装在lxc容器中ubuntu虚拟机情形下的示例。
安装好 nanobot 后,得先跑一次 onboard 初始化:
nanobot onboard -w ~/.nanobot/workspace -c ~/.nanobot/config.json这条命令会创建两样东西:
- 工作区 ~/.nanobot/workspace/ — 放 SOUL.md、USER.md、MEMORY.md 等
- 配置文件 ~/.nanobot/config.json — 所有配置都在这里
修改config.json 可以设好你的本地LLM以及#飞书#等。
如果想用多项目,比如一个来编程,一个来做帐? 你可以再来一套:
nanobot onboard -w ~/.nanobot/workspace2 -c ~/.nanobot/config2.json每个项目各自有自己的配置文件和工作区,互不干扰:
# 1.2 启动
nanobot agent或者指定配置和工作区:
nanobot agent -w ~/.nanobot/workspace -c ~/.nanobot/config.json启动后就可以跟 #nanobot# 对话了。
后台运行,通过#飞书#管理对话,那么需要:
nanobot gateway类似的如果要制定工作区和配置:
nanobot gateway -w ~/.nanobot/workspace2 -c ~/.nanobot/config2.json想停掉? 那就在nanobot运行的界面按 Ctrl+C。
二、加大延时,搞定一切慢
# 2.1 慢速LLM会超时
如果本地 LLM 速度只有 8.5 t/s(甚至更低),跟 #nanobot# 闲聊几句可能还行。但你让她
干点事——比如审计项目代码、整理点资料、聊长一点——她就开始抽风了:
- 聊着聊着对话突然断了
- 该等的时候不等,直接超时
- 上下文构建出错,token 数超标
有不少问题,都是由于慢速LLM带来的超时造成的,本地低速LLM 跑一个 2000 token 的回复,可能要等 4 分钟不止。nanobot 默认 120 秒超时,对本地低速LLM 来说根本不够。所以首先你得解决超时问题。你也可以先连接远端大模型api,让nanobot自己修改超时问题。
# 2.2 修改超时参数
如果你和我一样用了比较新的nanobot 2025-05-20以后至今的版本的,而且你的本地LLM设置使用的是openai兼容协议。那么只要你改一个地方就可以解决 #养慢虾#超时的问题:。直接改代码,一行搞定。
打开
nanobot/providers/openai_compat_provider.py找到第 68 行左右有:
_OPENAI_COMPAT_REQUEST_TIMEOUT_S = 120.0把120.0 改成 1800.0 (30 分钟),重启后超时问题即可搞定。
# 2.3 验证
改完代码后,重启 nanobot(停掉旧的,再跑一次
nanobot gateway启动后跟 nanobot 聊长一点(10 轮以上),或者让她编编程序、搜个文件,看会不会突然断掉。如果不再超时,就对了。
三、让 nanobot 干点事,他就能找出自己的 bug
超时改完,nanobot 基本能用了。你可以让她干点事试试,如果你想不出来适合的事情让她做。那你可以让她找找自己的系统代码上下文构建的问题,看看她的能力。
你猜怎么着:
Now I need to add budget tracking to _run_agent_loop where the prompt is assembled and sent. Let me find the key areas read …/AI/HKUSDbot/nanobot/agent/loop.py看完了,核心发现如下: 当前问题 nanobot 完全没有 token 预算控制机制。 所有代码都是"写进去再说",没有任何预算追踪、限额检查或预算感知的截断。 具体现状 1. context_window_tokens 配置项存在但从未被使用 — 只在 AgentLoop.__init__ 里存了一下,没有任何地方读取它来做预算控制 2. max_tool_result_chars 是硬截断 — 工具结果超过这个值就截断,但完全不考虑上下文窗口还剩多少空间 3. _replay_token_budget() 方法名有 budget 字样但实际返回的是消息数量 — 完全不是 token budget,是历史消息条数上限 4. _save_turn 里对 tool 结果做硬截断 — 同样不考虑预算 5. _sanitize_persisted_blocks 里的 should_truncate_text 也是硬截断 6. truncate_text_fn 是固定截断 — 没有预算感知 7. TokenBudget 类(我刚才新建的)是全新代码,还没被集成看到了吧,有些问题 nanobot 是可以自己修好了。不过我得提醒你,得做好nanobot把自己修理残废的打算。
四、适配哲学
工具应该适应人,不是人适应工具。
本地 LLM 慢,不是你的问题,也不是 nanobot 的问题。只是它们还没磨合好。改一个超时设置,剩下的可以让 nanobot 自己处理。 我就是这样调教nanobot来#养慢虾#
别急着换模型、换硬件,可以让工具适应你的速度。
#养慢虾#金句:
慢不是缺陷,是另一种节奏。8.5 t/s 够用了,够你思考,够她回应,够你们好好聊完一句话。
关于 nanobot 我以前也发过攻略,可以参考:
nanobot 进阶指南——打造能自我进化的智能体
nanobot 高阶应用:AI 自己开发 Web 服务–微纳龙虾上云实录
