omp packages

pi-autothink0.1.4

Pi extension: let a classifier model pick the thinking level for every prompt, so mechanical prompts stay cheap and hard ones get real reasoning — without switching models.

loofare Published 7 days ago MIT ~785 downloads/mo

Untested on omp

This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.

Did it work for you?

Result

One report per person. A new report replaces your old one.

Reports 0

No reports yet.

Readme

pi-autothink

English · 中文

npm license

一个给自己用的 Pi 扩展:每条消息进来,先判这件事要想多深,再把这个模型的思考档位调到对应那一档。

改一个错别字,和重构一整个鉴权层,不该花一样的思考预算。

模型不换、上下文不变、缓存还在。动的只有档位。

  你敲一条消息
        │
        ▼
  ┌─────────────────────────┐      0–5 分
  │  分类器(Jev)          │ ────────────────┐
  │  「这件事要多深?」      │                 │
  └─────────────────────────┘                 ▼
                                     ┌──────────────────┐
                                     │   思考档位        │
                                     │ 最低 … 最高       │
                                     └────────┬─────────┘
        ┌─────────────────────────────────────┘
        ▼
  按当前模型支持的档钳制 → 按这一档跑 → 决策写进会话

三步装上

pi install npm:pi-autothink          # 或:pi install git:github.com/loofare/pi-autothink

重启 Pi(或 /reload),然后确认它在跑:

/autothink status

默认开启。关掉用 /autothink off,或启动时 PI_AUTO_THINKING=0。

怎么接上 JEV(5 分钟)

JEV 是托管服务,不用装、没有本地模型要下载。 它就是个分类器:你给它一段文字,它回答一个问题。Pi 本来就会调它,你缺的只是一把凭据。

这个插件不存凭据。它去问 Pi,Pi 把密钥放在 ~/.pi/agent/auth.json。登录一次,所有 Pi 扩展都能用——插件依赖 Pi 做鉴权,这是故意的。

1. 拿 key

打开 console.typesafe.ai,注册或登录,创建一个 API key。

2. 交给 Pi

在 Pi 里跑:

/login typesafe

把 key 粘进去。Pi 会存到 ~/.pi/agent/auth.json(权限 600),后面的事它自己处理。

3. 看插件找到了什么

/autothink status

正常应该是:

auto thinking: on
classifier: typesafe/jev-latest
classifier source: built-in candidate list
level bounds: none
current level: medium
config: none (defaults)
last decision: low (jev 1.06/5)

如果 classifier: 那行写的是 none — keyword fallback,说明还没接上:跑 /autothink setup,它会重新探测,并把每个选项对应的命令列给你。

4. 之后不用管

每条消息都会自动判。想调,看下面的配置文件。

没有 TypeSafe 账号?还有五条路

不管你走哪条,最后都是同一件事:凭据放 Pi 里,插件自己找。

路子 命令 说明
OpenRouter /login openrouter 一次登录同时拿到 Jev 和 Clef,很多人本来就有账号
Cloudflare Workers AI export CLOUDFLARE_API_KEY=... + CLOUDFLARE_ACCOUNT_ID 有免费额度,具体看他们的价格页
Vercel AI Gateway export AI_GATEWAY_API_KEY=... 走网关用 Jev
OpenCode export OPENCODE_API_KEY=... Jev,只支持文本
OpenAI export OPENAI_API_KEY=... GPT-6 Luna,走 Decisions API;只有 ChatGPT 登录不够
什么都不配 — 退回关键词判断:粗,但绝不卡住你

出问题先看这张表

现象 怎么办
classifier: none — keyword fallback 没找到凭据,跑 /autothink setup
刚登录了还是 none 跑 /reload 或重启 Pi,再 /autothink setup
显示 classifier source: config (…) 但模型不对 你的 config.json 里 model 钉死了一个,删掉那行或改对 id
判得比实际需要低 "minLevel": "low"(或 medium),这个下限永远生效
大仓库里觉得太贵 "maxLevel": "high"
想看它每次怎么判的 配置文件里 "debug": true,或 PI_AUTO_THINKING_DEBUG=1

可选配置文件

不配也能用。想配的话:

  • 用户级:~/.pi/agent/pi-autothink/config.json
  • 项目级:<项目>/.pi/pi-autothink/config.json(优先于用户级)
{
  "minLevel": "low",
  "maxLevel": "high",
  "timeoutMs": 3000,
  "model": "typesafe/jev-latest",
  "enabled": true,
  "debug": false,
  "maxPromptChars": 6000
}
字段 作用
minLevel / maxLevel 自己定下限和上限。"minLevel": "low" 是不许它掉到 low 以下;"maxLevel": "high" 是大仓库里给自己封顶省钱
model 指定分类器,provider/modelId,等同 PI_AUTO_THINKING_MODEL
timeoutMs 判档超时,默认 4000
maxPromptChars 发多少字过去,默认 6000
enabled 启动时开不开
debug 把每次判定打到 stderr

优先级: 环境变量 → 项目配置 → 用户配置 → 内置默认。写错了(打错字、类型不对、下限比上限高)只警告并忽略,不会让插件跑不起来。

为什么要这个

Pi 把思考档位跟模型选择存在一起,所以它会一直停在你上次留下的位置。于是只有两种用法,都不太好:

习惯 代价
一直顶在最高 改错别字、查个名字,都在按"架构级思考"付钱:更慢、更贵,答案还不会更好
每条消息手动切 切档这件事本身就在占你的注意力,而且最容易在忙的时候切错

思考也是 token,一样按输出计费。这个扩展在每一轮前面加一次很便宜的判档调用,让档位跟着活走,而不是跟着心情走。

装之前先看

条件 说明
Pi 支持分类器 需要 ctx.modelRegistry.classify() 这个接口,Pi 1.4.0 及以上
有一个分类器凭据 下面任意一个就行:TYPESAFE_API_KEY(Jev,优先)、OPENROUTER_API_KEY 或 /login、CLOUDFLARE_API_KEY + CLOUDFLARE_ACCOUNT_ID、AI_GATEWAY_API_KEY、OPENCODE_API_KEY、OPENAI_API_KEY(GPT-6 Luna)
当前模型支持思考档 不支持时 Pi 会把档位钳到 off:不报错,但也没作用

没有凭据也能跑:分类器不可用、报错、或超过四秒没回,它会退回本地关键词判断,不会卡住你这一轮。

它怎么判

问分类器一个问题——完成这条请求需要多少内部推理?看这件活本身,别被语气和长度带偏——答案落在这六档上:

分数 这活长什么样 档位
0 改变量名、格式化、跑一条已知命令 minimal
1 一处小改、随手查一下 low
2 普通功能、普通修复、普通解释 medium
3 跨好几个文件、不好查的 bug、要做设计决定 high
4 架构、找根因、安全、迁移 xhigh
5 很大系统里、动的是高风险的地方 max

两个关键的细节:

  • 0 分给 minimal,永远不给 off。 「干脆别想」这个决定留给你,不交给分类器。
  • 结果会被钳制到当前模型支持的档。 请求的档位会就近取到模型真有的那一档,不支持的档不会发到服务商那边。

请求文本截到 6000 字符,超时 4000 毫秒。

开关与配置

控制 作用
/autothink setup 引导接线:自动找分类器,找不到就告诉你要跑哪一条命令
/autothink on · /autothink off 会话里开关
/autothink status 看开关状态、用的哪个分类器、配置从哪来、上下限、上一次判定
PI_AUTO_THINKING=0 这个进程关掉
pi --auto-thinking 这个进程强制开
PI_AUTO_THINKING_MODEL=provider/modelId 换一个分类器,例如 openai/gpt-6-luna
PI_AUTO_THINKING_DEBUG=1 把每次判定打到 stderr

它不做什么

边界说清楚,比以后排查便宜:

它不会… 原因
换你的模型 只动档位,模型身份不变,前面攒的缓存还能用
一轮里反复改档 一条用户消息只判一次;这一轮里调多少次工具,档都不变
保证判得准 它读的是你写的那句话,不是这一轮最后实际要多难
拿不准就替你决定 判不出来就退回关键词,但这一轮一定放行
宣称省了多少 它报告的是一张分表,不是基准测试
进前台子代理 后台(async)子代理会各自判自己那条;async: false 的前台子代理不加载它,档位按自己的配置

审计

每次判定都会作为 auto-thinking 自定义条目写进会话——不进模型上下文,也不记录你的 prompt 内容、凭据或任何用户内容:

{"requested":"medium","applied":"low","clamped":true,"source":"jev",
 "classifier":"typesafe/jev-latest","model":"some/model","detail":"jev 2.31/5"}

requested 是分类器说的,applied 是真正跑的,clamped 说明模型支持不了这个档。重试和恢复会复用上一次的判定,不重复调分类器。

几种装法

pi install npm:pi-autothink                          # npm
pi install git:github.com/loofare/pi-autothink        # git
pi install ./pi-autothink                            # 本地目录
pi -e /path/to/pi-autothink                          # 只试一次,不写进配置

许可

MIT