SuperAPI AI 工具集

deploy-chalk-function

部署与运维

查看项目

更新于 10-15 12:01

技能介绍

用途

deploy-chalk-function 用于在 Chalk 的容器基础设施中部署独立的 Python 函数,即部署一个 Chalk 函数(chalkcompute.function)。当你需要把一段独立的 Python 逻辑放到 Chalk 平台上运行、而不是本地执行时,可以使用此技能。

主要能力

  • 通过 chalkcompute 包定义并部署 Chalk 函数。
  • 装饰器在导入时即完成部署:构建镜像、上传、注册。
  • 调用被装饰的函数会在远端执行并返回结果。

使用方式

编写一个使用 chalkcompute 包的 Python 文件(PyPI 名称为 chalkcompute,不是 chalk-sandbox-sdk),使用 uv shebang,并将 Python 固定在 <3.14,原因是传递依赖的 Rust 组件 chalk-remote-call-python 基于 PyO3 构建,目前最高支持 3.13。示例结构如下:

#!/usr/bin/env -S uv run --script
#
# /// script
# requires-python = ">=3.12,<3.14"
# dependencies = ["chalkcompute"]
# ///

import chalkcompute

@chalkcompute.function()
def some_function(arg_1: str) -> str:
    return f"hi {arg_1}"

if __name__ == "__main__":
    print(some_function("world"))

注意事项:

  • @chalkcompute.function 必须被调用,写作 @chalkcompute.function(),且仅接受关键字参数。写成裸装饰器 @chalkcompute.function 会抛出 TypeError: function() takes 0 positional arguments but 1 was given。
  • 装饰器在导入时执行部署(构建镜像、上传、注册)。
  • 调用被装饰的函数(如 some_function("world"))会远程调用并返回结果。

必需的环境变量

SDK 从环境变量读取凭据,而不是从 chalk CLI 配置读取。环境变量名是 CHALK_ENVIRONMENT_ID,不是 CHALK_ENVIRONMENT。

  • CHALK_API_SERVER
  • CHALK_CLIENT_ID
  • CHALK_CLIENT_SECRET
  • CHALK_ENVIRONMENT_ID

可以从当前项目的 chalk config 输出中读取这些值。示例调用:

CHALK_API_SERVER=... CHALK_CLIENT_ID=... CHALK_CLIENT_SECRET=... CHALK_ENVIRONMENT_ID=... ./your_script.py

若不提供 CHALK_ENVIRONMENT_ID,即便 CHALK_CLIENT_ID/CHALK_CLIENT_SECRET 有效,也会从 CustomImageService.GetOrBuildCustomImage 收到 permission_denied 错误。

本地 SDK 源

如果 chalkcompute 不在所配置的索引中(例如脚本无法从 PyPI 解析 chalkcompute),可将 uv 指向 chalk-sandbox-sdk 的本地检出:

[tool.uv.sources]
chalkcompute = { path = "/path/to/chalk-sandbox-sdk" }

适用场景

  • 需要在 Chalk 容器基础设施中运行独立 Python 函数。
  • 希望以声明式装饰器方式将函数部署到远端并在调用时远程执行。

限制

  • Python 版本必须固定在 >=3.12,<3.14(因 PyO3 目前最高支持 3.13)。
  • 装饰器写法必须是 @chalkcompute.function(),不能用裸装饰器。
  • 必须通过环境变量提供凭据,尤其是 CHALK_ENVIRONMENT_ID,否则会报 permission_denied。
  • 其余收费、价格、平台支持范围等信息资料中暂未提供。