关于 accelerate-python-resolvers
用于让 Chalk Python resolver 兼容 Chalk 静态加速器的技能。它通过服务诊断找出不支持的操作,并指导迭代改写,同时保持 resolver 语义。
主要功能
- 01运行加速器诊断
- 02定位阻止加速的操作
- 03用受支持的结构改写 resolver
- 04保留签名与 Python 语义
- 05重复检查直至诊断通过
适用场景
- 01查明 resolver 无法加速的原因
- 02处理 resolver 逻辑中的可空输入
- 03替换不受支持的辅助函数或库
- 04检查整个项目的加速器兼容性
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ chalk-ai/ chalk-ai-plugins --skill accelerate-python-resolvers安装后在 Claude Code 中输入/accelerate-python-resolvers确认已加载。
详细介绍
加速 Chalk Python 解析器
Chalk 的静态加速器通过对函数字节码进行符号执行,将 Python 解析器函数转换为原生列式表达式。加速后的解析器比解释执行的 Python 快几个数量级。只有在解析器执行的每项操作都能被证明安全,且受加速器支持时,解析器才能加速。
此技能会针对 Chalk 静态加速器服务驱动一个反馈循环:获取诊断信息、重写有问题的解析器,然后重复,直到检查通过。
循环流程
-
在 Chalk 项目内任意位置(包含
chalk.yaml或chalk.yml的目录树中)运行:python "${CLAUDE_PLUGIN_ROOT}/bin/accelerator-diagnostics.py"使用项目采用的同一 Python 环境(该环境必须能够
import chalk)。如果项目使用 venv,请先激活它,或明确调用 venv 中的python。 -
阅读诊断信息。每行格式为
file:line: severity: message,消息会准确说明哪个操作阻碍了加速,例如:'int.__add__(int)' is only supported for non-null values; guard this 'option<int>' argument against None— 可空输入(在特征类上标注为int | None/Optional[int])流入了要求非空值的操作。reference to possibly-unbound name 'uuid'— 解析器使用了加速器无法捕获的导入项或辅助函数(不受支持的库),或某个局部变量并非在所有路径上都会赋值。
-
重写解析器以消除失败点(见下文的做法)。保留解析器的签名、输出特征和 Python 语义——加速版本必须计算出与 Python 版本相同的值。
-
重新运行脚本。重复此过程,直到脚本输出
All resolvers are statically accelerable.并以 0 退出。
重写做法
在要求非空值的地方使用可空输入
这是最常见的诊断。标注为 int | None 的特征在运行时可能为 None;+、-、*、比较操作和大多数方法调用都要求操作数已确认非空。添加显式保护条件,让符号执行器能够收窄类型:
@online
def get_score(a: User.maybe_null_input) -> User.score:
if a is None:
return 0 # pick a semantically sensible default
return a + 2 # `a` is now provably non-null
if a is None: return <default> 这样的提前返回,以及 x = 0 if a is None else a 这样的条件表达式都可以。如果没有合适的默认值,请询问用户 None 情况应产生什么结果——不要擅自编造业务逻辑。
不受支持的库或辅助函数
加速器支持一组固定的内置项和模块(包括 math、statistics、re、hashlib、datetime、json、常见的 str / list / dict / set 方法、numpy、pandas 以及 protobuf 消息访问)。引用其他任何内容(例如 uuid、与 requests 相关的辅助函数、自定义类)都会触发“possibly-unbound name”或“Unsupported”诊断。
修复方式,按优先顺序排列:
- 使用受支持的操作重新表达逻辑(例如,在用户认可语义可接受的前提下,用受支持的
hashlib摘要替换uuid.uuid5(...))。 - 将小型纯辅助函数内联到解析器函数体中,或确保辅助函数是加速器能够捕获的模块级函数。
- 如果该依赖不可或缺,则让解析器保持未加速状态,并向用户说明原因;不要伪造行为。
可能未绑定的局部变量
如果变量只在条件语句或循环中赋值,请在条件语句之前为它赋一个默认值,确保所有路径都会绑定该变量。
配置
CHALK_ACCELERATOR_HOST— 加速器服务主机。默认为https://accelerator.chalk.ai(Chalk 代表你运行的服务)。 传入--host http://127.0.0.1:8780或设置此环境变量,以使用本地运行的服务。CHALK_ACCELERATOR_TOKEN— 托管服务的可选 bearer token。
说明
- 脚本会导出整个项目(
python -m chalk.cli export),因此项目中任何位置的语法错误或导入失败,都会导致检查在运行诊断之前失败;请先修复这些问题(退出代码为 2)。 - 诊断会涵盖项目中的每个解析器。如果用户只询问某个解析器,请修复该解析器,并保留其他无关诊断,除非用户另有要求。
- 运行结果干净,意味着每个解析器都已完全加速,或已由其作者明确标记为永不加速。