SuperAPI AI 工具集

taruvi-functions

编程与开发

查看项目

更新于 10-16 04:38

技能介绍

用途

Taruvi Functions 技能用于指导编写 Taruvi 无服务器函数,覆盖从判断是否需要函数、选择执行模式、调用注入的 sdk_client,到从前端调用函数的完整流程。

何时使用

以下情况适合使用函数:涉及两个或更多资源的操作(如数据库加存储、用户加数据库);超出简单 CRUD 的自定义后端逻辑;响应数据事件(RECORD_CREATE、RECORD_UPDATE、RECORD_DELETE);响应用户生命周期事件(POST_USER_CREATE、POST_USER_DELETE 等);定时或 cron 后台任务;使用存储密钥调用外部 API;不应阻塞 UI 的长耗时任务(超过 30 秒);公开未认证端点;函数间流水线;需要授权的操作。

以下情况不应使用函数:单表 CRUD、文件服务、登录登出、简单过滤列表或单一来源 KPI 查询,应改用 Refine provider hooks。

使用方式

技能按步骤引导:第一步确认是否需要函数,阅读 references/when-not-to-use-functions.md;第二步始终阅读核心参考 guardrails.md、modes-and-triggers.md、sdk-in-functions-key-points.md;第三步按需阅读条件参考,如调用 sdk_client 模块时读 sdk-surfaces.md 和 resources.md,事件触发时读 events-and-filters.md,前端调用时读 frontend-calling.md,需要示例时读 scenarios.md,不确定 SDK 方法名时读 sdk-docs-workflow.md;第四步在阅读相关参考后编写函数代码;第五步完成前验证。

主要能力与约束

函数签名必须严格为 def main(params, user_data, sdk_client):。返回值必须可 JSON 序列化,不能包含 datetime、set 或自定义对象。禁止硬编码密钥,所有密钥使用 sdk_client.secrets.get()。不得对 sdk_client 重新认证。必须设置正确的执行模式(app、proxy 或 system)。超过 30 秒的任务需设置 is_async=True。使用 log() 而非 print() 进行结构化日志记录。在任何副作用之前验证输入参数。

常见陷阱

签名错误会导致 SandboxError;sdk_client 已认证,不应调用 client.auth()、client.login() 或传入 API 密钥;硬编码密钥是安全违规;仅需转发载荷到外部 URL 且无 Python 逻辑时应使用 PROXY 模式;同步调用超过 30 秒会超时;print() 不可查询,应使用 log();前端代码中出现多资源操作链是 bug,应移入单个函数;返回不可序列化类型会崩溃;创建时缺少 execution_mode 会导致创建静默失败。

示例

APP 模式最小有效函数:

def main(params, user_data, sdk_client): record = sdk_client.database.get("orders", record_id=params["order_id"]) return {"success": True, "data": record}

前端调用等待结果:

const result = await executeFunction("calculate-total", { items: [1, 2, 3] });

前端调用即发即忘:

executeFunctionAsync("cleanup-deleted-tasks", { task_ids: ids }).catch(console.warn);

参考文档

技能包含 guardrails.md、modes-and-triggers.md、sdk-surfaces.md、sdk-in-functions-key-points.md、resources.md、sdk-docs-workflow.md、frontend-calling.md、when-not-to-use-functions.md、events-and-filters.md、scenarios.md 等参考文件,其中 scenarios.md 提供 8 个完整端到端示例。