Java AI Agent生态全景 —— Spring AI vs LangGraph4j vs LangChain4j

引子:一个后端团队的框架选型困局

你所在的Java后端团队接到一个需求:给现有的Spring Boot微服务集群加一个“智能运维助手”——它能查询服务健康状态、分析异常日志、执行简单的运维操作(重启服务、扩容、回滚部署),并且需要支持多步骤的运维工作流,比如“检测到服务异常→拉取日志→分析根因→如果确定是内存泄漏则重启→否则通知值班工程师”。

你打开技术选型文档,发现Java生态中至少有九个AI框架、三个协议标准在2026年同时活跃。Spring AI、LangChain4j、LangGraph4j——名字看起来都差不多,但团队里没人说得清楚它们的区别。

一个成员说:“Spring AI是Spring官方的,肯定选它。”

另一个成员反驳:“LangChain4j生态更全,支持30+模型。”

第三个成员问:“那LangGraph4j是什么?它跟前面两个是竞争关系吗?”

这场争论的核心问题,在本文里会有一个清晰的答案。Java AI Agent生态的混乱,根源在于把不同层次的框架放在了同一个选择维度上。一旦你理解了它们各自占据的“栈层”位置,选型就不再是“选哪个”,而是“怎么组合”。

一、三层栈:Java AI Agent框架的定位地图

当前Java AI Agent框架的混乱,可以用一个三层栈来澄清。JamJet团队在一篇系统性分析中指出,大多数关于JVM AI框架的困惑来自“混淆了三个不同的层”。

第一层:模型抽象层——解决“怎么调用大模型”

这一层解决的问题最基础:让你的业务代码不绑定任何一家模型供应商。你写一段代码调用ChatClient,底层可以是OpenAI、Anthropic、通义千问、DeepSeek,切换模型只需要改配置。

这一层是JVM生态最成熟的层。Spring AI和LangChain4j都支持20+模型供应商的统一API。如果你只需要从Java调用Claude、GPT-4或Gemini并处理响应,Spring AI或LangChain4j可以让你在几分钟内跑通。

Java视角:这一层本质上是一个适配器模式——和JDBC屏蔽不同数据库差异、SLF4J屏蔽不同日志框架差异的设计思路完全一致。

第二层:Agent编排层——解决“怎么协调多步骤、多Agent的工作流”

这一层解决的问题比模型抽象复杂得多:规划、工具使用、反馈循环、状态管理、持久化检查点。

LangGraph4j在这一层的地位最关键。它引入了循环图(cyclical graphs)和持久化检查点——这两个能力是Agent工作流区别于普通链式调用的核心。没有循环,Agent无法“执行→观察→修正”;没有检查点,长任务中断后无法恢复。

LangChain4j的langchain4j-agentic模块也提供Agent编排能力,通过@Agent注解和Supervisor-Worker模式支持多Agent协作。但LangGraph4j在这一层做得更深——它把Agent工作流建模为状态图,节点是计算单元,边是路由逻辑,状态是贯穿全图的共享内存。

Java视角:这一层本质上是一个工作流引擎——和Camunda/Activiti的建模思路同构。节点≈Service Task,边≈Sequence Flow,状态≈Process Variable。区别在于,路由决策是模型实时做出的,而非预定义规则。

第三层:生产运行时层——解决“怎么让Agent在生产环境可靠运行”

这一层解决的问题最容易被忽视:崩溃恢复、审计追踪、事件溯源状态、可观测性。

JamJet团队指出,JVM AI生态目前最大的缺口正是在这一层。已有的框架在模型抽象和Agent编排上做得不错,但“让它跑起来”和“让它可靠地跑起来”之间有巨大的鸿沟。

这一层的典型需求包括:Agent在执行第30步时崩溃,重启后能否从第29步的检查点恢复?Agent修改了生产环境的配置,有没有完整的审计日志?Agent的Token消耗和延迟,有没有可观测的指标?

Spring AI 1.1在这一层开始布局。它通过Micrometer提供了可观测性集成,通过ChatMemory的持久化存储支持状态恢复。LangChain4j 1.10新增了Agentic observability and monitoring支持。但整体而言,这一层仍是JVM生态最薄弱的部分——大多数框架的“生产就绪”还停留在文档层面。

二、三个框架的定位差异:一张表看清本质

理解了三层栈之后,三个框架的定位就非常清晰了:

维度Spring AILangChain4jLangGraph4j
核心定位Spring生态的AI工程框架JVM上的LLM应用开发工具箱有状态多Agent编排引擎
优化方向Spring生态集成、自动配置广度与灵活性状态图、循环、检查点
核心优势20+模型供应商、MCP原生支持庞大的供应商生态、RAG、工具调用循环图、反馈回路、持久化检查点
权衡复杂Agent工作流支持较弱比Spring多样板代码较新,受Python LangGraph启发
当前版本1.1.0 GA(2025年11月)1.11.0(2026年2月)1.8.1

Spring AI的定位是“Spring生态里的AI工程框架”——它不是要发明新奇的AI玩法,而是把AI能力“Spring化”,让习惯了Spring Boot的开发者以最低学习成本把大模型接进现有微服务。它的核心优势是自动配置、依赖注入和MCP原生集成。Spring AI 1.1被称为“MCP集成是Spring AI 1.1最重要的功能集改进”,提供了完整的Spring Boot自动配置和基于注解的编程模型(@McpTool、@McpResource、@McpPrompt)。

LangChain4j的定位是“JVM上的LLM应用开发工具箱”。它提供AiServices、ChatModel、EmbeddingStore、ContentRetriever、Memory、Tool等能力,开发者可以较快组合出RAG、智能体、工具调用和对话应用。它的核心优势是集成广度——支持30+模型供应商、覆盖最广的向量库。通过@Tool注解,任何Java方法可以被自动转换为工具供LLM调用。

LangGraph4j的定位是“有状态多Agent编排引擎”。它框架无关——可以与LangChain4j或Spring AI任意搭配使用,专注于“图”本身的编排能力。它的核心抽象是StateGraph:用户定义State对象,添加节点和边,编译后执行。LangGraph4j的核心价值在于循环和检查点——这两个能力让它能够表达“执行→观察→修正→再执行”的Agent循环,以及“中断后从检查点恢复”的长任务能力。

Java视角:三个框架的关系不是竞争,而是分层协作。Spring AI和LangChain4j解决“怎么调用模型”(第一层),LangGraph4j解决“怎么编排Agent”(第二层)。你可以在Spring Boot应用中用Spring AI的ChatClient调用模型,用LangChain4j的@Tool定义工具,用LangGraph4j的StateGraph编排多Agent工作流。这不是“选一个”的问题,而是“各司其职”的问题。

三、实战:一个多Agent招聘工作流

理论讲完了,用一个真实的项目案例来展示三个框架如何协作。这个案例来自DEV Community上的一篇实战文章,作者用Spring Boot + LangChain4j + LangGraph4j构建了一个多Agent招聘工作流。

工作流设计

招聘场景的需求很明确:一份候选人简历进来,需要从技能匹配、经验匹配、文化契合度、风险信号四个维度独立评分,然后汇总评分做出路由决策(自动通过、自动拒绝、或转人工审核)。

这个工作流需要的三样东西,普通的链式LLM调用给不了:并行运行的独立Agent、等待人类介入并在之后恢复的中断点、每一步的持久化记录。这正是作者选择LangGraph4j的StateGraph而非简单串联LangChain4j调用的原因。

图的拓扑结构

parseResumeNode从原始简历文本中提取结构化数据。如果解析失败,直接短路到人工审核——不需要对四个评分Agent空转。否则,图扇出(fan out)到四个独立的Agent,每个Agent从不同维度评估候选人。aggregateScoresNode用加权公式汇总四个评分,任何不是“干净地自动通过或自动拒绝”的结果都落入humanReview中断。人工可以批准、拒绝或要求定向重新分析,重新分析会循环回到审核阶段,直到做出最终决定。

LangChain4j的AiServices:每个Agent就是一个Java接口

这个案例中最优雅的部分是Agent的定义。每个评分Agent就是一个纯Java接口——没有客户端样板代码,没有手动JSON解析。

publicinterfaceSkillsAgent{@UserMessage(""" Candidate ID: {{candidateId}} Job Requisition ID: {{requisitionId}} Use the available tools to fetch the job requisition and the candidate. Assess how well the candidate's skills match the requisition's required skills. Score 0-100. Flag any required skill that's missing. Recommend ADVANCE, CAP, or REJECT. """)AgentScoreResultanalyzeSkills(@V("candidateId")longcandidateId,@V("requisitionId")longrequisitionId);}

AgentScoreResult是一个普通的Java record——包含score、flags、recommendation三个字段。LangChain4j自动处理了“让模型填充这个record并解析回Java对象”的所有细节。工具的接入同样低摩擦:AiServices.builder(SkillsAgent.class).chatModel(...).tools(jobRequisitionTool, ...)。

Java视角:LangChain4j的AiServices本质上是一个动态代理——你定义一个接口,框架在运行时生成实现类,把方法调用转换为LLM请求,把响应解析回Java对象。这和MyBatis的Mapper接口设计思路完全一致:你定义接口,框架处理SQL和对象映射的细节。

LangGraph4j的StateGraph:把工作流画成图

LangGraph4j的核心抽象是StateGraph。构建图的过程分三步:定义状态、添加节点和边、编译。

// 1. 定义状态publicclassHiringStateextendsAgentState{publicstaticfinalStringMESSAGES_KEY="messages";// ... 其他字段}// 2. 构建图vargraph=newStateGraph<>(HiringState.SCHEMA,HiringState::new).addNode("parseResume",parseResumeNode).addNode("skillsAgent",skillsAgentNode).addNode("experienceAgent",experienceAgentNode)// ... 其他节点.addEdge("parseResume","skillsAgent")// 扇出到四个并行Agent.addEdge("parseResume","experienceAgent").addConditionalEdges("aggregateScores",routingFunction)// ....compile();

这个案例使用了Postgres checkpointer来持久化状态。这意味着如果工作流在人工审核阶段中断(等待审批),服务重启后可以从检查点恢复,不需要重新执行前面的Agent。

Java视角:LangGraph4j的StateGraph和Java的**CompletableFuture编排**有结构上的相似性。addEdge相当于thenApply/thenCompose,addConditionalEdges相当于thenCompose中的条件分支,checkpointer相当于把中间状态持久化到数据库。区别在于,LangGraph4j的图是可序列化和可恢复的,而CompletableFuture的编排状态在JVM内存中。

四、选型决策:你该从哪个框架开始

理解了三个框架的定位和协作方式之后,选型决策可以归结为三个问题:

✅ 是

❌ 否

🔁 需要

➖ 不需要

📗 低

📕 高

① 项目是 Spring Boot?

② 是否需要循环、
中断恢复长任务?

③ 团队可接受的
学习成本?

🌱 起点:Spring AI

🧠 起点:LangChain4j

🔗 引入 LangGraph4j
编排层

🧩 只用单层模型抽象框架
无需 LangGraph4j

✅ 优先 Spring AI
+ 简单 Advisor 链

🚀 Spring AI + LangChain4j
+ LangGraph4j 完整组合

问题一:你的项目是不是Spring Boot?

是→ Spring AI是你的自然起点。它的自动配置、依赖注入和MCP原生支持,让你可以用最少的代码把AI能力融入现有Spring应用。Spring AI 1.1的MCP集成让“把Spring Boot服务暴露为Agent可调用的工具”变得几乎零成本。

不是→ LangChain4j是更轻量的选择。它没有Spring的框架绑定,可以在任何Java应用中使用。如果你在做Quarkus、Vert.x或纯Java SE项目,LangChain4j的AiServices和@Tool注解提供了同样流畅的开发体验。

问题二:你的Agent工作流需要循环和中断恢复吗?

需要→ LangGraph4j是当前Java生态中唯一提供完整循环图+持久化检查点的框架。如果你的工作流包含“执行→验证→修正”的循环,或者需要在人工审核处中断并在之后恢复,LangGraph4j的StateGraph是必要的。

不需要→ 如果工作流是线性的(A→B→C→D),Spring AI的Advisor链或LangChain4j的AiServices串联就足够了。不需要引入LangGraph4j的额外复杂度。

问题三:你的团队愿意接受多少新概念?

少→ Spring AI的学习曲线最平缓。ChatClient.prompt().user(...).call().content()的API风格和RestTemplate或JdbcTemplate一脉相承。

多→ LangGraph4j需要你理解“状态图”“节点”“边”“检查点”等新概念。但如果你的团队有工作流引擎(Camunda/Activiti)的使用经验,这些概念可以几乎无摩擦地映射。

推荐组合

对于大多数Java后端团队,推荐的起点是:

Spring AI + LangGraph4j。用Spring AI的ChatClient处理模型调用和工具定义(@McpTool),用LangGraph4j的StateGraph编排多步骤Agent工作流。两者可以无缝协作——LangGraph4j的节点实现中可以注入Spring AI的ChatClient。

如果需要更丰富的RAG和工具调用能力,可以在Spring AI的基础上叠加LangChain4j。LangChain4j的@Tool注解和EmbeddingStore抽象可以与Spring AI的ChatClient共存于同一个Spring Boot应用中。

五、Java AI Agent的运行时缺口

在结束本文之前,有必要坦诚地指出当前Java生态的一个关键缺口。

JamJet团队的分析一针见血:JVM AI生态已经有了框架,但还缺少“Spring时刻”——就像Spring在2003年不仅给Java开发者提供了框架,还给他们提供了一种构建“能在生产环境中真正工作”的企业应用的方式。

当前的缺口具体体现在三个方面。崩溃恢复:Agent执行到第30步时JVM崩溃,重启后能从检查点恢复吗?LangGraph4j提供了检查点机制,但需要开发者手动配置持久化存储(如Postgres checkpointer),框架层没有提供开箱即用的运行时恢复。审计追踪:Agent修改了生产环境的配置,有没有完整的操作日志?当前大多数框架的日志停留在“LLM请求/响应”级别,缺少“Agent决策链”级别的审计。事件溯源状态:Agent的状态变更是否可以像事件溯源一样被完整记录和重放?这对于合规和调试场景至关重要。

Java视角:这个缺口正是Java工程师的机会所在。你在分布式系统中积累的可观测性、熔断降级、事务补偿、审计日志的经验,在Agent运行时层几乎可以一一映射。Agent的Token消耗监控≈JVM的GC监控,Agent的检查点恢复≈数据库的事务回滚,Agent的决策链审计≈分布式追踪的Span记录。Java工程师不是AI领域的“后来者”——在生产可靠性这个维度上,他们比Python生态更有经验。

小结:Java AI Agent生态的三个关键判断

第一,三个框架不是竞争关系,而是分层协作。Spring AI和LangChain4j占据模型抽象层(第一层),LangGraph4j占据Agent编排层(第二层),生产运行时层(第三层)仍是整个JVM生态的共同缺口。选型的正确问法不是“选哪个”,而是“我需要哪几层的组合”。

第二,LangGraph4j的“循环+检查点”是Java Agent从Demo走向生产的关键能力。没有循环,Agent无法自我纠错;没有检查点,长任务中断后无法恢复。这两个能力让LangGraph4j成为多Agent工作流的必要组件,而非可选项。

第三,Java工程师在Agent运行时层的优势被低估了。当前AI Agent的热度集中在模型能力和编排范式上,但生产级Agent的瓶颈不是模型智力,而是工程可靠性。织灵Coda Loom在智能制造和能源领域的落地数据(研发效率提升75%、缺陷率降低50%、交付周期缩短60%)验证了这个判断。Java工程师在分布式系统、可观测性、事务管理方面积累的经验,是Agent运行时层建设中最稀缺的能力。

下一篇进入2.2 Java程序员的Agent工程进阶路线,从TRAE辅助编码到LangGraph4j自定义工作流,给出一个分阶段的、可操作的学习路径,以及每个阶段应该掌握的具体技能和实战项目。


🍃 系列专栏导航

  • 🔖 专栏导航 大模型学习

其他专栏衔接

  • 🔖 《若依框架全攻略:从入门到项目实战》
  • 🔖 《深入浅出Mybatis》
  • 🔖 全面掌握MySQL工具
  • 🔖 《深入浅出Maven》
  • 🔖 《深入浅出Kafka》
  • 🔖 《全面掌握Swagger:从入门到实战》
  • 🔖 《Lombok:高效Java开发的秘密武器(完全解读)》
  • 🍃 博客概览:《程序员技术成长导航,专栏汇总》

建议按系列顺序阅读,从基础到进阶逐步掌握核心能力,避免遗漏关键知识点~

全景导航博文系列

  • 🔖《一口气学完fastJson》
  • 🔖《一文搞懂PageHelper》
  • 🔖《一文搞懂MyBatis》

相关新闻

DevEco Studio Debug调试(一)

DevEco Studio Debug调试(一)

一、设置断点调试过程中可以添加断点&#xff1a;断点设置很简单&#xff1a;在代码行号左侧点击即可添加断点设置断点后&#xff0c;调试能够在正确的断点处中断&#xff0c;并高亮显示该行二、启动调试步骤一&#xff1a;选择调试设备在设备选择框中&#xff0c;选择调试的设…

2026/10/20 2:21:27 阅读更多 →
交叉熵损失函数到底在惩罚什么:3个NumPy实验实战讲透,ML数学基础第4期

交叉熵损失函数到底在惩罚什么:3个NumPy实验实战讲透,ML数学基础第4期

上一期我们手算了 softmax&#xff1a;把一堆分数变成概率&#xff0c;加起来等于 1。概率有了&#xff0c;新的问题来了&#xff1a;训练的时候&#xff0c;怎么判断模型"猜得好不好"&#xff1f;光看答对没答对太粗糙。90% 把握答对&#xff0c;和 51% 把握蒙对&am…

2026/10/20 2:21:27 阅读更多 →
「记忆越少反而越聪明」:Hy-Memory 的反直觉设计为什么被全网热议

「记忆越少反而越聪明」:Hy-Memory 的反直觉设计为什么被全网热议

「记忆越少反而越聪明」&#xff1a;Hy-Memory 的反直觉设计为什么被全网热议 【免费下载链接】Hy-Memory 项目地址: https://gitcode.com/gh_mirrors/hy/Hy-Memory 2026 年 10 月 16 日&#xff0c;腾讯混元将 Hy Memory 2.0 整体开源&#xff1a;hy-memory SDK&#…

2026/10/20 2:21:27 阅读更多 →

最新新闻

从URL取参到Cookie操作:前端开发完整指南与踩坑记录

从URL取参到Cookie操作:前端开发完整指南与踩坑记录

老读者可能还记得&#xff0c;我之前在某公司的运营后台系统里做过一次页面重构&#xff0c;其中有个特别不起眼但又绕不开的需求&#xff1a;从前端拿 URL 上携带的参数&#xff0c;顺手把一些状态写进 Cookie。听起来简单&#xff0c;真正动手的时候才发现&#xff0c;这里面…

2026/10/20 2:54:46 阅读更多 →
不复杂的复杂度:Java开发者必备的大O分析指南

不复杂的复杂度:Java开发者必备的大O分析指南

第八篇了。前面我们用了几篇的篇幅&#xff0c;把Java的语法、面向对象、集合框架、I/O、异常这些基础内容过了一遍。今天想插一个看起来不太一样、但实际非常重要的主题——复杂度分析。为什么在这个节点讲它&#xff1f;因为我发现很多人在前面那些内容学完之后&#xff0c;开…

2026/10/20 2:54:46 阅读更多 →
需求分级与优先级管理:产研团队高效协作的落地指南

需求分级与优先级管理:产研团队高效协作的落地指南

周五下午三点&#xff0c;我正在跟团队过下一迭代的排期。会议室的门被推开&#xff0c;某业务线负责人带着一份PPT走进来&#xff0c;说有一位大客户急需一个定制功能&#xff0c;客户已经在催&#xff0c;下周要看到演示&#xff0c;否则可能影响续约。会议室安静了几秒&…

2026/10/20 2:54:46 阅读更多 →
降AI率工具实测:九类工具原理、风险与一套可复用工作流

降AI率工具实测:九类工具原理、风险与一套可复用工作流

开头部分可以这么写&#xff1a;最近不少本科生来找我看论文初稿&#xff0c;十份里有八份开头都是“随着社会的不断发展”&#xff0c;第二段必是“综上所述”。一问才知道&#xff0c;都是让AI先写一版&#xff0c;自己再改&#xff0c;改完一检测&#xff0c;“AI率”飙到百…

2026/10/20 2:54:46 阅读更多 →
Llama 2 提示词完全指南:模板、参数与实战技巧

Llama 2 提示词完全指南:模板、参数与实战技巧

最近几周我一直在折腾基于 Llama 2 的几个实际项目&#xff0c;从本地部署到 API 接入都走了一遍。反复试下来发现一个很多人容易忽略的事实&#xff1a;Llama 2 和 GPT 系列这类闭源模型的对话习惯差异非常大&#xff0c;直接把原来惯用的提示词搬过去&#xff0c;效果会肉眼可…

2026/10/20 2:54:46 阅读更多 →
大模型Skills应用实战:在Trae中把提示词变成可复用工作流

大模型Skills应用实战:在Trae中把提示词变成可复用工作流

这个系列写到第14篇&#xff0c;我聊点真正能提效的东西——大模型Skills应用。之前几篇要么在讲模型能力边界&#xff0c;要么在讲上下文工程&#xff0c;这次把视角落到一个具体场景&#xff1a;在Trae这款AI原生IDE里&#xff0c;怎么把Skill从"听说过"变成"…

2026/10/20 2:53:45 阅读更多 →

日新闻

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/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →