循序渐进 · 教学 · 函数(二)

函数语言特性对照:TS v1 / TS v2 / Python

Foundry 函数有三种语言可选,但不是所有功能三种语言都支持。这一篇用对照表说清:什么场景该选哪种语言,以及各自的硬边界在哪。

全部目录 ← 上一篇 函数语言特性对照:TS v1 / TS v2 / Python 下一篇 →
本文来源 · Source 内容整理自 Palantir Foundry 官方文档:
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 languageAIP LogicTypeScript v1TypeScript v2PythonDescription
Ontology 对象支持在函数中访问 Ontology 对象的能力。
Ontology 接口支持在函数中访问并编辑 Ontology 接口的能力。
Ontology 编辑支持在函数中编辑 Ontology 对象的能力。
媒体处理能力部分部分媒体项交互的能力。TypeScript v1 支持完整的媒体操作,包括文档 OCR 和音频转写。TypeScript v2 和 Python 支持通过 Ontology 编辑上传媒体,以及对媒体属性做基础操作,但不支持文档类或音频类的专用操作。
可在 Workshop 中查询Workshop 应用调用函数。
可用于 Pipeline BuilderPipeline 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 v2Python中使用暂存写入,从而在编辑函数中获得「写后可读」保障与原子化执行。
从 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 环境中,支持 fschild_processcrypto 等核心模块。这使得与文件系统交互、并行执行 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 省去部署环节,但只在部分语言可用 —— 这是最容易踩的坑。