适用于 CAD 的自适应 RAG:使用 LlamaIndex 和 Vertex AI 生成动态对象
zhezhongyun 2025-04-27 17:32 5 浏览
高级技术架构概述
在本文中,我将介绍专业人士如何利用 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 数据可视化
相关推荐
- JPA实体类注解,看这篇就全会了
-
基本注解@Entity标注于实体类声明语句之前,指出该Java类为实体类,将映射到指定的数据库表。name(可选):实体名称。缺省为实体类的非限定名称。该名称用于引用查询中的实体。不与@Tab...
- Dify教程02 - Dify+Deepseek零代码赋能,普通人也能开发AI应用
-
开始今天的教程之前,先解决昨天遇到的一个问题,docker安装Dify的时候有个报错,进入Dify面板的时候会出现“InternalServerError”的提示,log日志报错:S3_USE_A...
- 用离散标记重塑人体姿态:VQ-VAE实现关键点组合关系编码
-
在人体姿态估计领域,传统方法通常将关键点作为基本处理单元,这些关键点在人体骨架结构上代表关节位置(如肘部、膝盖和头部)的空间坐标。现有模型对这些关键点的预测主要采用两种范式:直接通过坐标回归或间接通过...
- B 客户端流RPC (clientstream Client Stream)
-
客户端编写一系列消息并将其发送到服务器,同样使用提供的流。一旦客户端写完消息,它就等待服务器读取消息并返回响应gRPC再次保证了单个RPC调用中的消息排序在客户端流RPC模式中,客户端会发送多个请...
- 我的模型我做主02——训练自己的大模型:简易入门指南
-
模型训练往往需要较高的配置,为了满足友友们的好奇心,这里我们不要内存,不要gpu,用最简单的方式,让大家感受一下什么是模型训练。基于你的硬件配置,我们可以设计一个完全在CPU上运行的简易模型训练方案。...
- 开源项目MessageNest打造个性化消息推送平台多种通知方式
-
今天介绍一个开源项目,MessageNest-可以打造个性化消息推送平台,整合邮件、钉钉、企业微信等多种通知方式。定制你的消息,让通知方式更灵活多样。开源地址:https://github.c...
- 使用投机规则API加快页面加载速度
-
当今的网络用户要求快速导航,从一个页面移动到另一个页面时应尽量减少延迟。投机规则应用程序接口(SpeculationRulesAPI)的出现改变了网络应用程序接口(WebAPI)领域的游戏规则。...
- JSONP安全攻防技术
-
关于JSONPJSONP全称是JSONwithPadding,是基于JSON格式的为解决跨域请求资源而产生的解决方案。它的基本原理是利用HTML的元素标签,远程调用JSON文件来实现数据传递。如果...
- 大数据Doris(六):编译 Doris遇到的问题
-
编译Doris遇到的问题一、js_generator.cc:(.text+0xfc3c):undefinedreferenceto`well_known_types_js’查找Doris...
- 网页内嵌PDF获取的办法
-
最近女王大人为了通过某认证考试,交了2000RMB,官方居然没有给线下教材资料,直接给的是在线教材,教材是PDF的但是是内嵌在网页内,可惜却没有给具体的PDF地址,无法下载,看到女王大人一点点的截图保...
- 印度女孩被邻居家客人性骚扰,父亲上门警告,反被围殴致死
-
微信的规则进行了调整希望大家看完故事多点“在看”,喜欢的话也点个分享和赞这样事儿君的推送才能继续出现在你的订阅列表里才能继续跟大家分享每个开怀大笑或拍案惊奇的好故事啦~话说只要稍微关注新闻的人,应该...
- 下周重要财经数据日程一览 (1229-0103)
-
下周焦点全球制造业PMI美国消费者信心指数美国首申失业救济人数值得注意的是,下周一希腊还将举行第三轮总统选举需要谷歌日历同步及部分智能手机(安卓,iPhone)同步日历功能的朋友请点击此链接,数据公布...
- PyTorch 深度学习实战(38):注意力机制全面解析
-
在上一篇文章中,我们探讨了分布式训练实战。本文将深入解析注意力机制的完整发展历程,从最初的Seq2Seq模型到革命性的Transformer架构。我们将使用PyTorch实现2个关键阶段的注意力机制变...
- 聊聊Spring AI的EmbeddingModel
-
序本文主要研究一下SpringAI的EmbeddingModelEmbeddingModelspring-ai-core/src/main/java/org/springframework/ai/e...
- 前端分享-少年了解过iframe么
-
iframe就像是HTML的「内嵌画布」,允许在页面中加载独立网页,如同在画布上叠加另一幅动态画卷。核心特性包括:独立上下文:每个iframe都拥有独立的DOM/CSS/JS环境(类似浏...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- HTML 参考手册 (28)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML中如何键入空格 (27)
- 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)