llm操控solidworks 畫立方體 deepseek

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;的語句輸出&…