完整示例与概念桥接
本课讲解
先别急着装框架
这门课从一个看似简单的问题开始:系统会不会根据执行结果改变下一步?
如果代码无论发生什么都按 A → B → C 执行,它是固定工作流。即使 B 里调用了大语言模型,路径仍由开发者预先决定。Agent 则拥有一组受限动作,会观察环境,把观察写回状态,再选择下一步。它不是“更聪明的聊天框”,而是一种控制循环。
| 形态 | 下一步由谁决定 | 是否观察环境 | 典型停止方式 |
|---|---|---|---|
| 固定工作流 | 开发者预先写死 | 可有,但不改变路径 | 流程走到末尾 |
| 单次 LLM 调用 | 没有下一轮动作 | 通常没有 | 返回文本 |
| Agent | 运行时根据目标与观察决定 | 必须 | 目标满足、被拒绝、失败上限或轮次上限 |
“用了 LLM”“调用了 API”“能联网”都不能单独证明一个系统是 Agent。真正的分界线是控制权。
最小 Agent 的五个部分
- 目标:这次任务要交付什么,怎样才算完成。
- 动作:系统当前被允许做什么,例如搜索课程索引。
- 观察:动作返回的结构化结果,包括失败。
- 状态:目标、已有证据、尝试历史与剩余额度。
- 停止条件:目标满足、风险过高、需要人工输入,或已达到资源上限。
可以把它写成不依赖任何框架的伪代码:
state = start(goal)
for turn in range(MAX_TURNS): action = choose_action(state) observation = run(action) state = update(state, observation)
if should_stop(state): break最容易被忽视的是 should_stop。一个只会“继续尝试”的系统不是更自主,而是更不可控。停止条件应在执行层可以检查,不能只期待模型自己克制。
为什么首版使用确定性模拟
本课程中的 Agent 实验不会调用真实模型,也不需要 API Key。相同输入始终得到相同结果,这让你能把注意力放在 Agent 的结构上:
- 为什么选择这个动作;
- 工具收到什么输入;
- 观察如何改变状态;
- 哪条规则让循环停止;
- 错误发生时怎样恢复。
真实模型会引入随机性、费用、速率限制和供应商差异。它们都很重要,但不应挡住第一次理解控制循环。
Python 是观察机制,不是背诵题
浏览器 Python 实验只要求函数、条件、列表和断言。自动测试不是为了给你打分,而是把“我觉得对”变成“这个行为可以重复验证”。
def next_step(evidence_count): if evidence_count == 0: return "retrieve" return "answer"当测试失败时,先阅读:
- 哪个输入触发失败;
- 实际输出是什么;
- 预期行为对应哪条 Agent 规则。
这正是之后调试工具、检索与安全边界时会反复使用的方法。
本课完成定义
完成本课,不等于把页面滚到底。你需要能做到:
- 面对一个系统描述,说明它为什么是固定流程或 Agent;
- 从 Trace 中指出“观察如何改变下一步”;
- 写出至少两个停止条件;
- 让 Python 自动测试通过;
- 为 Course Helper 定义一个最小且有上限的循环。
官方课程的环境说明、Python 与 .NET 前置条件见锁定版本的课程设置来源。本应用把云端环境替换为浏览器内的安全练习区,以便从零开始。