news 2026/11/4 4:27:47

CAD VBA二次开发手册:工程对象模型、图元操作与避坑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CAD VBA二次开发手册:工程对象模型、图元操作与避坑

简介:《CAD-VBA开发人员手册》面向具备一定AutoCAD基础、希望用VBA开展二次开发的工程技术人员与制图从业者,系统讲解如何通过ActiveX自动化扩展CAD功能、减少重复绘图操作。全书十章依次覆盖VBA工程与宏管理、AutoCAD对象模型与集合层次、图形环境控制、图元创建与编辑、标注与公差、菜单和工具栏定制、事件处理、三维坐标与实体建模、布局与打印,以及光栅图像、块与属性等高级组织技术,目录编排由入门到进阶,便于按模块查阅。资源包共1个PDF文件,大小约3.16MB,单册即涵盖完整章节内容,适合作为案头工具书随用随查。目前已有2492人学习下载,可作为搭建自动化脚本、理解对象层次与事件机制的实践参考。

1. 一份 VBA 二次开发手册的定位:谁该在什么时候翻它

去年帮一个做幕墙深化的团队处理一个遗留问题,他们有三套宏:一套画节点、一套统计型材、一套批量出图,分散在三个人的机器上,谁请假,谁的那套工具就跟着失踪。这类问题的解决办法是让 VBA 与 CAD 二次开发的基础部分能被完整讲清,并且能当查询手册随时翻。这份手册的十章结构正好适合这个用途:前两章解决“工程放哪、对象怎么访问”,中间五章覆盖画图、标注、菜单、事件这些日常操作,最后三章处理三维、布局打印和块。它适合已经会用 CAD、但写的宏还停留在“录制—粘贴”阶段的开发者,也适合要接手别人遗留 DVB 工程、需要先看懂骨架再动手改的人。

2. 十章目录的知识骨架:VBA 工程与 ActiveX 对象模型的分层

拿到一份几百页的手册,最怕从头读到尾。这一章先把目录整理成一张能力地图,再说明两个最容易被忽略的基础件:工程类型和对象模型。后面所有代码,不管是画一根线还是批量出图,都建立在这两层之上;这里没弄清楚,写到第三章就会开始出现各种难以解释的问题。

2.1 十章目录拆成四层能力

把目录按“写代码时用到它的频率”重排,会得到很清晰的四层:

层级对应章节解决什么问题使用频率
基础层第 1、2 章工程放哪、宏怎么运行、对象怎么访问一次性理解,长期受用
日常层第 3、4、5 章开图存图、画线改线、图层颜色、标注公差占日常工作量八成以上
工具层第 6、7 章菜单工具栏、事件响应把脚本变成别人敢点的按钮
专项层第 8、9、10 章三维坐标与 UCS、布局视口打印、块属性与光栅图项目类型决定用不用

这个分层最实用的地方在于排错:脚本跑不动,先看是不是基础层的对象引用问题;跑起来但结果不对,八成是日常层的坐标系或图层设置;只有点击按钮没反应、保存后没触发,才该去工具层找。很多人一上来就翻事件那一章,结果发现跟自己的问题根本不搭。

2.2 嵌入工程与全局工程:DVB 文件和图形内嵌怎么选

手册第一章花了不小篇幅讲嵌入工程和全局工程的区别,这不是概念铺垫,而是分发方式的选择。嵌入工程保存在 DWG 内部,图形一打开就自动装载,适合把“打开图纸就记时间日志”这种随图走的功能塞进去;代价是它打不开也关不掉别的图形,因为它的作用范围只在自己所在的文档里。全局工程存成独立的 DVB 文件,能跨图形运行,也能开图关图,但不会自动加载,用户得知道宏在哪个文件里。

命令行工具是VBALOAD、VBARUN、VBAUNLOAD、VBAMAN、VBAIDE这几个,其中VBAMAN打开管理器做装载卸载嵌入分离,VBAIDE直接进编辑器。程序里要动态装载的话,用 Application 对象的LoadDVB和RunMacro:

Sub LoadAndRunGlobal() Dim app As AcadApplication Set app = ThisDrawing.Application On Error Resume Next app.LoadDVB "C:\tools\batch.dvb" ' 重复加载会抛错,用 On Error 兜住 If Err.Number <> 0 Then Debug.Print "装载失败或已装载: " & Err.Description Err.Clear End If On Error GoTo 0 app.RunMacro "batch.Main" ' 格式是 工程名.宏名 End Sub

逻辑很直白:LoadDVB的参数是 DVB 的绝对路径,装载成功后这个工程里所有 Public Sub 都变成可调用的宏;RunMacro要求写全“工程名.宏名”,只写宏名在全局工程多了以后会撞车。另外 AutoCAD 启动时会自动加载名为acad.dvb的工程,这是个约定俗成的加载入口,把启动逻辑挂在那里,比让用户每次手动VBALOAD靠谱得多。这套流程也是 CAD 二次开发里最常见的“工具免安装分发”做法。

还有一点值得提醒:图形里同一时间只能有一个嵌入工程,想换就得先分离,分离时会问你要不要另存为外部 DVB,选“否”就真没了。这个对话框在批量脚本里会卡住无人值守流程,所以脚本处理嵌入工程时,FILEDIA系统变量得先关掉。

2.3 对象模型层次:从 Application 到一根线

第二章的对象模型是整本手册的基础。层次大致是 Application → Documents(集合)→ Document → ModelSpace / PaperSpace / Layers / Blocks 等集合 → 具体图元。集合对象统一支持Item按索引或名称取、count取数量、Add新增,图元统一有Layer、Color、Linetype、Handle、ObjectName、Update这些成员。

Sub WalkModel() Dim app As AcadApplication Dim doc As AcadDocument Dim ent As AcadEntity Set app = ThisDrawing.Application ' 对象树的根 Set doc = app.ActiveDocument ' 当前活动文档 Debug.Print "文档: " & doc.Name & " 图元数: " & doc.ModelSpace.count For Each ent In doc.ModelSpace ' ModelSpace 是集合,可直接 For Each Debug.Print ent.ObjectName, ent.Handle, ent.Layer Next ent End Sub

ThisDrawing是个特殊入口,在全局工程里它指向当前活动图形,在嵌入工程里通常指向工程所在的图形。这个差别是后面很多奇怪现象的来源,先记住。ObjectName返回AcDbLine、AcDbCircle这类内部类型名,做类型判断比TypeOf ... Is更省事;Handle是图元的唯一标识,跨会话仍然有效,做增量处理时拿它当键很合适。

2.4 类型库引用与后期绑定

早期绑定就是在 VBA IDE 里勾选 AutoCAD 类型库,然后可以写Dim ln As AcadLine;好处是有智能提示,坏处是引用绑定了具体版本,换台机器、换个 CAD 版本,一打开就报“找不到工程或库”,整个工程直接失效。想避开这类版本故障,可以采用后期绑定:

Sub LateBinding() Dim app As Object Dim doc As Object Set app = CreateObject("AutoCAD.Application") ' 不依赖类型库 app.Visible = True ' 已有进程就复用,没有再起一个,避免开一堆空 CAD Set doc = app.ActiveDocument doc.ModelSpace.AddLine Array(0#, 0#, 0#), Array(100#, 100#, 0#) End Sub

代价是全部变量退化成 Object,属性名打错要到运行期才报错,并且没有提示。我的习惯是核心业务逻辑用早期绑定写,方便调试;对外分发的入口模块改成后期绑定,并且所有Set ... = CreateObject之后立刻补一次If obj Is Nothing Then判断,把错误挡在入口而不是散落在业务里。

3. 环境控制与图元操作:手册第 3、4 章的可执行内容

第 3、4 章是整本手册翻得最旧的部分,因为画图和改图占了日常九成时间。这两章的价值不在于罗列了哪些方法,而在于把“脚本跑起来不打断、结果可复现”这件事讲透了。脚本卡在弹窗、坐标偏了 500 毫米、图层名对不上,这些都不是语法问题,是环境问题。

3.1 图形开关与系统变量:先把环境固定

脚本最怕的是中途弹出对话框等人点。下面这段把“开图、处理、另存、关闭”走完整,同时把几个关键系统变量调整到位:

Sub BatchOpenSave() Dim app As AcadApplication Dim doc As AcadDocument Set app = ThisDrawing.Application Set doc = app.Documents.Open("D:\in\plan_01.dwg") ' 返回新开的文档对象 doc.SetVariable "OSMODE", 0 ' 关对象捕捉,脚本取点不会被吸到端点 doc.SetVariable "CMDECHO", 0 ' 不在命令行回显,日志干净 doc.SetVariable "FILEDIA", 0 ' 关文件对话框,无人值守不卡住 doc.SetVariable "EXPERT", 5 ' 抑制部分确认提示 doc.SaveAs "D:\out\plan_01_ok.dwg" doc.Close acSaveNo ' 已另存,关闭时不再写盘 End Sub

Documents.Open的参数是完整路径,返回的是新文档对象,不是 ActiveDocument,这个区别很重要:批处理循环里如果一直用ActiveDocument,某一步弹了个提示框,活动文档就可能变成别的,后面全部写错文件。SaveAs会改掉文档的文件名,之前如果有按名字缓存的字典,记得同步更新。acSaveNo是Close的常量,表示关闭时不保存,和acSaveYes、acSavePrompt三选一。EXPERT设成 5 能压掉一批“是否继续”的确认,但压不掉全部,真无人值守还得靠不触发这些路径。

系统变量这块值得单独强调:OSMODE是最容易出问题的一个。开发时手动点几下没感觉,脚本连续跑几十张图,只要有一张图里捕捉开着,取到的点就可能落在附近某个端点上,坐标差几十毫米,肉眼看不出,尺寸统计全错。我一般会在入口统一关掉,处理完再按原值恢复,避免污染用户环境。

3.2 创建图元:Add 方法家族与 Update

第 4 章的创建部分是一串Add方法:AddLine、AddCircle、AddArc、AddPolyline、AddText、AddDimAligned等等。它们都挂在集合对象上,返回新建图元的引用。

Sub CreateBasic() Dim msp As AcadModelSpace Set msp = ThisDrawing.ModelSpace Dim p1(0 To 2) As Double, p2(0 To 2) As Double p1(0) = 0#: p1(1) = 0#: p1(2) = 0# p2(0) = 120#: p2(1) = 60#: p2(2) = 0# Dim ln As AcadLine Set ln = msp.AddLine(p1, p2) ' 拿到引用,后面全靠它改属性 ln.Layer = "OUTLINE" ln.color = acByLayer ln.Update ' 改完必须 Update,否则屏幕不刷新 Dim cir As AcadCircle Set cir = msp.AddCircle(p1, 25#) ' 第二参数是半径,双精度 cir.Lineweight = acLnWt030 cir.Update End Sub

两个细节值得说明。第一,坐标一律是Double数组,长度为 3,Z 必须显式给 0 而不是省略,少一个元素在某些调用路径上不报错但结果异常,排查起来很难。第二,改完属性必须Update,否则数据库里的值变了、屏幕没变,下次有人在新会话里打开才发现位置不对。批量脚本里为了性能可以最后统一Update一次,但开发调试阶段我建议每次改完都调,省得怀疑人生。

3.3 选择集过滤:比 For Each 遍历安全

编辑图元时,For Each遍历ModelSpace看着最直觉,但只要循环体里调用Delete,集合就在脚下被改动,轻则跳过元素,重则直接报错。手册给的正路是选择集加过滤条件:

Sub CollectAndEdit() Dim ss As AcadSelectionSet On Error Resume Next ThisDrawing.SelectionSets.Item("TMP").Delete ' 同名残留会抛错,先清 On Error GoTo 0 Set ss = ThisDrawing.SelectionSets.Add("TMP") Dim ft(0) As Integer, fv(0) As Variant ft(0) = 8: fv(0) = "OUTLINE" ' 组码 8 = 图层名 ss.Select acSelectionSetAll, , , ft, fv Dim i As Long For i = ss.count - 1 To 0 Step -1 ' 倒序删,避免跳号 If ss.Item(i).ObjectName = "AcDbLine" Then ss.Item(i).Delete End If Next i ss.Delete ' 选择集不删会一直留在文档里 End Sub

过滤参数是“组码数组 + 值数组”配对传的,常用组码:0 是对象类型(LINE、CIRCLE),8 是图层名,62 是颜色号,410 是布局名。多个条件之间是与关系,能一次筛到目标集合。倒序删除是因为索引删除会让后面的索引整体前移,正序删必然漏。选择集用完必须Delete,它挂在文档对象上,跑几百次不清理会明显拖慢后续操作,这也是 CAD 二次开发里很典型的性能故障。

3.4 图层、颜色、线型与文本

图层是批量改图最经济的切入点,改一个图层属性等于改了上面所有图元。新增图层前一定要判存在,Layers.Item找不到会直接抛错:

Sub EnsureLayer() Dim lay As AcadLayer On Error Resume Next Set lay = ThisDrawing.Layers.Item("OUTLINE") On Error GoTo 0 If lay Is Nothing Then Set lay = ThisDrawing.Layers.Add("OUTLINE") lay.color = acRed lay.Lineweight = acLnWt030 End If End Sub

Lineweight 用的是枚举常量而不是毫米数值,acLnWt030对应 0.30mm,写数值容易在不同版本上对不上。文字用AddText,参数是插入点、文字内容、字高,然后单独设Alignment和Rotation;中文内容要注意字体,StyleName指向的样式如果没配中文字体,出来的是一堆问号,这个现象在别人的机器上打开图纸时尤其常见。

4. 标注、菜单与事件:把独立宏组合成带界面的小工具

前面几章写出来的是“能跑的函数”,但从别人愿意用的角度,还差三件东西:结果可读(标注)、入口可点(菜单工具栏)、行为可响应(事件)。手册第 5、6、7 章正好对应这三块。

4.1 标注与公差:跟着样式走,不要逐项改

标注对象的属性很多,尺寸线偏移、箭头大小、文字高度、精度,一个个设完,代码又长又脆。手册的思路是绑定已有标注样式,属性只改必须改的:

Sub AddAlignedDim() Dim msp As AcadModelSpace Set msp = ThisDrawing.ModelSpace Dim p1(0 To 2) As Double, p2(0 To 2) As Double, pl(0 To 2) As Double p1(0) = 0#: p1(1) = 0#: p1(2) = 0# p2(0) = 200#: p2(1) = 0#: p2(2) = 0# pl(0) = 100#: pl(1) = 40#: pl(2) = 0# ' 尺寸线定位点 Dim d As AcadDimAligned Set d = msp.AddDimAligned(p1, p2, pl) d.StyleName = "ISO-25" ' 挂已有样式,单位与精度跟着走 d.Update End Sub

AddDimAligned三个点分别是第一测量点、第二测量点、尺寸线位置点,第三个点决定了标在哪一侧、离图形多远。StyleName要写图纸里真实存在的样式名,写错会抛错,稳妥做法是先遍历DimStyles校验一遍再赋。形位公差用AddTolerance,传入公差文本和位置点,返回的对象可以再调TextStyleName。引线是AddLeader,点数组加注释对象,注释得单独建一个AddMText再关联。

4.2 MenuGroups 与工具栏:把宏挂到界面上

第 6 章讲的MenuBar和MenuGroups是 VBA 时代做界面的主要手段,虽然现在很多人改用 Ribbon,但老项目里这套还在跑,接手时必须看得懂:

Sub BuildToolbar() Dim grp As AcadMenuGroup Set grp = ThisDrawing.Application.MenuGroups.Item(0) Dim tb As AcadToolbar On Error Resume Next Set tb = grp.Toolbars.Item("批量工具") On Error GoTo 0 If tb Is Nothing Then Set tb = grp.Toolbars.Add("批量工具") Dim btn As AcadToolbarItem Set btn = tb.AddToolbarButton(tb.count + 1, "改层", "批量改层", "-VBARUN CollectAndEdit ", False) End Sub

AddToolbarButton的参数依次是索引、按钮名、状态栏提示、宏字符串、是否弹出式。宏字符串前面加-表示用命令行版本调用,即-VBARUN,这个减号很关键,不加会走对话框版本。MenuGroups.Item(0)是主菜单组,实际项目里通常先Load一个自定义 CUI 或 MNU,再把菜单挂上去;Menus.Add建下拉菜单,AddMenuItem加条目,InsertInMenuBar放到菜单栏指定位置。这类界面代码改动成本高,我一般把它和业务逻辑彻底分离,界面模块只负责拼命令字符串,出错了好定位。

4.3 事件处理:三级处理器与 WithEvents 的绑定生命周期

第 7 章把事件分成应用程序级、文档级、对象级三层。写法固定是“类模块 + WithEvents 声明 + 标准模块里绑定”:

' 类模块,命名为 ClsDocWatcher Public WithEvents EvtDoc As AcadDocument Private Sub EvtDoc_EndSave() ' 文档保存完成后触发,适合做备份或写操作日志 Debug.Print "已保存: " & EvtDoc.Name End Sub
' 标准模块 Public gWatcher As ClsDocWatcher Sub StartWatch() Set gWatcher = New ClsDocWatcher Set gWatcher.EvtDoc = ThisDrawing ' 绑定当前文档 End Sub Sub StopWatch() Set gWatcher = Nothing ' 必须置空,否则事件一直挂着 End Sub

WithEvents的变量必须是类模块里的模块级 Public 变量,不能是局部变量,否则出了过程就失效。绑定对象声明周期也得自己管理:调试时反复运行StartWatch却不StopWatch,会挂上好几个监听器,一次保存触发好几次日志,看着像灵异事件。应用程序级事件要绑AcadApplication,文档级绑AcadDocument,对象级绑具体图元,层级越细能拿到的回调越少,别指望用对象级事件监听“用户改了颜色”这种操作。

4.4 布局、视口、打印与三维坐标

第 9 章的布局对象模型是Layouts集合 →Layout→Viewports集合 →Viewport。批量出图的核心是把打印配置挂到布局上,再按布局出图:

Sub PlotLayout() Dim lay As AcadLayout Set lay = ThisDrawing.ActiveLayout lay.ConfigName = "DWG To PDF.pc3" ' 打印设备 lay.CanonicalMediaName = "ISO_A3_(420.00_x_297.00_MM)" ' 图纸尺寸,名字必须完全一致 lay.PlotType = acLayout ' 按布局出图 lay.PlotRotation = ac0degrees ThisDrawing.Plot.PlotToFile "D:\out\sheet1.pdf" End Sub

CanonicalMediaName是最容易写错的一个参数,不同设备驱动下可用的介质名不一样。不确认的话先遍历lay.GetCanonicalMediaNames打印一遍,再回来填。第 8 章的三维部分,实际用得最多的是坐标转换:

Sub UcsToWcs() Dim ptUcs(0 To 2) As Double ptUcs(0) = 10#: ptUcs(1) = 20#: ptUcs(2) = 0# Dim ptWcs As Variant ptWcs = ThisDrawing.Utility.TranslateCoordinates(ptUcs, acUCS, acWorld, False) Debug.Print ptWcs(0), ptWcs(1), ptWcs(2) End Sub

TranslateCoordinates第三个参数False表示不做位移(disp),第四个才是位移开关。GetPoint拿回来的点在当前 UCS 下,直接丢给ModelSpace的 Add 方法就会偏,所以凡是用户交互取点,一律先转 WCS 再入库,这是三维项目里必守的一条。

5. 避坑与排查:CAD VBA 里最容易出错的反面案例

手册讲的是“应该怎么写”,实际做项目时卡住人的往往是“为什么它不按我想的跑”。下面五条都是我在真实项目里反复遇到的,按现象、原因、解决三段记录。

5.1 工程与引用层面的坑

现象:本机跑得好好的 DVB,拷到同事机器上打开,提示“找不到工程或库”,所有代码都编译不过。

原因:工程在“工具—引用”里勾选了具体版本的 AutoCAD 类型库,机器上装的 CAD 版本不同,GUID 对不上,引用直接断开。这类问题跟代码写得好不好没关系,属于部署层的问题。

解决:把对类型库强依赖的入口模块改成后期绑定CreateObject("AutoCAD.Application"),只在内部模块保留早期绑定;或者交付时附带一份“引用重建说明”,让使用者手动把断开的引用重新指向本机版本。我现在的习惯是每个交付包都放一个SelfTest宏,第一件事就是打印Application.Version和全部引用名,装机后先跑它。

现象:脚本里SaveAs之后,后续操作全部报错,提示对象无效。

原因:SaveAs改的是磁盘文件名和文档关联,早期绑定的Document引用在某些路径下会失效;更常见的是循环里用ActiveDocument取文档,前一步弹了提示框,活动文档已经切走。

解决:开图时Set doc = app.Documents.Open(...)拿到引用后,全程只用doc,绝不再碰ActiveDocument;保存后立刻重新Set doc = app.ActiveDocument校验一次名字对不对。

5.2 集合操作层面的坑

现象:遍历ModelSpace时删图元,删到一半报错,或者明明有一百个只删掉六十个。

原因:For Each在底层持有枚举器,循环体里Delete改动了集合结构,枚举器失效,后面的元素被跳过。

解决:改用选择集先收集再倒序删(3.3 节那种写法),或者先For Each把Handle收进一个字符串数组,循环结束后再按HandleToString一个个取出来删。删的时候不要依赖索引,索引会变,Handle不变。

现象:改了图元属性,界面上没变化,重新打开文件才对。

原因:忘了Update。数据库和显示是两套状态,某些属性写入后不触发重绘。

解决:属性修改集中到一段代码末尾统一Update,别在中间穿插其他操作;调试阶段每次改完立刻Update,正式版再按性能考虑合并。另外对Lineweight、Color这类属性,用枚举常量而不是数字,版本差异才不会咬人。

5.3 坐标系与状态恢复的坑

现象:脚本算出来的点位跟手点的位置差几百毫米,图形整体偏移,但同一份代码在另一张图上又正确。

原因:UCS 不一致。GetPoint返回当前坐标系下的点,直接交给AddLine会被当成 WCS 坐标处理;图纸里如果保存过旋转过的 UCS,偏得离谱。

解决:所有用户输入点先TranslateCoordinates(pt, acUCS, acWorld, False)转成 WCS 再往下传;反过来,需要给用户提示位置时再转回 UCS。这条在纯二维项目里也成立,因为 UCS 可能被前面的人随手转过。

现象:脚本跑完,用户的捕捉设置、图层状态全被改了,被投诉。

原因:为了脚本稳定改了全局系统变量和当前图层,退出时没有恢复。

解决:入口处把所有要改的变量读进变量保存,用On Error GoTo Cleanup保证异常也能走到恢复段,出口统一写回;当前图层同理,进门先记ThisDrawing.ActiveLayer,出门还原。这类“用完不收拾”的脚本在团队里传播最快,口碑也坏得最快。

6. 二次开发改造:从“能跑通”到“能交给别人运行”

手册里的示例大多是独立的过程,把它变成能交付的工具,还得加一层工程结构。我的做法是固定四个目录:entry(入口,只做参数解析和调用)、domain(业务,纯计算和图元操作)、infra(封装 CAD 交互,比如开图、保存、打印)、log(日志)。好处是单元测试可以只针对domain,不依赖 CAD 实例。日志模块很小,但必须有:

' infra 模块:统一日志,出问题先看这里 Public Sub LogMsg(ByVal tag As String, ByVal msg As String) Dim f As Integer f = FreeFile Open ThisDrawing.GetVariable("TEMPPREFIX") & "cad_tool.log" For Append As #f Print #f, Format$(Now, "yyyy-mm-dd hh:nn:ss") & " [" & tag & "] " & msg Close #f End Sub

TEMPPREFIX是 CAD 给的临时目录系统变量,用它拼路径就不用写死盘符,跨机器可用。日志写入的时候顺手把图名、Handle、关键参数一起记,出问题能直接定位到哪张图的哪个对象,比让用户描述“就那个框”高效得多。

改造的第二步是验证。我的习惯是准备三张回归图:一张空图、一张真实项目的复杂图、一张从别人那拿来的“有问题”的图。每改一次代码,三张图各跑一遍入口宏,对比日志里的图元数量和预期值,差值超过阈值就停下来查。这套流程看起来笨,但它拦下过好几次“只在自己机器上正常”的坐标换算错误。

再往上一层是把散装宏收敛成配置驱动:把需要批处理的图纸目录、目标图层名、输出路径写进一个 INI 或 Excel 配置表,代码只读配置不写死常量。这样业务方改需求时不用找你改代码,你也不用每次发版都解释一遍改了哪里。从那以后我每次交付 VBA 工具,都强制走一遍“新机器、新图纸、只跑入口宏”的三步验证,宁可多花半天,也不想再接到“你那个工具昨天还好好的”这种电话。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 4:27:40

GPT-6 Sol与Luna发布:0.10美元API定价与开发者选型指南

1. 从0.10美元这个数字说起&#xff1a;GPT-6 Sol与Luna到底改了什么2026年9月23日&#xff0c;OpenAI一次性放出两个模型——GPT-6 Sol和GPT-6 Luna&#xff0c;同时把API的起步价压到了每百万输入Token 0.10美元。这个价格放在两年前是不可想象的&#xff0c;当时主流模型的输…

作者头像 李华
网站建设 2026/11/4 4:26:25

PHP实现个性化推荐系统架构与优化实践

1. 个性化推荐系统的本质剖析在信息爆炸的时代&#xff0c;用户面对海量内容时常陷入"选择困难症"。我十年前第一次接触推荐系统时&#xff0c;就被这种"猜你喜欢"的魔法所震撼——它怎么知道我会对那款小众吉他效果器感兴趣&#xff1f;经过多年实践发现&…

作者头像 李华
网站建设 2026/11/4 4:26:06

GLM-5.3-FlashX 实测:200 tokens/s 的 MoE 推理与 API 接入指南

1. 为什么 GLM-5.3-FlashX 的 200 tokens/s 值得单独拿出来聊第一次看到 GLM-5.3-FlashX 这个型号名的时候&#xff0c;我下意识以为是又一次常规的小版本迭代&#xff0c;直到把 200 tokens/s 这个数字和 FlashX 的后缀放在一起看&#xff0c;才意识到智谱这次动的是推理侧的真…

作者头像 李华
网站建设 2026/11/4 4:25:41

大模型时代:向量数据库技术解析与应用实践

1. 为什么大模型需要向量数据库&#xff1f;大模型处理文本时会产生高维向量表示&#xff0c;这些向量就像给每个词语、句子或段落打上的独特"指纹"。想象一下图书馆里成千上万本书&#xff0c;如果每本书都用书名和作者来检索&#xff0c;效率会很低。但如果我们为每…

作者头像 李华
网站建设 2026/11/4 4:25:24

基于Zigbee的无线指纹门禁系统设计与优化

1. 项目背景与核心需求去年帮朋友改造老旧小区门禁时&#xff0c;发现传统刷卡式门禁存在明显安全隐患——门禁卡易被复制&#xff0c;且无法精准识别使用者身份。这促使我开始研究如何将生物识别技术与无线通信结合&#xff0c;打造更安全的智能门禁方案。无线指纹门禁系统需要…

作者头像 李华
网站建设 2026/11/4 4:24:54

宜搭0代码开发手册:案例驱动的企业应用搭建指南

简介&#xff1a;《0 代码&#xff0c;搭应用——宜搭开发手册》是一份面向企业业务人员、信息化管理者及低代码入门学习者的 PDF 手册&#xff0c;围绕阿里巴巴宜搭零代码平台展开&#xff0c;回应业务缺少系统支撑、流程脱节、信息孤岛与开发运维成本高等常见问题。手册从产品…

作者头像 李华