mcpField
A
accelerate-python-resolvers

accelerate-python-resolvers

github.com/chalk-ai数据与数据库01.1k 次安装6 周前更新
代码仓库

关于 accelerate-python-resolvers

用于让 Chalk Python resolver 兼容 Chalk 静态加速器的技能。它通过服务诊断找出不支持的操作,并指导迭代改写,同时保持 resolver 语义。

主要功能

  1. 01运行加速器诊断
  2. 02定位阻止加速的操作
  3. 03用受支持的结构改写 resolver
  4. 04保留签名与 Python 语义
  5. 05重复检查直至诊断通过

适用场景

  1. 01查明 resolver 无法加速的原因
  2. 02处理 resolver 逻辑中的可空输入
  3. 03替换不受支持的辅助函数或库
  4. 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 静态加速器服务驱动一个反馈循环:获取诊断信息、重写有问题的解析器,然后重复,直到检查通过。

循环流程

  1. 在 Chalk 项目内任意位置(包含 chalk.yaml 或 chalk.yml 的目录树中)运行:

    python "${CLAUDE_PLUGIN_ROOT}/bin/accelerator-diagnostics.py"
    

    使用项目采用的同一 Python 环境(该环境必须能够 import chalk)。如果项目使用 venv,请先激活它,或明确调用 venv 中的 python。

  2. 阅读诊断信息。每行格式为 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' — 解析器使用了加速器无法捕获的导入项或辅助函数(不受支持的库),或某个局部变量并非在所有路径上都会赋值。
  3. 重写解析器以消除失败点(见下文的做法)。保留解析器的签名、输出特征和 Python 语义——加速版本必须计算出与 Python 版本相同的值。

  4. 重新运行脚本。重复此过程,直到脚本输出 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”诊断。

修复方式,按优先顺序排列:

  1. 使用受支持的操作重新表达逻辑(例如,在用户认可语义可接受的前提下,用受支持的 hashlib 摘要替换 uuid.uuid5(...))。
  2. 将小型纯辅助函数内联到解析器函数体中,或确保辅助函数是加速器能够捕获的模块级函数。
  3. 如果该依赖不可或缺,则让解析器保持未加速状态,并向用户说明原因;不要伪造行为。
可能未绑定的局部变量

如果变量只在条件语句或循环中赋值,请在条件语句之前为它赋一个默认值,确保所有路径都会绑定该变量。

配置

  • 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)。
  • 诊断会涵盖项目中的每个解析器。如果用户只询问某个解析器,请修复该解析器,并保留其他无关诊断,除非用户另有要求。
  • 运行结果干净,意味着每个解析器都已完全加速,或已由其作者明确标记为永不加速。

评论

支持 Markdown