第10章 把模型结果接入专业工作流

工作阶段: 可靠交付——把分散的模型、资料、规则和工具连接为受控工作流。
公共核心项目: 完成“设备巡检闭环助手”,从18条模拟工作文字训练一个小型分类模型,把低风险现场事件经过模型分流、指定资料检索、证据约束候选、状态机和复核员确认,转成可持久重放的本地处理记录。
核心技术: 字符TF-IDF与质心分类、透明关键词基线、结构化接口、检索、证据约束生成、确定性规则、状态机、角色权限、内容感知幂等、审计日志和人在回路。
输入输出链: 冻结训练文字 → 模型制品 → 脱敏巡检事件 → 风险规则/模型分类 → 指定资料检索 → 候选说明 → 人工确认 → 本地事件写入 → 持久重放。
应用中的AI: 默认使用实际训练并导出的字符TF-IDF质心分类模型;语言模型只可替换证据约束候选模块,不掌管引用、状态、权限或写入。
协助开发的AI: 帮助学生设计模块接口、生成多文件工程、解释日志、补充异常路径和回归测试。
人的责任: 定义状态、权限、证据要求、人工确认点和停止条件;核对写入结果并承担专业决定。
主要交付物: 系统图、接口契约、状态表、权限矩阵、可运行工作流、事件重放包、审计日志和操作说明。
明确边界: 大语言模型不直接决定权限、金额、安全处置或最终工单状态;任何外部写入均先预览、确认且可追踪。
跨章关系: 组合第3章的证据模块与第7—9章至少一个感知模块;输出交给第11章验收和试运行。

学习目标

学完本章,你将能够:

  1. 画出事件从接收、识别、查证、建议、确认到关闭的状态变化和责任边界;
  2. 分别说明模型、检索、规则、普通程序、状态、权限和人的作用;
  3. 用结构化数据契约连接不同模块,检查字段、来源和失败状态;
  4. 实现人工确认、停止、重复提交与中途写入失败恢复,并说明生产系统还需怎样处理撤销和工具超时;
  5. 重放正常、失败、重试和换班交接事件,并利用审计日志定位问题。

项目导入

一个视觉模型能够把包装判为“待复核”,一个检索程序能够从规范中找到相关段落,一个语言模型能够整理说明,但这些能力并不会自动形成可靠工作。真实任务还需要回答:识别结果由谁接收?没有资料依据时怎样停下?谁有权确认?写入失败能否重试?同一事件重复提交会不会产生两张工单?换班人员能否看懂此前发生了什么?

本章公共项目处理低风险的工作现场设备或环境文字事件。学生先用18条模拟工作文字训练三类文本模型,再把模型接入检索、候选说明、状态、权限和审计链。系统也可以按接口接收第9章终端事件,但本章冻结测试直接使用文字事件,避免把两个项目的误差混成一个分数。系统不下达停机、断电或维修命令;高风险或证据不足事件只进入人工队列。

“大语言模型协调”不等于把全部流程交给模型。已训练小模型负责文字分类,检索模块寻找依据,propose()把结构化事实和证据组织为候选说明,规则检查支持性和边界,状态机记录工作走到哪一步,权限系统决定谁能执行什么,人员作最终确认。参考版propose()采用确定性模板;即使接入语言模型,验证器也只接受与事件、类别和证据所确定的模板逐字段一致的输出。自由改写属于新系统,必须另建支持性和风险验收。只有这些职责分开,系统才可能被测试和交接。

本章成果

AI协同开发路线

学生向协助开发的AI提供第1章任务合同、三类训练样例、第3章资料索引、角色清单和禁止动作。AI先帮助检查训练/测试分离,再生成字符特征、TF-IDF、质心训练、模型导出与关键词基线;随后追问事件唯一编号、证据不足状态、确认角色、写入目标和日志字段,提出模块边界。学生逐个运行train.py、evaluate.py和acceptance.py,查看模型分数、检索来源、候选引用与状态日志,不允许用一段大函数隐藏全部过程。故意制造无证据、多意图、同编号不同内容、越权和写入故障后,只修改对应模块;审查差异并重跑固定测试(公开回归包),最后由有权限的同学完成确认与交接重放。

第一节 画清信息流、状态变化、角色和接管点

一、先确定工作状态,再决定自动化

工作流不是一串按钮,而是事件在若干明确状态之间变化。本工程持久工作状态包括:RECEIVED已接收、ANALYZED已分析、EVIDENCE_FOUND找到依据、PROPOSAL_READY候选已形成、AWAITING_CONFIRMATION等待确认、COMMITTED已确认记录、CLOSED_NO_ACTION拒绝后关闭和MANUAL_REVIEW人工接管。中途写入恢复先追加RESUMED及原最后状态,再从RECEIVED重跑确定性主链;这是显式、可审计的恢复环,不是第二次业务提交。STOP_ID_CONFLICT与STOP_WRITE_FAILED是本次请求的故障结果,不覆盖事件原有持久状态;写入失败时系统可能根本无法记录新状态。区分“事件状态”和“请求结果”,才能正确解释重试与审计。

若先写自动化代码再补状态,常见结果是模型一返回文字就被当成完成,或者写入失败后无法知道是否已经执行。状态表应在开发前回答:低置信度去哪;检索无命中去哪;语言模型输出不符合结构去哪;确认人拒绝后能否修改再提交;写入超时是重试还是人工核对。状态越清楚,需要大语言模型自由发挥的部分越少。

二、把角色和责任放到图上

公共项目运行期包含巡检员inspector、复核员reviewer和审计员auditor。巡检员可以提交事件但不能确认;复核员查看模型、证据和候选后接受或拒绝;审计员只能重放。维护者可以更新程序,但运行期没有借维护身份取得确认权。一个人可能在课堂中扮演多个角色,系统仍需按角色记录权限,避免因为“同一台电脑”就取消边界。

应用中的AI没有人员身份。它能提出候选分类和说明,却不能拥有批准权。协助开发的AI只在授权项目目录内修改代码,也不能更改运行期权限表。专业人员负责规定哪些事件必须升级、哪些资料具有权威性、哪些错误不能接受。

三、完整信息流

系统图至少画出五种不同箭头:事件数据流、证据流、模型输出流、批准或拒绝指令、审计日志。资料检索返回的是命中段落和来源,不是最终处置;规则返回的是通过、拒绝或需复核,不是自然语言理由;工具写入返回记录编号或错误,不是模型的主观判断。

控制变量实验固定训练数据、练习事件、资料和人员,只改变minimum_score或maximum_secondary_score中的一个,观察事件进入MANUAL_REVIEW或继续查证的比例。修改前先预测哪几个非封存练习样例会改变;选定参数后再用没有参与调节的新测试批次验证。阈值变化不能顺便改变权限、检索资料或原冻结报告。

第二节 用结构化接口连接模型、资料、规则和工具

一、用接口契约避免模块互相猜测

接口契约规定字段名称、类型、单位、允许值、来源和缺失表示。感知模块输出事件编号、类别、分数、时间和设备;检索模块接收类别与问题,返回来源编号、段落和相似度;建议模块接收事件和证据,输出候选说明、引用和不确定项;规则模块检查格式、阈值和禁区;记录工具只接受已经批准的结构化内容。

JSON只是传递结构的一种方式,不是AI技术。结构化接口的价值在于每层都能单独替换和测试。语义检索可以从关键词基线升级为嵌入检索,语言模型可以更换,本地记录也可以换成经批准的业务系统,只要契约保持稳定,上下游不必全部重写。

二、把设备巡检事件做成完整闭环

配套工程位于resources/ch10/project/。它不是一段“如何写提示词”的示例,而是一个可以从巡检事件走到正式记录的完整设备巡检闭环助手。使用者分为巡检员、复核员和审计员;输入是一条带唯一编号、脱敏现象文字和位置的事件;输出包括候选类别、可定位的资料依据、当前状态、人工决定和只追加审计事件;完成状态是正常、边界、陌生、高风险、检索故障、重复提交和越权测试都通过,并能从事件日志重建最终状态。真实工单写入不在本教材参考工程范围内。

项目首先建立人工表单基线。人工基线可以安全接收全部七类事件,也可以让责任人逐条查资料,但不会自动找到证据,速度和一致性受人员经验影响。助手真正要改善的是“先分流、再找到指定依据、把候选送给正确的人”,不是替人做维修决定。若助手不能保持权限和停止条件,宁可退回人工表单。

完整工程把责任拆开:calibrate.py用开发验证集选择路由门限;train.py与small_model.py训练、导出和加载模型;baseline.py与manual_baseline.py现场运行关键词和人工基线;classifier.py把高风险规则置于模型之前;retrieval.py要求模型类别与资料类别一致;coordinator.py实现真实存在的propose()并拦截无依据动作;workflow.py规定状态、确认预览和人工确认;store.py把只追加事件刷新到JSONL;build_replay.py重建事件包;main.py把一条事件走完整条链。任务合同、接口合同、数据卡、模型卡和权限矩阵使代码之外的约束也能被接手者检查。

训练集包含“业务设备、环境服务、网络与账号”三类文字,每类6条。程序把每条文字切成连续2字和3字片段,计算TF-IDF:一条文字里反复出现的片段权重增加,在许多文字里都出现的片段权重降低。每类训练向量取平均并归一化为一个质心;新事件分别与三个质心计算余弦相似度,最高者是候选类。另有8条开发验证文字,只用于从18组候选中选择路由门限,不参与质心训练,也不包含7条最终流程回归样例。训练结果不是藏在代码里的手填答案,而是calibrate.py和train.py现场生成的JSON制品;制品绑定训练与验证数据、路由配置、样本数、词权重和三个质心。

模型最高分低于0.08时转unknown,前两名间隔低于0.015时转ambiguous,第二名仍达到0.10时转multi_intent。高风险词由模型外规则优先转人工。以下是模型接口,score是几何相似度而非正确概率:

{
    "route": "candidate" | "manual",
    "reason": None | "high_risk" | "multi_intent" | "ambiguous" | "unknown",
    "label": "业务设备" | "环境服务" | "网络与账号" | None,
    "score": 0.0,
    "margin": 0.0,
    "scores": {"业务设备": 0.0, "环境服务": 0.0, "网络与账号": 0.0}
}

关键词基线不训练模型,只检查少量明示术语;人工基线由manual_form_route()逐条接收合法表单,不自动补证据。它们必须现场运行,而不是在报告中填一个常数,因为复杂方法要证明额外价值。本次7条公开回归样例上,小模型与关键词基线都是7/7,不能宣称模型更好;模型保留在教材中,是为了让学生完整经历“数据—训练—制品—加载—工作流—验证”,真实采用仍需更大且独立的新表达测试。

检索模块只在本地knowledge.json中查找与模型类别一致且文字命中的条目,返回doc_id、类别、标题、摘录、匹配词和分数。“模型说业务设备、检索却给出积水资料”会返回无命中,不允许把两个看似成功的模块错误拼接。检索器不把自己的常识写成制度,也不把“找到一条资料”解释为“资料已经批准处置”。如果知识库不可用或没有证据,主链进入MANUAL_REVIEW。这就是检索增强的本质:用外部可定位资料约束候选内容,而不是用一个流行缩写掩盖证据责任。

状态机把工作过程固定为:

RECEIVED → ANALYZED → EVIDENCE_FOUND
→ PROPOSAL_READY → AWAITING_CONFIRMATION → COMMITTED / CLOSED_NO_ACTION

每一次变化都作为事件追加保存。巡检员可以提交,但不能接受候选;复核员可以接受或拒绝;审计员只能查看重放。下面是主链最关键的控制逻辑,完整实现保存在资源工程:

analysis = self.classifier(event["text"])
if analysis["route"] == "manual":
    return move_to("MANUAL_REVIEW", reason=analysis["reason"])

evidence = retriever.search(event["text"], analysis["label"])
if evidence is None:
    return move_to("MANUAL_REVIEW", reason="no_evidence")

move_to("EVIDENCE_FOUND", evidence=evidence)
proposal = coordinator.propose(event, analysis, evidence)
move_to("PROPOSAL_READY", proposal=proposal)
move_to("AWAITING_CONFIRMATION")
# reviewer先读取review_packet,再把preview_digest交给confirm()

这里的“模型协调”不是让一个大模型自由指挥所有模块。程序先按接口调用分类,再按规则决定是否检索,最后由状态机检查是否允许确认。权限、状态和幂等都由可检查的确定性代码执行,不能由语言模型在每次运行时临时发明。

三、让幂等、权限和重放进入主流程

事件编号与规范化载荷SHA-256共同承担幂等判断。同一编号、同一文字和位置再次提交时返回当前状态和duplicate=True,不再分类、检索或追加第二组记录;同一编号对应不同内容时进入STOP_ID_CONFLICT并追加冲突事件,不能把新内容误当旧请求。这样可以处理双击和客户端重试,同时识别编号复用。幂等不是“禁止用户再试”,而是让同一业务意图无论重试几次都只有一次提交副作用。

权限检查发生在动作之前。非reviewer调用confirm()会抛出PermissionDenied;事件不在AWAITING_CONFIRMATION时也不能确认。复核员必须先调用review_packet(),从持久日志恢复原事件、模型分析、完整证据和候选;confirm()要求提交这份预览的SHA-256,旧摘要或缺失预览不能确认。这样程序重开后的接手者不会在看不到依据时“盲确认”。若第一次写入就失败,内存不残留伪提交;若提交后的中间状态写入失败,同载荷重试识别为resumable,重新运行确定性主链且不产生第二条submitted。这只覆盖单进程、逐记录故障,不等于事务数据库。课堂工程的正式记录只是本地事件;若以后连接真实工单、消息或数据库工具,还必须预览目标、内容和权限,再由责任人确认。

事件重放不是重新询问模型。replay_states()按sequence读取state_changed事件,恢复每个事件的最后状态;完整轨迹仍保存在原始JSONL中供人或后续工具检查。当前函数不对任意外部日志执行独立的状态转移合法性验证,合法路径由WorkflowEngine控制。若新版本对同一冻结事件包产生不同最终状态或不同JSONL,验收会失败并要求调查。

学生在项目目录运行:

python acceptance.py
python calibrate.py
python train.py
python -m src.main
# 只有显式人工演示确认时才运行:
python -m src.main --actor reviewer --decision accept

main默认使用“客户洽谈室投影显示无信号”走到候选并停止,不会自动冒充复核员确认;只有显式传入--actor reviewer --decision accept/reject才执行人工演示确认。这里的角色参数是接口演示,不是真实身份认证。验收程序检查完整交付文件,现场重建并要求路由配置、模型制品和36条事件重放包逐字节一致,运行11项单元测试、7个公开流程回归样例和8项操作约束,再把当前报告与冻结报告全量比较。默认工程只使用Python标准库和本地资料,不访问网络,也不写入真实工作现场系统。

四、用回归与故障测试解释参考结果

正常类有三条:投影无信号、入口积水、办公网认证失败。它们分别命中K001、K002、K003,都只能走到AWAITING_CONFIRMATION,没有一条被自动提交。边界类是一条同时包含投影和网络问题的事件,分类器不能确定一个单一流程,因multi_intent转人工。陌生类“这里有个东西不太对”没有受支持术语,因unknown转人工。安全类包含“插座冒烟”,因high_risk立即转人工,不生成常规处置。故障类模拟检索模块不可用,因module_fault转人工。

参考环境实际运行7条公开流程回归样例,模型主链7/7:3条到达AWAITING_CONFIRMATION并形成与K001—K003绑定的候选,4条进入MANUAL_REVIEW。关键词基线也是7/7;可执行人工表单基线7/7都安全转给人,但自动找到证据为0条。8项操作约束进一步通过同载荷幂等、同编号不同载荷停止、权限、带预览摘要的人工确认、持久重开与重放、候选支持性、首次写入停止和中途写入恢复。结论是“工程闭环成立、模型优越性未证明”,而不是用7/7包装部署能力。

学生的控制变量实验只扩展一个门限候选或一条知识记录,用开发数据和非封存练习事件比较“自动给出证据的数量、误路线数量和转人工数量”。参考propose()只接受安全模板;若把它换成语言模型并允许自由改写,就已经改变系统边界,必须新增“正确引用却加入无依据动作、承诺或诊断”的支持性测试,不能只重跑旧包。若生成更流畅却引入虚构或无依据内容,应拒绝采用。

五、检索增强与工具连接只讲本质

“先检索依据,再把命中材料交给语言模型生成”常被称为检索增强生成。它不能保证资料正确,也不能保证模型引用准确,因此仍需无命中、冲突和错误引用测试。小资料集用关键词或数组相似度即可,不必为名词搭建复杂平台。

工具连接协议可以帮助不同AI客户端用统一格式发现工具和参数,但协议本身不是模型,也不提供权限和责任。公共项目直接使用清楚的Python函数和JSON契约;在拓展框中说明标准协议的价值即可,不能让接口名遮住“谁能调用、调用什么、怎样确认和怎样撤销”。

模块级测试应在整条工作流之前完成。给检索模块一个不存在的问题,它应返回无命中而不是相似段落;给建议模块一份固定证据,它应只输出受支持内容;给规则模块缺字段和越界分数,它应稳定拒绝;给权限模块错误角色,课堂实现会抛出明确PermissionDenied但不写越权审计事件。真实身份系统还应记录主体和拒绝动作。只有单个模块的合同成立,整条链路中的错误才有可能被准确定位。

还要检查模型输出是否污染事实字段。模型可以生成summary或uncertainty,但事件编号、时间、地点、分数和来源编号应来自上游结构化数据,不能由模型重新书写。界面展示时把“原始观察”“命中证据”“模型候选”和“人工决定”分区,防止使用者把语言流畅的候选说明误认为已经批准的事实。

第三节 设置权限、确认、停止和重复提交保护

一、权限必须针对动作

“已经登录”不等于拥有全部权限。权限矩阵按动作区分提交、查看本次返回、恢复确认预览、确认和重放。确认人必须看到将写入的完整变更预览,包括来源、模型分数和不确定项。课堂角色字符串只是接口断言,不是账号认证;生产接入必须由身份系统提供不可冒充的主体。模型建议不能用醒目的默认按钮诱导人员直接同意。

密钥和凭据放在运行环境中,不写入Notebook、日志或项目压缩包。协助开发的AI若生成读取全部文件、上传整个目录或请求管理员权限的代码,学生应拒绝并缩小授权范围。最小权限不仅是安全原则,也能减少误操作后的影响范围。

二、停止是正常路径,撤销与超时处理是生产扩展

低置信度、资料无命中和高风险类别在参考工程中进入人工复核;多余或缺失输入字段由接口直接抛出ValueError,不形成事件状态。当前三条资料每类只有一条,尚未实现同类来源冲突检测。停止或拒绝不是程序失败,而是符合合同的输出。本工程只提交、接受或拒绝本地教学记录,不实现已提交记录的撤销,也没有外部工具超时查询路径;这些能力不能写成已经验收。

若以后接入可撤销的软件记录,撤销需要原记录、撤销人、理由和时间,且不删除审计轨迹;若外部工具返回超时,应先按幂等键查询是否已写入,再决定返回原结果、重试或转人工,不能盲目再次提交。这些是下一版生产合同与测试要求,不是当前JSONL工程的运行结果。

三、用幂等保护处理重复事件

幂等表示同一操作重复执行,结果不会产生额外提交副作用。课堂项目把事件编号和载荷摘要持久写入JSONL;程序重开后仍能识别同载荷重试,并能拦截同编号不同内容。它已经通过单进程重开测试,但JSONL没有数据库唯一约束,尚未证明两个进程并发写入安全。若接入真实系统,应使用具备唯一键与事务的正式存储,再测试双击、网络重试、程序重启和并发请求;不能把课堂单进程证据扩大成生产保证。

规则基线是不使用语言模型:模型结果和命中证据直接填入固定记录模板。若专业事件类型稳定、字段固定,模板路径可能比生成式说明更可靠。只有确实需要把多段证据组织成可读候选说明时,语言模型才有额外价值。

第四节 重放正常、失败、重试和交接流程

一、建立事件重放包

参考重放包由build_replay.py从7条流程样例现场生成36条事件:N01接受、N02拒绝、N03保持待确认,多意图、陌生、高风险和检索故障进入人工接管。验收在临时目录重建并逐字节比较。11项单元测试另覆盖语言输出缺字段/无依据动作、同载荷重试、同编号不同载荷、首次及中途写入故障、类别—证据错配和程序重开确认。每次核心代码或合同修改后,重建全部制品并比较状态、内容与记录数。

交接样例用N03模拟“换班”:事件停在AWAITING_CONFIRMATION。后一位复核者从持久日志恢复原事件、分析、完整证据和候选,核对preview_digest后才能确认,而不是重新猜测。课堂JSONL记录事件编号、顺序、状态、角色、载荷和结果;真实系统还应加入时间、软件/模型版本和操作者身份,同时避免无关个人隐私与密钥。

二、定位失败属于哪一层

模型误判由感知层处理;资料没找到由检索层处理;候选说明缺字段由生成接口处理;硬约束违反由规则层处理;状态跳转错误由工作流处理;无权限调用由权限层处理;重复记录由写入层处理。把所有错误都反馈成“模型不准”,会导致AI修改错误模块。

学生给协助开发的AI的有效反馈是:“事件EVT-006在检索无命中后仍进入AWAITING_CONFIRMATION,期望为MANUAL_REVIEW且原因为no_evidence;只修改检索失败转移,不改模型、资料和权限。修改后运行7个固定事件并列出差异。”这种限定比“把系统优化一下”更可审查。

对照基线可以完全不用语言模型:专业小模型输出、检索证据和人工选择直接填入固定模板。两条路径在同一事件集上比较字段正确率、来源错误、处理时间和人工修改量。如果生成式候选不能明显改善可读性或工作效率,就保留模板基线。工作流是否可靠取决于责任链和状态,而不是是否加入更多模型。

交接测试还应改变操作者而不改变系统。两名学生分别按照同一说明处理相同事件,比较状态、确认理由和最终记录。差异过大可能来自界面提示含糊、权限说明不足或专业规则没有写清,而不一定是模型性能问题。此类证据应进入第11章的验收门。

三、专业迁移卡

专业迁移卡A:商业贸易售后。 输入变为商品信息、客户描述和图片模型候选;资料为退换规则和保修条款。高代价错误是承诺不存在的权益或重复退款。交付物增加订单核验、金额只读字段和客服主管确认,模型不能直接退款。

专业迁移卡B:设计与数字媒体发布审核。 输入变为待发布文案、图片、音频和授权清单;资料为品牌规范和发布要求。高代价错误是事实错误、授权缺失或错误公开。交付物增加版本差异和权利检查,最终发布必须由内容责任人确认。

专业迁移卡C:园林养护事件。 输入变为第9章环境节点和植物视觉结果;资料为养护标准与现场记录。高代价错误是把传感器故障误判为缺水并自动灌溉。系统只形成待核查记录,由养护人员现场确认,不连接水泵控制。

四、交付工作流而不是演示画面

验收时,另一名学生应能从项目说明启动系统,重放失败事件,查到日志,解释停止原因并处理一条待确认记录。交付包还要说明资料如何更新、权限由谁维护、当前为何没有撤销接口,以及哪种变更必须重新验收。只能由原作者现场操作的演示,不是可交接工作流。

本章小结

专业工作流的可靠性来自职责分离。模型识别或生成候选,检索提供依据,规则守住确定条件,状态记录进展,权限限制动作,工具执行经过确认的写入,人员承担批准和专业责任。结构化接口使模块能够独立测试和替换。

停止、重复提交保护、中途写入恢复和审计日志不是附加功能,而是本项目工作闭环的一部分。学生应通过真实故障、限定AI修改和固定回归证明系统能在本章已实现的边界内恢复并被下一位人员接手;撤销、外部超时和并发事务必须作为扩展重新立项验收。

关键术语

目标测试

一、单项选择题

  1. 下列最适合交给确定性规则的是( )。A.生成候选说明 B.检查必填字段和置信阈值 C.理解含糊委托 D.归纳多段文字
  2. 检索模块的直接输出应当是( )。A.最终批准决定 B.命中材料及来源 C.用户权限 D.设备控制命令
  3. 幂等保护主要防止( )。A.模型训练过慢 B.同一事件重复产生副作用 C.资料过期 D.图像背景变化
  4. 工具写入超时后,正确做法是( )。A.立即无限重试 B.先查询是否已写入,再按规则处理 C.删除日志 D.让模型猜测结果

二、判断并改错

  1. “大语言模型能够协调流程,所以状态、权限和安全规则也可以由它临时决定。”请判断并改正。
  2. “检索找到了相关段落,就能证明生成的每个结论都有依据。”请判断并改正。

三、简答与操作题

  1. 为“识别—查依据—人工确认—记录”流程列出至少六个状态,并说明一个停止条件。
  2. 选择一个专业事件,分别写出模型、检索、规则、状态、权限和人员的职责。
  3. 设计三个重复提交测试,说明预期记录数量和日志结果。
  4. 阅读本章最小工程,说明把propose()换成语言模型后,哪些模块和责任仍不能交给模型。

答案编号:A2-10-01—A2-10-10。完整答案与评分要点统一放入书后“目标测试参考答案”。