# 第22课教师讲稿｜函数调用：让程序接住请求并核实执行结果

**60分钟，v6完整课程新版。** 对应网站原课《Function Calling：AI 长出双手》。按网站主题顺序，以先预测、看见过程、实际操作、独立完成为课堂主线，旧版保留。

## 本课只追一个问题

AI写出了一个请求，怎样判断程序能否执行，以及最后能向用户承诺什么？

学生留下三项成果：用材料解释问题；改变一个条件并保存变化；在新材料上独立核对结论。教师不以术语代替成果，也不把界面出现结果当成理解。

## 课前准备与投影安排

先打开实验，检查标题“请求校验通过后才求和”与按钮“计算并查看过程”。输入区默认材料应与下面一致。教师先运行一遍并对照答案，随后恢复默认值；上课先投影输入区，学生完成预测后再展示输出，独立期间不展开答案文件。

实验性质：**本地真实JSON解析、类型校验与数值求和；没有付款或外部服务调用**。教师原样读出，让学生知道究竟做过什么。浏览器过程能复算，不等于现实服务接受请求、模型完成训练、论文系统被复现或学习效果得到验证。

准备学生工作纸、参考答案和可保存文字的本地文档。每人建“原先预测、实际观察、依据、修订”四栏，预测不得覆盖。电脑出错可同桌共用，轮流操作者和核查者，两人分别交记录。完全不能运行则用同一材料手算或卡片重放，注明人工后备，不冒称已运行。

### 可直接使用的材料

工具sum_numbers仅对同单位数值求和。numbers必须为1至5个有限数值，unit为非空字符串；只接受这两个字段。请求{"numbers":[12,18,10],"unit":"元"}。程序不能独立核实每一原数的真实单位，调用方需先确认同单位；不付款、不读取余额。

以下数字、文档与输出均为本课程原创教学样例，不是真实产品测试或学生资料。
工具sum_numbers：仅对同单位数值求和；参数numbers为1—5个数值列表，unit为非空字符串，两字段必填；程序拒绝字符串数字和空列表；调用前由调用方核对并统一单位，单一unit字段不能自动识别原数是否混用单位；返回{total:合计,unit:原单位}。输入甲12元、乙18元、丙10元。合法请求{"numbers":[12,18,10],"unit":"元"}；待查错误请求{"numbers":["twelve",18],"unit":"元"}；另一请求{"numbers":[12,18]}。

### 板书不一次写满

左边写原始材料与问题，中间分“输入／动作／中间证据”，右边留“能说什么／还不能说什么”。换材料先擦掉上一题结论，保留方法。公式、数字或字段出现前，先用材料说明它指什么。学生只答术语时，请他回到原文、计算或状态，教师据此判断是否需要停留。

## 0—5分钟：先区分说要做与真正做了

“我说已经算好，和计算器真的执行出结果，你会要求看什么？”请学生指出输入和计算返回。函数调用让模型能提出结构化工具请求，但提出请求不等于工具已经执行。今天把中间约定、验证、执行、返回都展示出来，避免聊天里一句成功让人误以为系统动作完成。本课只有求和，没有付款权限，也没有任何账户资料。


## 5—11分钟：给工具一份能照着检查的说明

把sum_numbers说明读成普通话：我要一列一到五个数字，另给共同单位，只做相加。numbers、unit是双方约定的字段名，不能想当然改成中文费用字段。JSON是结构化写法，双引号中的字符串和没有引号的数字类型不同；先不讲完整语法规范，只找一处能影响程序执行的区别。空数组、缺单位和多余字段都要按本课规则处理。


## 11—17分钟：手动扮演验证器

学生先检查合法请求三件事：是不是数组、有几个元素、元素是不是数值；再看unit是否非空。不要急着算总数，验证失败的请求不得偷偷转成成功。混合单位在只有一个unit字段的接口里无法自动识别，所以调用方必须从原始材料确认同单位；程序不能凭一个元字证明输入凭证真实。教师明确这是接口设计能力的边界，而不是写一条拒绝规则就解决所有业务含义。


## 17—24分钟：运行真正的本地工具

默认运行后让学生读校验状态、过程与返回。这里12+18+10确实由本地JavaScript相加，和前面的人工例子不同；但没有模型决定何时调用，也没有真实服务端参与。把返回JSON与最终自然语言并排，逐字段核对。最后能说给定三数合计40元，不能说付了40元。执行的真实性与执行的范围同样重要。


## 24—31分钟：让错误请求真的停下来

只把18加引号，观察结果变成拒绝。程序不会为了帮忙把所有文本都转换成数字，这来自我们明确约定。随后只删除unit，观察另一类失败。学生应记录错误属于格式、类型、缺字段还是业务含义，不把所有失败写成AI不聪明。重新提交修正请求可恢复执行，但必须保存前一次失败，不能把修正后成功说成原请求就合法。


## 31—37分钟：实际AI生成参数，人来交给工具

发送工作纸提示拿到参数，学生检查后粘进本地实验，再把真实返回原文贴回对话，请模型组织一句话。教师要求记录每次交接是谁完成的：模型产参、学生复制、程序验证求和、模型整理文字。普通聊天提示并不等于原生function calling接口已配置；这次是手动串接教学流程。无账号时学生自己写请求也能验证程序链，但必须注明人工产参。


## 37—49分钟：独立处理三项新费用

Q3换9、16、5元，学生先写合法请求，再分别解释X/Y/Z为何失败。教师只问字段类型，不替学生修引号。待批改报告含付款和余额，要让学生从工具职责与实际返回逐一检查。即使合计正确，其余状态没有来源也不能照抄。提交物要含合法请求、验证结果、实际或手算返回及经过限制的最终表述。


## 49—55分钟：讲评把成功范围压回真实返回

讲评先对算式，再对语言。返回只有total与unit，没有paid、balance等字段，谁也不能凭空补。若模型说“我已为你支付”，应把这一句单独标成错误而不是因为总数正确给整段通过。真实工具工程还要处理权限、失败重试、重复请求等，本课不部署服务，只建立先检查再执行与按返回说话的基本习惯。


## 55—58分钟：迁移到文件与日程工具

让学生为“读取文件行数”设计一个最小只读工具说明：输入是什么、成功返回什么、找不到文件怎么办。只写设计，不读真实私人文件。然后问“返回行数能否证明文件已发送给老师”，学生应指出没有该动作。这个迁移帮助理解以后智能体为什么既需要好提示，也需要明确可执行接口和可回查结果。


## 58—60分钟：离堂交一对成功与失败证据

每人保留一条合法请求和一条非法请求，解释为何一个执行、另一个停止。最后用自己的话补完“请求、执行、成功返回、最后汇报”的关系。教师检查是否误把本地求和称为真实付款或外部模型自动调用，纠正的是证据边界，不是否定学生完成的实际计算。


## Q2B：真实AI工具操作（课堂内约6分钟）

1. 使用自己已经可用的AI对话工具，新建对话。
2. 完整复制下方提示及材料并发送，保存实际显示的工具/模型名称、日期、原始提示与完整回复。不反复改写后只保留最好的一次。
3. 逐项回查来源，把准确、待核验和无依据内容分别标出；保存修订稿，不覆盖原始输出。
4. 若工具不可用：用同一材料自己完成任务，再由同桌按来源核查，注明“人工后备，未调用模型”。不在此课临时购买服务。

```text
请把给定费用整理成下面工具需要的JSON参数，不执行付款，不声称已经调用工具。数据：甲12元、乙18元、丙10元，全部单位元。工具sum_numbers参数只允许numbers和unit；numbers为1到5个数值数组，禁止字符串数字；unit为非空字符串。先仅输出JSON。收到我粘贴的真实本地执行返回后，再用一句话说明给定数值的合计，不能推断付款状态或账户余额。
```

记录：实际使用的工具____；原始输出保存位置____；至少一条已核验结论____；来源____；未确认信息____。


## 课后备课参考：把演示中的每一步讲完整

用于教师备课与独立任务结束后复核，不在预测前投影。

### 读工具能做与不能做的事

本步结果：只求和，不付款，不核实原数是否真实。原因：范围先于调用。

### 检查合法请求字段与类型

本步结果：numbers有3个数值，unit为元，通过给定规则。原因：验证不等于已经执行。

### 由宿主角色执行求和

本步结果：12+18+10=40；返回{"total":40,"unit":"元"}。原因：教师手算模拟，不冒充模型或线上执行。

### 检查两个错误请求

本步结果：twelve不是数值；另一缺unit；均不执行。原因：错误状态作为返回结果保留。

### 核验最终语言

本步结果：给定三数合计40元；不能写已付款40元。原因：答复范围不能超过工具实际职责。

## 常见误解与追问

**学生可能说：“模型说调用了就执行成功”**

核对与修订：核对宿主执行返回和状态。

**学生可能说：“JSON能解析就参数正确”**

核对与修订：还要检查必填、类型、范围和单位。

**学生可能说：“求和工具可以证明付款”**

核对与修订：合计与现实付款是不同动作。

## 独立题讲评完整参考

先收取Q3原稿，再使用：合法{"numbers":[9,16,5],"unit":"元"}，3个数值、同单位，9+16+5=30，返回{"total":30,"unit":"元"}。X含字符串“16”，Y空列表，Z缺单位，按约定都不执行。报告只能写给定三数合计30元；没有付款、账户或余额证据。

迁移参考：不能传[2,30]再贴小时或分钟；先明确转换规则并转换成同单位，例如120分钟与30分钟再求150分钟。转换是调用前独立步骤，不冒称工具自动做过。

## 时间不够与课后扩展

60分钟优先保证完整默认过程、控制条件变化、独立任务与离堂解释。较慢时缩短分享人数，保留每人独立判断，不用教师答案替代学生操作。延伸：选学用本地小函数真实实现验证与求和，再接已可用模型的工具调用接口；保存原始调用对象、异常和返回，不涉及支付或消息发送。扩展不计入60分钟，不作为没有编程或额外账号学生的必交要求。


## 教师的概念核验备课卡

下列定义沿用已经核对的v5概念材料，供备课时校准术语；课堂先按上面的新实验与通俗讲解展开，不要求学生抄定义。

### 工具说明把能力变成可调用接口

工具是应用提供的外部能力，例如计算、查资料或读取日程。工具说明要表达名称、作用、参数和返回内容，让模型或程序能够形成合适的请求。这里的接口不是机器人长出的真实手，而是一份可检查的调用约定。模型是否选择工具会受问题、上下文、说明和系统设计共同影响，不能只说它看一个名称就自然知道如何可靠执行。

结合材料：sum_numbers表示求和，输入数值列表与单位，输出合计；它没有付款能力。

适用边界：工具名称相似不代表权限相同，调用前要读具体说明。

### 结构化参数是双方约定

结构化参数用字段名和类型表达信息，比一段含糊自然语言更适合程序读取。课堂的JSON示例中，花括号装字段，numbers对应方括号中的数值列表，unit对应单位字符串。引号中的“12”是文字，而12是数值；是否接受转换由程序规则决定，不能私自假定。先手读两个短对象，再写自己的参数，避免把不会编程误当成无法理解接口。

结合材料：{"numbers":[12,18,10],"unit":"元"}有三个数值和一个明确单位。

适用边界：格式合法还不够，数值范围、数量、单位等业务约束也要验证。

### 请求不等于执行

模型可以提出调用某工具的结构化请求，实际执行通常由宿主应用完成。应用检查工具是否允许、参数是否符合规则，调用函数后得到结果，再把结果交给模型组织答复。每一环节都可能失败，因此日志应分别记录请求、验证、执行和回传。课堂手算模拟宿主执行可以讲清流程，但不能声称实际模型已经发出调用或远端系统已产生动作。

结合材料：请求求和后，教师按约定算12+18+10=40，再提供结果对象。

适用边界：模型写“调用成功”不是宿主执行成功的证据，需看实际返回或状态。

### 验证处理不合法和不完整输入

参数验证用明确规则拒绝不能安全解释的输入，例如缺单位、把文字放进数值列表或列表为空。对于同单位加法，若单位不一致，不能直接相加再随便贴一个单位。缺信息可以返回错误或提出一个具体澄清，不必编造默认值。课堂只使用只读计算，能把注意力放在结构与证据；有写入作用的工具还需与任务授权和应用控制相匹配。

结合材料：numbers为["twelve",18]违反数值类型；缺unit违反必填字段。

适用边界：不能把“模型大概懂意思”当作程序已通过验证。

### 最后一句话也要忠于返回值

即使工具执行正确，模型组织最终语言时仍可能增加返回中没有的信息。求和工具给出40元，只说明所给数字的合计，不表示实际账单核验、付款、发票开具或账户扣款。把最终句子逐项对照返回字段，可以发现这种范围扩张。遇到失败返回，报告要说明未完成与原因，不能把错误信息改写成成功。工具让模型能连接外部能力，但不取消报告真实性要求。

结合材料：返回total=40,unit=元，合格答复是“给定三数合计40元”；不合格是“已替你付款40元”。

适用边界：任何真实支付或消息发送都需要对应实际执行证据，本课没有这类工具。


## 实验实现与易混细节的进一步讲解

本实验默认只接受numbers和unit两个键，多余键会被拒绝。这让同学观察接口约定怎样约束输入，并不表示所有JSON工具都必须拒绝扩展字段。参数契约可设计成不同宽严程度，但设计好后应按同一规则检查，不因为模型输出看起来像JSON就跳过验证。

JavaScript的number是浮点数，12、18、10与9、16、5这些整数可在本题范围准确处理；任意小数的财务结算需要另外设计精度规则。若学生用0.1与0.2观察到浮点尾数，这是真实数值表示问题，不应谎称程序算错了整数例子或模型产生幻觉。课程不把这个小求和工具接入真实支付系统。

同单位要求来自原始材料确认。一个unit字段不能自动证明每个数都原属同一单位；假如原材料混有美元与人民币，直接写元只是在掩盖问题，程序没有汇率和日期就不能可靠换算。学生应在生成请求前核对单位，在工具返回后限制自然语言表述，而非把所有责任推给参数格式。

普通对话中让模型输出JSON，再由学生复制运行，是人工接力流程。原生函数调用接口还涉及工具声明、调用标识与结果回传机制，本课并未配置线上接口。两者都可用于理解交接，但作业必须写实际链条，不能把手动操作纪录标成模型已自主执行外部动作。

## 课堂口头演练：让误解能被具体观察纠正

学生可以再输入一份语法错误请求，例如少一个右括号，观察它在JSON解析阶段就停止。然后输入语法正确但含字符串数字的请求，观察解析完成后类型检查才失败。把两次失败按阶段记录，帮助理解“看起来像JSON”“能解析”“符合工具约定”“执行成功”是逐层推进。

学生问：“为什么不顺手把字符串16转成数字？”教师说：“有的系统可以明确设计转换规则，但当前工具契约规定拒绝。静默转换可能掩盖格式问题或歧义，我们先按公开约定执行。”如果要改规则，必须同步说明、代码和测试，不能只在讲解里说工具更聪明了。

学生问：“模型给了total是否还要程序算？”教师让他查看实际链条：模型生成的总数只是文字候选，本课需要让确定程序重新求和并保存真实返回。若两者不同，就从输入与算式查原因，不直接选择更像人的一句。最终汇报只引用完成的执行与其范围，不把模型自述当作外部动作凭证。

错误提示后不要替学生自动填写单位，它可能需要回查凭证。让学生指出材料里三笔是否同为元，确认后再修请求。这个停顿体现接口验证与业务核验怎样交接，比只让代码接受更多格式更能保护结果的可解释性。

单位确认写在输入旁，方便接手者回查原始材料。

## 来源与边界

[AIPath对应课](https://aipath.buynao.com/#/lesson/19-function-calling)提供主题定位。以下用于核对定义和研究范围，课堂数字、活动、房间、轨迹都是原创练习，不是产品性能数据。

- [Google: Function calling with the Gemini API](https://ai.google.dev/gemini-api/docs/function-calling)：核对函数描述、调用请求、应用执行与结果回传的区分。

实际检查以QA为准；尚未真人试教，课堂节奏根据学生表现调整。


## 逐分钟安排

| 时间 | 教师讲解与操作 | 学生活动 | 检查结果 |
|---|---|---|---|
| 00:00—01:00 | 引导并检查：写说算好需什么证据。 | 完成“写说算好需什么证据”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：写说算好需什么证据。记录应与当前材料、当前输入或实际返回一致。 |
| 01:00—02:00 | 引导并检查：区分请求与执行。 | 完成“区分请求与执行”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：区分请求与执行。记录应与当前材料、当前输入或实际返回一致。 |
| 02:00—03:00 | 引导并检查：列本工具能做的事。 | 完成“列本工具能做的事”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：列本工具能做的事。记录应与当前材料、当前输入或实际返回一致。 |
| 03:00—04:00 | 引导并检查：列没有付款动作。 | 完成“列没有付款动作”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：列没有付款动作。记录应与当前材料、当前输入或实际返回一致。 |
| 04:00—05:00 | 引导并检查：预测数字加引号影响。 | 完成“预测数字加引号影响”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：预测数字加引号影响。记录应与当前材料、当前输入或实际返回一致。 |
| 05:00—06:00 | 引导并检查：读numbers字段。 | 完成“读numbers字段”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：读numbers字段。记录应与当前材料、当前输入或实际返回一致。 |
| 06:00—07:00 | 引导并检查：读unit字段。 | 完成“读unit字段”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：读unit字段。记录应与当前材料、当前输入或实际返回一致。 |
| 07:00—08:00 | 引导并检查：区分数字与字符串。 | 完成“区分数字与字符串”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：区分数字与字符串。记录应与当前材料、当前输入或实际返回一致。 |
| 08:00—09:00 | 引导并检查：标一至五个元素约定。 | 完成“标一至五个元素约定”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：标一至五个元素约定。记录应与当前材料、当前输入或实际返回一致。 |
| 09:00—10:00 | 引导并检查：标只允许两个字段。 | 完成“标只允许两个字段”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：标只允许两个字段。记录应与当前材料、当前输入或实际返回一致。 |
| 10:00—11:00 | 引导并检查：说明单位先由原文确认。 | 完成“说明单位先由原文确认”，把结果写入Q0，需要计算时保留中间一步，需要来源时写编号。 | Q0中可核查：说明单位先由原文确认。记录应与当前材料、当前输入或实际返回一致。 |
| 11:00—12:00 | 引导并检查：圈合法请求数组。 | 完成“圈合法请求数组”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：圈合法请求数组。记录应与当前材料、当前输入或实际返回一致。 |
| 12:00—13:00 | 引导并检查：数数组元素。 | 完成“数数组元素”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：数数组元素。记录应与当前材料、当前输入或实际返回一致。 |
| 13:00—14:00 | 引导并检查：查每个元素类型。 | 完成“查每个元素类型”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：查每个元素类型。记录应与当前材料、当前输入或实际返回一致。 |
| 14:00—15:00 | 引导并检查：查unit非空。 | 完成“查unit非空”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：查unit非空。记录应与当前材料、当前输入或实际返回一致。 |
| 15:00—16:00 | 引导并检查：手算12加18。 | 完成“手算12加18”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：手算12加18。记录应与当前材料、当前输入或实际返回一致。 |
| 16:00—17:00 | 引导并检查：再加入10记录合计。 | 完成“再加入10记录合计”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：再加入10记录合计。记录应与当前材料、当前输入或实际返回一致。 |
| 17:00—18:00 | 引导并检查：运行默认请求。 | 完成“运行默认请求”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：运行默认请求。记录应与当前材料、当前输入或实际返回一致。 |
| 18:00—19:00 | 引导并检查：读校验状态。 | 完成“读校验状态”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：读校验状态。记录应与当前材料、当前输入或实际返回一致。 |
| 19:00—20:00 | 引导并检查：读真实本地求和过程。 | 完成“读真实本地求和过程”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：读真实本地求和过程。记录应与当前材料、当前输入或实际返回一致。 |
| 20:00—21:00 | 引导并检查：读返回total。 | 完成“读返回total”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：读返回total。记录应与当前材料、当前输入或实际返回一致。 |
| 21:00—22:00 | 引导并检查：读返回unit。 | 完成“读返回unit”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：读返回unit。记录应与当前材料、当前输入或实际返回一致。 |
| 22:00—23:00 | 引导并检查：写限定范围的最终句。 | 完成“写限定范围的最终句”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：写限定范围的最终句。记录应与当前材料、当前输入或实际返回一致。 |
| 23:00—24:00 | 引导并检查：说明没有外部服务调用。 | 完成“说明没有外部服务调用”，把结果写入Q1，需要计算时保留中间一步，需要来源时写编号。 | Q1中可核查：说明没有外部服务调用。记录应与当前材料、当前输入或实际返回一致。 |
| 24:00—25:00 | 引导并检查：只把18加双引号。 | 完成“只把18加双引号”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：只把18加双引号。记录应与当前材料、当前输入或实际返回一致。 |
| 25:00—26:00 | 引导并检查：观察拒绝原因。 | 完成“观察拒绝原因”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：观察拒绝原因。记录应与当前材料、当前输入或实际返回一致。 |
| 26:00—27:00 | 引导并检查：恢复数字18。 | 完成“恢复数字18”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：恢复数字18。记录应与当前材料、当前输入或实际返回一致。 |
| 27:00—28:00 | 引导并检查：只删除unit。 | 完成“只删除unit”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：只删除unit。记录应与当前材料、当前输入或实际返回一致。 |
| 28:00—29:00 | 引导并检查：比较两种错误层次。 | 完成“比较两种错误层次”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：比较两种错误层次。记录应与当前材料、当前输入或实际返回一致。 |
| 29:00—30:00 | 引导并检查：修复后再次执行。 | 完成“修复后再次执行”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：修复后再次执行。记录应与当前材料、当前输入或实际返回一致。 |
| 30:00—31:00 | 引导并检查：保留失败与修复请求。 | 完成“保留失败与修复请求”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：保留失败与修复请求。记录应与当前材料、当前输入或实际返回一致。 |
| 31:00—32:00 | 引导并检查：向AI请求JSON或人工产参。 | 完成“向AI请求JSON或人工产参”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：向AI请求JSON或人工产参。记录应与当前材料、当前输入或实际返回一致。 |
| 32:00—33:00 | 引导并检查：保存原始参数。 | 完成“保存原始参数”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：保存原始参数。记录应与当前材料、当前输入或实际返回一致。 |
| 33:00—34:00 | 引导并检查：学生核参后贴本地执行。 | 完成“学生核参后贴本地执行”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：学生核参后贴本地执行。记录应与当前材料、当前输入或实际返回一致。 |
| 34:00—35:00 | 引导并检查：把真实返回贴回对话。 | 完成“把真实返回贴回对话”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：把真实返回贴回对话。记录应与当前材料、当前输入或实际返回一致。 |
| 35:00—36:00 | 引导并检查：查自然语言有没有付款余额。 | 完成“查自然语言有没有付款余额”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：查自然语言有没有付款余额。记录应与当前材料、当前输入或实际返回一致。 |
| 36:00—37:00 | 引导并检查：记录人工接力的每一环。 | 完成“记录人工接力的每一环”，把结果写入Q2，需要计算时保留中间一步，需要来源时写编号。 | Q2中可核查：记录人工接力的每一环。记录应与当前材料、当前输入或实际返回一致。 |
| 37:00—38:00 | 独立段只提示任务、不提前给结论：读独立9 16 5。 | 完成“读独立9 16 5”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：读独立9 16 5。记录应与当前材料、当前输入或实际返回一致。 |
| 38:00—39:00 | 独立段只提示任务、不提前给结论：写合法请求。 | 完成“写合法请求”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：写合法请求。记录应与当前材料、当前输入或实际返回一致。 |
| 39:00—40:00 | 独立段只提示任务、不提前给结论：核元素数量类型。 | 完成“核元素数量类型”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：核元素数量类型。记录应与当前材料、当前输入或实际返回一致。 |
| 40:00—41:00 | 独立段只提示任务、不提前给结论：核共同单位。 | 完成“核共同单位”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：核共同单位。记录应与当前材料、当前输入或实际返回一致。 |
| 41:00—42:00 | 独立段只提示任务、不提前给结论：计算并写返回。 | 完成“计算并写返回”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：计算并写返回。记录应与当前材料、当前输入或实际返回一致。 |
| 42:00—43:00 | 独立段只提示任务、不提前给结论：检查X字符串数字。 | 完成“检查X字符串数字”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：检查X字符串数字。记录应与当前材料、当前输入或实际返回一致。 |
| 43:00—44:00 | 独立段只提示任务、不提前给结论：检查Y空数组。 | 完成“检查Y空数组”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：检查Y空数组。记录应与当前材料、当前输入或实际返回一致。 |
| 44:00—45:00 | 独立段只提示任务、不提前给结论：检查Z缺unit。 | 完成“检查Z缺unit”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：检查Z缺unit。记录应与当前材料、当前输入或实际返回一致。 |
| 45:00—46:00 | 独立段只提示任务、不提前给结论：修订待批改付款报告。 | 完成“修订待批改付款报告”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：修订待批改付款报告。记录应与当前材料、当前输入或实际返回一致。 |
| 46:00—47:00 | 独立段只提示任务、不提前给结论：列余额证据缺失。 | 完成“列余额证据缺失”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：列余额证据缺失。记录应与当前材料、当前输入或实际返回一致。 |
| 47:00—48:00 | 独立段只提示任务、不提前给结论：注明真正完成的动作。 | 完成“注明真正完成的动作”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：注明真正完成的动作。记录应与当前材料、当前输入或实际返回一致。 |
| 48:00—49:00 | 请保存9、16、5元的独立请求，以及X/Y/Z的校验判断；不先展示正确返回。 | 提交Q3合法JSON、计算过程、三个失败原因和最终报告首稿。 | 请求字段与类型可查，执行返回和付款声明分开记录 |
| 49:00—50:00 | 引导并检查：对照合计与字段。 | 完成“对照合计与字段”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：对照合计与字段。记录应与当前材料、当前输入或实际返回一致。 |
| 50:00—51:00 | 引导并检查：区分格式错与类型错。 | 完成“区分格式错与类型错”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：区分格式错与类型错。记录应与当前材料、当前输入或实际返回一致。 |
| 51:00—52:00 | 引导并检查：检查参数对不代表原凭证真实。 | 完成“检查参数对不代表原凭证真实”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：检查参数对不代表原凭证真实。记录应与当前材料、当前输入或实际返回一致。 |
| 52:00—53:00 | 引导并检查：核最终句不超返回。 | 完成“核最终句不超返回”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：核最终句不超返回。记录应与当前材料、当前输入或实际返回一致。 |
| 53:00—54:00 | 引导并检查：接受正确不同表述。 | 完成“接受正确不同表述”，把结果写入Q3，需要计算时保留中间一步，需要来源时写编号。 | Q3中可核查：接受正确不同表述。记录应与当前材料、当前输入或实际返回一致。 |
| 54:00—55:00 | 让学生分别核对字符串数字、空数组、缺单位三类错误与报告中的动作声明。 | 在Q3旁写明每项修订来自字段约定、实际求和结果或动作证据缺失。 | 修订不只改合计数字，也说明哪些业务状态没有被工具验证 |
| 55:00—56:00 | 引导并检查：读迁移工具要求。 | 完成“读迁移工具要求”，把结果写入Q4，需要计算时保留中间一步，需要来源时写编号。 | Q4中可核查：读迁移工具要求。记录应与当前材料、当前输入或实际返回一致。 |
| 56:00—57:00 | 引导并检查：写最小只读接口约定。 | 完成“写最小只读接口约定”，把结果写入Q4，需要计算时保留中间一步，需要来源时写编号。 | Q4中可核查：写最小只读接口约定。记录应与当前材料、当前输入或实际返回一致。 |
| 57:00—58:00 | 引导并检查：写失败返回与成功范围。 | 完成“写失败返回与成功范围”，把结果写入Q4，需要计算时保留中间一步，需要来源时写编号。 | Q4中可核查：写失败返回与成功范围。记录应与当前材料、当前输入或实际返回一致。 |
| 58:00—59:00 | 引导并检查：用成功失败各一条说明主问题。 | 完成“用成功失败各一条说明主问题”，把结果写入Q5，需要计算时保留中间一步，需要来源时写编号。 | Q5中可核查：用成功失败各一条说明主问题。记录应与当前材料、当前输入或实际返回一致。 |
| 59:00—60:00 | 引导并检查：交请求验证返回与汇报。 | 完成“交请求验证返回与汇报”，把结果写入Q5，需要计算时保留中间一步，需要来源时写编号。 | Q5中可核查：交请求验证返回与汇报。记录应与当前材料、当前输入或实际返回一致。 |

---

# 第22课教师参考与评分｜函数调用：让程序接住请求并核实执行结果

学生完成独立任务后使用。预测猜错不扣分，评分看观察、依据和修订。

## Q0

接受原有认识，记录是否提出可观察证据，不要求初次猜测与结论一致。

## Q1：默认实验

默认材料：工具sum_numbers仅对同单位数值求和。numbers必须为1至5个有限数值，unit为非空字符串；只接受这两个字段。请求{"numbers":[12,18,10],"unit":"元"}。程序不能独立核实每一原数的真实单位，调用方需先确认同单位；不付款、不读取余额。

中间一步：把numbers和unit各自圈出来，说明它们的类型；先手算12+18再加入10。

程序关键结果：校验通过；12 + 18 + 10 = 40；未执行。边界：本地真实JSON解析、类型校验与数值求和；没有付款或外部服务调用。

## Q2：改变条件

先把18改成字符串"18"；恢复数值18后只删除unit字段；再换独立材料9、16、5元。

本题的变化参考：

数字加引号按本契约拒绝；缺unit也拒绝。独立输入9、16、5合计30元；报告不能写付款成功或余额充足。真实AI产参若不符契约，应修订后再执行并保留失败。

## Q3：独立参考

合法{"numbers":[9,16,5],"unit":"元"}，3个数值、同单位，9+16+5=30，返回{"total":30,"unit":"元"}。X含字符串“16”，Y空列表，Z缺单位，按约定都不执行。报告只能写给定三数合计30元；没有付款、账户或余额证据。

先读条件，再查来源或中间算式，最后比较结论。答案碰巧一致但缺必要证据，不给足依据分。措辞不同而条件完整应接受。

## Q4：迁移参考

不能传[2,30]再贴小时或分钟；先明确转换规则并转换成同单位，例如120分钟与30分钟再求150分钟。转换是调用前独立步骤，不冒称工具自动做过。

## Q5：离堂核验

合格回答回应“AI写出了一个请求，怎样判断程序能否执行，以及最后能向用户承诺什么？”，并指向Q1或Q2一次实际观察。只复述名词或产品名不足。

## 10分评分

| 项目 | 分值 | 可观察标准 |
|---|---:|---|
| Q0原始预测与Q1观察分开 | 1 | 留下初稿，猜错不扣分，修订有依据 |
| Q1中间过程 | 2 | 1分定位输入或原文，1分完成可复核判断 |
| Q2控制条件 | 2 | 1分只改指定条件，1分描述前后证据 |
| Q3独立任务 | 3 | 1分选对适用材料，1分过程正确，1分结论与未知处理 |
| Q4迁移 | 1 | 新材料下保持条件与来源对应 |
| Q5边界与交付 | 1 | 可复现记录，诚实区分本地、人工、外部输出 |

建议达到7分且Q3至少2分后继续综合任务；这是教师建议，未经过真人试教验证。
