以下是在 AutoCAD 中通过 AutoLISP 调用 DeepSeek API 的完整实现方案(基于 ActiveXObject 技术):
(defun c:CallDeepSeekAPI ()
(setq url "https://api.deepseek.com/v1/generate")
(setq apiKey "YOUR_DEEPSEEK_API_KEY") ; 替换为您的API密钥
(setq prompt "A realistic digital painting of a cyberpunk cityscape at night, vibrant neon lights, rain reflections, 8k ultra-detailed") ; 输入您的提示词
;; 创建 HTTP 请求对象
(setq objXMLHTTP (vlax-create-object "MSXML2.XMLHTTP.6.0"))
;; 准备请求参数
(setq postData (strcat "{\"prompt\":\"" prompt "\"}"))
(setq contentType "application/json")
(setq authorizationHeader (strcat "Bearer " apiKey))
;; 初始化请求
(objXMLHTTP-open objXMLHTTP "POST" url)
(objXMLHTTP-setRequestHeader objXMLHTTP "Content-Type" contentType)
(objXMLHTTP-setRequestHeader objXMLHTTP "Authorization" authorizationHeader)
;; 发送请求
(objXMLHTTP-send objXMLHTTP postData)
;; 等待响应完成
(while (= (objXMLHTTP-readystate objXMLHTTP) 3)
(princ "加载进度...")
(sleep 100)
)
;; 处理响应
(if (= (objXMLHTTP-status objXMLHTTP) 200)
(progn
(setq jsonResponse (vlax-safestring objXMLHTTP-responsetext))
(setq base64Image (cdr (assoc "data" (vlax-json-parsejson jsonResponse))))
;; 显示图像(需要安装 Base64 图像显示组件)
(command "_.INSERT" base64Image "" "" "" "" "")
)
(alert (strcat "请求失败,状态码:" (number-to-string (objXMLHTTP-status objXMLHTTP))))
)
;; 释放对象
(vlax-release objXMLHTTP)
(princ)
)
;; Base64 解码辅助函数
(defun base64Decode(base64Str)
(setq xmlDOM (vlax-create-object "Msxml2.DOMDocument.6.0"))
(setq node (xmlDOM.createElement "tmp"))
(node.data = base64Str)
(setq binaryData (node.nodeTypedValue))
(setq byteArray (vlax-copyarray binaryData))
(binary-to-base64 byteArray)
)
;; 注意:需要额外实现 binary-to-base64 函数或使用第三方库
使用说明:
-
需要先安装以下组件:
- Microsoft XML v6.0 (通过控制面板安装)
- AutoCAD 2010+ 支持 ActiveXObject
-
获取 DeepSeek API 密钥:
- 访问 DeepSeek API
注册开发者账号
- 创建应用后获取 API Key
-
调整参数:
- 修改
url 变量为对应API端点
- 更新
apiKey 和 prompt 为实际值
- 根据API文档调整 Content-Type 和其他请求头
-
显示图像:
- 当前代码假设有 Base64 图像显示组件支持
- 实际使用时可能需要将 Base64 数据转换为 DWG 插入对象
- 推荐使用 Base64 Image Converter
等工具扩展功能
常见问题处理:
- 权限错误:
(alert "请检查API密钥是否有效,确保已启用API访问权限")
- 跨域限制:
;; 添加CORS代理服务器地址
(setq url "https://your-cors-proxy.com/" url)
- 内存泄漏:
;; 在循环调用时添加
(vlx-registry-delete "MSXML2.XMLHTTP.6.0")
高级用法扩展方向:
- 添加进度条:
- 多线程处理:
- 自动保存结果:
(command "_.SAVEAS" (strcat "D:\\DeepSeek_Images\\" (getvar "SYSDATE")) ".png")
注意:由于AutoLISP的安全限制,某些现代API可能需要使用更底层的COM接口或通过 .NET 编写外部应用程序来实现完整功能。对于复杂需求建议改用 AutoCAD .NET API 或 Python 脚本配合 AutoCAD COM 接口。
承担因您的行为而导致的法律责任,
本站有权保留或删除有争议评论。
参与本评论即表明您已经阅读并接受
上述条款。