deepseek接入solidowrks画立方体

用eval方法链接llm和solidworks pythonwin32接口

离好的效果还差一个有脑子会生成复杂命令序列的ai

参考

基于Python的Solidworks二次开发方法_selectbyray-CSDN博客

Welcome - 2025 - SOLIDWORKS API Help

仓库

llm_sw: llm链接solidworks


python -m win32com.client.makepy


import os
import http
import asyncio
import json
from dotenv import load_dotenv
from sw_server import get_sw_app,get_solidworks_instance,createbox
load_dotenv()
from urllib.parse import urlparse# 配置日志deepseek_model_name=os.environ.get("deepseek_MODEL_NAME", None)
deepseek_api_key=os.environ.get("deepseek_OPENAI_API_KEY", None)
deepseek_api_url=os.environ.get("deepseek_OPENAI_API_URL", None)
zhipu_model_name=os.environ.get("zhipu_MODEL_NAME", None)
zhipu_api_key=os.environ.get("zhipu_OPENAI_API_KEY", None)
zhipu_api_url=os.environ.get("zhipu_OPENAI_API_URL", None)
class Client:def __init__(self, api_url, api_key, model_name):self.api_key = api_keyself.api_url = api_urlself.model_name = model_namedef create(self, messages, tools=None) -> tuple[str, list]:# 解析 URL(去掉协议部分)parsed=urlparse(f"{self.api_url}/chat/completions")host, path =parsed.hostname,parsed.path# 创建 HTTP 连接conn = http.client.HTTPSConnection(host)# 构造请求体request_body = {"model": self.model_name,"messages": messages,"tools": tools,"temperature": 0.9  # 添加温度参数}# 发送 POST 请求headers = {"Content-Type": "application/json","Authorization": f"Bearer {self.api_key}"}conn.request("POST",path,body=json.dumps(request_body),headers=headers)# 获取响应response = conn.getresponse()if response.status != 200:raise Exception(f"LLM服务器错误: {response.status} - {response.read().decode('utf-8')}")# 读取响应内容response_data = response.read().decode('utf-8')data = json.loads(response_data)# 将响应保存到文件with open('formatted_data.json', 'w', encoding='utf-8') as f:json.dump(data, f, indent=4, ensure_ascii=False)# 关闭连接conn.close()return datadef tool_call(user_say):'''image_promt={"role": "user","content": [{"type": "text", "text": "帮我............."},{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}},]}'''tools = [{"type": "function","function": {"name": "execute","description": "use freecad's function","parameters": {"type": "object","properties": {"function": {"type": "string","description": """
*返回单条纯函数代码,不要有注释*
**************************单条纯函数代码*********************************     函数代码:createbox()
描述:此方法可选输入长宽高信息
例子:createbox(10,10,50)"""},},}}}]history_content = '\n'.join(history)user_promt={"role": "user","content":  f"{user_say}\n*这是历史消息*:{history_content}" }data= deepseek_client.create([user_promt],tools)tool_calls=data["choices"][0]["message"]["tool_calls"]assistent_message=data["choices"][0]["message"]arguments=tool_calls[0]["function"]["arguments"]commands=json.loads(arguments)["function"]print("ai调用命令:\n"+commands)# 使用 eval 处理有返回值的函数,exec 处理无返回值的语句objects_information= eval(commands)  tool_promt={"role": "tool","content":objects_information or "没有返回信息","tool_call_id":tool_calls[0]["id"]}system_promt={"role": "system","content":"用中文回答谢谢",}data= deepseek_client.create([system_promt,assistent_message,tool_promt])assitant_response=data["choices"][0]["message"].get("content", "")print("assitant:"+assitant_response)history.append(assitant_response)'''
import base64
def get_imageToBase64()->str:imagePath=os.path.join(os.path.expanduser('~'), '图片', 'screenshot.jpg')
# 获取屏幕的宽度和高度screen_width, screen_height = pyautogui.size()screenshot = pyautogui.screenshot(region=(60, 300, screen_width//2, screen_height-500))screenshot.save(imagePath)# 读取图片并转换为 Base64with open(imagePath, "rb") as image_file:base64_image = base64.b64encode(image_file.read()).decode("utf-8")return base64_image'''async def main():global history,zhipu_client,deepseek_clientzhipu_client = Client(zhipu_api_url,zhipu_api_key,zhipu_model_name )deepseek_client = Client(deepseek_api_url,deepseek_api_key ,deepseek_model_name)history=[]#user_say="画一个立方体"while True:user_say=input("你:")tool_call(user_say)  async def main2():      commands="""
createbox(10,10,50)""" exec(commands) if __name__ == "__main__":asyncio.run(main())
import win32com.client
import pythoncom
arg_Nothing = win32com.client.VARIANT(pythoncom.VT_DISPATCH, None) 
def get_solidworks_instance():"""尝试连接到一个已经运行的SolidWorks实例,如果没有找到,则启动一个新的实例。"""try:# 尝试连接到现有的SolidWorks应用程序swApp = win32com.client.Dispatch("SldWorks.Application")except pythoncom.com_error:print("未找到正在运行的SolidWorks实例,正在启动新实例...")# 如果没有找到,则创建一个新的实例swApp = win32com.client.gencache.EnsureDispatch("SldWorks.Application")return swApp# 获取SolidWorks应用程序对象
swApp = get_solidworks_instance()# 激活SolidWorks窗口(可选)
swApp.Visible = True# 检查是否有已打开的文档,如果没有,则创建新零件文档
if swApp.ActiveDoc is None:# 路径需要根据你的SolidWorks安装版本和模板位置调整part = swApp.NewDocument(r"C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2025\templates", 0, 0, 0)
else:print("已有文档处于打开状态,使用现有文档进行操作或关闭当前文档后重试。")# 接下来的代码可以继续按照之前的逻辑来创建立方体...
swModel = swApp.ActiveDoc
# 创建草图并绘制矩形
import win32com.client
import pythoncomdef get_sw_app():"""获取或启动 SolidWorks 实例"""try:swApp = win32com.client.GetActiveObject("SldWorks.Application")print("连接到已运行的 SolidWorks。")except:print("未检测到 SolidWorks,正在启动...")swApp = win32com.client.Dispatch("SldWorks.Application")swApp.Visible = Truereturn swAppdef get_swmodel():# 获取 SolidWorks 实例swApp = get_sw_app()# 创建新零件(如果无活动文档)if swApp.ActiveDoc is None:# 使用默认零件模板(路径可能因版本而异)# 建议使用空模板或确保路径正确# 获取默认零件模板swModel = swApp.NewDocument(r"C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2025\templates\gb_part.prtdot", 0, 0, 0)else:swModel = swApp.ActiveDoc# 强制类型转换为 PartDocswPart = swModelreturn swPart, swModelswPart, swModel =get_swmodel()
def createbox(l=22,w=33,h=44):swPart, swModel =get_swmodel()l=l/1000w=w/1000h=h/1000# 选择基准面(英文版用 "Front Plane",中文版用 "前视基准面")# plane_name = "Front Plane"  # 英文版plane_name = "前视基准面"  # 中文版status = swModel.Extension.SelectByID2(plane_name, "PLANE",0, 0, 0,      # 坐标False,        # 不追加0,            # Markarg_Nothing,         # Callout0             # Position)if not status:print("❌ 选择基准面失败!")else:print("✅ 成功选中基准面")# 进入草图sketchMgr = swModel.SketchManagersketchMgr.InsertSketch(True)# ✅ 使用 SketchRectangle 画矩形swModel.SketchRectangle(0, 0, 0, l, w, 0, 0) # 前两个参数为起始点坐标,中间两个为终点坐标x,y,z增量# 退出草图sketchMgr.InsertSketch(True)# 拉伸成 50mm 立方体featMgr = swModel.FeatureManagerfeature = featMgr.FeatureExtrusion2(True,           # Sd: 使用草图False,          # Flip: 不反向False,          # Dir: 不双向0,              # T1: 给定深度0,              # T2: 第二方向条件h,           # D1: 深度 50mm0.0,            # D2: 第二深度False,          # Dchk1: 不完全贯穿False,          # Dchk2: 不完全贯穿False,          # Ddir1: 不反向False,          # Ddir2: 不反向0.0,            # Dang1: 无拔模0.0,            # Dang2: 无拔模False,          # OffsetReverse1False,          # OffsetReverse2False,          # TranslateSurface1False,          # TranslateSurface2False,          # Merge: 新实体(非合并)False,          # UseFeatScopeTrue,           # UseAutoSelect0,              # T0: 起始条件 = 从零开始0.0,            # StartOffsetFalse           # FlipStartOffset)if feature is not None:print("🎉 立方体创建成功!")return "🎉 立方体创建成功!"else:print("❌ 拉伸失败。")return "❌ 拉伸失败。"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96412.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96412.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96412.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL事务及原理详解

MySQL 事务 事务是一组不可分割的操作集合,这些操作要么同时成功提交,要么同时失败回滚。 acid事物的四大特性 原子性 最小工作单元,要么同时成功,要么同时失败。 例如A转账300给B,A账户-300与B账户300必须满足操作原子性&#xf…

Flutter上手记:为什么我的按钮能同时在iOS和Android上跳舞?[特殊字符][特殊字符]

文章目录🔥 先解决灵魂拷问:凭啥选Flutter?🧱 解剖Flutter:它肚子里藏着什么黑科技?三层蛋糕架构 🎂状态管理?江湖门派大战! 🥋🛠 真实项目暴击&a…

单片 、物联网、51单片机、软硬件之基于STM32与蓝牙的仓储管控系统的设计与实现/基于物联网的仓库管理系统

单片 、物联网、51单片机、软硬件之基于STM32与蓝牙的仓储管控系统的设计与实现/基于物联网的仓库管理系统

Product Hunt 每日热榜 | 2025-08-22

1. Mocke 标语:模拟邮件营销:在不发起活动的情况下了解你的回复率 介绍:Mocke AI代理模拟运行电子邮件营销活动,并在一分钟内返回结果,包括邮件的打开率、回复率和退订率。它还会揭示每个潜在客户为何未打开邮件、报…

基于Java+SpringBoot+Vue+HTML5电影评论网站系统(源码+LW+调试文档+讲解等)/电影评论/网站系统/电影/评论/网站/系统/影评网站/电影网站/评论系统/电影评论系统

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

家用电器,让现代家庭生活更美好

在现代家庭中,家用电器早已不再是冰冷的机器,而是成为了我们生活中不可或缺的一部分。它们以科技之名,融入我们的日常,让生活变得更加便捷、舒适和美好。 清晨,当第一缕阳光透过窗帘,智能咖啡机已经为您准备…

RabbitMQ延时队列的两种实现方式

目录 一、延时插件实现 1、版本要求 2、为运行新容器时安装 3、为已运行的容器安装 4、验证安装 5、代码编写 1. 配置类 2. 生产者 3. 消费者 二、死信队列实现 1、代码编写 1. 配置类 2. 生产者 3. 消费者 三、踩坑记录 1、发送消息失败 2、消息过期后未能转…

深度学习在股票量化中的应用

深度学习在股票量化中的具体应用:从时间序列预测到Alpha挖掘深度学习并非量化交易的银弹,但它是一套强大的工具集,能够解决传统量化方法难以处理的复杂问题。其核心价值在于从海量、高维、非结构化的数据中自动提取有效特征并发现非线性关系。…

Web 安全之 HTTP 响应截断攻击详解

这不是危言耸听。 在一次安全审计中,某电商平台发现: 用户访问首页后,自动跳转到了赌博网站。 但代码没被篡改,服务器没被入侵,日志一切正常。 最终追查发现—— 罪魁祸首,竟是一个 %0d%0a(回车…

Envoy配置ext_proc

介绍 本文将使用gateway api inference extension作为envoy的ext_proc服务端 启动Ext_Proc 基于Gateway API Inference Extension https://github.com/kubernetes-sigs/gateway-api-inference-extension.git 先clone代码到本地 git clone https://github.com/kubernetes-…

echarts关系图(Vue3)

基础版效果图&#xff1a;后期请求接口&#xff0c;接入数据即可用<template><div><v-chartref"vChartRef":option"option"style"width: 100%; height: 800px"></v-chart></div> </template><script lan…

【LeetCode】17. 电话号码的字母组合

文章目录17. 电话号码的字母组合题目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析回溯法详解组合生成过程可视化数字映射关系各种解法对比算法流程图边界情况处理时间复杂度分析空间复杂度分析关键优化点实际应用…

全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions

摘要 本文提出了一种在 NVIDIA 图形处理器&#xff08;GPU&#xff09;的张量核心&#xff08;Tensor Cores&#xff0c;仅含 FP16、INT8 等 GEMM 计算功能&#xff09;上实现 FP64&#xff08;双精度&#xff0c;DGEMM&#xff09;和 FP32&#xff08;单精度&#xff0c;SGEMM…

Hexo 博客图片托管:告别本地存储,用 PicGo + GitHub 打造高速稳定图床

之前刚开始进行Hexo博客撰写&#xff0c;图片都保存在本地Hexo源文件目录&#xff08;source/images/&#xff09;文件夹&#xff0c;随着图片增多&#xff0c;管理起来压力增大&#xff0c;于是产生了使用图床&#xff0c;引入外链进行图片存储的想法 Pros and Cons 提升部署…

关于 VScode 无法连接 Linux 主机并报错 <未能下载 VScode 服务器> 的解决方案

1. 出现的情况 VScode 远程登录 Linux 主机, 出现一下报错:2. 检查方案 2.1 VScode 方面 菜单栏: 点击 <帮助> →\to→ 点击 <关于> 在出现的弹窗中记录 [提交: ] 之后的字符串 (暂且将该字符串命名为变量 $commit_id) 2.2 Linux 方面 使用 ssh or MobaXterm 远程登…

泛型与反射

也是重新温习了下泛型与反射,反射基本就是一些api理解即可,不过需要注意类加载器原理,而泛型则需要理解其设计思想,可以代替Object,更加灵活,可读性强。泛型泛型如果指定后,编译阶段就会检查,不让乱输其他类型,必须是引用类型; 如果不指定就默认Object// 如果指定泛型, 就必须存…

Docker端口映射与数据卷完全指南

目录 Docker端口映射与数据卷完全指南 1. 端口映射:连接Docker容器与外部世界 1.1 为什么需要端口映射 1.2 实现端口映射 1.3 查看端口映射 1.4 修改端口映射(高级操作) 2. 数据卷:Docker数据持久化解决方案 2.1 数据持久化问题 2.2 数据卷的含义 2.3 数据卷的特点 2.4 挂载…

【Linux篇章】穿越网络迷雾:揭开 HTTP 应用层协议的终极奥秘!从请求响应到实战编程,从静态网页到动态交互,一文带你全面吃透并征服 HTTP 协议,打造属于你的 Web 通信利刃!

本篇摘要 本篇将介绍何为HTTP协议&#xff0c;以及它的请求与答复信息的格式&#xff08;请求行&#xff0c;请求包头&#xff0c;正文等&#xff09;&#xff0c;对一些比较重要的部分来展开讲解&#xff0c;其他不常用的即一概而过&#xff0c;从静态网页到动态网页的过渡&a…

QT的项目pro qmake编译

使用qmake管理Qt库的子工程示例-CSDN博客 top_srcdir top_builddir

语音交互系统意图识别介绍和构建

一、意图识别简介**意图识别&#xff08;Intent Recognition&#xff09;**是语音交互系统的核心组件&#xff0c;用于理解用户语音输入背后的真实目的&#xff08;如查询天气、播放音乐等&#xff09;。输入&#xff1a;语音转文本&#xff08;ASR输出&#xff09;的语句输出&…