
上周我干了件有点疯的事把 GPT 接到 DeepO 上让它自己去解一道宇瞳杯光学设计竞赛的题目。多数人用 GPT 是写周报、改代码、查资料我却想让大模型直接上手操作专业的光学设计软件自己生成镜头结构、自己迭代优化、自己盯像差曲线。折腾了整整三天结果有惊喜也有翻车但整个过程的收获比单纯交一份设计稿大得多。这篇文章写给两类人一是对“智能体操作专业软件”感兴趣的同学二是做光学设计、想用 AI 提升效率的工程师。我尽量把架构怎么搭、赛题怎么拆、GPT 在哪些环节靠谱、哪些环节离谱都讲清楚。1. 为什么选 DeepO 和宇瞳杯来做这个“疯狂实验”先说背景。宇瞳杯是面向光学设计领域的一个竞赛平台题目通常以安防监控、车载、消费电子镜头为背景要求参赛者在限定时间内输出满足规格的设计方案。这类题目最大的特点是约束多、指标硬一个镜头要在给定靶面、波段、总长、后焦、畸变范围下同时满足 MTF、相对照度、CRA 等一堆指标。对新手来说光是读懂赛题就要几天对老手来说又是一个拼手速和耐心的体力活。DeepO 则是一个支持脚本化操作的光学设计平台。你可能更熟悉 Zemax、CODE V但 DeepO 在国产软件里有个很关键的优势——它提供了相对完整的 Python 风格接口可以通过外部程序读取系统状态、修改镜头参数、调用优化器。这就给“让 AI 操作软件”留下了物理入口。为什么说这个组合是最佳试验田因为光学设计竞赛题目有三个特征恰好是 GPT 类大模型能发挥的地方同时也是最容易暴露问题的地方目标明确但路径不唯一。赛题不会告诉你“把第二片镜片改成双凹”它只告诉你“MTF 在 160 lp/mm 处中心视场不低于 0.5”。怎么达成是工程师自己想办法的事。这种开放式问题特别适合让大模型基于当前数据不断提出修改建议。反馈是数值化的。每次优化完系统都会吐出评价函数值、MTF 曲线、畸变数据、点列图。数值本身就是最好的“奖励信号”根本不需要人类额外解释。流程高度重复。初始结构生成、局部优化、全局搜索、替换材料、微调权重——这些步骤占实际设计时间的 80%。不是每个循环都需要人来决策AI 完全可以在画好的跑道里来回跑。简而言之赛题给了目标DeepO 给了动手能力GPT 负责动脑。理想状态下这套组合可以 24 小时不间断地尝试各种结构人只需要在关键节点把关。2. 整体架构给 GPT 装上一套“光学手”和“光学眼”要让 GPT 操作 DeepO核心不只是“能调 API”而是要让 GPT 形成感知—决策—执行—验证的闭环。我最后搭出来的架构分四层每层都有它的作用。2.1 连接层把自然语言翻译成 DeepO 脚本指令GPT 不会直接点 DeepO 的按钮这没问题我们本来也不需要它点按钮。DeepO 支持脚本调用所以只要写一个“指令翻译层”把 GPT 输出的结构化 JSON 转成 DeepO 能执行的 Python 脚本即可。示意代码如下实际接口以你装的 DeepO 版本为准import deepo sys deepo.open_design(challenge_01.dlo) # 这个函数调用 GPT 的 API传入当前系统状态和用户目标 gpt_actions call_gpt( system_snapshotsys.export_parameters(), user_target优化中心视场MTF同时保持畸变不超过3% ) # GPT 返回的是结构化动作列表 for action in gpt_actions.actions: if action.type modify_curvature: sys.lenses[action.lens_index].set_curvature(action.value) elif action.type set_airgap: sys.lenses[action.lens_index].airgap_to_next action.value elif action.type replace_glass: sys.lenses[action.lens_index].glass action.value sys.optimize(max_iterations200) sys.export_results(result_round_01.zmx)机器本身不懂“优化一下”是什么意思但 JSON 动作列表它完全照做。这一步的关键是把动作空间限制住。我一开始让 GPT 自由输出自然语言指令结果它经常说“尝试改变镜片的形状”这种无法执行的废话。后来我把可执行动作限定为五类改曲率半径、改透镜厚度、改空气间隔、替换玻璃材料、调整优化权重。一旦约束好动作空间执行成功率立刻上去。2.2 数据反馈层让 GPT“看见”像差数据GPT 没有眼睛但它有文本理解能力。所以我们要把系统的数值状态整理成它看得懂的文本摘要。这一步很重要因为 GPT 不能直接看 MTF 图它只能看数字。我每次迭代都会生成一份系统快照包含这些字段数据项示例当前评价函数值MF 0.0382视场 0/0.3/0.5/0.7/1.0 的 RMS 波前差0.031/0.042/0.058/0.079/0.119单位波长中心/边缘 MTF160lp/mm0.52 / 0.29畸变百分比(0-1视场)-1.2% / -3.8%光学总长与后焦TTL7.2mmBFL5.1mm快照生成后连同“你希望达成的目标”一起发给 GPT让它输出下一轮动作。这个过程本质上是让大模型在“读实验数据 — 提出假设 — 执行动作”之间循环跟我自己调镜头时的思路一模一样区别只是它的反应速度比人快得多。2.3 循环决策框架每轮迭代 GPT 到底该做什么为了让 GPT 不至于乱来我给它设计了一个四阶段决策框架诊断对比当前指标与目标列出差距最大的三项。比如“MTF 边缘不足”“畸变超标”“总长超标”。归因基于光学常识推断可能的原因。是镜片光焦度分配不合理是某个空气间隔导致像面太远还是用了不合适的玻璃材料开方给出具体的参数修改建议并说明预期效果。比如“将第三片镜片的后表面曲率半径从 3.2 改为 2.8可增强边缘视场光线偏折改善边缘 MTF”。执行输出动作列表交给连接层执行然后把新数据喂回第一步。实测下来这套循环最大的价值不是“每一步都对”而是每轮都有改进的倾向。GPT 的定向搜索能力比我认为的强很多哪怕只是简单调权重也能把评价函数从 0.08 压到 0.04。3. 从零跑通一道安防定焦镜头赛题的全过程光讲架构没意思我直接拿一道模拟宇瞳杯赛题风格的任务走一遍完整流程。题目是我按安防定焦镜头常见规格拟的焦距6mmF 数1.6靶面1/1.8 英寸波段可见光 850nm 红外需要红外共焦MTF 要求中心视场在 160 lp/mm 处不低于 0.50.7 视场不低于 0.3畸变要求控制在 -3% 以内光学总长不超过 20mm后焦不小于 5.5mm3.1 初始结构GPT 的第一份答卷赛题设计的第一步通常是找初始结构可以直接套专利、查镜头库也可以自己从平板开始凑。我故意没给 GPT 任何现成初始结构让它从零开始设计。它给出的第一版方案是这样的四片式球面镜头前组正透镜后组负透镜整体像一个简化版的双高斯。这个结构从类型上说是合理的至少比某些新手随便放三片正透镜要靠谱。但问题也很明显第一片镜片中心厚度 2.8mm边缘厚度只有 0.12mm加工厂看了会直接拒单第二片和第三片之间空气间隔仅 0.04mm装配公差根本搞不定红外 850nm 波段处焦点偏移 26μm红外共焦完全没做到。看到这个结果我反而放心了因为它的错误是有逻辑的错误说明模型理解了基本的光焦度分配原理只是不了解加工约束和像差平衡的细节。这些恰好是后面迭代中要注入的规则。3.2 优化迭代评价函数与约束注入有了初始结构接下来进入优化环节。这一步我让 GPT 自己设计评价函数权重。结果它一开始把所有权重都压到畸变上把畸变压到 0.5% 以内代价是 MTF 全面崩坏中心视场连 0.2 都不到。这里就暴露了一个核心问题GPT 把“满足指标”理解成了“优化一个数字”而没意识到光学设计是多目标平衡的艺术。后来我在目标描述里明确加了优先级顺序第一优先所有视场 MTF 不低于 0.35第二优先总长不超过 20mm第三优先畸变不超过 -3%。只有在满足前三项的前提下才允许继续优化畸变。加了这个约束说明后它给的权重方案就合理多了MTF 相关操作数占了大约 70% 的权重总长控制在 15%畸变 10%红外共焦偏移量 5%。这个分配虽然还是偏保守但已经像一个入门光学工程师的水平了。3.3 参数修改与关键结构的演化过程优化过程中有一轮修改让我印象很深。迭代到第 6 轮时MTF 中心和 0.7 视场都达标了但 1.0 视场最边缘的 MTF 依然只有 0.18明显拖后腿。GPT 在诊断环节输出了一段分析“1.0 视场光线入射角过大导致边缘视场像散和彗差显著增大。建议调整最后一片镜片的光焦度分配将其后表面曲率半径从 -4.52mm 改为 -3.85mm同时将前一面空气间隔从 0.55mm 缩小到 0.42mm以减小边缘光线在最后一面的入射高度。”这套说辞从专业角度看是自洽的也确实是最常见的边缘视场优化手段。我让它执行了结果 1.0 视场 MTF 从 0.18 升到 0.27虽然还没到目标但方向是对的。后续又迭代了十几轮每一轮改变量都不大但评价函数在稳步下降。最终结果指标目标实测中心 MTF160lp/mm≥0.50.560.7 视场 MTF≥0.30.411.0 视场 MTF尽量提升0.33畸变≤-3%-2.4%光学总长≤20mm18.7mm红外共焦偏移尽量小22μm六项核心指标里五项达标1.0 视场 MTF 虽然没有达到 0.35 的理想值但 0.33 对 F/1.6 的安防镜头来说已经勉强可用。整个过程大概跑了 40 轮自动迭代用时四个小时期间我总共手工干预了三次。4. 实测中暴露的五个致命短板说完了高光时刻必须聊聊翻车现场。GPT 操作 DeepO 这件事如果只看最终结果容易高估它的能力。我在实测中踩了五个大坑每一个都值得单独拿出来分析。4.1 短板一没有物理直觉不知道自己在“调什么”GPT 很擅长把数字往目标方向挪但它完全不知道镜片长什么样。有一次它为了压低某个视场的 RMS把第二片镜片的曲率半径从 12mm 直接改成 1.2mm。数值上评价函数确实降了但镜头结构变成了一个极度弯曲的半球形镜片这在实际设计中没有任何可行性。我后来总结大模型对“光学像差”有概念但对“物理可实现性”没有概念。它看不到镜片的实际形状不理解边缘厚度太薄会崩边也不知道曲率太陡会导致高阶像差爆炸。要让它避开这些坑只能靠外部规则硬约束不能指望它自觉。4.2 短板二单位与量纲混乱这个坑出现得相当低级。DeepO 内部长度单位是毫米但 GPT 在处理玻璃材料折射率的时候会把波长单位和长度单位搞混。有一轮它建议用折射率为 1.92 的“高折射率聚碳酸酯材料”但实际上聚碳酸酯的折射率只有 1.585 左右折射率 1.92 的材料即便存在色散特性也完全不适合用在安防镜头里。同样的问题也出现在波长处理上。它对 850nm 红外波段的理解是“比可见光波长更长所以焦点更靠后”方向判断没问题但要它给出具体的轴向色差补偿量时它经常把 20μm 写成 0.02mm 再写成 2μm数值差了一个数量级。这类低级错误在反复提示后有所缓解但每隔几轮还会犯一次。4.3 短板三编造玻璃材料这是最让我头疼的问题。光学设计软件里的玻璃库是封闭的材料折射率、阿贝数、透过率都是严格定义的。但 GPT 会根据自己训练数据里的碎片化知识编造“看起来合理”的材料参数。它曾建议用一个折射率 1.74、阿贝数 32 的“超低色散镧系玻璃”作为第二片镜片材料理由是能有效校正色差。问题是这个材料在 DeepO 玻璃库里根本不存在执行层直接报错。我又试过一次让它自己在材料库里选结果它“幻觉”出的材料名和真实材料名对不上号。解决方案只有一个把材料选择范围预先限定好在系统提示词里写死“材料只能从以下列表中选取”然后把可用材料列表附上。一旦不给它自由发挥的空间这类问题就基本杜绝了。4.4 短板四优化策略单一致死光学设计的优化器本身有局部最优解的问题GPT 也不能免俗。前期它喜欢把所有参数都交给优化器跑后期它开始频繁使用“全局搜索”但它的全局搜索策略并不是真正在全局探索而是在当前方案附近小幅扰动。有一次我感觉它已经在一个明显的局部最优解里卡死了——第 12 轮到第 30 轮评价函数几乎没动MTF 曲线也没有明显变化。换作人类工程师这时候应该考虑加点非球面、换一种玻璃组合甚至彻底推翻初始结构重新来。但 GPT 只会继续微调曲率半径根本不会考虑结构层面的重大调整。我的应对办法是人工干预暂停自动迭代在提示词里直接给它一个结构修改指令比如“把第三片镜片改成非球面保留现有曲率半径作为初始值”。注入这个新方向后优化立刻重新开始下降。4.5 短板五对“竞赛规则”的理解太机械宇瞳杯的赛题不只是光学指标还有提交物格式、设计说明书要求、材料数量限制等软性规则。GPT 对硬指标很敏感对软性约束经常视而不见。比如赛题明确要求“全系统不得使用超过 4 片球面镜片”它在第 5 轮迭代时建议增加一片额外的补偿镜片来改善边缘视场 MTF直接违反规则。虽然改动后被我叫停但这个行为说明它并没有真正把竞赛规则内化成约束条件它只是在“满足文本里写得最醒目的几个数字”。这块没有太好的自动化办法只能靠人在任务描述里反复强调或者在规则校验层做硬拦截。5. 安全网设计哪些环节必须人工把关经过三天实测我的结论是让 GPT 全自动操作 DeepO 在当前阶段不现实但把人放在“决策链顶端”、GPT 当高级操作员这个模式已经能大幅提升效率。关键是要把安全网设计明白让 AI 在跑道上飞但跑道边界要由人来画。5.1 参数合法性校验把物理约束写成自动检查清单我在执行层加了一道合法性校验每一轮 GPT 输出动作后脚本先检查这六项全部通过才允许执行所有曲率半径的绝对值不小于 0.5mm否则镜片形状极度弯曲无法加工每片镜片中心厚度不小于 0.3mm边缘厚度不小于 0.15mm相邻镜片空气间隔不小于 0.1mm给装配留公差空间光学总长不得超出赛题上限的 110%防止结构在优化中失控玻璃材料必须存在于当前玻璃库列表后焦不小于指定值防止照到像面之前就聚焦。这套校验逻辑本身对任何光学设计流程都有用不关 GPT 的事但它对 AI 操作场景尤其重要。因为人操作时有视觉反馈看到镜片变成畸形会直接意识到不对AI 没有这个直觉。5.2 人工介入的临界点判定什么情况下必须停下来自动化流程我总结了三类信号评价函数连续 10 轮不下降。这种时候靠微调曲率半径已经没戏了需要人来换一种优化策略或者改结构形式。GPT 连续两次修改同一个参数但方向相反。比如先增大第一片镜片的光焦度又马上减小它说明模型在同一个地方犹豫这时候要么是目标矛盾要么是初始结构本身就有问题。出现违反物理常识的数值。比如某片镜片折射率 1.92、某空气间隔 0.03mm这种数值一旦出现直接判死刑不需要看后续解释。5.3 推荐的人机协作姿态最后说点我个人偏见的结论。测试了一轮之后现在我认可的工作模式是人类定策略AI 做战术。人类拆解赛题、写约束条件、定优化方向、选择初始结构形式、在关键节点干预参数突变。AI负责具体的循环迭代、参数微调、结果对比、过程记录以及生成设计说明书的初稿。这个姿态的好处是AI 的高强度重复劳动和“多思路并行搜索”能力被充分利用了而它最薄弱的“全局判断”和“物理常识”部分恰好由人类来补。说到底大模型操作专业软件这件事最有价值的不是替代工程师而是让工程师从“守着优化器发呆”的日常里解放出来把时间花在真正需要判断力的地方。如果你也想在自己的领域做类似的尝试我的建议很简单找到一个反馈数值化、操作可脚本化、规则边界清晰的软件把 AI 的动作空间压到最小然后让它在边界内跑。别指望它成为专家但你可以指望它成为一个不知疲倦、且能听懂你指令的高级实习生。