自适应密度聚类算法wehcat08:原理、实现与调参避坑指南

简介:开源wehcat08算法包是一份面向网络协议研究与Go开发者的源代码资源,标签指向iPad协议08算法,推测与特定设备通信流程或加密握手相关,适合需要分析私有协议或构建轻量通信服务的工程师。资源共247个文件,压缩包仅6.32MB,以Go源码为主(203个go文件),另含xml、map、js、conf、proto、dockerfile等配置与辅助文件,可覆盖算法核心逻辑、TcpPoll连接管理、Mmtls安全通信、Docker部署环境及Windows启动脚本,便于多平台运行与二次开发。包内目录划分了Algorithm核心代码、lib共享库、配置文件等模块,结构清晰,模块化设计便于按需替换或扩展功能。研究者可对照源码分析网络握手与轮询实现,开发者则能直接复用其中的协议封装与加密模块,或基于Docker快速搭建运行环境。目前已有201人学习下载,对于想了解非标准协议算法实现、或需要轻量级Go网络库的读者具有参考价值。

1. 开源wehcat08算法:先搞清楚它在解决什么问题

开源wehcat08算法这个名字绕口,第一眼容易让人联想到某个聊天客户端,但它其实是一个轻量级聚类算法的代号,08 是最早稳定分支的标记。如果你手头的数据既有密度不均的团块,又有肉眼可见的离群点,常见的 KMeans 和固定半径的密度聚类都会翻车,而 wehcat08 的出现就是为了补这个空档:它把“局部密度排序”和“共享近邻合并”揉到一起,不需要你预先指定簇数,还能顺带把过小的噪声簇剪掉。

这个方向值得关注的人,主要是两类。一类是拿到一批无标签数据,想先做探索性聚类,又不确定该给 KMeans 填几个中心的工程师;另一类是在做有监督模型之前,需要清洗数据、剔除异常样本的数据分析师。它解决了你“连簇数都不知道,数据里还有脏点”的时候,第一步该怎么走的问题。

下面我把这个标题拆成可以复现的步骤:先讲清楚它的判断逻辑,再给你一份能直接跑通的最小实现,最后把调参顺序和踩坑点列出来。这样新手能跟着走,熟手也能快速对参数边界做出判断。

2. wehcat08 的核心思想:自适应邻域与层次合并

2.1 从“固定半径”到“局部密度排序”

很多密度聚类方法死磕一个 eps 半径,但这在真实数据里是玄学:局部稀疏区域要求半径大,局部密集区域要求半径小,一个固定值根本照顾不了两边。wehcat08 的第一招是绕开半径,改用“局部密度排序”。它先给每个样本找 k 个近邻,把到近邻的平均距离取倒数当作局部密度。平均距离越小,密度越高,这个量在每个点身上动态变化,天然做到了自适应。

有了密度后,算法把所有样本按密度从高到低排序。密度最高的点一定是某个簇中心的候选,剩下的点去观察“比自己密度更高的邻居里,最近的那一个”。如果这个最近高密度邻居离自己非常远,说明两者之间隔着一个密度低谷,当前点就更像一个新簇中心;否则就把自己的父节点指向那个高密度邻居。

2.2 共享近邻:簇合并的“共同语言”

只靠密度排序会把一个个点串成树,但边界上属于同一簇的样本可能会因为局部密度起伏被切碎。wehcat08 的第二个关键动作是用“共享近邻”来做合并。它检查两个初始簇里的样本各自的 k 近邻集合,近邻集合的交集占并集的比例超过 alpha 时,就把两个簇合并。这个比直接用簇间距离稳健得多:两个簇即便质心距离近,只要它们的成员很少互相出现在对方的近邻列表里,就不该被合成一块。

这个设计也顺带解决了另一个问题。两个密度都很高、但分布在不同位置的簇,它们的共享近邻交集几乎是空的,即便几何距离很近也不会误合并;而两个同属一个条带、首尾相接的簇,边界处样本的近邻列表会有大面积重叠,就能被正确粘合起来。

2.3 一个等价的最小实现

这部分代码是我按标题描述的行为拆出来的最小等价骨架,不是仓库原码,适合你快速理解并跑通。它只依赖 numpy 和 scipy,样本量在万级以内、特征维度不高时完全够用。

import numpy as np from scipy.spatial.distance import cdist def _merge_by_overlap(labels, neighbors, alpha): # labels: 初始簇标号; neighbors: k近邻索引矩阵 while True: changed = False n_clusters = labels.max() + 1 for a in range(n_clusters): for b in range(a + 1, n_clusters): pa = np.where(labels == a)[0] pb = np.where(labels == b)[0] if len(pa) == 0 or len(pb) == 0: continue sa = set(neighbors[pa].ravel()) sb = set(neighbors[pb].ravel()) union = len(sa | sb) inter = len(sa & sb) if union and inter / union > alpha: labels[labels == b] = a changed = True break if changed: break if not changed: break return labels def wehcat08_skeleton(X, k=12, center_eps=0.8, alpha=0.5, min_size=3): # X: (n_samples, n_features),最好已经标准化 n = X.shape[0] D = cdist(X, X) # 全量距离矩阵 neighbors = np.argsort(D, axis=1)[:, 1:k+1] # 局部密度 = 到 k 个近邻平均距离的倒数 rho = 1.0 / (np.mean(D[np.arange(n)[:, None], neighbors], axis=1) + 1e-8) order = np.argsort(-rho) # parent 记录每个点的最近高密度邻居 parent = np.arange(n) center_flag = np.zeros(n, dtype=bool) center_flag[order[0]] = True for i in range(1, n): j = order[i] higher = order[:i] dist_h = D[j, higher] min_pos = int(np.argmin(dist_h)) if dist_h[min_pos] > center_eps: center_flag[j] = True # 自己成为新簇中心 else: parent[j] = higher[min_pos] # 沿着 parent 链找到每个点归属的根中心 root_to_label = {} labels = np.full(n, -1, dtype=int) next_label = 0 for j in range(n): node = j while not center_flag[node]: node = parent[node] if node not in root_to_label: root_to_label[node] = next_label next_label += 1 labels[j] = root_to_label[node] labels = _merge_by_overlap(labels, neighbors, alpha) # 剪掉过小的簇,这些大概率是噪声 unique, counts = np.unique(labels, return_counts=True) for u, c in zip(unique, counts): if c < min_size: labels[labels == u] = -1 return labels

代码里D[j, higher]是在算当前点和所有密度更高样本的距离,取最近的那个作为自己的父节点。center_eps是关键分界:它设得越大,越难产生新簇,最终簇数越少;设得太小,密度稍有波动就会切出大量碎片簇。alpha则控制合并的激进度,它的判断完全建立在近邻集合的交并比上,因此 k 的选择会直接影响它是否有效。min_size是最后的保险,把只有两三个样本的小块直接标记为 -1 当作噪声。

这段代码里最容易被误读的是_merge_by_overlap。它用的不是簇间质心距离,而是近邻集合的重叠率,所以你单独调大 alpha 不会让两个“离得远但边界纠缠”的簇分开,反而会让边界纠缠程度不高的簇更早独立。

3. 用 wehcat08 在本地跑通最小例程

3.1 准备数据与最小依赖

先别急着上自己的业务数据,用一组带人工标注的模拟数据验证实现是否正常。我一般会生成四个中心点明确的球状簇,再额外撒一点均匀噪声,这样既能看到聚类效果,也能测试噪声剪枝是否起作用。依赖只需要 numpy、scipy,以及一个你惯用的数据生成库。

数据生成时要注意:必须做标准化。wehcat08 的距离计算依赖欧氏距离,如果某个特征数值范围是 0 到 1000,另一个是 0 到 1,距离会被第一个特征完全主导,整个算法就退化成一维投影。

3.2 核心调用代码

把上一节的函数保存成本地模块wehcat08.py,然后在同一个目录下运行下面的脚本:

import numpy as np import pandas as pd from sklearn.datasets import make_blobs from sklearn.preprocessing import StandardScaler from sklearn.metrics import silhouette_score from wehcat08 import wehcat08_skeleton as wehcat08 X, y = make_blobs(n_samples=800, centers=4, n_features=6, cluster_std=1.2, random_state=42) noise = np.random.uniform(-6, 6, size=(40, 6)) X = np.vstack([X, noise]) X_std = StandardScaler().fit_transform(X) labels = wehcat08(X_std, k=15, center_eps=0.9, alpha=0.45, min_size=10) print(pd.Series(labels).value_counts()) mask = labels != -1 if mask.sum() > 1: print("silhouette:", silhouette_score(X_std[mask], labels[mask]))

这里make_blobs生成的是四类球形分布,随机种子固定后结果可复现。加噪声时用的是均匀分布,范围故意比簇的分布宽,为的是制造真正的离群点。标准化后,center_eps取 0.9 比较合适,这是基于标准缩放后特征尺度大致在 ±3 的经验值。alpha取 0.45,在“允许少量近邻交集噪声”和“别把相邻簇合过头”之间取了个折中。

3.3 四个必调参数与调节顺序

参数建议起步值作用调节规律
k12~20k 近邻的邻居数样本量增大时按 sqrt(n) 起步,太大则边界变糊
center_eps0.8~1.0新簇中心的判定距离值越大簇数越少,小则碎片化
alpha0.4~0.6簇合并的共享近邻阈值值越大合并越保守,簇数越多
min_size5~10噪声簇剪枝阈值根据业务对离群点的容忍度来定

我的调参顺序是:先固定 k 和 min_size,只扫 center_eps,把它从 0.5 到 1.5 每 0.1 步进一遍,记录簇数和轮廓系数;然后固定 center_eps,再扫 alpha;最后回头看 min_size。这样能避免四个参数同时乱动,出了怪结果也不知道是谁的锅。你大概率很快就会撞上“center_eps 一改,整个结果全变成单簇”的情况,这不是算法黑匣子,而是当前 center_eps 已经大于所有样本之间的最大距离,密度高峰全被埋没。

4. wehcat08 避坑指南:我见过的五个踩坑问题

4.1 现象:聚类结果对数据顺序异常敏感

同样一份数据,只是把 sample 的排列顺序换了一下,标号分布就变了。原因有两层:一是np.argsort在距离相等时会按原始索引打破平局,顺序不同平局走向就不同;二是中心判定过程中,密度相同的点谁先被处理,会改变后续点归属哪个中心。解决办法是在预处理时对样本顺序做一次稳定的随机排列后固定保存,并且在计算近邻时不要用默认的 argsort,改用np.lexsort按距离和索引双重排序,让平局结果与输入顺序无关。

4.2 现象:样本量过万后内存直接暴涨

cdist生成的是 N×N 全量距离矩阵,一万个样本就是 1 亿个浮点数,占 800 MB 内存,两万样本直接吃掉 3.2 GB。原因就是这个全量矩阵是算法第一版最容易踩的黑匣子。解决方法是把距离矩阵换掉:用 KDTree 或 BallTree 只查每个点的前 k 个近邻距离和索引,再用近邻列表算密度和共享近邻。这样内存占用从 O(N²) 降到 O(N×k),两万样本的内存压力可以忽略。

4.3 现象:alpha 阈值调一点,簇从十几个直接并成一个

alpha 从 0.5 调到 0.4,簇数迅速坍缩成 1。原因是_merge_by_overlap用的是近邻集合的并集做分母,当 k 太小,每个簇的近邻集合只有十几二十个点,两个簇只要边界交叉一点,交并比就会立刻冲过阈值。解决方法是先把 k 提到 20 以上,给共享近邻的计算留出足够大的集合;如果还是坍缩,就把 alpha 的下限设在 0.45,不要无脑往下探。记住,alpha 是“簇之间要不要并”的开关,不是“边界要多松”的旋钮。

4.4 现象:数据里的离群点把中心判定彻底带偏

当你在一堆正常样本里混入 5% 的极端离群点时,这些离群点的密度极低,会被排在密度排序末尾,按理说影响不大。但实际结果是,部分离群点和正常簇边界距离很近,被当成了一个高密度点的新簇中心,于是正常簇被从中间切开。原因是 center_eps 是全局阈值,它对稀疏区域的点过于敏感。解决方法是先做一次粗剪:把局部密度低于全局密度 10% 分位的点先标记为候选噪声,不参与中心判定;等簇标号算完后,再用 min_size 收尾。

4.5 现象:多机并行跑同一份数据,结果对不上

有人在用 Spark 或 Dask 把近邻计算分发到多台机器后发现,每个节点算出的近邻列表不完全一致,合并后簇数都不一样。原因是分布式近似近邻的召回率不是 100%,个别点的近邻集合出现偏差,共享近邻的并集分母一变化,alpha 的判断就翻了。解决方法是:如果数据量没有大到必须用分布式,就用单机 KDTree;非要分布式,就把近邻列表落盘后统一重算_merge_by_overlap,不要在每个分区里独立做合并,否则不确定的边界会无限放大。

5. 把 wehcat08 装进自己的流水线:特征工程与集成

5.1 特征尺度是最大的坑,先 StandardScaler 再谈其他

许多人把数据扔进 wehcat08,出来一堆碎片簇,第一反应是调 alpha。其实回头看看会发现,特征里有一个列是 0~100 万,其他列都是 0~1,距离计算被那个大数特征彻底统治,所谓的近邻关系变成了“只在一维上找邻居”。这种情况哪怕你把 alpha 调到 0.9,结果还是乱的。所以我现在的习惯是:凡是特征量纲不齐的,先做 StandardScaler,再做一次 PCA 留下 20 维以内的主成分,最后才进 wehcat08。标准化这一步不是可选项,是必选项。

5.2 用集成投票替代一次聚类

wehcat08 对参数不是无限鲁棒,单次聚类的结果难免有随机感。我一般会用一个简单的 co-association 矩阵做集成:对不同参数组各跑一次,统计任意两个样本被分到同一簇的次数,得到相似度矩阵,再在这个矩阵上用最普通的层次聚类收尾。这样既能保留 wehcat08 对密度不均的适应能力,又能把多组参数的不稳定互相抵消。

import numpy as np from wehcat08 import wehcat08_skeleton def co_association(X, param_grid): n = X.shape[0] A = np.zeros((n, n)) for params in param_grid: lab = wehcat08_skeleton(X, **params) for c in np.unique(lab): if c == -1: continue idx = np.where(lab == c)[0] sub = np.ix_(idx, idx) A[sub] += 1 return A / len(param_grid)

co_association返回的矩阵可以传给 scipy 的linkage和fcluster,把集成结果变成最终标号。这样做的代价是计算量成倍增加,但换来的稳定性值得。你可以在线上把这个矩阵当作中间特征输出,后续直接复用。

5.3 与常见聚类算法的对比选型

算法密度不均离群点处理需要预设簇数适合场景
KMeans差差是球形簇、超大样本量
DBSCAN一般好否密度均匀、有清晰邻居关系
wehcat08较好较好否脏数据、簇大小不均、边界纠缠

从表格看,wehcat08 并不是要替代谁。如果你的数据已经明确是球形簇且样本量在百万级,KMeans 会更省时间;如果数据密度非常均匀、噪声强,DBSCAN 的 eps 虽然难调,但一旦调对就很稳定。wehcat08 的位置是在前两者之间:你既不知道簇数,又没法保证密度均匀,还不想手动反复试 eps 的时候。

6. 验证聚类的质量:wehcat08 的“三个不看”与一个指标

跑通了不代表能上线。我吃了不少亏之后总结出“三个不看”:第一,不要只盯着轮廓系数。轮廓系数对凸簇友好,对条带状簇和带长尾的簇会给出误导性的低分;第二,不要只看最终的簇数。簇数在 wehcat08 里是合并过程的副产品,不是目标,你把 alpha 调小一档簇数就会翻倍,这不能说明结果变好或变坏;第三,不要用一组参数跑完就下结论。先换两三个 seed,看稳定簇是否还在,如果核心簇每次都在,只是边缘小簇在震,那才算可用。

真正值得追求的“一个指标”,是当你手上哪怕只有部分人工标注时,用调整兰德指数或调整互信息来打横。下面这段代码对带真实标签的数据很有效:

from sklearn.metrics import adjusted_rand_score, adjusted_mutual_info_score # labels 来自 wehcat08,y 是人工标注,-1 表示噪声 mask = labels != -1 ari = adjusted_rand_score(y[mask], labels[mask]) ami = adjusted_mutual_info_score(y[mask], labels[mask]) print("ARI:", ari, "AMI:", ami)

ARI 超过 0.7 基本说明结果和人工标注的一类划分高度吻合;0.4 以下就说明参数选择有问题,别急着部署。这个指标比轮廓系数诚实的地方在于,它不是“自我感觉良好”,而是直接对答案。我现在的习惯是:任何新数据接入 wehcat08 前,先切出一个带少量标注的验证窗口,把 ARI 跑到底,及格后我再挪到全量数据上。这个习惯帮我提前排掉了好几次看似合理实则分错的翻车场景。希望帮到你。

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

相关新闻

基于图规划与抽象语法约束的Verilog自动生成方法解析

基于图规划与抽象语法约束的Verilog自动生成方法解析

最近在梳理体系结构方向的论文精读清单&#xff0c;第111篇正好落到VerilogCoder这个题目上。第一眼看上去像又一个大模型写Verilog的demo&#xff0c;但顺着标题里的“Graph-based Planning”和“Abstract Syntax”往下读&#xff0c;才发现它在“如何让智能体真正懂硬件结构”…

2026/10/20 10:06:48 阅读更多 →
HDR图像重建复现:光学建模+信号处理+深度学习三重校准

HDR图像重建复现:光学建模+信号处理+深度学习三重校准

1. 这不是“调个参跑个模型”——HDR重建复现的本质是光学物理信号处理深度学习的三重校准你搜到这篇CVPR21论文标题时&#xff0c;大概率正卡在某个环节&#xff1a;PyTorch加载预训练权重报错、合成数据集亮度分布对不上、重建结果发灰发雾、PSNR数值比原文低3dB以上却找不到…

2026/10/20 10:06:48 阅读更多 →
迷茫的本质与破局:用自我认知、小步实验和反馈校准建立方向

迷茫的本质与破局:用自我认知、小步实验和反馈校准建立方向

迷茫这事儿&#xff0c;本质上不是“不知道怎么办”&#xff0c;而是“还没建立起属于自己的判断坐标系”。我见过太多人——包括我自己——在某个阶段被四面八方的声音裹挟&#xff1a;身边人在考研、在转码、在考公、在创业&#xff0c;好像每条路都有人走通&#xff0c;但放…

2026/10/20 10:06:48 阅读更多 →

最新新闻

如何 5 步把游戏手柄映射为键盘鼠标?AntiMicroX 完整指南

如何 5 步把游戏手柄映射为键盘鼠标?AntiMicroX 完整指南

如何 5 步把游戏手柄映射为键盘鼠标&#xff1f;AntiMicroX 完整指南 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.com/Gi…

2026/10/20 10:43:36 阅读更多 →
M5 Max上184 tok/s!Mac与Apple Silicon运行LFM2.5-24B-A2B完全指南

M5 Max上184 tok/s!Mac与Apple Silicon运行LFM2.5-24B-A2B完全指南

大模型基础模型推理模型本地部署模型量化 【免费下载链接】LFM2.5-24B-A2B-GGUF 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/unsloth/LFM2.5-24B-A2B-GGUF 点击查看 免费下载 LFM2.5-24B-A2B 是 Liquid AI 推出的 240 亿参数&#xff08;激活仅 20 亿&#xff0…

2026/10/20 10:43:36 阅读更多 →
7000 只 A 股一口气算完 39 项技术指标:free-stockdb 本地量化数据引擎完整指南

7000 只 A 股一口气算完 39 项技术指标:free-stockdb 本地量化数据引擎完整指南

7000 只 A 股一口气算完 39 项技术指标&#xff1a;free-stockdb 本地量化数据引擎完整指南 【免费下载链接】free-stockdb 面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎&#xff0c;集成增量同步、本地缓存、复权、批量查询、回测与指标计算。 项目地址: https://gitcod…

2026/10/20 10:43:36 阅读更多 →
AI Agent实战:构建高鲁棒性Planning规划系统的方法论

AI Agent实战:构建高鲁棒性Planning规划系统的方法论

做AI Agent开发这几年&#xff0c;我见过太多团队在Planning这个词上栽跟头。第一次做Agent的人&#xff0c;往往默认所谓规划&#xff0c;就是让模型写出一份步骤清单&#xff0c;然后照着清单往下走。直到生产环境里出现各种意外——工具调用失败、中途发现目标理解偏了、步骤…

2026/10/20 10:43:36 阅读更多 →
长江流域shp文件解析:图层、坐标系与空间可视化分析实战

长江流域shp文件解析:图层、坐标系与空间可视化分析实战

简介&#xff1a;这份长江流域地区shp文件是一套面向GIS从业者、地理科研人员及高校学生的矢量地理数据集&#xff0c;可用于空间可视化分析、环境影响评估、水资源管理与城市规划等场景。压缩包共44个文件&#xff0c;约2.09MB&#xff0c;以shp、shx、dbf、prj、sbn、sbx、cp…

2026/10/20 10:43:36 阅读更多 →
Mininet拓扑搭建全流程:可视化、命令行与Python脚本实战

Mininet拓扑搭建全流程:可视化、命令行与Python脚本实战

简介&#xff1a;针对Mininet网络仿真实验的完整实验报告文档&#xff0c;面向计算机网络、SDN方向学习者及需要完成同类实验的高校学生&#xff0c;系统梳理了从环境准备到拓扑构建的实操流程&#xff0c;可用于快速掌握可视化与脚本化两种网络建模方式。资源为1个doc文件&…

2026/10/20 10:42:34 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →