工具
Booth:在 LLM 调用前后加一道「安检门」的轻量库
开发者推出开源 Python 库 Booth,可在 LLM 调用前后加入结构化检查点,支持歧义识别、置信度校验、验证器与…
2026.08.31 · 周一约 4 分钟阅读
在构建 LLM 应用时,模型输出往往不可控:答非所问、置信度低、格式不合规等问题频发。开发者近日在 Hacker News 以「Show HN」形式开源了 Python 库 Booth,定位是在应用与 LLM 调用之间插入一个「安检门」,对模型返回内容做结构化校验后再决定是否放行。Booth 当前版本为 v0.4.3,与具体模型、向量库或框架解耦,属于 provider-agnostic 的通用层。
核心思路:在调用外层做检查
Booth 的设计哲学很克制:库本身不声称「知道真相」,只负责判断一次 LLM 输出是否满足调用方预设的「准入条件」。其名取自 toll booth / ticket booth —— 一个收费站无需了解外部全貌,只检查「该付的钱是否付了」即可放行。
调用方式上,开发者只需将原本的 call_llm 包进 booth.check():
- 传入待调用函数与 prompt;
- Booth 会要求模型以 JSON 形式同时返回
ambiguous、interpretations、chosen_interpretation、answer、confidence字段; - 再按预设规则顺序决定结果状态。
五种结果状态
Booth 最终会返回五种显式状态,便于上层逻辑分支处理:
- VERIFIED:通过全部校验;
- REPAIRED:初次未达标,经重试后达标;
- AMBIGUOUS:问题本身存在多种合理解读,直接拦截;
- UNCERTAIN:经重试仍无法获得可接受结果;
- BLOCKED:被自定义验证器否决。
歧义检测优先级最高,即使答案置信度极高、验证器也通过,只要模型识别出多种解读,Booth 也会返回 AMBIGUOUS 而不再触发后续校验。
主要功能模块
Booth 提供的能力包括:
- 歧义检测:识别「What is the capital of Georgia?」这类存在多义的问题;
- 自报置信度校验:默认阈值 0.7,可通过
threshold参数调整,模型自报的置信度不经过额外校准; - 重试机制:当置信度低于阈值或验证失败时,使用包含上一次回答的特定提示词让模型重新作答,达到阈值则标记为 REPAIRED;
- 解析失败处理:与低置信度分开走另一条重试路径,通过
result.all_parse_failed可判断是否所有尝试都因格式问题失败; - 自定义验证器:调用方可传入
validator函数,可返回纯布尔值,也可返回(bool, str)元组附带具体失败原因,该原因会原样回传给模型用于重试; - 证据一致性检查:通过
check_with_evidence()与调用方已有的 RAG、搜索或数据库证据做比对; - 同步与异步接口均可用,结果对象附带
result.method与result.parsed,便于排查。
定位与局限
Booth 解决的是「工程层」问题,而非模型能力本身。它不重试幻觉、不校准置信度,也不能保证输出事实正确。对于已有检索或工具流水线、需要把「模型答了什么」与「应用侧已知证据」对账的团队,它提供了一套相对干净的胶水层;对于只是想换个 prompt 模板的用户,引入成本可能高于收益。整体而言,它更适合作为 LLM 应用中的横切关注点(cross-cutting concern)来使用,而非模型层替代方案。
