从零搭建AI工程体系:数据、特征、模型三层契约与可观测性实践
1. 从零搭建AI工程体系为什么我劝你别一上来就调包很多人第一次接触AI工程脑子里想的都是“赶紧跑通一个模型”。装个环境pip install几个库拿现成的预训练权重推理一把看到输出结果就觉得自己入门了。这种路径不能说错但它有个致命问题你只是在“用”AI而不是在“做”AI工程。这两者之间的差距大概相当于会开车和会造车——平时通勤当然没问题可一旦路况变了、车坏了、要改装了你就彻底抓瞎。“ai-engineering-from-scratch”这个标题核心讲的其实就是一件事把AI工程当作一门需要从底层搭建的手艺来对待而不是当作一堆API的拼装游戏。它适合谁适合那些已经会调包、但总觉得心里没底的人适合想搞清楚模型训练、推理、部署整条链路到底发生了什么的人也适合团队里需要做技术选型、要评估方案可行性的工程师。你不需要是数学博士但得愿意动手写代码、看日志、调参数。我自己的经历很典型。早些年做推荐系统模型都是现成的框架调一调参数就上线。直到有一次线上推理延迟突然飙升排查了两天才发现是特征预处理里一个归一化操作在特定数据分布下触发了大量内存拷贝。如果当时我对整条链路有从零搭建的认知这个问题半小时就能定位。从那以后我开始刻意用“从零”的视角去重构自己的知识体系把每个环节都拆开看一遍。这篇文章就是把这些年踩过的坑、总结的方法按一个可复现的路径整理出来。2. 整体设计思路先画数据流再选工具链2.1 为什么“从零”不等于“什么都自己写”一听到“from scratch”很多人第一反应是难道要自己实现矩阵乘法、自己写反向传播那也太原始了。这里需要澄清一个关键认知从零搭建AI工程体系指的是你清楚每一个环节的输入输出、依赖关系和失败模式而不是拒绝使用成熟库。你完全可以用PyTorch做张量计算用NumPy做数据处理但你必须知道PyTorch在那个环节替你做了什么、代价是什么。我通常把AI工程分成五层数据层、特征层、模型层、服务层、监控层。从零搭建的意思是这五层的边界你要自己划清楚每层之间的契约你要自己定义。比如数据层输出什么格式、特征层如何保证训练和推理一致、模型层如何版本化管理、服务层如何做批处理与流式处理的切换、监控层采集哪些指标。这些决策现成框架不会替你做完也不应该替你做完。2.2 方案选型的核心原则可观测性优先于性能在选工具链的时候很多人容易陷入“哪个快用哪个”的陷阱。实测下来对于从零搭建的项目可观测性比绝对性能重要得多。一个推理速度快10%但日志稀烂的框架和一个速度中等但每一步都能打点追踪的框架我毫不犹豫选后者。因为从零搭建的过程中你最大的成本是调试和排查不是那点计算时间。具体来说我建议在早期阶段坚持三个原则。第一数据流必须可序列化每一步的中间结果都能落盘检查。第二配置必须外置所有超参数、路径、开关都放在配置文件里不硬编码。第三每个模块必须有独立的冒烟测试不依赖上下游就能跑通。这三条看起来简单但能帮你省下大量“到底哪一步错了”的时间。2.3 一个典型的从零搭建路线图假设你要做一个文本分类服务从零搭建的路线大概是这样先用脚本把原始数据清洗成统一格式的JSONL每行包含文本和标签然后写一个特征提取模块把文本转成token id序列同时保存词表接着写训练循环不用高级Trainer自己写epoch、batch、梯度更新和验证训练完成后把模型权重和词表一起打包成版本化的产物再写一个推理服务加载产物暴露HTTP接口最后加监控记录请求量、延迟分布和预测置信度分布。这条路线里每一步你都可以选择用现成库来加速但你必须清楚这一步的输入是什么、输出是什么、失败会怎样。比如特征提取你可以用HuggingFace的tokenizer但你要知道它内部做了截断、填充、特殊符号添加这些操作在推理时必须完全一致否则训练推理不一致的坑就会找上你。3. 核心细节解析数据、特征、模型的三层契约3.1 数据层别急着清洗先做数据审计从零搭建最容易犯的错误就是拿到数据直接开始清洗。我踩过的坑是花了两天写清洗脚本结果发现原始数据里有30%的样本标签是错的清洗得再干净也没用。所以第一步应该是数据审计而不是数据清洗。数据审计要回答几个问题样本总量多少、标签分布如何、有没有重复样本、文本长度分布怎样、有没有乱码或特殊字符。这些信息不需要复杂的工具写个脚本统计一下就行。我通常会生成一个审计报告包含直方图和随机抽样样本人工看一遍。这一步花的时间后面会加倍省回来。审计完成后才是清洗。清洗的原则是只做可逆的操作不可逆的操作必须记录。比如去除HTML标签是可逆的你知道原始文本但截断超长文本是不可逆的你丢失了信息。对于不可逆操作一定要保存原始数据备份并且记录截断规则。我习惯把清洗后的数据和清洗脚本一起版本化确保任何时候都能复现。3.2 特征层训练推理一致性是生命线特征层的核心挑战只有一个训练时和推理时的特征处理必须完全一致。听起来像废话但实际操作中这是最容易出问题的地方。训练时你用pandas做归一化推理时你用NumPy做浮点精度差异就可能导致结果偏移。训练时你用了某个默认参数推理时忘了传特征分布就变了。我的做法是把特征处理逻辑封装成一个独立的类或函数训练和推理都调用同一个入口。这个入口的输入是原始数据输出是模型可用的张量。所有参数从配置文件读取不依赖任何全局状态。然后写一个一致性测试用同一批原始数据分别走训练路径和推理路径比较输出是否完全一致。这个测试要纳入CI每次改动特征逻辑都跑一遍。另外特征层要保存元数据。比如词表、归一化参数、类别映射表这些必须和模型权重一起保存。我见过太多人只保存了模型权重部署时发现词表对不上只能重新训练。元数据和模型权重应该是一个不可分割的产物加载时一起加载版本号一致。3.3 模型层训练循环要自己写一遍现在高级框架很多Trainer一行代码就能训练。但从零搭建的角度我强烈建议你自己写一遍训练循环。不是为了炫技而是为了理解每个环节。自己写一遍你会被迫回答这些问题损失函数怎么算、梯度怎么累积、学习率怎么调度、验证集怎么评估、早停怎么判断、检查点怎么保存。写训练循环的时候有几个细节值得注意。第一随机种子要固定包括Python、NumPy、框架本身的种子否则结果不可复现。第二验证集评估要独立于训练模式记得切换eval模式并关闭梯度。第三检查点保存要包含优化器状态否则恢复训练时学习率调度会乱。第四日志要记录每个epoch的训练损失、验证损失、学习率、耗时最好用结构化日志方便后续分析。模型版本管理也是从零搭建必须考虑的问题。我的做法是每次训练生成一个版本号包含时间戳和配置哈希。模型权重、配置文件、词表、评估指标一起打包成一个目录目录名就是版本号。推理服务加载时指定版本号不加载最新避免意外更新。这样回滚的时候直接切版本号就行。4. 实操过程从空目录到可服务的最小闭环4.1 环境准备与依赖锁定从零搭建的第一步是创建一个干净的环境。我习惯用conda创建独立环境然后手动安装依赖而不是一次性装一堆。每装一个包记录版本号。最终生成一个requirements.txt所有版本号都锁定。这一步的目的是保证可复现今天能跑通的代码三个月后换台机器也能跑通。依赖锁定有个技巧不要只锁定直接依赖间接依赖也要锁定。用pip freeze生成完整列表然后手动整理去掉不必要的包。我通常会保留一个最小依赖集加上一个完整依赖集。最小依赖集用于生产部署完整依赖集用于开发调试。这样部署时镜像小启动快。环境准备好后先写一个hello world脚本验证框架能正常导入、GPU能正常识别。不要小看这一步我遇到过CUDA版本和框架版本不匹配折腾半天才发现是环境问题。提前验证后面省心。4.2 数据管道搭建从原始文件到可迭代数据集数据管道的目标是给定一个原始数据目录能自动生成训练、验证、测试三个数据集并且支持随机打乱、批处理、预取。我通常写一个Dataset类实现__len__和__getitem__然后用DataLoader包装。关键点是__getitem__里只做轻量操作重操作放在预处理阶段完成。预处理阶段我会把原始数据转成统一的JSONL格式每行一个样本包含输入和标签。然后写一个统计脚本计算样本数、类别分布、长度分布。这些统计信息保存下来后面分析模型表现时有用。预处理脚本要幂等重复运行结果一致方便调试。数据加载的时候要注意内存管理。如果数据量大不要一次性加载到内存用流式读取。DataLoader的num_workers设置也有讲究不是越大越好。我一般从2开始试观察CPU和IO负载找到瓶颈再调整。预取因子prefetch_factor也要配合调整太小会饿着GPU太大会占内存。4.3 训练循环实现手写一个可复现的训练器训练循环的骨架大概是这样外层循环epoch内层循环batch。每个batch做五件事数据搬到设备、前向传播、计算损失、反向传播、更新参数。每个epoch结束做验证记录指标保存检查点。听起来简单但每个环节都有坑。数据搬设备的时候要用non_blockingTrue配合pin_memory能提升一点速度。前向传播要注意模型模式训练时model.train()验证时model.eval()。损失函数要根据任务选分类用交叉熵回归用MSE但要注意标签格式。反向传播前记得optimizer.zero_grad()否则梯度会累积。更新参数后可以加梯度裁剪防止梯度爆炸。验证阶段除了算损失还要算任务指标。分类任务算准确率、F1回归任务算MAE、RMSE。这些指标用sklearn或者自己写都行关键是和训练指标区分开。我习惯用字典保存所有指标每个epoch追加最后画曲线。早停策略也要实现验证损失连续N个epoch不下降就停N一般取3到5。检查点保存要包含模型状态字典、优化器状态字典、当前epoch、当前最佳指标、随机种子状态。这样恢复训练时能从完全相同的状态继续。我还会保存一个配置文件副本确保检查点和配置对应。4.4 推理服务封装从模型文件到HTTP接口训练完成后模型文件不能直接对外服务需要封装成推理服务。我通常用FastAPI写一个简单的HTTP服务加载模型和元数据暴露一个predict接口。接口接收原始输入内部走和训练一致的特征处理然后模型推理返回结果。服务封装有几个关键点。第一模型加载只做一次放在服务启动时不要每次请求都加载。第二批处理要支持但不要过度设计先支持单条推理有性能需求再加批处理。第三超时和错误处理要做好模型推理可能失败要返回明确的错误码。第四日志要记录请求ID、输入摘要、输出摘要、耗时方便追踪。我还会加一个健康检查接口返回服务状态和模型版本。这样负载均衡和监控系统能感知服务是否正常。服务启动后用curl或者Python requests做冒烟测试确保接口能通。然后压测一下看看QPS和延迟心里有个底。4.5 监控与日志让服务会说话服务上线后没有监控就是裸奔。从零搭建的监控不需要多复杂但几个核心指标必须有请求量、延迟分布、错误率、预测置信度分布。请求量和错误率用计数器延迟用直方图置信度分布用摘要。这些指标可以用Prometheus客户端库暴露然后Grafana展示。日志方面我习惯用结构化日志每条日志是一个JSON包含时间戳、级别、请求ID、消息、额外字段。这样方便用ELK或者Loki查询。关键日志点包括请求进入、特征处理完成、模型推理完成、响应返回、异常抛出。每个点记录耗时这样能快速定位瓶颈。还有一个容易被忽略的监控点输入数据分布。线上请求的输入分布可能和训练数据不同导致模型表现下降。我通常会定期采样线上输入计算一些统计量和训练数据对比。如果发现偏移就要考虑重新训练或者加规则过滤。5. 常见问题与排查技巧实录5.1 训练损失不下降我该从哪查起训练损失不下降是最常见的问题排查要按顺序来。第一步检查数据标签对不对随机抽样看一批样本人工判断标签是否合理。第二步检查特征处理有没有问题把特征可视化或者打印统计量看是否在合理范围。第三步检查模型结构输出层维度是否匹配类别数激活函数是否合适。第四步检查学习率太大导致震荡太小导致不收敛可以试几个数量级。第五步检查损失函数分类任务用交叉熵时标签要是整数而不是one-hot。我遇到过一次损失一直不降最后发现是数据加载时shuffle没开每个batch都是同一类样本模型学不到东西。还有一次是学习率设成了0.1太大损失直接飞了。这些坑踩过一遍后面就有直觉了。5.2 推理结果和训练结果不一致怎么排查这个问题几乎每个从零搭建的人都会遇到。排查思路是固定一条训练数据分别走训练路径和推理路径比较每一步的中间输出。通常问题出在三个地方特征处理不一致、模型模式不一致、数值精度不一致。特征处理不一致最常见比如训练时用了padding推理时忘了或者训练时用了某个默认参数推理时没传。模型模式不一致是指推理时忘了调eval()dropout和batchnorm还在训练模式。数值精度不一致是指训练用float32推理用float16导致微小差异。排查的时候把中间结果打印出来逐层对比很快就能定位。5.3 服务延迟高有哪些优化方向服务延迟高先定位瓶颈。用日志记录每个阶段的耗时网络接收、特征处理、模型推理、结果返回。如果特征处理慢考虑预计算或者缓存。如果模型推理慢考虑量化、剪枝、或者换更小的模型。如果网络慢考虑压缩响应或者加CDN。我通常先做 profiling用cProfile或者py-spy看热点函数。然后针对性优化。一个常见问题是Python GIL导致多线程推理效率低这时候可以考虑多进程或者用异步IO。另一个常见问题是批处理大小不合适太小浪费计算资源太大增加延迟需要压测找平衡点。5.4 常见问题速查表问题现象可能原因排查方法解决方向训练损失不下降标签错误、学习率不当、特征问题抽样检查标签、试不同学习率、打印特征统计修正标签、调整学习率、修复特征推理结果不一致特征处理不一致、模型模式错误固定样本对比中间输出统一特征入口、调eval模式服务延迟高特征处理慢、模型大、批处理不当分阶段计时、profiling缓存特征、量化模型、调批大小显存溢出批太大、模型太大、梯度累积减小批大小、检查模型参数量梯度累积、混合精度、模型并行指标波动大数据分布变化、随机种子未固定固定种子、监控输入分布重新训练、加数据过滤5.5 几个我踩过的坑和对应技巧第一个坑配置文件用了相对路径换目录运行就找不到文件。后来改成基于项目根目录的绝对路径或者用环境变量指定配置目录。第二个坑日志里打印了完整输入数据导致日志文件暴涨。后来改成只打印摘要和哈希。第三个坑模型保存时只保存了权重忘了保存优化器状态恢复训练时学习率调度乱了。后来养成习惯检查点保存完整状态。还有一个技巧在训练脚本里加一个“干跑”模式用少量数据跑一遍完整流程验证代码没有语法错误和逻辑错误。这个模式在CI里跑每次提交都执行能提前发现很多问题。干跑模式的数据量设为正常量的1%耗时短但覆盖了所有代码路径。6. 从零搭建的扩展方向与个人体会6.1 后续可以怎么扩展最小闭环跑通后可以从几个方向扩展。第一加实验管理用MLflow或者Weights Biases记录每次训练的参数和指标方便对比。第二加自动化调参用Optuna或者Ray Tune搜索超参数。第三加模型解释用SHAP或者LIME分析特征重要性。第四加A/B测试线上同时跑两个模型比较业务指标。第五加数据版本管理用DVC或者LakeFS管理数据变更。这些扩展不需要一次性全上按需选择。我的建议是先把监控和实验管理做好这两个对后续迭代帮助最大。调参和解释可以等模型稳定后再加。A/B测试需要业务配合可以最后考虑。6.2 我个人在实际操作中的体会从零搭建AI工程体系最大的收获不是某个具体技术而是一种掌控感。你知道每个环节在做什么出了问题知道去哪查要改东西知道改哪里。这种掌控感是调包调不出来的。另一个体会是文档和测试比代码重要。从零搭建的项目代码可能就几千行但配置、文档、测试加起来可能上万行。这些“非代码”部分决定了项目能不能持续维护。我现在的习惯是每写一个模块先写接口文档和冒烟测试再写实现。这样思路清晰后面改起来也放心。最后分享一个小技巧定期做“灾难恢复演练”。把模型文件删掉看能不能从原始数据和配置重新训练出来。把服务停掉看能不能按文档重新部署。这个演练能暴露很多隐藏的依赖和缺失的文档。我每季度做一次每次都能发现几个问题修完之后系统就更健壮了。

相关新闻

iOS发布证书与描述文件:从Xcode Archive到App Store上架指南

iOS发布证书与描述文件:从Xcode Archive到App Store上架指南

离预定的上架日期只剩两三天,编译、调试、真机测试全部通过,结果走到 Archived 这一步,Xcode 突然弹出一句 “No signing certificate found”。这种卡在临门一脚的状况,我在开发者社区里见过太多次,自己也踩过一整个下…

2026/10/1 11:38:19 阅读更多 →
Snowflake数据架构实战:从存算分离到虚拟仓库选型

Snowflake数据架构实战:从存算分离到虚拟仓库选型

1. 从传统数仓到云数仓:为什么我会在数据架构方案里押注Snowflake这几年做大数据项目,最深的感受是:数据架构这件事,越来越像一个“选型博弈”。早期我带着团队做网约车大数据综合项目,技术栈基本固定——Hadoop 做底层…

2026/10/1 11:38:19 阅读更多 →
Univer表格内核实战:Canvas渲染与插件架构实现单元格权限控制

Univer表格内核实战:Canvas渲染与插件架构实现单元格权限控制

1. 从“univer”这个标题说起:一个被低估的表格内核第一次看到“univer”这个词,很多人会以为是某个新出的前端框架或者又一个低代码平台。实际上,它是一套开源的表格与文档协作引擎,核心定位是“可嵌入的电子表格 SDK”。你可以把…

2026/10/1 11:38:19 阅读更多 →

最新新闻

电话里让改就改了?结算时这笔钱没人认

电话里让改就改了?结算时这笔钱没人认

一个做市政管网的项目,施工到一半,甲方现场代表打来电话:这段管径改大一号,先做着,手续后面补。项目经理不敢耽搁,当天就调了料、改了做法。半年后结算,这笔材料加人工多花了十几万,…

2026/10/1 15:32:19 阅读更多 →
从零到第一张AI图:Qwen-Image-2.1-viggle-turbo diffusers快速上手完整教程

从零到第一张AI图:Qwen-Image-2.1-viggle-turbo diffusers快速上手完整教程

从零到第一张AI图:Qwen-Image-2.1-viggle-turbo diffusers快速上手完整教程 【免费下载链接】Qwen-Image-2.1-viggle-turbo 项目地址: https://ai.gitcode.com/hf_mirrors/Viggle/Qwen-Image-2.1-viggle-turbo Qwen-Image-2.1-viggle-turbo 是由 Viggle 基于…

2026/10/1 15:32:19 阅读更多 →
书匠策AI的AI PPT功能:你论文写得再好,不会“讲”也是白搭

书匠策AI的AI PPT功能:你论文写得再好,不会“讲”也是白搭

官网:www.shujiangce.com | 微信 公众号 :书匠策AI 公众号搜一搜 书匠策AI,官网 www.shujiangce.com。今天不聊怎么把论文“写”出来,聊一个更被低估的能力:怎么把论文“讲”出来。 论文写完那一刻,你…

2026/10/1 15:32:19 阅读更多 →
选题—大纲—初稿:课程论文的“三段式”里,书匠策AI到底卡在哪一环

选题—大纲—初稿:课程论文的“三段式”里,书匠策AI到底卡在哪一环

官网:www.shujiangce.com | 微信 公众号 :书匠策AI 先把“写论文”这件事拆开看 课程论文和毕业论文最大的区别,不在于篇幅,在于时间感。 毕业论文你有半年到一年去磨,可以慢慢读文献、慢慢想问题、慢慢改。课程…

2026/10/1 15:32:19 阅读更多 →
从自学到职场:普通工程师的成长复盘与避坑指南

从自学到职场:普通工程师的成长复盘与避坑指南

说出来有点不好意思,我的工程师之路其实不是一条标准的“天赋异禀、一路开挂”的路线,而是一条绕了很多弯、踩过不少坑、也靠很多朋友拉了一把才慢慢走下来的普通路线。所以当有人问我“我也想当工程师,该怎么走”的时候,我特别能…

2026/10/1 15:32:19 阅读更多 →
2026年北京小程序/App开发公司选型指南:从技术架构到服务能力全维度解析

2026年北京小程序/App开发公司选型指南:从技术架构到服务能力全维度解析

一、为什么2026年选对开发服务商比以往更关键过去两年,小程序和App开发市场经历了一轮明显的分化。一方面,企业对数字化产品的需求从“有没有”转向“好不好用”;另一方面,AI能力集成、多端适配、高并发架构等要求让开发项目的技术…

2026/10/1 15:31:19 阅读更多 →

日新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →