适用于 CAD 的自适应 RAG:使用 LlamaIndex 和 Vertex AI 生成动态对象
zhezhongyun 2025-04-27 17:32 24 浏览
高级技术架构概述
在本文中,我将介绍专业人士如何利用 AI 在 AutoCAD 中创建 2D 对象以及在 Autodesk Fusion 中创建 3D 对象。其目标不是取代人类的专业知识,而是实现约 80% 工作的自动化,让设计师和工程师专注于改进和创造性决策。
我使用 LlamaIndex 和 Vertex AI 框架创建了一个 RAG 流程。代码完全由 LLM 从头开始生成,并且在编译时遇到错误时能够进行调试。在本文结束时,您将看到 AI 生成的 CAD 对象的真实示例,包括轴流涡轮叶轮、螺栓和外壳蓝图。
AI辅助CAD工作流程包括四个主要阶段:
- 初始化和配置
- 文档解析和向量索引
- 查询转换和代码生成
- 代码验证和执行
让我们详细探讨每个阶段。
初始化 Google Vertex AI 环境。
在这里您需要配置所有必要的 GCP 资源。您需要创建并配置您的向量搜索索引和端点。创建后,将您的向量搜索索引部署到您的端点。在此过程中,我使用 Google 的 LLM 和嵌入模型。
*如果您使用的是 Google 服务,则需要更改 LlamaIndex 设置
以下是我的配置示例:
## 向量搜索索引参数
distance_measure_type= "DOT_PRODUCT_DISTANCE" ,
precise_neighbors_count=150,
shard_size= "SHARD_SIZE_SMALL" ,
index_update_method= "STREAM_UPDATE"
## 将向量搜索索引部署到端点
display_name=VS_INDEX_NAME,
machine_type= "e2-standard-16" ,
min_replica_count=1,
max_replica_count=1,
##Gemini 2.0 Pro
llm = Gemini(
model= "models/gemini-2.0-pro-exp" ,
temperature=0.1,
max_output_tokens=8192,
)
## 文本嵌入模型
embed_model = VertexTextEmbedding(
model_name= "textembedding-gecko@003" ,
project=PROJECT_ID,
location=REGION,
credentials=credentials
)
##更改Llamaindex 从 OpenAI 到 Google Models 的默认设置
Settings.embed_model = embed_model
Settings.llm = llm
#### 以下代码将向您显示所有可用的 LLM ####
for m in genai.list_models():
if "generateContent" in m.supported_generation_methods:
print(m.name)
骆驼指数
我们使用Llama Parser从 PDF 文件中提取数据。这个强大的工具可以免费使用 - 只需在 Llama Cloud 上创建一个帐户即可生成您的 API 密钥。您可以在此处了解有关 Llama Parser 的更多信息。
对于元数据,您可以为每个文件定义自己的元数据,也可以利用 LlamaIndex 的内置工具,例如MetadataMode,它可以使用相关元数据自动标记文档。
使用SimpleDirectoryReader加载文档后,我们使用VectorStoreIndex将它们插入到向量索引中。此过程将文本数据存储为嵌入向量,从而使检索更加高效。
最后一步是创建检索器和查询引擎,使系统能够有效地搜索和返回相关信息。
以下是我的配置示例:
## 设置文档解析器
llamaparse_api_key = "_____"
parser = LlamaParse(
api_key=llamaparse_api_key,
result_type= "markdown"
)
## 加载文档
documents = SimpleDirectoryReader(
input_files=pdf_files,
file_extractor={ ".pdf" : parser}
).load_data()
## 将文档加载到向量索引中
vector_index = VectorStoreIndex.from_documents(
processed_documents,
storage_context=storage_context
)
## 创建检索器
index = VectorStoreIndex.from_documents([], storage_context=storage_context)
trieser = index.as_retriever(similarity_top_k=5) # 根据需要调整 K
## 创建查询引擎
query_engine = RetrieverQueryEngine(retriever=retriever)
用户输入
虽然本文重点介绍 AI 工作流程而非 UI 设计,但我构建了一个轻量级 Gradio 界面来展示真实世界的可用性。您将在本文后面通过 GIF 看到它的实际效果。
查询转换
当用户提交查询时,生成 CAD 对象的过程就开始了。此查询通过我的自定义transform_query()函数进行增强,该函数执行以下操作:
1. 参数提取
2. 导出说明
3. 代码结构要求
4. 错误上下文(如果 适用)
向量搜索决策
系统在 Vertex 索引中搜索类似示例(基于相似分数)。根据搜索结果,系统将遵循以下两条路径之一:
- 如果找到匹配项:系统利用矢量搜索结果来增强代码生成。
- 如果没有找到匹配项:它将依靠 LLM 的内置知识,使用带有详细说明的转换后的查询,同时仍然受益于增强的查询上下文。
代码清理
代码生成后,将经过清理过程:
- 格式化并清理生成的代码
- 修复常见的拼写错误和模式
- 确保正确的导入和结构
- 处理参数声明
代码验证
这是我有自定义检查的地方,下面是我已经实现的一些检查:
- 函数定义
- 错误处理
- 复杂的 CAD 操作
- 文档字符串
- Return 语句
如果验证失败,它会返回到 LLM,并根据失败的原因提出具体的增强请求。
如果有效则继续执行代码。
错误反馈回路
该系统具有强大的错误反馈循环。当执行失败时,系统会捕获错误,为下一次尝试创建详细上下文,并将此信息反馈给 transform_query() 函数。此迭代过程每次尝试都会提高代码生成的质量,最多可重试一次以防止无限循环。输出文件将是 .step 或 .dxf,您可以在 AutoCAD 或 Autodesk Fusion 中查看。
概括
对话式设计:生成螺栓
使用 LLM 生成螺栓并将其长度修改 +5 毫米
此交互通过在多个步骤中保留先前的用户意图来展示情境感知 AI 。
初始请求:
您可以使用以下参数创建螺栓:
bolt_radius = 3 # 轴半径
bolt_length = 15 # 轴长度
head_radius = 5 # 螺栓头半径
head_height = 2 # 螺栓头高度
thread_radius = 3 # 螺纹半径(与轴相同)
thread_pitch = 1.5 # 螺旋螺距
thread_height = bolt_length - 0.3 * thread_pitch
迭代细化:
现在可以将螺栓长度加长5毫米吗?
该系统使用保留的上下文无缝地调整原始设计,动态更新尺寸,而不需要冗余规范。
人工智能辅助房屋蓝图生成
此演示展示了 LLM 如何自动创建详细的 CAD 草图(.dxf文件),超越简单的几何图形,生成结构化、可感知图层的设计。在此示例中:
- 自动填充布局——模型生成房间尺寸和家具位置。
- 智能图层组织——墙壁、固定装置和家具等元素被分配不同的图层,以便于编辑。
- 上下文感知注释——表面上的阴影图案(例如餐桌)等增强功能提供了材料清晰度(木材、金属、玻璃……)。
LLM 的目标是生成快速、结构化的蓝图,让人类设计师可以根据需要完善和增强细节。
可扩展性和定制化
示例越多,输出越智能:使用历史项目或特定风格的模板(例如,中世纪现代、简约)填充矢量数据库,系统就会调整其生成逻辑进行匹配。
领域感知灵活性:交换数据集以生成针对住宅、商业或工业用例优化的草案。
初始请求:
创建包含以下内容的 1 层房屋蓝图:
## 定义主屋尺寸(以毫米为单位)##
width = 18000 # 房屋宽度(以毫米为
单位)长度 = 20000 # 房屋长度(
以毫米为单位) wall_thickness = 152.4 # 房屋墙壁厚度(以毫米为单位)
## 房间##
客厅、
厨房、
带主浴室和步入式衣柜的主卧室、
阳光房、
办公室、
家庭房、
车库、
洗衣房。
全浴室、
半浴室
**请确保添加沙发、床、厕所等家具......**
人工智能辅助轴流涡轮叶轮制造
初始请求:
您可以使用以下参数创建轴流涡轮叶轮:
# 轮毂参数
hub_diameter = 90.0
hub_radius = 45.0
hub_thickness = 30.0
shell_thickness = 7.0
center_hole_diameter = 20.0
# 叶片尺寸
length = 25.0
root_chord = 25.0
max_thickness = 3.0
root_twist = 0
mid_twist = 20
tip_twist = 30
# 在轮毂周围创建叶片图案
num_blades = 30
尽管我们在这里询问如此具体的尺寸,如果缺少某些参数,流程将自动填充它们。
结论
我们只是触及了 AI 在 CAD 设计中所能实现的一小部分。我在这里展示的系统基于 LlamaIndex、Vertex AI 和 Gemini 构建,展示了 AI 如何自动执行参数提取、代码生成和错误调试等重复性任务,让工程师和设计师能够专注于创造力和创新。
这种方法的真正力量在于其迭代学习能力:
- 矢量存储增长:您添加到索引的示例越多(例如螺栓设计、涡轮机蓝图、建筑平面图),AI 就会变得越复杂。丰富的数据集使其能够处理越来越复杂的几何形状,从简单的螺栓到多组件组件。
- 错误驱动改进:反馈回路确保系统从每次故障中吸取教训。例如,如果人工智能最初难以完成涡轮叶片的螺旋扫描,那么后续迭代将纳入修正,从而改善未来的输出。
这并不是要取代人类的专业知识,而是要增强它。通过自动化,80% 的基础工作专业人员可以将时间用于优化
- 上一篇:做Docx预览,一定要做这个神库!!
- 下一篇:Flask 数据可视化
相关推荐
- DevExpress使用教程:GridView经验小结
-
下面是笔者自己总结的使用DevExpressGridview的一些经验小结,分享给大家:1、去除GridView头上的"Dragacolumnheaderheretogroup...
- ComponentOne 新版本发布,新增 .NET 6 和 Blazor 平台控件支持
-
ComponentOneEnterprise是葡萄城推出的一款内置300多种开发控件的.NET控件集,可满足WinForm、WPF、Blazor、ASP.NETMVC等平台下的系统开发...
- Wijmo5 Flexgrid基础教程:数据绑定
-
WijmoEnterprise下载>FlexGrid在JavaScript程序中启动添加Wijmo引用;添加wijmo控件的扩展;在JavaScript中初始化wijmo控件;(可选)添加cs...
- Wijmo5 Flexgrid基础教程:InlineEdit
-
WijmoEnterprise下载>对于flexgrid,可以直接在单元格内进行编辑。但另外还有一种编辑方式,即在一行添加按钮,统一的编辑和提交数据。本文主要介绍给flexgrid添加编辑按钮...
- WinForms Data Grid控件升级(winform devexpress控件)
-
告诉大家一个好消息:慧都将于近期隆重推出“DevExpress14.2新版发布会”。心动不如行动,赶快报名吧!我们期待与您相约DevExpress14.2新版发布会。>>新增Wind...
- XAML控件宽度为另一控件的一半、静态属性绑定
-
控件上当某些数据需要根据其他数据的变化而变化很多时候,想让某个控件的宽度或者高度是另一个已有控件的一半,一开始打算使用ObjectDataProvider来实现,因为在控件上当某些数据需要根据其他数据...
- 用 CSS Grid 布局制作一个响应式柱状图
-
最新一段时间比较喜欢玩弄图表,出于好奇,我想找出比较好的用CSS制作图表的方案。开始学习网上开源图表库,它对我学习新的和不熟悉的前端技术很有帮助,比如这个:CSSGrid。今天和大家分享我学到的...
- Grid 移动端双列瀑布流(移动端瀑布流布局)
-
预览图:原理合理使用Grid的属性:display:设置为grid指明当前容器为Grid布局grid-template-columns:定义每一列的列宽(百分比或绝对单位)grid-templa...
- DevExpress导出GridControl控件数据
-
前言:使用C#做桌面应用时,我们会常常使用Winform作为我们的开发界面,但是windows自带的控件由于长时间不更新,已经不能够满足当前开发需要所以使用DevExpress控件作为Winform...
- css grid 布局的那些事儿(css grid布局和flex布局)
-
CSSGrid是一种为Web开发创建网站布局的方式。它已经存在了很多年,随着更多浏览器的支持,它终于变得越来越流行。接下来我们将了解下CSSGrid及其工作原理。了解下它如何使用。CSS...
- Grid.js - 跨框架的前端表格插件(前端table框架)
-
只想简简单单画个表格,但React,Vue,Angular,…,这么多前端框架,各自都有不同的表格渲染库。就没有表格库能“一次画表,到处运行”吗?来看看Grid.js这个跨框架的前端表格插件吧!...
- WPF开发教程01-布局控件(wpf tablecontrol控件)
-
布局控件是用于进行控件布局的容器类控件,其内部控件按照一定规律自动排列,且在父控件改变大小时,会自动适应。常用布局控件如下:1.一维布局控件(StackPanel)其内部控件按照某个维度自动排列,排...
- wxPython - 高级控件之表格Grid(wxpython grid刷新数据)
-
实战wxPython系列-043wx.grid.Grid及其相关类用于显示和编辑表格数据。它们提供了一组丰富的功能,用于显示、编辑和与各种数据源交互。wx.grid.Grid是一个功能强大的但是又稍微...
- 前端 BFC、IFC、GFC 和 FFC,这些你都知道吗?
-
如果觉得我的文章不错,可以关注我,想要看其他的进阶知识可以查看我发布过的文章!编辑搜图请点击输入图片描述BFC(Blockformattingcontexts):块级格式上下文页面上的一个隔离的...
- 20多个好用的 Vue 组件库,请查收
-
在本文中,我们将探讨一些最常见的vuejs组件。你可以收藏一波。VueTables-2地址:https://github.com/matfish2/vue-tables-2VueTables2...
- 一周热门
- 最近发表
-
- DevExpress使用教程:GridView经验小结
- ComponentOne 新版本发布,新增 .NET 6 和 Blazor 平台控件支持
- Wijmo5 Flexgrid基础教程:数据绑定
- Wijmo5 Flexgrid基础教程:InlineEdit
- WinForms Data Grid控件升级(winform devexpress控件)
- XAML控件宽度为另一控件的一半、静态属性绑定
- 用 CSS Grid 布局制作一个响应式柱状图
- Grid 移动端双列瀑布流(移动端瀑布流布局)
- DevExpress导出GridControl控件数据
- css grid 布局的那些事儿(css grid布局和flex布局)
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML常用标签 (29)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)
- CSS 水平对齐 (Horizontal Align) (30)