LLM 0.30 更新一个插件钩子,只为让同步模型变异步
为了解决一个插件兼容性问题,Simon Willison 直接让 Claude 写了个新插件,而这个改动甚至需要 LLM 框架本身增加一个新的插件钩子机制。
- Simon Willison 的 llm-mrchatterbox 插件只支持同步模型,但 Datasette 的 LLM 功能(比如 datasette-enrichments-llm)只能用异步模型。
- 他让 Claude 写了个叫 llm-all-models-async 0.1 的插件,用线程池把同步模型包装成异步模型。
- 为了实现这个功能,他不得不在 LLM 0.30 版本里增加了一个新的插件钩子机制。
一个插件引发的“底层”改动
这事说起来挺有意思的。Simon Willison 自己开发了一个叫 llm-mrchatterbox 的 LLM 插件,但这个插件有个“硬伤”:它只支持同步模型。说白了,就是它只能处理那些在插件里直接运行的模型。
问题来了,他想用 Datasette 的一些 LLM 功能,特别是 datasette-enrichments-llm,但 Datasette 这边偏偏只能使用异步模型。异步模型最常见的就是那些需要调用外部 API 的,比如 OpenAI 的接口。两边卡住了,没法一起玩。
一般人可能就算了,或者自己吭哧吭哧改代码。但 Simon Willison 的解决方式很“AI”:他直接让 Claude 帮他写了个新插件。这个插件就是 llm-all-models-async 0.1,它的核心功能是用一个线程池,把原本同步的模型包装一下,让它们能“假装”成异步模型来工作。
为了一个插件,动了框架本身

但事情没这么简单。要让这个“包装”插件正常工作,光有它自己还不够,还需要 LLM 框架本身提供一些支持。所以,Simon Willison 在 LLM 框架里增加了一个新的插件钩子机制。这个改动,被他刚刚发布在 LLM 0.30 这个版本里。
讲真,这算是一个典型的“需求驱动开发”。为了让自己手头的一个同步插件能用在异步环境里,他不仅用 AI 生成了一个转换插件,还顺带升级了整个底层框架。这效率,也是没谁了。
这个改动对普通用户来说,最直接的影响就是,以后那些只写了同步接口的插件,理论上也能通过 llm-all-models-async 这个插件,在 Datasette 这类要求异步模型的环境里使用了。算是打通了一个小堵点。
留言聊聊
你遇到过插件或工具因为同步/异步不兼容而卡住的情况吗?最后是怎么解决的?
来源:Simon Willison Blog|原文:llm-all-models-async 0.1
夜雨聆风