从一个 OpenSeesPy 桁架分析任务说起,看 Coding Agent 和 Chatbot 的本质区别
引言:一次意料之外的体验
上个月备课,我需要准备一个 OpenSeesPy 二维桁架静力分析的示例,用于课堂上给学生演示。这个任务对我而言再熟悉不过了:4 个节点、3 根杆件、施加节点集中力,输出位移和杆端力——从打开编辑器到运行出结果,两分钟之内就能完成。
但那天我忽然想试试:如果让 AI 来做这件事,会怎么样?
我把需求描述发给了一款通用 AI 聊天工具,几秒钟后,屏幕上出现了一段看起来相当专业的 Python 代码。乍一看,节点定义、材料参数、边界条件、加载方式,写得有模有样。
然而接下来的体验出乎我的意料。我把代码复制到编辑器里运行——报错,原来 AI 默认假设我装了全局的 openseespy,而我的环境是 conda 管理的,需要在对应环境中单独安装。切换环境、安装依赖后再运行——这次通过了,但输出的位移值跟我的预期差了三个数量级。仔细一看,AI 生成的代码本身没有问题,只是它默认采用了 N-m 单位制,而我在课堂演示中习惯用 N-mm。把单位换算回去再跑,结果对了。但注意:到这里我已经手动折腾了好几轮——切环境、查单位、换算、验证——本该两分钟做完的事,却没有因为 AI 的介入而变得更高效。
这不是 AI 生成代码的质量问题——它生成的代码本身是正确的,甚至可以说写得很规范。问题在于:AI 对我的工作环境一无所知。它不知道我用什么 Python 环境、遵循什么单位惯例、项目的目录结构长什么样。它的代码是在"真空"中生成的——语法完美、逻辑正确,却和我的实际工作环境之间横亘着一道看不见的墙。
这引出了一个根本性的问题:AI 明明能写出正确的代码,为什么"用 AI 写代码"这个体验,还是如此割裂?
一、你以为的 AI 编程 vs. 实际的 AI 编程
要回答上面的问题,我们需要先厘清两个概念:Chatbot(聊天助手) 和 Coding Agent(编程智能体)。这是 Anthropic 官方 Claude Code 101 课程开篇就强调的核心区分。
你熟悉的那种 AI 编程
你打开浏览器,在对话框里描述需求,AI 生成一段代码。你把代码复制到项目里,手动运行,如果报错就再把报错信息贴回去。如此往复。
这种模式的本质是:AI 是一个只能"口述答案"的顾问。它看不见你的项目结构,不知道你装了什么依赖,不清楚你的文件是怎么组织的。它生成的代码是基于你的文字描述"想象"出来的——而这个想象过程缺乏对真实环境的感知。
真正的 AI 编程应该是什么样
Coding Agent 的工作方式完全不同。它不是一个只能回答问题的对话框,而是一个能直接在你的开发环境中执行操作的智能体。
它会:- 主动读取你的项目文件,理解代码结构和依赖关系- 在你指定的位置创建或修改文件- 在终端里运行命令,查看执行结果- 如果报错了,读取报错信息,自己修正,重新运行- 直到任务完成
用表格来对比更直观:
回到我那天的桁架分析任务。聊天 AI 的工作链是:我描述 → AI 生成 → 我复制 → 我运行 → 我查错 → 我描述错误 → AI 修正 → 我复制 → ……。每一步都需要我的手动参与。
而如果有一个 Coding Agent,它应该能做到:我描述目标 → Agent 读项目 → Agent 写文件 → Agent 运行 → Agent 看报错 → Agent 自己修 → Agent 汇报结果。
这中间的差异,不是"AI 聪明不聪明"的问题,而是工作模式的根本不同。
二、Claude Code 到底做了什么不一样的事?
Claude Code 是 Anthropic 推出的一个 Coding Agent,它运行在你的终端里,不是浏览器里。这就是它和通用聊天 AI 最关键的区别。
为什么这个区别如此重要?因为终端是你和操作系统交互的界面。在终端里,Claude Code 可以做这些事情:
- 读取你的文件
:它能看到你的项目里有哪些 .py文件、它们的目录结构是怎样的、import了哪些模块。 - 理解项目上下文
:通过 /init命令或CLAUDE.md文件,它可以获取项目的整体描述、编码规范、技术栈信息。 - 执行终端命令
:它可以运行 python script.py、pip install、git status等命令,并且读取命令的输出。 - 读取运行结果并迭代
:它运行你的脚本后,如果看到 traceback,会自动分析错误原因,修改代码,再次运行。这个循环不需要你的任何介入。 - 创建和管理 Git 提交
:任务完成后,它可以帮你写好 commit message 并提交。
换句话说,Claude Code 和你的操作系统之间有一条双向通道:它既能"看到"系统的状态(文件、目录、运行输出),也能"操作"系统(写文件、执行命令、Git 操作)。
这就是为什么 Anthropic 在课程中将 Claude Code 定义为 Agentic Coding Tool 而非 "AI Code Generator"。Generate(生成)是单向的——AI 产出代码文本;Agent(智能体)是双向的——AI 感知环境、采取行动、验证结果、循环迭代。
三、用 Agentic Loop 重新理解编程这件事
Claude Code 101 课程的第二课介绍了一个核心概念:Agentic Loop(智能体循环)。
这个循环由三个步骤组成,不断轮转:
Gather Context(收集上下文) → Take Action(执行动作) → Verify Results(验证结果) → 回到第一步让我把它拆开来看。
Gather Context:先搞清楚状况
在你给 Claude Code 一个任务后,它做的第一件事不是写代码,而是阅读。它会用 Glob 工具了解项目文件结构,用 Grep 工具搜索关键代码,用 Read 工具打开相关文件。它试图回答这些问题:这是什么项目?用了什么语言和框架?目录是怎么组织的?有哪些现成的代码可以参考?
这一步对应的是人类工程师拿到一个新任务时的第一反应:先看代码,再动手。
Take Action:执行具体操作
掌握足够的上下文后,Claude Code 开始行动。它可能用 Write 工具创建新文件,用 Edit 工具修改现有代码,用 Bash 工具执行命令。这些操作不是盲目的——它们基于第一步收集的上下文。
Verify Results:检查工作成果
行动之后,Claude Code 会检查结果。如果它运行了一个 Python 脚本,它会看终端输出;如果它修改了一个文件,它可能再读一遍确认修改正确。如果结果不对——比如脚本报错——它会分析错误,回到第一步,用新的理解再次尝试。

这套循环有趣的地方在于,它和熟练工程师的工作方式几乎一模一样。
我以前带研究生做有限元分析时,总结过一套调试流程:1. 看模型文件和报错信息,搞清楚问题是什么(Gather Context)2. 修改参数或代码(Take Action)3. 重新运行,对比预期结果和实际结果(Verify Results)4. 如果不对,回到第 1 步
这和 Agentic Loop 本质上是一回事。Claude Code 并不是在做什么"魔法",它只是在模仿人类工程师解决问题的方式——只是速度快得多,而且不会因为调试到凌晨三点而犯困。
四、实际体验:用 Claude Code 完成同一个桁架任务
说了这么多概念,回到开头那个桁架分析任务。在我安装了 Claude Code 之后,我决定用同样的任务来试试它——看看 Coding Agent 和 Chatbot 的体验到底有多大差距。
我在终端里输入:
帮我写一个 OpenSeesPy 二维桁架静力分析脚本。4 个节点,坐标是 (0,0)、(144,0)、(168,0)、(72,96)。节点 1、2、3 是铰支座。在节点 4 施加 100 的水平力和 -50 的竖向力。杆件材料弹性模量 3000,截面积杆 1 为 10,杆 2 和杆 3 为 5。输出节点 4 的位移和所有杆端力。Claude Code 没有急着输出代码。它先读了一下我的工作目录,了解了我已经有哪些文件。然后它直接用 Edit 工具在项目里创建了一个 Python 脚本。
它写的代码包含了完整的 OpenSeesPy 分析流程:
importopenseespy.openseesasopsops.wipe()ops.model('basic','-ndm',2,'-ndf',2)coords=[(0,0),(144,0),(168,0),(72,96)]fori,(x,y)inenumerate(coords,1):ops.node(i,x,y)ops.fix(1,1,1)ops.fix(2,1,1)ops.fix(3,1,1)ops.uniaxialMaterial("Elastic",1,3000)ops.element('truss',1,1,4,10,1)ops.element('truss',2,2,4,5,1)ops.element('truss',3,3,4,5,1)ops.timeSeries('Linear',1)ops.pattern('Plain',1,1)ops.load(4,100,-50)ops.system('BandGeneral')ops.numberer('Plain')ops.constraints('Plain')ops.integrator('LoadControl',1)ops.algorithm('Linear')ops.analysis('Static')ops.analyze(1)print("Node 4 displacement:",ops.nodeDisp(4))print("Element forces:",ops.eleForce(1),ops.eleForce(2),ops.eleForce(3))接着,它自己在终端里运行了 python 命令执行这个脚本。运行成功,输出了位移和杆端力,和预期结果一致。
整个过程中,我没有复制粘贴一次,没有手动运行一次,甚至没有打开编辑器。
这就是 Agentic Loop 在真实场景中的表现:Claude Code 读完项目上下文后,直接写代码、运行、验证——而我只需要做一件事:确认结果正确。
五、从"写代码的人"到"定义问题的人"
写到这里,我想分享一个学习 Claude Code 101 课程后的最大感悟。
在使用通用聊天 AI 时,我和 AI 的关系是"教师—学生"型的:我布置一道题(描述需求),AI 交一份答卷(生成代码),我批改(检查是否正确),如果有错就让 AI 订正。这个关系中,我是那个不停检查和纠正的人。
而在使用 Claude Code 时,我和 AI 的关系变成了"合伙人—执行者"型的:我告诉合伙人我们要达成什么目标,执行者自己去搞清楚怎么做到,遇到问题自己想办法,搞定了来向我汇报。
这里有一个重要的思维转变:我的注意力从"怎么实现"转移到了"实现什么"。
对于像我这样同时做教学和科研的高校老师来说,这个转变意义重大。教学上,我需要准备大量的示例代码和课件材料——以前我要花大量时间琢磨语法细节和 API 调用方式,现在我可以把更多精力放在"这个例子要说明什么力学概念"上。科研上,有限元分析往往涉及大量的模型参数调试、批量计算和结果整理——这些重复性工作正是 Agent 擅长的。
Claude Code 不会替代工程师的领域知识。你仍然需要知道什么是桁架、什么是节点、什么是弹性模量、怎样的边界条件设置是正确的。但你可以把"怎样把我知道的东西写成正确的代码"这件事,交给 Claude Code 去办。
从"写代码的人"到"定义问题的人"——我想,这才是 AI 时代给工程师带来的真正红利。
下篇预告
这篇文章我们聊了"为什么需要 Claude Code"——理解聊天助手和编程智能体的本质区别,以及 Agentic Loop 的工作原理。
下一篇文章,我们从理论走向实操:安装 Claude Code,掌握核心的四步工作法(Explore → Plan → Code → Commit),亲手跑通一个二层框架静力分析的完整项目。
本系列文章基于 Anthropic 官方 Claude Code 101 课程内容撰写。
夜雨聆风