循序渐进 · 教学 · 函数(二)
函数语言特性对照:TS v1 / TS v2 / Python
Foundry 函数有三种语言可选,但不是所有功能三种语言都支持。这一篇用对照表说清:什么场景该选哪种语言,以及各自的硬边界在哪。
本文来源 · Source
内容整理自 Palantir Foundry 官方文档:
https://www.palantir.com/docs/foundry/functions/language-feature-support/
原始标题:Functions > Feature support by language
https://www.palantir.com/docs/foundry/functions/language-feature-support/
原始标题:Functions > Feature support by language
★
先记住这几条
① 三种语言,能力不等价
TypeScript v1 / TypeScript v2 / Python 的功能覆盖有差异,选语言前先看这张表。
② OSDK 支持是关键差异
TypeScript v2 用新的 Ontology SDK(OSDK),v1 用的是旧的一代 SDK。
③ Serverless 只覆盖部分
免服务器(serverless)执行模式并非所有语言都支持,这是选型的硬约束。
④ 先定语言,再写函数
语言在创建仓库时就要选定,中途更换需要迁移,所以先看清楚再动手。
0
写在前面
并非所有特性都被所有语言支持。各语言的功能支持情况请参考下表。
| Functions capability by language | AIP Logic | TypeScript v1 | TypeScript v2 | Python | Description |
|---|---|---|---|---|---|
| Ontology 对象支持 | 是 | 是 | 是 | 是 | 在函数中访问 Ontology 对象的能力。 |
| Ontology 接口支持 | 否 | 否 | 是 | 否 | 在函数中访问并编辑 Ontology 接口的能力。 |
| Ontology 编辑支持 | 是 | 是 | 是 | 是 | 在函数中编辑 Ontology 对象的能力。 |
| 媒体处理能力 | 否 | 是 | 部分 | 部分 | 与媒体项交互的能力。TypeScript v1 支持完整的媒体操作,包括文档 OCR 和音频转写。TypeScript v2 和 Python 支持通过 Ontology 编辑上传媒体,以及对媒体属性做基础操作,但不支持文档类或音频类的专用操作。 |
| 可在 Workshop 中查询 | 是 | 是 | 是 | 是 | 从 Workshop 应用调用函数。 |
| 可用于 Pipeline Builder | 否 | 否 | 否 | 是 | 从 Pipeline Builder 流水线调用函数。 |
| 函数调用模型支持 | 是 | 是 | 是 | 是 | 从函数执行实时部署的模型。TypeScript v2 和 Python 需要使用绑定到 Ontology 的模型函数。 |
| 语言模型集成 | 否 | 否 | 是 | 是 | 使用模型别名和 Platform SDK 导入,通过代理端点调用语言模型。 |
| 语义搜索支持 | 是 | 是 | 是 | 是 | 使用函数为语义搜索生成向量。 |
| Webhook 支持 | 否 | 是 | 部分 | 部分 | 从函数调用 webhook的能力。TypeScript v1 可直接调用 webhook;TypeScript v2 和 Python 需要把 webhook 发布为webhook 函数,该功能目前处于 Beta 阶段。 |
| 外部 API 调用支持 | 否 | 是 | 是 | 是 | 从函数内部查询外部服务。 |
| Serverless 执行支持 | 是 | 是 | 是 | 是 | Serverless 函数会在被调用时按需启动。更多说明见下文的 serverless functions。 |
| 部署式执行支持 | 否 | 否 | 是 | 是 | 部署式函数会分配专用资源,随时准备响应请求。 |
| 暂存写入支持 \[Beta] | 否 | 否 | 是 | 是 | 在 TypeScript v2和 Python中使用暂存写入,从而在编辑函数中获得「写后可读」保障与原子化执行。 |
| 从 API 网关调用函数 | 是 | 是 | 是 | 是 | 从 API 网关访问查询函数的能力。 |
| Marketplace 支持 | 是 | 是 | 是 | 是 | 在 Marketplace中打包并发布函数的能力。 |
| 自带模型(Bring-your-own-model) | 是 | 是 | 否 | 否 | 将函数注册为模型的能力。函数接口方法是一种旧方案,仅适用于 TypeScript v1。 |
1
Ontology SDK 支持情况
Ontology SDK 支持情况
要点:v1 与 v2 访问本体的 SDK 完全不同,这直接影响代码写法和可用 API。
Python 与 TypeScript v2 函数支持 Ontology SDK(OSDK)。OSDK 让你能够直接在开发环境中使用 Ontology,并提供诸多好处,例如与 Developer Console 兼容、支持 OSDK 版本管理。建议在函数仓库中使用 Python 或 TypeScript v2,以享受这些能力。
2
TS v1 与 TS v2 逐项对比
TS v1 与 TS v2 逐项对比
要点:逐项列出两代 TypeScript 的差异,是从 v1 迁移到 v2 的决策依据。
TypeScript v1 与 TypeScript v2 都允许你使用 TypeScript 的核心语言特性,但在受支持的平台特性上存在差异(见上表)。我们建议使用 TypeScript v2 构建工作流,以充分利用相比 v1 的多项关键改进:
- 在完整 Node.js 运行时中执行 Serverless: TypeScript v2 函数运行在 Node.js 环境中,支持
fs、child_process、crypto等核心模块。这使得与文件系统交互、并行执行 CPU 密集任务,或需要其他系统级操作的 NPM 库具有更好的兼容性。 - 一流的 OSDK 支持: OSDK 现在可以在 TypeScript v2 函数中无缝使用,便于在平台内外复用代码。同时,它还提供了更高效的大规模 Ontology 数据操作 API。
- 可配置的资源请求: TypeScript v2 函数允许你最多请求 8 个 vCPU 和 5GB 内存,对性能与可扩展性有更强的控制力。
- 暂存写入 \[Beta]: TypeScript v2 支持暂存写入,作为一种替代性的 Ontology 编辑函数执行模型——它提供函数内的「写后可读」保障,并允许嵌套调用其他暂存写入函数。
3
Serverless(免服务器)函数
Serverless(免服务器)函数
要点:serverless 省去部署环节,但只在部分语言可用 —— 这是最容易踩的坑。
如果你的租户启用了 serverless 函数,新建的仓库默认会使用 serverless 函数。对于大多数场景,我们建议使用 serverless 函数而非部署式函数。借助 serverless 函数,你可以按需提供同一函数的多个版本,使升级更安全。
使用 Python 或 TypeScript v2 函数时,也存在一些场景更偏好部署式函数,或必须使用部署式而非 serverless,但这些情况并不常见。在可用的情况下,serverless 函数因以下原因被优先推荐:
- Serverless 函数支持按需执行同一函数的不同版本,使升级更安全。而部署式函数同一时刻只能运行一个版本。
- Serverless 函数仅在执行时产生费用,而部署式函数只要部署在运行就会产生费用。
- Serverless 函数需要更少的前期搭建与长期维护,因为基础设施是自动管理的。
延伸阅读 · 相关页面
按主题横向跳转,不必顺着目录一篇篇读。
常见问题速答 · FAQ
关于「函数语言特性对照:TS v1 / TS v2 / Python」,读者最常问的几个问题。
Ontology SDK 支持情况是什么?
v1 与 v2 访问本体的 SDK 完全不同,这直接影响代码写法和可用 API。
TS v1 与 TS v2 逐项对比是什么?
逐项列出两代 TypeScript 的差异,是从 v1 迁移到 v2 的决策依据。
Serverless(免服务器)函数是什么?
serverless 省去部署环节,但只在部分语言可用 —— 这是最容易踩的坑。