函数是什么

第 1 课 · 共 6 课 约 8 分钟

代码写的逻辑:输入、输出、在哪里用;声明式先行;AIDC 的发布、列表与 v2 执行。

本课目标

读完这一课,你将能够

  • 说出函数是什么,以及它会在哪里被用到
  • 用一张台阶图判断一段逻辑该用声明式构件还是写代码
  • 说明 AIDC 怎样发布、列出和执行 Function

函数:用代码写的逻辑

上一门课里,Action 用规则改数据。规则写得下的事,不需要代码。有些逻辑要读很多对象、加权或分情况。在本体(Ontology)里,这样的代码逻辑叫 Function。

函数是用通用编程语言写的逻辑,在服务端的隔离环境里执行。输入可以是数字、文字,也可以是对象或一组对象(对象集);输出是一个值、一个对象集,或者一份对数据的修改。它能读对象的属性、沿关系走,也能改数据。

VALUE

算出一个值

例如供应商评分,放进表格的一列或图表里。

OBJECT SET

返回一组对象

例如有延期风险的订单,供界面或别的逻辑继续筛选。

ACTION

驱动一个 Action

规则写不下的复杂修改:函数算出要改什么,Action 负责校验、执行和记录。

只读的一类叫查询函数(Query)。调用方经 v2 API 执行它。下面用伪代码说明输入和输出。实际发布的源码是 JavaScript ES module。

// Pseudocode: illustrates inputs and outputs, not publishable source.
function supplierScore(supplier: supplier): double {
  // read this supplier's purchase orders, weigh late deliveries
  return score;   // a value comes out; nothing is changed
}

函数适合界面、Action 和 API 当场调用的逻辑。运行默认超时为 60 秒,上限为 300 秒。当前发布源码用 JavaScript ES module,默认导出 (params, ctx) => 结果。

声明式先行

不是每一段逻辑都该写成代码。代码灵活,也更贵:要版本,要测试,要监控,出错的方式也多。所以标准模型先给了一排声明出来的构件——配置就行,看得懂,改得快,平台替你校验——函数是最后一级。

  1. 01派生属性沿关系最多 3 跳,读时计数、求和、求平均。
  2. 02对象集与聚合筛选、并交差、分组统计。
  3. 03Action 的规则与提交条件改什么,什么情况下拒绝。
  4. 04函数以上都表达不了的时候。最灵活,也最贵
随口一问

给 salesOrder 写一个函数,数一数这张订单有几行明细。

好的交代

给 salesOrder 加一个派生属性 lineCount:沿 lines 关系计数,读的时候算。

判断的顺序很简单:只是沿关系汇总,用派生属性;只是筛选和统计,用对象集;只是「不满足就拒绝」,用提交条件;要逐个对象计算、分情况、读好几类对象再下结论,才轮到函数。读者最容易踩的坑,是一上来就想写代码。

在 AIDC 里:今天谁来干这些活

这门课反复用示例工厂的三个问题:供应商评分,有延期风险的订单,建议一张工单上哪条产线。它们在标准模型里都是函数。在 AIDC 里,同样的活分给下面几处:

标准模型(函数)AIDC 今天
订单有几行明细函数沿关系遍历并计数派生属性 lineCount
临近交期的订单返回对象集的查询函数对象集加筛选,或一条只读 SQL
这次修改能不能做函数里的校验代码Action 的提交条件
逐行算余量、成本函数里的循环工作流的计算步骤(表达式)
供应商综合评分读采购订单并加权的函数聚合按供应商汇总,计算步骤按权重算分,AI 分析步骤只解释原因
读文字、下判断、给建议调用语言模型的函数智能体,或工作流的 AI 分析步骤

模型参与的部分放在两处:智能体会多轮地自己找资料再回答;工作流的 AI 分析步骤是固定的一次调用。工作流可以先预演——读、算、分析都真跑,写入只返回计划——确认之后再正式运行。

这张表也是整门课的地图:后面五节,每一节先讲标准模型,再讲 AIDC 今天用什么。

要点

  • 函数是代码写的逻辑:输入对象或对象集,输出值、对象集或一份改动清单。
  • 声明式先行:派生属性、对象集、提交条件都表达不了,才写函数。
  • 只读的函数叫查询函数,没有副作用;改数据永远要经过 Action。
  • AIDC 已支持发布、列出和执行 Function。简单逻辑仍优先用声明式构件。

练一练

给逻辑找一个位置

拿示例工厂做练习,先不写代码,只判断放在哪一级。

把下面五件事各放到台阶的一级:每张订单的明细行数;工单下达前状态必须是 planned;本周每条产线的产出合计;供应商综合评分;给延期订单起草一封说明邮件。写下理由。

小测

选一个答案,马上看解析。

Q1要在订单表格里显示每张订单有几行明细,AIDC 里最合适的做法是?

Q2旧 v1 的 queryTypes 返回空列表,说明什么?

Q3「工单下达前状态必须是 planned」应该写在哪里?

延伸阅读