Show HN:Strot – 一次编译 LLM 意图,本地永久执行决策
摘要
Show HN:STROT,一个开源「决策编译器」,用 LLM 编译一次意图,之后在本地以 144M 小模型零成本执行分类、评分与路由决策,附带校准与置信度门控保证。
查看缓存全文
缓存时间: 2026/10/19 05:00
strot-ai/Project-STROT 来源: https://github.com/strot-ai/Project-STROT
⬢ STROT
开放式决策编译器
用 LLM 只编译一次你的意图,然后永远对每条记录做决策——分类、打分、路由——输出类型安全、带概率与置信度的 JSON,运行在你自己的硬件上,边际成本为零。
Website (https://strot.ai) · 文档 · 基准测试 · PyPI
Agent 留在编译期,永不出现在运行期。
pip install strot-ai
import strot
result = strot.run(
tickets,
query="将收到的支持工单分流到正确的工作流。",
action_registry={
"billing_dispute": "退款、发票更正、重复扣费",
"technical_defect": "崩溃、故障、功能异常",
},
llm="anthropic/claude-opus-4-8", # 仅在首次编译时使用一次
)
for o in result.outcomes:
print(o["action"], round(o["confidence"], 2))
# billing_dispute 0.97
# technical_defect 0.94
LLM 只在编译期运行一次。生产环境是一个冻结的、自包含的 Python 产物:一个轻量的本地决策模型仲裁每条记录,运行时不生成任何内容,所有输出都有边界,低置信度的记录会弃权而不是瞎猜。
STROT = Agentic Schema 意图 + 编译器 & 状态 + 代码 + 执行 + NLU ⟹ JSON 决策(分类 · 打分 · 路由 · 类型化回答)
工作原理
编译(每个意图 + schema 仅一次)
意图 + 样本 ─▶ 合成 ─▶ 黄金门槛 ─▶ 教师标注 ─▶ 校准(标注、
(你的已知 (标注一个 (拟合投影, 阈值) 置信度处理器)
答案必须通过) 样本,一次) 阈值)
│
▼
冻结产物(.py)
运行期(每条记录,永远如此)
记录 ─▶ 投影 ─▶ 决策模型 ─▶ 置信度门槛 ─▶ 类型化 JSON
(已编译) (144M,CPU, (决定或 (约 60 ms) 弃权)
两个接口
run() —— 将每条记录路由到某个 action,并执行对应的编译后处理函数。
decide() —— 针对每条记录回答类型化问题(选择 / 打分 / 布尔):
result = strot.decide(records, questions={
"is_bug_report": {"type": "boolean", "instructions": "是否提到崩溃/错误?"},
"customer_sentiment": {"type": "score", "min": 1, "max": 5, "instructions": "1 愤怒,5 满意"},
"routing_bucket": {"type": "choice", "options": ["billing", "engineering", "spam"]},
})
# → {"booleans": {...}, "scores": {...}, "choices": {...}}
# 附带概率 + 置信度
实测数据
真实模型(SupersonicLabs/Julia-1,144M,CPU)、真实数据集、干净的 Docker 容器:
| 结果 | |
|---|---|
| 有据可依的路由准确率(398 条记录) | 编译后 92.5% vs 原始 74.8% —— 在同一个模型上编译器带来 +18pp |
| 语义文本(AG News,未见标签) | 编译后 86.7% vs 原始 72.7%(+14pp) |
| 类型化决策 vs 主流托管决策 API 官方示例 | 几乎一致(情感 1.79 vs 1.8) |
| 延迟 / 边际成本 / 每条记录的 LLM 调用数 | ~60 ms · $0 · 0 |
复现全部结果:benchmarks/ —— 失败案例同样一并公开。
与众不同之处
- 一次编译,永远决策 —— 内容寻址的产物缓存;schema 漂移只会触发恰好一次重新编译。
- 黄金记录准入 —— 产物必须先通过你已知的答案,才能投入服务。
- 拟合的保证 —— 温度缩放 + 分裂共形预测,内建开箱即用:已派发的决策在全部记录中出错比例 ≤ α(边际);其余记录弃权。
- 实测而非猜测 —— 编译器会评估标签方案的质量,并可训练一个蒸馏头,只保留在留出数据上胜过基线的部分。
- 0% 结构性幻觉 —— 输出是对你注册表的选择与计算;运行期不生成任何内容。
- 与模型无关 —— 决策模型是一个可插拔槽位(
nlu=):默认使用本地 Julia-1,也可接入托管 API,或任何可直接替换的专用模型。
安装
pip install strot-ai # 核心:纯标准库
pip install strot-ai[local] # + 本地决策模型(torch/transformers)
pip install strot-ai[hosted] # + openai,用于托管决策运行时
pip install strot-ai[anthropic] # + anthropic,用于合成器
将本地模型烘焙进你的镜像,实现离线生产部署:
RUN pip install strot-ai[local] \
&& python -c "import strot; strot.prefetch_nlu(local_dir='/opt/julia-1', install=True)"
ENV STROT_NLU_CHECKPOINT=/opt/julia-1
(切勿执行 pip install julia —— 那是无关的包。)
文档
DEVELOPERS.md —— 架构、编译生命周期、校准语义与注意事项、部署、模型替换、完整 API 参考。
许可证
MIT。默认决策模型:Apache-2.0(SupersonicLabs/Julia-1)。实现了源自 STROT(arXiv:2505.01636)的思路。
相似文章
一个代理,用于监控应用向LLM请求的是/否和选择一决策,然后训练本地模型免费执行这些决策
Stuntd 是一个开源的本地代理,它记录LLM决策调用,训练一个轻量级模型在本地处理这些调用,减少成本的同时保持与教师模型的高一致性。
我创建了一个开源仓库,用于将大语言模型转换为决策模型。
作者发布了开源项目 DecisionFormer,可将普通 LLM 转换为直接预测选择而非生成文本的决策模型,适用于决策模型实验与推理方式探索。
构建了一个 Python 智能体框架,由决策模型而非大语言模型来选择行动——希望获得反馈
作者介绍了 DecisionLoop,一个用小型决策模型替代 LLM 处理意图识别、工具选择与控制流的 Python 智能体框架,初步测试在工具调用准确率、成本和延迟上优于基于 LangChain 的 LLM 智能体,并寻求架构反馈与基准测试建议。
LEV:用循环决策模型实现快速与深度兼备的思考
LEV 是一种“系统1.5”决策模型,通过循环运行主干网络并在每轮后对选项打分来延长思考,而无需生成思维链,单一检查点即可在任意推理深度作答。实验显示 Lev-2.6B 在 JevBench 上从单轮 63.2% 提升至四轮 76.2%,且一个轻量停止器可在几乎无精度损失的情况下节省 15-24% 的计算。
我们自己的 Jev:单次前向传播中的类型化决策,从内部评判模型到开放 LoRA 模型
这篇论文介绍了一种“类型化决策”的系统 1 接口:通过一次前向传播,直接从模型的 logits 或小型分类头输出固定选项的概率,用于替代昂贵的前沿大语言模型评判器。作者部署了一个自托管的秩为 16 的 LoRA 评判器,对 14.8 万条智能体编码会话记录进行分流,成本仅为前沿模型评判器的约 1%;并在 JevBench 上使用 350 亿参数的开源模型达到 79.3%,与商业参考系统(73.0%)无显著差异。