Lumerical配AI Agent:Cline+DeepSeek+MCP实现仿真自动化
发布时间:2026/9/25 8:48:54 作者:尧图编辑部 阅读量:1,286

1. 为什么我要给 Lumerical 配一个 AI Agent1.1 仿真工作中的重复劳动比想象中更烧时间做硅基光子学仿真的人一定有过这种经历一个 FDTD 模型结构画好了、边界条件设好了、光源加好了结果跑着跑着就卡在某个环节或者想扫个参数得手写一堆 .lsf 脚本改一个变量就得全局替换更别提把几十组仿真结果拉出来画图对比那基本等于一场体力劳动。Lumerical 是光子器件仿真领域绕不开的工具但它的自动化流程一直被吐槽——官方文档很厚Python API 也藏着掖着想要什么功能都得一点点翻翻完还要调半天。我也是被这种状态磨了好几个月之后才下决心给它配一个 AI Agent。我的诉求很明确用自然语言告诉助手我要仿什么器件、扫哪些参数、看什么结果剩下的写脚本、跑仿真、整理数据这些活尽量让它自动完成。听起来很理想化但 2024 年底之后Cline、DeepSeek、MCP 这一套组合的成熟度已经足够把想法落地了。1.2 这套方案最终的体验是什么样的最终搭出来的效果一句话概括我负责提需求、审结果Agent 负责写脚本、跑仿真、汇总数据。比如我让它扫描一个光栅耦合器的刻蚀深度它会自己规划扫描步长、生成 .lsf 脚本、调用 Lumerical 批量跑仿真、最后把效率结果汇总成表格——整个过程我只输入指令和检查最终结论。这篇文章就是这次从零搭建过程的全记录。如果你也做 Lumerical FDTD/MODE日常工作大量烧在重复性仿真上可以照着操作如果你纯粹对 AI Agent 感兴趣想找一个像 Lumerical 这样有真实复杂度的落地方向练手同样值得读完。前提是会一点 Python能在 VS Code 里装插件就够了。仿真是零基础的朋友也没关系Agent 写脚本的能力能帮你省掉一大半查文档的时间但物理上的把关责任还得你自己承担。2. 架构拆解Cline、DeepSeek、MCP 分工与协作逻辑2.1 LLM 与 Agent 不是一回事DeepSeek 只是大脑先把这个概念理清楚因为很多人分不清。DeepSeek 本身是一个大语言模型LLM它只能接收文本、输出文本。哪怕你让它帮我跑个仿真它也只会给你一段怎么写脚本的建议而不会真的去跑。AI Agent 则是在 LLM 之上加了一层行动能力它能调用工具、执行命令、观察结果、再决定下一步。一句话——大模型负责思考Agent 负责动手。Cline 扮演的就是这个动手角色。Cline 是 VS Code 里的一个 AI 编程助手插件它跟普通聊天插件最大的区别是它能实际操作你的开发环境——读写文件、执行终端命令、调用外部工具并且把每一步执行结果回传给大模型让模型根据真实情况调整下一步计划。这正是 Agent 的核心循环计划、行动、观察、再计划。那 DeepSeek 的位置就非常清楚了它是底层的推理引擎是那个大脑。Cline 自己不带模型它把用户的指令、历史对话、工具调用结果打包发送给 DeepSeek 的 APIDeepSeek 返回一个决策——继续写代码、调用某个工具、还是直接给出结论。整个链路里DeepSeek 不是不可替换的Cline 支持 OpenAI 兼容协议的模型都能接想换 Claude 或者本地模型改个配置就行。2.2 MCP 协议解决了模型怎么安全调用工具的问题MCPModel Context Protocol可能对很多人还是新词它解决的是大模型怎么标准化地调用外部工具这个问题。没有 MCP 之前Cline 也能执行终端命令、读写文件但这些能力是内置写死的数量有限。你想让它操作 Lumerical、Blender、浏览器或者内网数据库总不能每次都让开发者把对应功能加进 Cline 源码里。MCP 的思路是定义一套通用协议任何人写一个Server按协议暴露若干工具tool注册到客户端比如 Cline之后大模型在推理过程中就能看到这些工具的说明并在合适的时机调用它们。这有点像手机装 App——手机本身不会游泳但装上游泳教学 App之后它就能通过这个 App 获得你的姿势数据并给出指导。工具生态一旦标准化能力扩展的边界就完全打开了。2.3 为什么是这三个组件组合选择不是随机的。Lumerical 有 Python API 和命令行批量模式这是它能被 Agent 调用的前提Cline 是少数对 MCP 支持成熟、同时能自主执行终端命令的插件很多人把它当代码生成器用但我更看重它的 Agent 循环能力DeepSeek 则胜在性价比和工具调用稳定性——deepseek-chat 处理这类带工具调用的任务很稳上下文够长API 价格也比国外模型低一个数量级日常大量仿真脚本生成任务用它完全不心疼。这套组合还有一个隐藏优点全链路本地化程度高。除了 DeepSeek API 必须走网络之外Lumerical、VS Code、MCP Server 全都跑在你自己的机器上仿真数据不出环境这对科研场景尤其重要。3. 环境准备VS Code Cline DeepSeek API 配置3.1 安装 Cline 并用 OpenAI Compatible 模式接入 DeepSeek第一步是在 VS Code 的扩展市场里搜 Cline 并安装。装完后左侧栏会出现 Cline 图标打开进入设置。Cline 的模型配置走的是 Provider 体系在设置里选择 OpenAI Compatible或直接选 DeepSeek填入 API Endpoint、API Key 和模型名三项。以 DeepSeek 官方 API 为例我实测可用的配置如下配置项值ProviderOpenAI CompatibleBase URLhttps://api.deepseek.com/v1API Key在 DeepSeek 开放平台创建Modeldeepseek-chat上下文长度64KCline 里对应调整注意Base URL 要填https://api.deepseek.com/v1不能省掉/v1。Cline 在拼请求路径时会自动追加/chat/completions少写/v1会直接 404。这是我第一次配置时踩的坑报错信息只有一行 404 page not found完全看不出来是哪里的问题排查了好久。API Key 要去 DeepSeek 开放平台的API Keys页面创建创建后只显示一次完整字符串务必立刻复制保存。DeepSeek 是充值制我建议首次只充个几十块够你把流程跑通即可别一次性囤太多。3.2 验证最基本的对话链路再谈其他配置完成后先在 Cline 里随便问一个问题测试链路比如写一个读取 CSV 文件并绘制曲线的 Python 脚本。能正常返回代码说明模型通道没问题。但这还不够下一步要测试 Cline 的终端执行能力让它把刚才那个脚本真正写到磁盘、跑起来、输出结果。这个验证很关键因为 MCP Server 注册之后如果 Cline 本身连文件读写和终端执行都不正常后面排查起来会非常痛苦。我建议在这个阶段先不要开 Cline 的 Auto-approve自动批准选项。每步执行前 Cline 会弹出确认框虽然麻烦一点但你能看清它每一步的动作也能更好地理解 Agent 的思考路径。等熟悉了它的操作模式再针对终端执行命令和写文件开启自动批准效率能上来一大截。4. 核心工作封装 Lumerical Python API 为 MCP Server4.1 先想清楚 Server 应该暴露哪些工具MCP 不是越复杂越好。把 Agent 要完成的仿真任务拆解成原子能力每个能力对应一个工具这是设计的第一原则。我做的是光学仿真最终封装了四个工具run_lsf_script接收一段 Lumerical .lsf 脚本内容保存为文件并调用批量模式执行run_parameter_sweep接收模板脚本和参数范围自动生成多组脚本并依次执行read_simulation_results从仿真项目文件或输出文件中提取指定 monitor 的数据list_project_files列出工作区内的仿真项目文件方便 Agent 定位和复用这里有个关键设计决策是通过 Python API 直接调用 Lumerical还是通过生成 .lsf 脚本 批量模式执行的方式我最终选了后者原因有三个。第一稳定性。MCP Server 是以独立子进程形式运行的如果直接import lumapi把 Lumerical API 加载进这个进程仿真一旦崩掉MCP Server 也跟着崩Cline 直接丢失这个工具整个任务就断了。而用子进程跑 .lsf仿真实例和 Agent 进程完全隔离一个仿真挂了不影响 Agent 继续规划。第二环境兼容性。Lumerical 的 Python API 对环境要求较多要先加一堆路径才能 import而 .lsf 脚本本身就是 Lumerical 的原生语言批量执行只需要一条命令fdtd-solutions -batch xxx.lsf。第三可排查性。脚本文件落盘之后如果出了物理上的问题你可以直接拿这份 .lsf 去 GUI 里打开调试这对仿真工作流来说太重要了。4.2 写一个能跑的 MCP ServerMCP 的 Python SDK 已经提供了 FastMCP 这种高层封装不需要自己处理协议细节。安装mcp包之后一个最基础的 Server 长这样from pathlib import Path import subprocess, os from mcp.server.fastmcp import FastMCP mcp FastMCP(lumerical-agent) WORKDIR Path(os.environ.get(LUMERICAL_WORKDIR, ./sims)) mcp.tool() def run_lsf_script(script: str, filename: str auto_run) - str: 将 Lumerical .lsf 脚本内容写入 WORKDIR 并以批量模式执行。 Args: script: 完整的 .lsf 脚本内容 filename: 生成脚本的文件名不含扩展名 WORKDIR.mkdir(parentsTrue, exist_okTrue) script_path WORKDIR / f{filename}.lsf script_path.write_text(script, encodingutf-8) result subprocess.run( [fdtd-solutions, -batch, str(script_path)], capture_outputTrue, textTrue, timeout3600 ) # 只回传日志尾部避免撑爆模型上下文 return ( fexit_code{result.returncode}\n fstdout:\n{result.stdout[-3000:]}\n fstderr:\n{result.stderr[-3000:]} ) if __name__ __main__: mcp.run()三个细节值得展开说。第一filename参数的描述要写清楚Agent 会根据描述决定怎么命名文件方便它之后记录哪份脚本对应哪组参数。如果你不写清这个参数的语义Agent 很可能每次都传同一个名字把旧脚本覆盖掉后面想复查就抓瞎了。第二返回日志只保留末尾 3000 字符。这个设计我后面会反复强调Agent 的上下文是宝贵资源尤其仿真日志动辄几百行全塞进去几轮就爆了。只回传尾部并且在开头给出结果摘要是让 Agent 长期稳定工作的核心技巧。第三timeout3600的超时要设但也要分场景。FDTD 仿真跑几个小时很正常如果脚本写错导致死循环超时能避免 MCP Server 永久挂起。但如果你的任务本身就要跑数小时固定超时就不合适了后面我会讲一个更稳妥的轮询结果文件方案。run_parameter_sweep实现起来比单脚本复杂一点Agent 传进来一份模板脚本、参数键和参数值列表Server 负责字符串替换、生成多份脚本、依次执行。字符串替换有个很重要的经验——别引入复杂正则。Lumerical 脚本里变量名常带$前缀或特殊符号正则一写复杂就容易误伤。我在模板里约定用__WIDTH__、__PERIOD__这类双下划线占位符替换时直接script.replace(__WIDTH__, str(value))简单可靠。4.3 在 Cline 里注册 MCP Server 并确认连通Server 写好后在 Cline 设置面板里找到 MCP 相关配置入口添加一个新 server。我用的是 stdio 方式让 Cline 直接拉一个本地 Python 进程配置 JSON 类似下面这样{ mcpServers: { lumerical: { command: python, args: [-m, lumerical_mcp_server], env: { LUMERICAL_WORKDIR: D:/sim_workspace } } } }这个command里的python必须是你安装 mcp 包的那个 Python 环境。如果你用了 conda 或 venv这里要写绝对路径比如C:/Users/xxx/.conda/envs/lumagent/python.exe。Cline 是独立进程拉起的不会自动加载你 shell 里的conda activate环境这个坑我踩了两次才反应过来。注册成功且 Cline 没有报连接错误说明 MCP Server 已经跑起来了。这时候在 Cline 里直接问它一句你现在能看到哪些工具 它会列出四个工具的名字和用途描述这代表 DeepSeek 已经看到了这些工具。到这一步整条技术链路——Cline 接 DeepSeek、MCP Server 接 Lumerical——已经全部打通。5. 实战让 Agent 自动完成 FDTD 参数扫描与优化5.1 任务设定硅波导光栅耦合器的效率扫描理论讲完上实际任务。我拿最常见的场景做实验硅波导光栅耦合器的耦合效率扫描。物理上很直接——光栅周期、占空比、刻蚀深度都会影响耦合效率。传统做法是在 GUI 里手动改参数、跑仿真、记录数据几十轮下来人基本麻了。我给 Cline 的指令是这样的帮我在工作目录里做一个 FDTD 参数扫描。模板脚本我已经放在 sims/grating_template.lsf 里里面有光栅周期 period、占空比 duty_cycle、刻蚀深度 etch_depth 三个变量。请分别扫描period 从 0.5um 到 0.8um 步长 0.05umduty_cycle 从 0.3 到 0.7 步长 0.1etch_depth 从 0.1um 到 0.4um 步长 0.05um。用 MCP 工具跑完所有组合并把每个组合下 monitor 里记录的耦合效率整理成表格给我。这个任务包含多个难点三变量全组合扫描数据量很大、需要调用 MCP 工具执行、要从结果文件里提取数据并整理。能顺利跑通说明这个 Agent 具备了基本的仿真任务执行能力。5.2 Agent 的实际操作过程拆解我在旁边完整观察了它的执行过程分四步。第一步是先看模板。DeepSeek 不会上来就扫描而是调用文件读取工具查看grating_template.lsf的实际内容确认三个参数在脚本里的确切写法。这一步至关重要——如果模板里的变量名跟指令不一致后续所有替换都会失败。让我意外的是它居然会在对话里跟我确认模板中变量名为 period与指令一致开始生成扫描。她从这里已经开始有一个预期管理的味道。第二步是计算参数组合并提交。period 7 个值、duty_cycle 5 个值、etch_depth 7 个值全组合是 245 次仿真。Agent 调用run_parameter_sweep把模板脚本和参数列表传进去Server 端生成 245 份 .lsf 脚本每份脚本开头自动设置参数值然后按顺序启动 Lumerical 批量执行。第三步是漫长的等待。这一步实际上不由 DeepSeek 控制——245 组仿真跑了一整晚。这里我必须分享一个优化经验别让 Agent 一次性提交 245 组仿真。因为工具调用是一次性的期间 Cline 进程要一直挂着等结果一旦中途出个连接超时整轮任务可能作废。我把run_parameter_sweep设计成支持batch_size参数让 Agent 按 10 组一批提交每批 Server 执行完立刻返回结果Agent 拿到后再发起下一批。虽然对话轮次变多了但每轮时间可控任务更容易完成。第四步是汇总结果。所有仿真跑完后Agent 调用read_simulation_results读取每个 .fsp 文件里耦合效率的数值用文件写入能力生成 CSV 表格并给出最优参数组合和对应的效率值。5.3 结果与现实之间的落差你要认清实验本身结果很正常最优参数落在 period0.65um 附近。但我必须强调Agent 给出的结论不能直接用于论文。它只是按照你提供的模板和 monitor 定义提取数值至于 monitor 设得对不对、模式有没有收敛、边界条件是否合理、扫描范围是否物理上有意义Agent 完全无从判断。这不是 Agent 的错是仿真任务本身的特性——物理正确性必须人来把关。我后来养成一个习惯让 Agent 生成脚本时把关键物理设置写进注释并在结果汇总时标注每组参数对应的 monitor 数值然后我抽查几组去 GUI 里复核。把 Agent 当作执行效率放大器而不是物理判断器这个定位非常重要。想让它彻底替代你的物理判断目前不现实以后也很难。6. 实测踩坑从能用到好用要过的几道坎6.1 FDTD 卡在 updating modes 的怪问题这个坑很多人搜过FDTD 运行的时候一直停在 updating modes 不动。我第一次用 Agent 批量跑仿真时连续遇到好几组任务卡死一度怀疑是 MCP Server 调用姿势有问题。后来排查明白updating modes 发生在模式光源和监视器计算阶段——软件要计算波导截面上的模式本征场再把模式场映射到仿真区域卡住的原因通常有三类。第一类是硬件加速问题FDTD 尝试用 GPU 加速时显卡驱动配合不好会死锁。在脚本开头加setnamed(FDTD, gpu, 0)强制关掉 GPU能解决很大一部分卡死。第二类是几何设置不合理模式监视器范围里有高度不均匀的网格模式求解器迭代不收敛。把模式监视器范围稍微缩小避开尖锐的结构角落通常能恢复。第三类是许可证问题网络浮动许可 checkout 超时仿真提交后 license 一直拿不到界面就停在当前阶段这种要从日志排查许可服务器。对我这套 Agent 工作流来说最实用的一招是把上面这些经验直接写进工具描述里。我在run_lsf_script的工具描述中补了一句如果执行卡在 updating modes可尝试在脚本开头调用 setnamed(FDTD,gpu,0) 关闭 GPU并检查模式监视器范围是否覆盖网格突变区域。这样 DeepSeek 在生成 .lsf 脚本时就会主动规避这些坑。把自己踩坑得到的经验转化为工具描述是让 Agent 越用越聪明的零成本方法。6.2 Cline 连续报错停机的恢复策略有几天处理复杂多层波导结构Cline 频繁弹出一条错误ran into 6 errors in a row and stopped the task。这条消息的意思是连续 6 次工具执行失败Agent 自我保护中止任务避免无限重试。这个保护机制本身很合理但它暴露了一个问题有时候不是 Agent 思路错了而是某个环境问题持续存在——Python 路径不对、模板脚本有语法错误、或者工作目录没有写权限。Cline 停止后如果你简单点继续它大概率还在同一个问题上撞墙因为它没有意识到根本原因是环境错误只在同一个思路里反复打转。我的经验是遇到连续报错先别急着让它重试。把最近一条工具执行的完整报错复制出来单独开一个对话窗口让它分析这个报错本身定位到环境层面修好之后再切回原任务。也就是把执行任务和排障拆成两个独立会话不要让 Agent 在任务上下文里一边执行一边瞎猜环境问题。另外Cline 支持 Task 管理长任务建议开一个新 Task并在任务描述里把已确认的环境信息写进去比如Python 位于 C:/Users/xxx/.conda/envs/lumagent/python.exeLumerical 已加入 PATH能大幅减少 Agent 走弯路。6.3 DeepSeek 工具调用的格式与上下文管理DeepSeek 的 API 对工具调用格式要求很严。当模型决定调用工具时API 返回的 assistant 消息会带tool_calls字段客户端必须把这轮 tool_calls 以及工具执行结果按顺序拼进会话历史再发下一轮请求。如果请求里带了tool_calls但没有立即跟上对应的工具结果消息API 会直接报错——网上常讨论的 tool calls need immediate results 就是这个现象。好在 Cline 自动处理了这些协议细节你用 Cline 自己不用碰这些。但如果你后续想自研轻量 Agent不走 Cline一定要重视这个格式问题。我调自研 Agent 时试过把 tool_calls 当普通文本展示下一轮请求直接 400。老老实实按 Chat Completions 的工具调用规范维护对话历史才稳定下来。上下文管理是另一个大坑。DeepSeek 上下文虽然长但 Lumerical 仿真任务有个特点中间过程极其冗长。参数扫描会产生大量脚本内容、日志输出如果全灌进上下文几轮下来窗口就被撑满模型的有效能力开始退化——表现为忘记之前的参数范围、重复扫描同一个组合、生成的代码越来越短越来越简陋。解决办法在工具设计层面。我坚持让 MCP Server 返回给 Agent 的结果永远是结论先行的结构化摘要比如RESULT: exit0, sweep_index3/10, port_efficiency0.42 详情见日志尾部...访问这样一行摘要Agent 不需要读几百行日志就能决策下一步。同时在返回字符串里只保留日志末尾 2000-3000 字符进一步限制上下文消耗。这个模式我从第一个版本用到现在效果非常稳定。另一个实用技巧是使用 Cline 的.clinerules文件。在项目根目录建一个.clinerules写上你希望 Agent 每次自动遵守的操作规范比如所有仿真脚本必须包含 GPU 控制语句MCP 返回结果优先读取 RESULT 开头行写文件前先确认工作目录存在。这个文件会在每次对话开始时自动加载相当于给 Agent 注入了一套你踩坑总结出来的操作准则是让 Agent 表现持续稳定的关键所在。6.4 环境、路径与许可证相关的隐藏坑MCP Server 启动失败第一名是 Python 环境不对。前面提过 command 要写绝对路径这里再补一层如果 mcp 包装在 base 环境而 Python 在别的环境千万别混用。我的 MCP Server 没有直接 import lumapi只用 subprocess 调 .lsf这样对环境的要求已经降到最低——只需要一个装了 mcp 包的 Python以及 Lumerical 可执行文件在 PATH 里。Windows 上 Lumerical 装完后fdtd-solutions.exe一般会自动加入 PATH如果没加在 MCP Server 的 env 配置里手动指定也行。许可证问题同样值得单独说。Lumerical 许可证一般按模块购买FDTD、MODE、Device 等批量跑仿真时许可不够会排队表现就是脚本进程迟迟不退出。固定超时在这种场景下会误判失败。我后来把run_lsf_script升级成支持wait_for_output_file参数脚本以非阻塞方式启动Server 轮询指定的结果文件是否出现直到文件出现或超过用户给定的时间才返回。这样许可证排队导致的正常等待就不会被 Agent 误判为任务失败。7. 进阶思路与边界Agent 能替你做什么不能替你做什么7.1 从参数扫描到自主优化闭环如果只是参数扫描那还算不上智能。真正的 Agent 玩法是让 DeepSeek 自己看结果、决定下一步参数。我给 MCP Server 增加了一个evaluate_design(params)工具返回某个设计点的耦合效率然后给 Agent 下指令请用不超过 20 轮仿真的预算找到耦合效率最高的参数组合每轮根据上一轮结果调整参数。这时候 DeepSeek 的表现就很有意思。它有不错的数值直觉会先做一轮稀疏采样看清趋势然后在最优区域加密。它的优化策略肯定比不过专业的 Bayesian 优化算法但当物理模型复杂、你不确定哪个参数起决定性作用时让 Agent 先探索一遍往往能给出很靠谱的初始猜测之后再上正规优化算法精调。更进一步你完全可以在 MCP 层接入一个真正的优化库——把 scipy 的differential_evolution封装成工具让 Agent 在需要精细搜索时调用。这时候 Agent 的角色更像调度员它负责基于物理判断做粗扫优化库负责精扫两者配合的效果强于任何一方单干。这也是我认为 AI Agent 做仿真最有价值的方向——不是替代优化算法而是用自然语言把多套工具编排成一条高效的工作流。7.2 把外部知识与 Agent 组合起来单靠 DeepSeek 的预训练知识很多前沿仿真技巧覆盖不到——大模型的训练数据里Lumerical 的细节和官方文档的内网版本是有差距的。我的建议是把官方文档和历史脚本变成 Agent 的资料库。两种做法值得推荐。一种是把常用脚本片段、官方模板、你过去写好的 .lsf 文件整理到一个目录给 MCP Server 增加一个search_script_library(keyword)工具Agent 写新脚本前先去库里搜相似模板生成的脚本质量会明显提高低级语法错误大幅减少。另一种是接入网页搜索类 MCP Server让 Agent 遇到报错时能查官方论坛和 StackOverflow。我实测下来内部经验库 外部检索的组合基本弥补了模型知识陈旧的问题。7.3 我对这套系统边界的一线认知用了两个多月我越来越清楚它擅长什么、不擅长什么。它擅长的是按明确模板生成批处理脚本、执行大量重复仿真、汇总数据、在给定规则内做探索性调参。它做不好的事情也很明确无法理解仿真结果物理上是否合理、无法替你判断网格精度够不够、更不可能解释为什么某个设计效率异常——那需要你回到物理模型本身去思考。Token 成本也是一个需要管理的维度。245 组扫描的批处理任务并不贵因为大部分执行过程发生在 MCP Server 侧DeepSeek 只需要决策下一步做什么但如果让它逐步跑、每一步读日志再决定下一步对话轮次消耗会非常快。我的经验是能批量的任务一定批量需要交互优化的任务才逐步跑两者分开成本能差一个数量级。还有一个体会想分享给正在尝试的人这套方案绝不只适用于 Lumerical。它本质上是一个通用框架——凡是带 Python API 或者命令行批量模式的工具都可以按照定义原子工具 → 封装 MCP Server → 注册进 Cline → 用自然语言指挥这个流程做 Agent 化改造。光学仿真只是我选择的第一个场景机械仿真、电磁仿真、数据分析、测试自动化思路完全一致。把第一套跑通的经验沉淀下来后面每接入一个新工具都只需要半天左右的工作量。最后再分享一个小技巧给每个 MCP 工具写描述时多用动词开头明确说明输入输出格式再附一句典型调用示例。因为 DeepSeek 这种模型对工具描述的理解能力很强描述越具体它调用工具的准确率就越高——这比调任何参数都管用。