agent_demystified_visual.html
非解构LOGO

祛魅 AI Agent
从底层源码看智能体的本质

用 100 行 Python 源码拆解 Agent 的运行机理与内核

session_info import agent_loop

# 初始化讲座
讲师 = "周文琪"
主题 = "土木人的 AI 课(第三期):拒绝套壳,手搓智能体"
状态 = "Ready to compile thoughts..."

讲师介绍 (Instructor Profile)

周文琪

主讲人

上海非解构数字科技有限公司 联合创始人

一级注册结构工程师 高级工程师
💬 扫码添加微信与关注公众号
周文琪微信二维码
讲师微信 备注: 手搓Agent
非解构官方公众号二维码
官方公众号 关注「非解构」

历次直播回看:B站官方频道

📺 B站官方回放频道(电脑端推荐) ➔ 搜索关注:非解构

本频道完整收录了《土木人的 Python 课》《土木人的 AI 课》历次精彩直播录像。同时包含 GAMA 的基础操作教程 以及 GAMA 在土木工程数字化转型中的运用 实例,方便您高清同步学习。

B站回放渠道截图

历次直播回看:微信视频号

📱 微信视频号直播(手机端推荐) ➔ 搜索关注:非解构

支持微信内搜索直接进入。为您提供《土木人的 Python 课》《土木人的 AI 课》历次直播精华,并包含 GAMA 数字化设计参数化算法 实战切片,方便在手机端收看直播与交流。

微信视频号直播截图

百花齐放:国内外主流 Agent 生态

AI Agent 正在以极快的速度演进。无论是原生 CLI、独立桌面端还是深度集成的 IDE,它们都在改变开发者与计算设备的交互范式。以下是目前业界最具代表性的几款 Agent:

Claude Code

Anthropic

Codex

OpenAI

Antigravity

Google / DeepMind

Qoder

AI Agent

Trae

ByteDance

OpenCode

Open Source

OpenClaw

Community

Hermes

Nous Research
非解构水印

重新梳理:什么是 Agent?

在工程和开发中,人们往往把 Agent 包装得很玄学,但从代码本质看,其工作原理十分纯粹:

Chatbot(一问一答)是无状态的单向流动
y = f(x),接收用户输入并返回文本,连接随之断开。

Agent(智能体)是带状态的环境自反馈循环
State_t+1 = Loop(State_t, Env)

它借由本地控制程序实现:

  • 决策大脑 (LLM):通过生成意图文字做出判断。
  • 本地状态维护 (Memory):用列表模拟记忆。
  • 反射动作 (Action / Tools):执行本地代码与外界交互。
图 1. 单向 Chatbot 与 闭环 Agent 对比
Chatbot (单向流) 用户输入 LLM大脑 答复 Agent (反射状态循环) 用户输入 LLM大脑 本地工具执行 任务完成
非解构水印

机制一:无状态大脑与记忆模拟

大模型本身是绝对无状态(Stateless)的。它无法记住你上一轮说过的话。

所谓的“记忆”,不过是本地程序不断把历史数据累加,在下一次请求时一次性全部塞给模型的障眼法。

在底层,这通过维护一个严格交替的 Messages Array 实现:

  • 每说一句话,就往数组 append 一个字典。
  • 角色必须在 userassistant 之间交替。
  • 调用工具的中间结果同样按此结构组织(`tool_result` 作为用户侧输入)。
图 2. 本地内存中 Messages 数组的状态演进
交互轮次 T1: 初始用户提问 Index 0 [user]: "我想生成一份文件" 交互轮次 T2: 模型意图使用工具 Index 0 [user]: "我想生成一份文件" Index 1 [assistant]: (工具调用请求: write_file) 交互轮次 T3: 工具运行结果发回模型 Index 0 [user] / Index 1 [assistant] ... Index 2 [user]: (工具返回结果: "文件已生成")
非解构水印

机制二:工具调用 (Tool Use) 的本质

大模型不会真正去运行你的 Python 函数或系统 API。

工具调用的底层逻辑是:

  1. 我们在请求时发送工具说明书 (JSON Schema)
  2. 大模型发现无法直接回答,便输出一段包含特定格式的结构化文本(意图 JSON)
  3. 本地客户端(Python 脚本)解析该文本,在本地实际运行该函数并捕获返回值。
  4. Python 将返回值再以 tool_result 结构发给大模型。
图 3. 工具调用的双向通信机制
Python (本地代理端) Claude API (云端决策脑) ① 发起请求 ② 返回 tool_use ③ 解析本地运行 本地环境 ④ 回传 Tool Result 作为记忆输入
非解构水印

机制三:自驱动的 Agent Loop

Agent 之所以被称为“智能体”,是因为它具有自主决策的控制循环

这在底层是由一个最简单的 while True 循环控制的。这个循环不断在“思考(LLM)➔ 判定是否调用工具 ➔ 本地执行 ➔ 再次推理”之间旋转,直到任务最终达成。

  • 决策机制:通过判定模型返回的 stop_reason 来掌控循环。
  • 自动拦截:发现 tool_use 时拦截响应,不直接给用户输出半成品。
  • 完成退出:直至大模型觉得无需工具时,跳出循环,输出结果。
图 4. 智能体循环生命周期
LLM 大脑 Messages 执行工具 tool_use 回传结果并更新记忆 完成 退出
非解构水印

机制四:代码沙箱与自我进化

如果给 Agent 提供特定的业务 API(如画圆),它只能做画圆的事。

但如果把工具设计为最底层的元指令:

  1. write_file:能写任何本地 Python 代码。
  2. run_command:能在终端执行任何命令。

Agent 便拥有了自主编写代码并执行的“沙箱环境”

当执行报错时,Python 解释器的报错追踪(Traceback)会被直接送还给大脑,驱使它自动分析错误、修正代码并再次执行,实现自我进化(Self-Correction)的调试闭环。

图 5. 自我 Debug 及进化闭环逻辑
1. 写代码 2. 执行 运行出错 捕获 Python Traceback 喂给大模型大脑分析 自动重写并修复bug 执行无误 任务执行成功!
非解构水印

机制五:动态技能加载与插件生态

如果把所有工具的逻辑都硬编码到主程序中,Agent 将会变得极其庞大且难以维护。

通过引入 Dynamic Skill (动态技能) 机制:

  1. 每个技能设计为一个独立目录(含说明书 tool_schema.json 与执行器 handler.py)。
  2. 主程序在启动时,通过 Python 的 importlib 动态扫描并反射加载外部技能。

这让 Agent 拥有了像智能手机“安装 App”一样的热插拔插件化能力,也是主流 Agent 平台与 MCP (Model Context Protocol) 服务协议的底层运行基石。

图 6. 技能动态加载反射机制
Agent 核心框架 importlib.util 动态扫描 Skill A: Calculator (schema + handler) Skill B: Web Search (schema + handler)
非解构LOGO

总结:应用交互范式的革命

传统交互模式 (硬编码)

程序员基于业务需求,面向专有 SDK(如 Excel API 或 AutoCAD API)编写死逻辑代码。一旦数据结构或外部接口改变,程序就会直接报错崩溃,必须由人工上线修改源代码进行二次发布。

Agent 交互模式 (动态自愈)

人类输入模糊的自然语言意图 ➔ Agent 自行分析并生成符合当下环境的临时 Python 脚本 ➔ 在本地代码沙箱中解释运行 ➔ 自动收集环境报错自行重试。整个生命周期均由 Agent 自迭代完成。

智能体不是魔法,而是以“本地运行状态”驱动“大模型动态意图”的自循环控制架构。