Java在AI时代还有希望吗?从Spring AI停更看Java的工程化价值

早上在技术群里看到有人转发消息,说Spring AI Alibaba已经停更了,紧接着就有人抛出那句老话:"Java还有希望吗?"说实话,过去一两年里我类似的话听了太多回,从"Python要抢走Java饭碗"到"AI时代只认Python工程师",再到如今"Spring AI Alibaba都停了,Java彻底没戏"。消息本身真假先放一边,这种焦虑的情绪倒是很真实,尤其是对正在学Java、靠Java吃饭的开发者来说,心里不犯嘀咕才奇怪。但这篇文章我想换个角度聊清楚:一个适配层项目停更,到底能不能说明整个技术栈的存亡?Java在AI时代的位置到底是什么?以及我们这些靠Spring全家桶吃饭的人,现在到底该做点什么。

1. 停更传闻背后:先别急着唱衰Java

1.1 一条停更消息为什么会让开发者焦虑

先把这个项目是什么说清楚。Spring AI Alibaba是阿里系开源的一个桥接项目,作用就是把通义千问等大模型能力封装进Spring AI的统一抽象层,让Spring Boot开发者可以用熟悉的编程方式去调用大模型。它天然带着"官方背书"的光环,所以在Java开发者心里分量不轻,一旦传出停更,很多人第一反应是"连阿里都不玩了,Java配不上AI"。

但冷静下来想,一个开源仓库不再活跃,背后可能的原因有很多:项目核心成员转岗了、商业公司战略收缩了、功能已经稳定进入维护模式了,或者是Spring AI官方生态已经把同类能力收编了,第三方适配项目的空间被压缩了。最后这种情况在开源世界里非常常见,原生的统一适配已经足够好,专门的桥接层自然就退居幕后。这恰恰说明生态在成熟,而不是生态在衰亡。

所以,与其盯着某一条停更消息恐慌,不如把问题拆开看:Java能不能做AI应用,用什么做,做到什么程度。这几个问题搞清楚了,心里就有底了。

1.2 开源世界的"停更"不等于"死亡"

再往深一层说,开源项目的"沉默"和"生态的终结"从来不是一回事。一个具体仓库的更新频率,受团队资源、商业节奏影响很大;而一个技术生态的生命力,要看它是否有足够多的替代方案和应用场景。就拿Java来说,光是Spring Boot这几年在云原生、微服务领域的地位,就说明这个生态还没有走下坡路。

而且从时间线看,Java生态面对AI这个大浪潮的反应并不慢:Spring官方在2024年就正式推出了Spring AI项目,一直在迭代;社区里LangChain4j这些JVM实现也在快速跟上。这说明Java世界没有缺席AI,缺的反而是很多开发者对现状的了解和正确的定位。

2. 先认清事实:Java在AI世界里到底处于什么位置

2.1 训练场是Python的天下,应用场却不是

很多焦虑的来源,是把两个完全不同的场景混在了一起。大模型本身的训练、微调、跑实验,确实是Python生态的主场,PyTorch、transformers这些库都在那边,搞算法研究的工程师用Python顺手极了。但这是"造模型"的人的世界,实际上全球靠这个吃饭的人加起来也没想象的那么多。

绝大多数Java开发者平时根本不碰模型训练,我们要做的是"用模型"。怎么用?最成熟的姿势是调用模型服务,把HTTP请求发到推理接口或者本地推理服务,拿回结果。这套东西本质上是服务端开发,恰恰是Java最擅长的事。请求管理、连接池、熔断、限流、重试、序列化、事务协调,这些工程化能力Java生态打磨了二十多年,论可靠程度,说一句"企业级标配"并不夸张。

换句话说,AI应用开发的竞争点,越来越不在"模型本身"而在"模型的工程化落地"。模型是别人的,但把模型接进业务流程的人,很可能是Java工程师。

2.2 企业落地的最后一公里,还是Java的地盘

看一个更具体的场景:一家传统行业公司想给自己的客服系统接入大模型问答能力。它的核心业务流程、客户数据、订单系统大概率跑在Java技术上,数据库连接、权限控制、审计日志、监控告警,全是现有系统的资产。

这时候公司不会把Java系统推倒重来换成Python,更合理的方案是在现有系统里加一个智能问答模块:收到用户问题,检索知识库,调用大模型生成回答,然后记录到审计日志。这个模块的骨架,就是用Spring Boot搭起来的。谁最熟这个骨架?当然是Java工程师。

AI要落地,最终一定要长在业务系统上,而业务系统的主力依然是Java。这就是我说"最后一公里是Java底盘"的原因。模型推理跑多快,那是算力的事;能不能稳定地嵌进现有业务流程,那是工程的事。这两件事,后面那件往往是决定项目成败的关键。

3. 盘点当前Java系的AI技术栈:到底有哪些能打的

3.1 Spring AI官方项目仍是第一选择

先说Spring AI本身。它是Spring官方在2024年发起的顶层项目,目标就是给Spring生态提供一套统一的AI应用开发抽象,类似当年Spring Boot简化Web开发一样,让人用相对标准的方式去对接大模型、做RAG、做Agent。

Spring AI这几年的迭代节奏一直没停下来,功能从最早的"一个ChatModel接口调大模型",一路扩展到了Prompt模板管理、输出解析、向量存储抽象、检索增强、对话记忆、函数调用、流式响应、可观测性这些硬核能力。换句话说,它已经从"玩具阶段"进化到了"生产可用阶段"。就算某个第三方适配项目不再更新,Spring AI官方依然支持通过标准接口对接各种主流模型商,也支持自定义接入。

对Java开发者来说,Spring AI最大的价值在于:你不需要学一套全新的技术,还是那一套依赖注入、配置管理、REST风格的玩法。学习曲线很平滑,这是它能成为Java AI应用开发首选框架的重要原因。

3.2 LangChain4j:JVM上的另一条路径

如果说Spring AI走的是"Spring官方路线",那LangChain4j走的就是"社区路线"。这个项目的目标是在JVM上复刻LangChain的能力模型,支持对话记忆、文档切分、向量检索、Agent等。它不绑定Spring,用起来更灵活,也可以跟Spring Boot集成。

LangChain4j的模块划分很像Java社区的作风:核心模块、模型提供方模块、嵌入模型模块、向量库模块,各自独立,按需引入。这样做的好处是依赖可控,坏处是版本兼容性需要自己留心。我的建议是,如果项目本身对Spring体系依赖不深,或者希望用更接近LangChain的编程模型,LangChain4j值得一试;如果项目就是标准的Spring Boot全家桶,那Spring AI的集成体验更顺滑。

3.3 JVM侧还有很多被低估的AI基础设施

除了上面两个框架,JVM生态里还有一批实用的AI基础设施,普通开发者不太关注,但生产项目里很常用:

  • DJL,可以理解成Java版的深度学习推理库,训练体验不如Python,但部署Java服务的场景里,直接用它跑ONNX格式的模型做推理,省掉独立推理服务的运维成本。
  • ONNX Runtime,很多传统企业做图像分类、文本分类时,会把PyTorch模型转成ONNX,再用Java调用,这条路非常成熟。
  • 向量检索能力,Java生态里不缺,Redis、PostgreSQL的向量插件、Elasticsearch的向量检索都能胜任,Spring AI已经抽象了VectorStore接口,换起来不麻烦。
  • 本地模型部署,像Ollama这类工具解决了"本地跑一个开源模型"的需求,它对外提供HTTP接口,Java这边用RestClient或者OpenAI兼容客户端就能接,模型是Python训练的没关系,Java调用的是接口。

把这些东西串起来看,Java侧的AI技术栈其实是完整的:接入层有Spring AI、LangChain4j,推理层有DJL和ONNX Runtime,存储和检索层有各种向量库,应用层还是我们熟悉的Spring Boot。缺的不是工具,而是对工具的认知。

4. 实操:用Spring Boot快速接一个RAG问答能力

4.1 环境准备与依赖引入:先把最短链路跑通

理论聊多了容易飘,落地才是硬道理。我以一个真实改造过的模拟项目X为例,演示如何在现有Spring Boot服务里快速加上一个基于RAG的问答接口。这个方案不是为了炫技,而是追求最短路径,让读者可以照着做。

假设场景:某内部运维知识库散落着一堆文档,你想让员工通过自然语言提问,自动从文档里找答案。第一步,在pom.xml里引入Spring AI的模型依赖。我本地环境用的是Ollama部署的开源模型,它对外提供OpenAI兼容接口,所以引入OpenAI starter就行。

<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-openai</artifactId> </dependency>

然后在application.yml里做最小配置,把模型的base-url指到本地推理服务:

spring: ai: openai: base-url: http://localhost:11434/v1 api-key: ollama chat: options: model: qwen2.5:7b

这里有个细节我必须说一下:很多同学一看"OpenAI starter"就觉得必须用OpenAI的官方服务。实际上这个starter接的是OpenAI兼容协议,只要推理服务提供的是兼容接口,都可以对接。我用Ollama本地部署就是为了验证这种方式在生产内网环境的可行性,实测下来很稳。配置好后,注入ChatModel就能发起第一次对话了。

4.2 一个最简的RAG链路:检索加生成

RAG的核心思想很简单,不过度神话它:用户提问前,先把知识库文档切成小块转成向量,存进向量库;提问时把问题向量化,找出最相关的几块文档;最后把文档内容和问题一起交给模型,让模型基于资料作答。

在Spring AI里,配置向量存储和文档加载的代码并不复杂。我把模拟项目X里的核心链路简化成如下逻辑:

@Component public class SimpleRetriever { private final ChatModel chatModel; private final VectorStore vectorStore; public SimpleRetriever(ChatModel chatModel, VectorStore vectorStore) { this.chatModel = chatModel; this.vectorStore = vectorStore; } public String ask(String question) { // 1. 从向量库召回最相关的3个文档片段 List<Document> docs = vectorStore.similaritySearch(question, 3); String context = docs.stream() .map(Document::getText) .collect(Collectors.joining("\n---分割线---\n")); // 2. 把上下文和问题组装成提示词 String prompt = """ 你是一名运维知识助手,请只依据以下资料回答用户问题。 若资料中没有相关信息,请明确说“当前资料中未找到”。 资料: %s 问题: %s """.formatted(context, question); return chatModel.call(prompt); } }

代码量不多,但这就是一个能跑的RAG闭环。在实际的模拟项目X里,我提前用文档读取器加载了一批运维手册,切分成512 token的小块,批量写入向量库;然后写了个REST接口,把上面的ask方法暴露出去。整个改造花了大概半天时间,其中最耗时的是文档切分粒度的调整,而不是框架本身的接入。

4.3 生产化小改造:流式输出与对话记忆

能跑和能上线之间隔着一层工程化。模拟项目X上线前我发现两个明显问题:第一,大模型生成速度慢,前端等一个完整回答体验很差,需要流式输出;第二,用户追问时需要结合上文,否则每次问答都是独立的,显得很傻。

流式输出在Spring AI里用StreamingChatModel接口,配合SSE协议下发,前端可以像Chat应用一样打字机效果:

@PostMapping(value = "/ask-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<String> askStream(@RequestBody String question) { return streamingChatModel.stream(prompt); }

对话记忆我用Spring AI提供的ChatMemory机制,在Advisor层维护最近几轮对话的上下文。它的思路很像Spring里的过滤器或AOP,请求进入模型前先拼接历史消息,响应返回后把新内容写入记忆。这样做的好处是业务代码不用到处传历史消息,记忆逻辑被集中管理了。上线后整个链路稳定跑了一个月,效果满意。

5. 容易翻车的细节与常见误区

5.1 实操中的几个翻车点

这一节必须写,因为实现一个Demo和让它稳定运行是两个世界。我把自己和同行在类似项目里踩过的坑整理出来,照着排查能省很多时间。

第一个坑是上下文长度爆炸。对话记忆如果无限累加历史消息,很快顶到模型的上下文窗口上限。解决办法是设定轮次上限,或者用Token长度裁剪,只保留最近N轮。模拟项目X我设定的是保留最近6轮对话,超过就丢弃更早的消息,实测效果和资源占用都能接受。

第二个坑是向量库的选型和索引参数。很多人直接用内存实现,上线后重启就丢数据,这在开发环境无所谓,生产环境必须换持久化方案。另外向量检索的相似度阈值一定要测,阈值设太高召回太少,答案经常是"未找到";阈值设太低垃圾内容混进来,回答质量直线下降。我一般会拿标准测试集跑几轮,把召回率和精确率的平衡点摸出来。

第三个坑是模型调用的超时和重试控制。本地推理服务偶发超时很常见,外部模型API更是可能限流。业务接口不能因为模型超时就把整个服务拖死,必须在调用层加超时和降级。Spring AI本身有重试机制,但我习惯在更上层再包一层RestClient的超时配置,双保险。

第四个坑是流式输出的连接管理。SSE连接在企业网关后面容易被断开,客户端需要做心跳或者自动重连。有一次模拟项目X的上线演练中,测试反馈回答到一半界面就卡住,排查后发现是网关空闲超时。这个问题不大,但排查起来费时间,提前在架构评审里提出来更省事。

第五个坑是文档切分的边界处理。直接按固定字符数切文档,会把一个完整段落拦腰切断,检索时召回的内容语义不完整。最好用基于段落或者语义边界的切分器,至少保证切出来的每块内容相对完整。这个对问答质量的提升非常明显。

5.2 三个常见误区,该纠正就纠正

误区一:"AI应用开发就是写提示词。"提示词是入口,但工程化才是主体。提示词之外,你得搞定文档管理、数据清洗、权限控制、审计合规、模型降级、成本监控。否则就是拿一个Demo当生产系统,迟早出问题。

误区二:"既然做AI,就该把老系统推翻重写。"事实上多数AI能力的落地方式是增量式的,像中间件一样嵌进现有服务,老逻辑不用动。Spring AI的模块化设计就是为了支持这种渐进式改造。

误区三:"Java工程师应该去学Python,否则就淘汰了。"这想法不太符合实际。企业里Python工程师通常负责模型实验和数据探索,而Java工程师负责把模型变成产品功能。两条赛道都需要人,关键看你想站哪边。我见过不少Java工程师靠出色的工程能力,把AI功能稳定落地,反而比只会调参的人更吃香。

还有一个偏见要说一下:"Spring AI就是套壳,没有技术含量。"套壳也分层次,漂亮话谁都会说,真让你把一次大模型调用做得有熔断、有审计、有流量控制、有成本计量,难的不是调用那一行代码,而是围绕这行代码的整套治理框架。Spring AI的价值恰恰在这里,它把这些工程要素沉淀成可复用的框架能力。

6. 结合个人经验,给Java开发者的三点建议

6.1 别追新概念,先把一条链路做穿

面对铺天盖地的AI术语,我建议新手别一上来就铺开学。最好的办法是像我上面的实操那样,先用一个最小RAG链路跑通,然后逐个环节深挖:向量检索的召回排序怎么调优、提示词怎么根据业务沉淀、流式输出怎么做异常恢复。别怕链路小,跑穿一条线,你对整个AI应用开发的理解会比单纯看十篇文章都深刻。

6.2 让AI能力成为一个模块,而不是一个项目

我最近看很多团队的失败案例,问题出在把AI当作"一个独立的智能项目"来做,和核心业务各玩各的。反过来说,成熟的做法是把AI当作一个可嵌入的模块或中间层,它可以被多个业务模块复用。模拟项目X就是这么做的:先把文档加载、向量检索、对话记忆这些能力封装成内部服务,再逐步接入到客服工单、知识问答、报表解释等多个场景。一次建设,多处复用,ROI才会高。

6.3 保持对模型变化的敏感度,但别被模型牵着走

大模型圈子迭代非常快,今天这个模型跑分高,明天那个模型又出来了,如果你的应用架构跟着模型走,会疲于奔命。正确的姿势是像Spring AI这样,把模型抽象成一个可替换组件,具体用哪个模型,通过配置切换。我个人的体会是,对企业应用来说,稳定的抽象层、优雅的降级策略、可控的成本,比"最新最强模型"重要得多。

Java开发者的未来从来不是被某个框架的一篇停更公告决定的,决定它的是你在工程化道路上积累了多深的功底。只要企业软件还是Java的底盘,只要AI还要落到业务流程里,Java就有持续的空间。与其焦虑,不如打开IDE,把第一个大模型接口跑起来,这种手感比任何热搜都管用。

相关新闻

AI日报深度:推理模型、量化部署与可解释性工程实践

AI日报深度:推理模型、量化部署与可解释性工程实践

今天是2026年10月7日。这一天的AI信息流非常满&#xff0c;有人讨论刚发布的推理模型&#xff0c;有人尝试开源量化工具&#xff0c;还有人围绕可解释性领域的几篇预印本争论技术路线。作为一个每天刷消息、写日报、并且尽量把每条重要动态都手动验证一遍的人&#xff0c;我来聊…

2026/10/20 10:14:57 阅读更多 →
FlinkCDC对接达梦数据库实时同步实战指南

FlinkCDC对接达梦数据库实时同步实战指南

简介&#xff1a;本资源是一套面向大数据开发工程师与实时数仓建设者的FlinkCDC达梦数据库日志级实时同步实践方案&#xff0c;聚焦国产数据库场景下的低延迟、高可靠数据捕获需求&#xff0c;适用于政务、金融等对数据安全与自主可控要求较高的业务系统构建。压缩包共5个文件&…

2026/10/20 10:14:57 阅读更多 →
转向角控制律从PI到PD的工程实践与标定要点

转向角控制律从PI到PD的工程实践与标定要点

这段时间在调一套线控转向执行器的角度闭环&#xff0c;遇到了一个很有意思的改动&#xff1a;控制律从 PI 换成了 PD。改动本身不大&#xff0c;但背后的取舍拉扯了一整轮标定。起初用 PI 的时候&#xff0c;低速库内回正总出现“过了零点又弹回来”的震荡&#xff0c;用手一摸…

2026/10/20 10:13:56 阅读更多 →

最新新闻

TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

前段时间重新整理之前的深度学习实验笔记&#xff0c;翻到鞋类识别&#xff08;Fashion MNIST&#xff09;这个项目时&#xff0c;觉得特别值得拿出来单独写一篇。原因很简单&#xff1a;很多人入门深度学习时&#xff0c;都会被建议先跑通手写数字识别&#xff08;MNIST&#…

2026/10/20 20:57:37 阅读更多 →
用AI辅助Kamailio路由排错:一场人机讨论实录与故障切换实践

用AI辅助Kamailio路由排错:一场人机讨论实录与故障切换实践

最近接手一套老的SIP通信平台&#xff0c;核心信令是Kamailio撑着。业务要新增一个较复杂的路由策略&#xff1a;同一个主叫号码&#xff0c;在不同时间段、针对不同被叫前缀&#xff0c;要分别走不同的网关&#xff1b;而其中一路网关做故障切换时&#xff0c;还要保证已经建立…

2026/10/20 20:57:37 阅读更多 →
LibVLC轻量级视频播放模块:嵌入C/C++工程的硬件解码方案

LibVLC轻量级视频播放模块:嵌入C/C++工程的硬件解码方案

简介&#xff1a;本资源是一份基于C/C与VLC开源库开发Windows视频播放器的完整工程实践包&#xff0c;面向具备基础C编程能力、希望掌握多媒体开发技能的中级开发者及高校课程设计学习者。资源聚焦于在Visual Studio 2022环境下集成libvlc实现视频加载、播放控制、窗口渲染等核…

2026/10/20 20:57:37 阅读更多 →
AI Agent创业团队如何配置一支高效的Harness Engineering团队

AI Agent创业团队如何配置一支高效的Harness Engineering团队

1. 为什么需要一支专门的Harness Engineering团队先从一个很现实的场景说起&#xff1a;你所在的创业团队花三个月做出了一个基于大模型的Agent产品Demo&#xff0c;演示给投资人看时效果炸裂&#xff0c;但真正进入客户试用阶段&#xff0c;问题接踵而来——模型给出正确意图却…

2026/10/20 20:57:37 阅读更多 →
视觉语言模型与RGB-D感知融合:三条进化主线与工程实践

视觉语言模型与RGB-D感知融合:三条进化主线与工程实践

1. 从 Transformer 到多模态感知的演进逻辑视觉语言模型和 RGB-D 感知这两个方向&#xff0c;过去几年基本是各走各的路。做 VLM 的人盯着图文对齐、指令跟随、视觉问答这些任务&#xff0c;做 RGB-D 的人则埋头于点云配准、深度补全、SLAM 建图。但最近一年&#xff0c;这两条…

2026/10/20 20:57:37 阅读更多 →
VTI介质地震波数值模拟:MATLAB实现与各向异性正演避坑指南

VTI介质地震波数值模拟:MATLAB实现与各向异性正演避坑指南

简介&#xff1a;这份资源面向地震勘探与地球物理方向的学习者和研究者&#xff0c;提供一套基于Matlab的VTI介质地震波场数值模拟程序&#xff0c;用于分析各向异性介质中地震波的传播规律。VTI介质在垂直与平行层理方向上纵波速度存在差异&#xff0c;是实际地壳中常见的各向…

2026/10/20 20:56:32 阅读更多 →

日新闻

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/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

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

如果你的信息流最近也天天刷到“机器人大脑”这个词&#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 阅读更多 →