hm探查。

文章目录

探查说明

Tcl 能完成实体探查、相对位置筛选,以及部分模型的源面和目标面候选识别。但"任意形状、任意描述都能自动识别"目前不能保证。你现有 Agent 缺少的核心是"先查询、读取结果、再生成操作脚本"的流程,单独扩大 RAG 不够。

我已把完整函数体和示例写出来,没有继续运行 HyperMesh:

以下是官方文档核查结果和设计方案,不是实际运行通过的声明。

一、是否需要再建一个"模型探查知识库"? :codex-annotation{index="1"}

需要补充探查能力的知识组织,但不用针对每一种用户表述另建知识库。而且,你当前代码里已经登记了这些命令:

text 复制代码
hm_getboundingbox
hm_getcentroid
hm_getvolumeofsolid
hm_getsurfacesfromsolid
hm_getplanarfaces
hm_getsurfacefromface
hm_getsurfacenormalatcoordinate

问题是,它们被放在 special_industry_workflows 的 P3 分组 ;而 get_alias_index 明确跳过 P3。这意味着登记了命令,并不等于用户说"左边那个"时能召回它。

所以首先应做:

  1. 把这些命令组织成 model_inventory、target_resolution、source_target_discovery 三组。
  2. 补完整的查询流程示例,包括返回值和适用条件。
  3. 核对对应文档是否真正进入 Chroma;缺失的文档再补充入库。
  4. 将查询阶段与网格生成阶段分开检索,避免都挤进当前最多 8 张候选命令卡里。

二、有没有真正的探查命令?ID 怎样与用户要的实体对应? :codex-annotation{index="2"} :codex-annotation{index="5"}

有。下面这段直接读取当前已导入模型,不预设实体 ID:

tcl 复制代码
*createmark solids 1 all
set solid_ids [lsort -integer [hm_getmark solids 1]]

set rows [dict create]
set index 0

foreach sid $solid_ids {
    incr index
    *createmark solids 2 "by id only" $sid

    set center [hm_getcentroid solids 2]
    set bbox [hm_getboundingbox solids 2 0 0 0]
    set volume [hm_getvolumeofsolid solids $sid]
    set surfaces [hm_getsurfacesfromsolid $sid bounding]

    dict set rows $sid [dict create \
        id $sid \
        label S$index \
        center $center \
        bbox $bbox \
        volume $volume \
        surfaces $surfaces]

    puts [list SOLID [dict get $rows $sid]]
}

它在做五件事:

  • 查出当前模型有哪些实体,取得实际 ID。
  • 查询每个实体的几何中心。
  • 查询每个实体的包围盒。
  • 查询体积。
  • 查询该实体对应的边界面 ID。

hm_getcentroid 支持查询实体和曲面的几何中心;hm_getsurfacesfromsolid 返回指定实体所属的 surface ID。中心查询文档、实体边界面查询文档

例如,假设查询结果是:

临时标签 真实 ID 中心 X 体积
S1 17 −40 1000
S2 42 40 2000

那么:

  • "全局 X 方向左边那个"通过比较 X,得到 17。
  • "体积较大的那个"通过比较体积,得到 42。
  • "S2"通过本次展示的标签映射,得到 42。

不是先定一个 ID,再猜它是什么实体;是先查询所有实体的事实,再按用户描述筛选出 ID。

上次那段代码只做到了"列出事实",没有把后面的筛选补全,这确实不完整。

三、用户只说相对位置,怎样写 Tcl? :codex-annotation{index="4"} :codex-annotation{index="6"}

不需要用户提供坐标,坐标由 Tcl 查出来。用户提供的是关系。

完整示例文件中已经定义了 mq::unique_extreme 等函数,包含比较、容差和并列检测。以下调用不依赖预先指定的实体 ID:

tcl 复制代码
source {D:/Altair_Agent_Knowledge/0714/project827/artifacts/tcl_probe_20260926/geometry_query_examples.tcl}

set rows [mq::inventory]
mq::publish $rows

# 示例 A:按全局 X,几何中心最靠左的实体
set sid [mq::unique_extreme $rows x min 1e-6]
mq::mark_target $rows $sid

其他要求分别对应:

tcl 复制代码
# 示例 B:按全局 Z,几何中心最高的实体
set sid [mq::unique_extreme $rows z max 1e-6]

# 示例 C:体积最大的实体
set sid [mq::unique_extreme $rows volume max 1e-6]

# 示例 D:用户从刚才展示的清单中选择 S2
set sid [mq::by_label $rows S2]

# 示例 E:同一个 HyperMesh GUI 当前画面中最靠左的实体
set sid [mq::unique_extreme $rows screen_x min 1.0]

# 示例 F:同一个 GUI 当前画面中最靠上的实体
set sid [mq::unique_extreme $rows screen_y min 1.0]

这里有两个必须说清的边界:

  • "最高"究竟是位置最高,还是自身高度最大,需要按用户语义选择对应属性。上面的 B 是中心位置最高。
  • screen_x/screen_y 使用官方 hm_viewproject,属于 GUI 命令 。独立 hmbatch 不知道用户桌面当前朝向,所以当前纯批处理流程不能直接理解"我屏幕左边那个"。必须传入实际视图信息,或采用用户已看到的统一展示视图。投影命令文档

不能把屏幕左边默认为全局 X 最小。

你要求其他指代也逐一交代,结论如下:

指代 当前能否给出可靠实现
已明确方向中的最左、最上 可以,查询坐标后比较
体积较大 可以,查询体积后比较
从已展示清单中选 S2 可以,使用本次标签映射
"其中一个",没有任何区别 不能唯一确定,应返回待选择
"那个圆锥"适用于任意输入模型 目前没有提供可靠通用识别器,不能算已解决

对应未解决情况,示例里明确返回状态,而不是偷偷选第一个:

tcl 复制代码
# 多实体且无区分信息时,返回 NEEDS_TARGET_SELECTION
set sid [mq::unspecified_target $rows]

# 当前没有实现通用圆锥识别,返回 UNSUPPORTED_SHAPE_PREDICATE
set sid [mq::select_by_shape_name $rows cone]

"只有一个底面"等特征不足以证明是圆锥。找不到可靠识别算法时,就应该承认这条自动识别路线尚未实现。

四、源面和目标面能否由 Tcl 自己确定? :codex-annotation{index="3"}

对于普通圆柱、同轴圆台等具有两个合适平面端面的模型,可以用 Tcl 找到候选端面;对于任意复杂实体,不能保证通用确定。

这次查到了完整命令链:

步骤 官方 Tcl 命令
查目标实体有哪些边界面 hm_getsurfacesfromsolid
查 surface 包含哪些几何 face hm_getfacesfromsurface
查询哪些 face 是平面 hm_getplanarfaces
将 face 对应回 surface hm_getsurfacefromface
查询面中心 hm_getcentroid
查询面法向 hm_getsurfacenormalatcoordinate

尤其需要注意:hm_getplanarfaces 返回的是 face ID,不能直接当作 solidmap 使用的 surface ID。 平面查询文档、法向查询文档

完整示例中的 mq::cap_candidates 已经实现以下算法:

  1. 查询目标实体的边界 surface。
  2. 找出其中由单个平面 face 构成的 surface。
  3. 查询这些面的中心和法向。
  4. 检查是否恰好有两个合适候选。
  5. 检查法向平行、两面分离、中心连线沿法向。
  6. 返回查询得到的真实源面、目标面 ID。

例如,从"体积最大的实体"一直到端面 ID,调用是:

tcl 复制代码
source {D:/Altair_Agent_Knowledge/0714/project827/artifacts/tcl_probe_20260926/geometry_query_examples.tcl}

set rows [mq::inventory]

# 自动查询并选出唯一体积最大的实体
set sid [mq::unique_extreme $rows volume max 1e-6]

# 自动查询、比较平面端面,取得真实 surface ID
set caps [mq::cap_candidates $sid auto]

puts [list TARGET_SOLID $sid \
    SOURCE [dict get $caps source] \
    DESTINATION [dict get $caps destination]]

这里的 cap_candidates 不是没有实现的占位函数,完整函数体就在提供的 Tcl 文件中。

随后才能使用返回的 ID:

tcl 复制代码
*createmark solids 1 "by id only" $sid
*createmark surfs 1 "by id only" [dict get $caps source]
*createmark surfs 2 "by id only" [dict get $caps destination]

*solidmap_solids_begin2 1 1 2 2048 4.0
*solidmap_solids_end

但要准确区分:

  • 找到几何上合适的端面候选:这份脚本有明确实现。
  • 保证整个实体一定能成功映射:这份脚本没有证明,需要结合拓扑和实际网格结果。
  • 完整尖顶圆锥:只有一个平面端面,这份规则应直接返回"不适用",不能编造第二个端面。
  • 多块端面、弯曲扫掠、复杂装配:超出这个保守示例的范围,需要另外的算法。

因此,上次说"确定源面、目标面后调用"确实跳过了关键步骤;这次补全了受限范围内的候选识别实现,没有把它包装成任意模型的通用解决方案。

五、怎样让你的 Agent 写出这些脚本,而不是仍然直接猜 ID?

建议把当前流程从:

text 复制代码
用户请求 → 检索网格命令 → 写网格 Tcl → 执行

改为:

text 复制代码
用户请求
→ 生成查询 Tcl
→ 执行查询并返回事实
→ 根据事实筛选目标,必要时继续查询
→ 生成网格 Tcl
→ 执行并验证

所有几何控制仍然通过 Tcl。Python 只负责调度、接收结果和维护模型状态。

需要落到代码里的三个改变:

  1. 增加 QUERY 操作类型。

    当前执行工具会自动补保存逻辑,并关注是否生成 HM;查询阶段应允许只打印实体事实,不画网格、不要求输出 HM。

  2. 把"缺少模型事实时先查询"设为强制流程。

    不能只在提示词中建议。新模型尚未探查、目标未唯一确定时,状态机不能进入网格执行阶段。

  3. 让模型读取查询结果后再继续。

    RAG 返回的是"如何查询";实际 Tcl 返回的是"这个模型里有什么"。后者必须进入当前会话状态,不能让 LLM 从文档示例里抄实体编号。

可以给查询阶段这样的明确约束:

text 复制代码
当前模型事实不足时,先生成只读 QUERY Tcl。
实体和面 ID 必须来自当前模型的查询结果。
用户给相对关系;位置、尺寸、体积由 Tcl 查询。
候选不唯一时继续查询或请求选择,不按 ID 顺序猜测。
缺少特征识别能力时返回 UNSUPPORTED_PREDICATE。
目标唯一确定之前禁止生成网格。

六、用户特征千奇百怪,怎样避免无限扩建知识库?

把表达拆成可组合的属性和关系,而不是收集所有句子:

text 复制代码
"右边两个里面体积较大的那个"
= 明确右方向
+ 形成右侧候选集合
+ 查询候选体积
+ 取唯一最大值

位置、尺寸、体积、面积、邻接、平面、法向等是底层能力;LLM 负责把句子组合成查询和筛选步骤。

但"像喷嘴的那个""最危险的那个"可能需要形状识别或载荷信息。RAG 能教模型使用已有算法,不能替代尚未实现的识别算法。

对你当前项目,最实际的方案是:先修正现有探查命令的 P3 路由,增加 QUERY → 读取事实 → 选择目标 → MESH 流程,优先支持可计算的相对属性;通用形状识别和复杂扫掠拓扑明确作为后续能力。

相关推荐
Q264336502342 分钟前
【有源码】基于K-Means算法的航空客户行为分群及异常预订识别研究-基于大数据的航空客户预订行为多维分析与可视化大屏设计
大数据·人工智能·机器学习·数据挖掘·数据分析·spark·kmeans
2603_9658966242 分钟前
JS ES6常用新特性|let/const、解构赋值、展开运算符
前端·javascript·es6
@atweiwei1 小时前
训练 AI 大模型系列之 LoRA:不动模型本体,靠一条低秩旁路改专长(附完整手算算例)
人工智能·算法·ai·语言模型·rag
a努力。1 小时前
API、CLI、MCP:谁在调用决定接口形态
人工智能
衡石科技1 小时前
一个门户只保留一个智能助理:衡石嵌入式 Data Agent 的运行与渲染边界
前端·javascript·html·data agent
代码什么用1 小时前
Java Web 21-22
java·开发语言·web
Hilaku1 小时前
一个前端工程师除了写代码,还能靠什么赚钱?
前端·javascript·程序员
我先测了1 小时前
Midscene.js 全栈学习指南:从入门到精通的 AI 视觉自动化框架
javascript·人工智能·自动化·agent·midscene
TomEval1 小时前
【测AI】第10篇:AI 模型功能测试实战 —— 测试用例怎么设计?
人工智能·python·功能测试·测试用例