Agent 实现方法论
From Scratch
学习地图
练习
术语表
← 返回首页
本章教程
本章练习
第 14 章测验
第 14 章测验
对应章节:产品骨架 v01:CLI 里的完整 Loop
共 8 题,答对率 ≥ 80% 即通过。请完成全部题目后点击「提交」。
Q1
阶段二开始,为什么「把零件装成产品」需要一个骨架,而不是继续把每个 demo 写大?
因为演示代码单文件、参数写死、没有配置与日志,无法被后续章节在一个基础上持续演进
因为阶段一的所有 demo 代码都是错的,必须推倒重写
因为骨架能让模型自己写代码,不需要人再动手
因为产品的代码必须全部使用 TypeScript,而 demo 用的是 JavaScript
Q2
本章产品代码的分层红线是哪一条?
界面层(cli)不得 import core 的任何函数
core(config/provider/tools/loop)不得 import 界面层(cli)
每个 core 文件都必须 import 界面层才能运行
core 与界面可以互相 import,只要不形成环
Q3
core 的函数为什么采用「纯函数或依赖注入」的写法?
为了让代码看起来更函数式、更高级
为了让循环能脱离真实网络与真实模型被测试(注入脚本化 mock,结果确定可复现)
因为 JavaScript 不支持类
因为 Node.js 只能运行纯函数
Q4
loadConfig 的行为是?
只读环境变量,没有默认值,缺了就直接报错
环境变量提供则覆盖、缺省用默认值;temperature 与 maxIterations 从字符串解析为数字
默认值优先,环境变量永远不生效
所有配置写死在一个常量对象里,不可覆盖
Q5
工具注册表「从 spec 生成 JSON Schema」解决了什么问题?
让工具的 schema 与实现永远不会漂移,因为 schema 是从同一份 spec 算出来的,不存在第二份拷贝
让工具不需要实现函数也能被调用
让模型可以自己新增工具
让 JSON Schema 变成 TypeScript 类型
Q6
工具执行采用 error-as-data(错误也是数据),对主循环意味着什么?
工具一抛错整个对话就中断,用户必须重开
工具失败或名字不存在时,循环把错误字符串作为 tool 消息回填给模型,让模型看到后自行纠正
错误被静默吞掉,模型和用户都不知道发生了什么
错误只打印到控制台,不回填给模型
Q7
本章 runAgent 相比 ch07 最小循环,哪一项是「组装升级」而非「新原理」?
循环里新加了 think → act → observe 三环节
tools 从裸数组换成注册表(通过 executeTool 执行、失败变数据),并新增可选 onEvent trace 回调
引入了一种全新的停止条件
循环改为永远不停止,由用户手动 Ctrl-C 结束
Q8
本章 demo 中 mock 模型在「第一轮」一次返回两个 tool_calls(get_time + get_weather),这演示了什么?
模型会自动拒绝不合理的请求
并行工具调用:loop 对同一轮的多个 tool_calls 逐个执行并各自回填 tool 消息,下一轮模型看到全部结果
工具之间可以互相调用
主循环只能处理单个工具调用
提交