Aspen EDR 二次开发教程(19):LLM-Agent 与 EDR 数据面协作——工具边界与防幻觉闸门
发布时间:2026/9/28 3:11:39来源:尧图网络
Aspen EDR 二次开发教程19LLM-Agent 与 EDR 数据面协作——工具边界与防幻觉闸门版本声明块软件Aspen EDR 家族 Aspen Plus / Aspen HYSYSaspenONE V15 为讨论基线语言/环境Python 3.x 64 位Agent 侧为通用工具调用本系列不绑定任何具体框架本文目标给出一条Agent 用得上、又不会越界的协作路线并把防幻觉做成机制而非口号事实来源纪律官方未公开任何面向 EDR 的 LLM/MCP 支持相关实践属社区做法D 级本系列一律标注等级不写成官方能力一句话结论让大模型 Agent 参与 EDR 工作的唯一安全范式是Agent 只做只读查询与建议写操作与设计判断必须过人工闸门——因为 EDR 侧 ProgID 未公开铁律 EDR-2、Operation类告警could affect the performance and safety of the unit铁律 EDR-7、以及Accept Design是把 EDR 模型关联回流程换热器块这一实质性动作配套机制有三件工具白名单只暴露读与检索、知识底座变量清单 / 告警经验库 / 交付记录 / 环境档案、以及输出守卫任何未登记的 EDR API 名一律拒绝并提示以官方文档为准。〇、本篇要解决的认知问题大模型 Agent 在 EDR 这件事上能帮什么忙为什么能帮的忙比大多数人想象的少但价值并不低把哪些能力做成工具交给 Agent 是安全的哪些一旦交出去就会出事判断标准是什么我手上已经攒了四类资产变量清单、告警经验库、交付记录、环境档案——怎么把它们变成 Agent 能用的知识底盘最危险的事是 Agent 编造一个不存在的 EDR API 名。我能不能用机制而不是靠提醒把它挡住MCP 这类接口在化工软件自动化里的现状如何哪些是官方能力哪些是社区实践我该以什么证据等级看待它们一、机制解析19.1 Agent 能帮什么、不能帮什么先给一个不含幻想的清单。判断依据只有一条这个动作出错后后果是否可逆、是否能被人发现。能做安全为什么安全查询数据面“E-101 上个月的比值趋势如何”只读检索经验库“Fluid Elastic Instability 历史上怎么处理的”只读且带source解释结果“为什么这台被判usableFalse”只读 基于已落盘的判定原因生成报告草稿基于结构化结果产物可复核不触发计算辅助定位“这个告警属于官方三类的哪一类”只读 有官方依据不能做危险为什么危险直接改流程/EDR 参数并提交计算会真实启动模拟器、消耗许可、产生工程后果代做设计判断选哪个几何、是否接受这是工程责任不是文本生成越过Operation告警判定可以用安全性相关铁律 EDR-7自行编造/推断 EDR API 名或 ProgID铁律 EDR-2会静默连错对象删除或改写结果与日志破坏审计链这张表的结论Agent 在本领域的最佳位置是**“数据面的自然语言检索入口 报告草稿生成器”**而不是自动化操作员。19.2 工具白名单把安全边界写成代码安全的边界不能只写在文档里必须写成白名单——只有清单里的工具能被调用清单外的能力根本不存在。设计原则原则说明默认只读所有工具默认只读写操作需单独申请并过闸门无副作用优先工具不应启动模拟器、不占许可除非明确标注输出可审计每个工具返回结构化的、带出处的数据而不是自由文本失败显式工具失败返回明确错误不返回看起来合理的默认值特别地涉及启动模拟器的工具必须被单独隔离因为它是有成本、有副作用的第 07/18 篇。把这类工具与只读检索工具混在一张清单里等于给 Agent 一把随时能消耗许可的钥匙。19.3 知识底盘把四类资产变成可检索知识第 14 篇的可审计三件套加上第 16 篇的经验库合起来正好是 Agent 的知识底盘资产回答什么对 Agent 的价值变量清单edr_var_names.json哪个变量名是真的直接压住编造变量名这个风险告警经验库warning_experience.jsonl某类告警历史上怎么处理给出带出处的处置建议交付记录edr_results_deliverable.csv哪些结果可交付、为什么让 Agent 的解释有据可依环境档案edr_env_report.txt在什么环境下产生避免跨环境比较的误判这四类资产有一个共同特征它们都是本机事实 出处。这正是 Agent 最需要的东西——因为 Agent 最大的风险是生成一个语义上合理但事实上不存在的名字而知识底盘里的清单就是事实边界。最佳实践让检索工具返回命中/未命中两种明确结果而不是最相近的若干条。前者能让 Agent和用户直接判断这个变量名/告警类型到底有没有登记从机制上抑制幻觉。19.4 输出守卫用机制挡住编造的 EDR API 名这是本篇最重要的一节。前面所有篇章都在强调不编造 EDR ProgID 与成员名本篇要把它变成可执行的守卫守卫层做法白名单维护一份已核验/已取证的实体名清单流程侧 ProgID 本机取证的 EDR 相关名 已登记变量名截获对 Agent 输出中所有形如App.Object的字符串做扫描比对不在白名单内的一律标记为未登记拒绝未登记的名字不得进入可执行脚本提示以官方文档或本机取证为准注意白名单要区分来源流程侧 ProgIDApwn.Document/HYSYS.Application是官方已核验EDR 相关名是本机取证铁律 EDR-2。两者的可信度不同白名单里也要分级——这直接对应第 01 篇的证据分级纪律。经验法则未登记即拒绝比未登记即警告更有效。警告会被忽略拒绝会迫使流程走回取证。19.5 MCP 一类接口社区实践与证据等级关于用 MCP 让大模型直接操作化工模拟软件需要给一个诚实的现状描述事实等级官方未公开任何面向 Aspen Plus / Aspen HYSYS / Aspen EDR 的 LLM 或 MCP 支持事实未检索到即未发现不等于不存在社区存在通过 COM 让大模型操作流程模拟软件的项目通常要求特定版本与 Python 版本D 级社区做法非官方支持这类项目底层仍是 pywin32 调 COM能力边界受本文前述所有约束可推断但不等于官方背书表述纪律写方案时必须写成社区已有此类实践非官方支持其能力边界与本文所述 COM 约束一致不得写成官方支持用大模型操作 EDR。这与第 01 篇官方无 Python 包的处理方式一致。19.6 人工闸门哪几个动作必须留人按后果严重程度 可逆性排出必须保留人工闸门的动作动作为什么必须留人Accept Design官方定义是把 EDR 模型关联回流程换热器块——这是实质性状态变更第 03 篇处置Operation类告警官方“could affect the performance and safety of the unit”铁律 EDR-7设定/切换默认 EDR 版本影响所有后续自动化的版本锚点铁律 EDR-3定义目标函数与权重决定什么是最优是工程价值判断第 15 篇阈值设定如结垢报警影响现场行动第 17 篇共同点是这些动作的正确答案依赖工程判断而不依赖文本生成能力。Agent 可以做的是把选项、依据、历史案例摆出来不是替你做选择。二、完整代码与逐行剖析2.1 代码一工具白名单定义只读优先# agent_tools.py —— Agent 工具白名单默认只读写操作单独隔离importjson# 标准库importos# 标准库# 工具注册表read_onlyTrue 的工具不含副作用side_effectTrue 的必须单独审批TOOLS{search_variables:{read_only:True,side_effect:False,desc:在变量清单中检索变量名命中/未命中,},search_experience:{read_only:True,side_effect:False,desc:在告警经验库中检索某类告警的历史处置含出处,},query_delivery_records:{read_only:True,side_effect:False,desc:查询交付记录含 usable 与三类告警计数,},explain_unusable:{read_only:True,side_effect:False,desc:解释某条记录为何 usableFalse,},start_simulation:{# 危险会启动模拟器并占许可read_only:False,side_effect:True,desc:启动流程/EDR 计算会占用许可须人工审批与配额,},}defallowed_tools(allow_side_effectFalse):返回当前允许的工具清单默认排除有副作用的工具return{k:vfork,vinTOOLS.items()ifv[read_only]or(allow_side_effectandnotv[read_only])}defmain():print(*78)print([默认允许]无副作用)fork,vinallowed_tools(False).items():print(f{k:22s}{v[desc]})print(-*78)print([需显式审批]有副作用会消耗许可)fork,vinTOOLS.items():ifv[side_effect]:print(f{k:22s}{v[desc]})print(-*78)print([纪律] 有副作用的工具不得与只读工具混在一张清单里下发)print( 它是随时能消耗许可的钥匙必须单独走审批与配额)print(*78)withopen(agent_tools.json,w,encodingutf-8)asfh:json.dump(TOOLS,fh,ensure_asciiFalse,indent2)print([落盘] agent_tools.json)if__name____main__:main()逐行剖析TOOLS用read_only与side_effect两个字段显式标注每个工具的性质。这不是装饰它让哪些能默认暴露变成可计算的问题。allowed_tools(allow_side_effectFalse)默认只返回只读工具。默认安全是这个设计的第一原则。start_simulation被单独隔离并注明会占用许可须人工审批与配额。这与第 18 篇许可要可观测、并发要有人管一脉相承。结尾纪律强调有副作用的工具不得与只读工具混在一张清单里下发——这是防事故的关键一条。2.2 代码二知识检索工具返回命中/未命中# agent_knowledge.py —— 三个只读检索工具变量名、经验库、交付记录importjson# 标准库importos# 标准库defsearch_variables(name,inventory_pathedr_var_names.json):在变量清单中检索返回命中/未命中不做最相近猜测ifnotos.path.isfile(inventory_path):return{found:False,reason:变量清单文件不存在请先按第 04 篇回收}withopen(inventory_path,r,encodingutf-8)asfh:invjson.load(fh)names{r.get(var_name)forrininvifisinstance(r,dict)}ifnameinnames:return{found:True,var_name:name}# 命中return{found:False,reason:f变量名未登记{name}请用本机 Variable List 核实不得推断}defsearch_experience(warning_type,db_pathwarning_experience.jsonl):在经验库中检索返回带 source 的记录ifnotos.path.isfile(db_path):return{found:False,reason:经验库不存在请先按第 16 篇沉淀}hits[]withopen(db_path,r,encodingutf-8)asfh:forlineinfh:ifline.strip():recjson.loads(line)ifwarning_type.lower()inrec.get(warning_type,).lower():hits.append(rec)ifnothits:return{found:False,reason:f经验库中无 {warning_type} 的记录如有处置请按第 16 篇补录}return{found:True,records:hits}# 每条都带 sourcedefmain():print(*78)print([示例] 检索一个不存在的变量名)print( ,search_variables(某个未登记的变量名))print([示例] 检索一个不存在的告警类型)print( ,search_experience(未登记的告警类型))print(-*78)print([设计要点] 命中/未命中二元返回而非最相近的若干条——)print( 前者能直接压制幻觉后者会诱导模型把近似当成事实)print(*78)if__name____main__:main()逐行剖析search_variables只做精确匹配返回found: True/False。这是对编造变量名的正面拦截未登记就是未登记不给近似项。未命中的reason里直接写请用本机 Variable List 核实不得推断——把纪律写进工具返回值让 Agent 与用户都能看到边界。search_experience返回的记录每条都带source第 16 篇的必填字段因此 Agent 引用时天然带上出处。两个found: False分支都给出下一步该做什么回收清单 / 补录经验把失败变成可行动的提示。结尾把设计要点讲清二元返回 vs 近似返回的差别是本篇防幻觉的核心机制之一。2.3 代码三输出守卫拒绝未登记的 EDR API 名# agent_guard.py —— 扫描 Agent 输出中的 API 形态字符串比对白名单并拒绝importre# 标准库importjson# 标准库importos# 标准库# 白名单分两级官方已核验流程侧与本机取证EDR 相关OFFICIAL_VERIFIED{Apwn.Document:官方 KB 000083571Aspen Plus ActiveX 自动化服务器,HYSYS.Application:Aspen HYSYS 自动化应用级对象,HYSYS.SimulationCase:Aspen HYSYS 案例级对象,}LOCAL_ATTESTED_PATHedr_progid_candidates.json# 第 06 篇产出的本机取证候选# 形如 App.Object 的字符串API_PATTERNre.compile(r\b[A-Za-z][A-Za-z0-9_]{1,40}\.[A-Za-z][A-Za-z0-9_.]{1,40}\b)defload_local_whitelist(path):装载本机取证得到的候选来源第 06 篇ifnotos.path.isfile(path):returnset()withopen(path,r,encodingutf-8)asfh:datajson.load(fh)returnset(data)ifisinstance(data,list)elseset()defguard(text):扫描文本返回 (允许清单, 未登记清单)foundset(API_PATTERN.findall(text))localload_local_whitelist(LOCAL_ATTESTED_PATH)allowed,unregistered[],[]fornameinsorted(found):ifnameinOFFICIAL_VERIFIED:allowed.append({name:name,level:官方已核验,source:OFFICIAL_VERIFIED[name]})elifnameinlocal:allowed.append({name:name,level:本机取证,source:本机模板 VBA / 注册表枚举})else:unregistered.append(name)# 未登记一律拒绝returnallowed,unregistereddefmain():# 模拟一段 Agent 输出其中含一个编造的 EDR 名agent_text(这段脚本会连接 Apwn.Document 并调度计算然后用 AspenEDR.Application 直接读取换热器结果。)allowed,unregguard(agent_text)print(*78)print([允许] 已登记的实体名)forainallowed:print(f{a[name]}[{a[level]}] 出处{a[source]})print(-*78)ifunreg:print([拒绝] 未登记的实体名不得进入可执行脚本)forninunreg:print(f{n}- 未登记以官方文档为准或按第 06 篇在本机取证后补登白名单)else:print([拒绝] 未发现未登记实体名)print(-*78)print([原因] EDR 侧 ProgID 官方未公开任何未取证的名字都无法保证在本机存在铁律 EDR-2)print(*78)withopen(agent_guard.json,w,encodingutf-8)asfh:json.dump({allowed:allowed,unregistered:unreg},fh,ensure_asciiFalse,indent2)print([落盘] agent_guard.json)if__name____main__:main()逐行剖析白名单分两级OFFICIAL_VERIFIED官方已核验的流程侧 ProgID附官方出处与本机取证从第 06 篇的候选文件装载。分级是因为可信度不同——这与第 01 篇的证据分级完全一致。API_PATTERN用宽松正则捕捉形如App.Object的字符串宁可多捕也不漏捕多捕只会多一次人工核对漏捕会导致幻觉漏网。guard对每个命中名逐一分类官方已核验 / 本机取证 / 未登记未登记进拒绝清单并给出补登白名单的动作。演示文本里故意放了AspenEDR.Application——一个看起来极其合理但未登记的名字用来展示守卫会把这类幻觉挡下来。结尾说明原因EDR 侧 ProgID 官方未公开——把机制与依据一起交代避免读者以为这是保守过头的规则。三、常见报错与排查3.1 Agent 生成了看起来很像的 EDR API 名现象Agent 给出的脚本里出现形如AspenEDR.Application之类字符串语义上非常合理。根因大模型基于命名规律生成而EDR 的 ProgID 官方未公开铁律 EDR-2规律不成立。定位手段用本篇 2.3 节的守卫扫描输出看该名是否在白名单内。解法未登记一律拒绝要求按第 06 篇在本机取证后再补登白名单。预防把守卫作为 Agent 输出的必经环节而不是事后抽查。3.2 Agent 给出的变量名在本机不存在现象按 Agent 给的变量名去绑链接或写代码报变量不存在。根因变量名随表单与版本变化且 Agent 可能基于命名直觉生成。定位手段用本篇 2.2 节的search_variables精确检索变量清单第 04 篇回收。解法以清单为准未登记则回本机 Variable List 核实。预防把变量清单作为 Agent 的必备知识源检索工具坚持二元返回。3.3 Agent 直接调用计算工具把许可吃干现象Agent 在循环里反复触发计算许可被占满。根因把有副作用的工具与只读工具混在一张清单里下发违反 19.2 节原则。定位手段检查工具清单里side_effectTrue的工具是否默认可见记录连接耗时看长尾。解法有副作用的工具单独隔离走审批与配额用第 18 篇的耗时观测判断并发。预防allowed_tools()默认只返回只读工具本篇代码一已实现。3.4 Agent 建议忽略 Operation 告警继续交付现象Agent 给出的结论里把Operation类告警当作可忽略提示。根因Agent 未被告知官方三类告警的定义与路由规则或它把提示和告警混淆了。定位手段检查 Agent 的知识源里是否有第 16 篇的告警路由规则。解法把三类告警定义与Operation阻塞交付写入系统提示与知识底座对越界结论直接判为错误。预防Operation类判定做成硬规则第 12 篇的usable闸门而不是让 Agent 解释。3.5 把社区 MCP 方案写成了官方支持现象方案里写官方支持用大模型操作 EDR/流程模拟。根因混淆了社区实践D 级与官方能力。定位手段回到证据分级——官方是否发布了该能力的公开材料。解法改写为社区已有此类实践非官方支持能力边界受 COM 约束。预防所有涉及 LLM/MCP 的表述先过证据分级检查第 01 篇纪律。四、动手练习练习 1工具白名单设计用 2.1 节脚本生成工具清单并回答如果要给 Agent 增加一个启动计算的工具需要额外加什么防护。判定标准默认允许清单必须不含任何side_effectTrue的工具对启动计算工具必须给出至少三项防护人工审批、配额上限、连接耗时观测并说明把它与只读工具混发的风险。常见错误做法为了方便把计算工具也放进默认清单。为什么错它是一把随时能消耗许可的钥匙一旦 Agent 进入循环就会吃掉许可池影响所有使用者。练习 2二元检索压制幻觉用 2.2 节脚本检索一个不存在的变量名与一个不存在的告警类型。判定标准两次都必须返回found: False且reason必须给出下一步动作回收清单 / 补录经验不得返回任何最相近的记录。同时说明为什么二元返回比近似返回更能压制幻觉。常见错误做法让检索工具返回最相似的 3 条。为什么错近似结果会诱导模型把相似当成事实而幻觉的典型形态正是语义合理但事实不存在。练习 3输出守卫拦截用 2.3 节脚本扫描一段含Apwn.Document与一个自造 EDR 名如Xxx.Application的文本。判定标准Apwn.Document必须被列为允许且标注官方已核验并给出来源自造名必须进拒绝清单并提示以官方文档为准或按第 06 篇取证后补登最终必须给出未登记名不得进入可执行脚本的结论。常见错误做法只警告不拒绝。为什么错警告会被忽略只有拒绝才能强制流程回到取证或查官方文档这条正路。五、小结与下一篇预告小结让大模型 Agent 参与 EDR 工作的唯一安全范式是**“只读查询与建议 写操作与设计判断过人工闸门”。Agent 的安全能力集中在数据面的自然语言检索入口 报告草稿生成危险动作包括直接提交计算、代做设计判断、越过Operation告警判定、编造 API 名、改写结果与日志。工程上有三件配套机制工具白名单默认只读把启动模拟器这类有副作用的工具单独隔离并走审批与配额、知识底盘变量清单 告警经验库 交付记录 环境档案全部是本机事实 出处且检索坚持命中/未命中二元返回**以压制幻觉、输出守卫白名单分官方已核验与本机取证两级未登记的App.Object形态字符串一律拒绝。必须保留人工闸门的动作是Accept Design、处置Operation告警、切换默认 EDR 版本、定义目标函数与权重、设定报警阈值——因为它们的正确答案依赖工程判断。最后关于 MCP官方未公开面向 EDR/流程模拟的 LLM 或 MCP 支持社区确有此类实践但属D 级表述时必须写成社区做法、非官方支持。下一篇预告20收官企业级批量换热器设计与校核平台把前十九篇的零件装配成一个完整项目——平台的四层架构数据源层 / 计算层 / 判定层 / 交付层、统一 CLI 与配置、模板与变量清单管理、批量与断点续跑、告警分诊与经验库、结垢监控与闭环优化、多版本与许可治理以及一套可验收的交付物清单末篇是综合全系列知识的完整实战项目不再是概念综述。本篇认知问题回显FAQQ1大模型 Agent 在 Aspen EDR 自动化里能帮什么忙A最佳定位是数据面的自然语言检索入口 报告草稿生成器——例如查询某台设备的时间序列趋势、检索某类告警的历史处置、解释某条结果为何usableFalse、基于结构化结果生成报告草稿这些都是只读、可复核的工作。Q2哪些能力做成工具交给 Agent 是安全的A默认只暴露只读、无副作用、输出结构化且带出处的工具任何会启动模拟器并占用许可的工具如触发计算必须单独隔离并走人工审批与配额不能与只读工具混在一张清单里下发。Q3怎么把已有资产变成 Agent 的知识底盘A用四类资产——变量清单回答哪个变量名是真的、告警经验库带source的处置经验、交付记录含usable与三类告警计数、环境档案回答在什么环境下产生它们共同特征是本机事实 出处这正是压制幻觉的边界。Q4怎么用机制挡住 Agent 编造 EDR API 名A用输出守卫——维护分两级官方已核验的流程侧 ProgID、本机取证的 EDR 相关名的白名单扫描输出中所有形如App.Object的字符串未登记的一律拒绝进入可执行脚本并提示以官方文档为准或按取证流程补登机制上未登记即拒绝比未登记即警告更有效。Q5MCP 这类接口在 EDR 自动化里的现状如何A官方未公开任何面向 Aspen EDR及流程模拟的 LLM 或 MCP 支持社区存在通过 COM 让大模型操作模拟软件的项目但属D 级社区做法、非官方支持其能力边界受 COM 约束需本机授权 Windows 安装、ProgID 未公开等方案里不得写成官方能力。
网站建设高端定制企业官网