AI服务流式执行引擎架构解析:从请求生命周期到异步生成器设计
1. 从一次“泄露”事件说起我们到底能学到什么最近关于Claude Code的一些内部实现细节在技术社区里引发了不小的讨论。作为一个长期关注AI工程化落地的开发者我的第一反应不是去评判事件本身而是被其中透露出的工程架构思想深深吸引。特别是“一次请求的完整生命周期”和“流式执行引擎”这两个关键词它们精准地戳中了当前大模型应用开发的核心痛点如何将一个简单的用户提问高效、稳定、可扩展地转化为持续、流畅的AI响应流。很多人可能觉得调用大模型API不就是发个HTTP请求然后等一个JSON回来吗但在生产环境中尤其是面对复杂任务、长上下文和实时交互场景时事情远非如此简单。一次用户与Claude Code的交互背后是一套精密的“生命支持系统”在协同工作。从请求接入、意图解析、上下文管理到模型调度、流式生成、安全过滤再到最终的结果组装与推送每一个环节都充满了设计权衡与工程智慧。这次所谓的“泄露”恰恰为我们提供了一个难得的、窥探顶尖AI产品背后工程实践的窗口。本文将完全从技术工程的角度出发结合我过去在构建类似AI应用平台时的实战经验深度拆解“一次请求的完整生命周期”所涵盖的各个阶段并重点剖析其核心——“流式执行引擎”的设计哲学与实现要点。我们会抛开那些模糊的概括深入到模块划分、数据流转、状态管理和性能优化的具体细节中看看一个工业级的AI服务是如何被构建起来的。无论你是正在从零开始搭建AI应用的后端工程师还是希望优化现有服务性能的架构师相信这些来自一线的设计思路都能给你带来直接的启发。2. 解剖“请求生命周期”从用户输入到第一个Token输出当我们谈论“请求生命周期”时绝不是在画一个从A到B的简单箭头。它是一个立体的、分层的处理管道每一层都有其明确的职责和复杂的内部状态。我们可以将其大致划分为四个核心阶段网关与路由层、会话与上下文管理层、执行与调度层以及流式响应层。理解这个分层模型是理解整个系统设计的基础。2.1 网关层不止是流量入口网关通常是请求触达的第一个服务。它的职责远不止负载均衡和SSL卸载那么简单。在一个AI服务中网关需要成为一个“智能过滤器”和“请求整形器”。首先是认证与鉴权。每个请求都需要携带身份令牌如JWT。网关需要快速验证令牌的有效性并提取用户身份、配额信息如剩余调用次数、可用模型列表等。这里的一个关键设计是鉴权信息会被以元数据Metadata的形式注入到请求上下文中传递给下游服务避免下游服务重复查询数据库。其次是限流与熔断。针对用户、API Key甚至IP地址进行精细化的速率限制Rate Limiting是保障服务稳定的关键。例如免费用户可能被限制为每分钟10次请求而企业用户则享有更高的配额。网关需要维护一个分布式计数器通常基于Redis并能在配额耗尽时立即返回429状态码避免无效请求冲击下游计算密集型服务。同时网关还需要监控下游服务的健康状态在服务异常时快速熔断防止故障扩散。第三是请求的初步验证与标准化。检查必要的参数如model参数是否合法、messages数组格式是否正确、对输入进行基本的长度限制和敏感词过滤。更重要的是网关需要将不同客户端可能使用的不同协议如WebSocket、SSE、长轮询统一转换为内部的标准事件流格式为后续的流式处理铺平道路。实操心得在网关层我们曾踩过一个坑过早地对请求体进行完整的JSON反序列化和验证。当遇到恶意构造的超大或畸形请求时这会消耗大量CPU和内存成为DDoS攻击的入口。后来我们改为“惰性验证”即只解析必要的头部信息进行鉴权和限流将完整的请求体作为二进制流直接透传给下游业务服务由业务服务在必要时进行解析。这显著提升了网关的吞吐量和抗攻击能力。2.2 会话与上下文管理层对话的“记忆宫殿”用户与AI的对话往往不是一次性的而是有状态的连续交互。会话Session服务就是维护这个状态的“记忆宫殿”。它的核心数据结构是一个会话对象通常包含会话ID、用户ID、创建时间、元数据如使用的模型、系统提示词以及最重要的——消息历史列表。当一个新的请求到来时会话服务需要根据请求中的session_id或通过其他逻辑如基于用户和时间的会话合并找到或创建一个会话。然后将本次用户的新消息追加到历史记录中。但这里有一个核心挑战大模型有上下文窗口限制如128K Tokens。我们不能无限制地保存历史。因此上下文窗口管理策略变得至关重要。常见的策略包括滑动窗口只保留最近N条消息或最近M个Tokens。简单高效但可能丢失重要的早期信息。关键记忆提取通过一个轻量级的模型或启发式算法从历史对话中提取出关键事实、用户偏好或决策作为“摘要”存储在会话元数据中。在构建本次请求的上下文时将“摘要”置于系统提示词中再附上最近的若干条历史消息。向量化记忆将历史对话分块进行向量化嵌入存储到向量数据库。当新请求到来时通过语义检索Similarity Search召回最相关的历史片段动态地注入到上下文里。这是实现“超长上下文”效果的一种高级方式但延迟和复杂度较高。Claude Code作为代码助手其上下文管理可能更具特色。例如它可能需要维护一个“当前活跃文件”的上下文或记住用户之前对某个函数提出的修改要求。这要求会话层不仅能存储文本消息还能结构化地存储代码片段、文件路径等元信息。2.3 执行准备构建模型可理解的Prompt在将会话历史准备好之后下一个关键步骤是将这些数据“编译”成模型可以直接消费的Prompt。这绝不仅仅是简单的字符串拼接。首先不同的模型有不同的Prompt模板。例如ChatML格式、Alpaca格式等。系统需要根据请求指定的模型类型选择对应的模板渲染器。模板中会预留位置用于插入系统指令、会话历史、用户当前问题等。其次涉及到Token化与长度计算。为了确保生成的Prompt不超过模型的上下文窗口并且为模型的回答预留空间我们需要精确计算当前Prompt的Token数量。这里不能使用简单的字符数估算必须使用与目标模型配套的Tokenizer进行计算。一个优化点是可以将Token化计算的结果缓存起来特别是对于系统提示词和可能重复出现的历史消息摘要。最后是安全与策略注入。在最终生成的Prompt中可能会在首尾或关键位置插入一些不可见的“系统指令”用于引导模型行为符合安全规范、输出格式要求如强制让代码助手以代码块形式输出。这些指令的插入位置和方式本身也是一门工程艺术需要大量的测试来确保其有效且不影响模型正常发挥。3. 流式执行引擎的核心异步生成器与调度艺术如果说前面的层是为演出搭建舞台和准备剧本那么流式执行引擎就是台上的演员和导演负责实时产出内容。这是整个系统中最复杂、也最体现性能设计功力的部分。其核心设计模式是异步生成器。3.1 为什么必须是“流式”与“异步”想象一下非流式的场景用户发送一个“写一篇长文”的请求后端服务需要等待大模型完全生成所有内容可能耗时数十秒才能将整个结果打包成一个HTTP响应返回。这会导致极差的用户体验用户面对一个空白的界面长时间等待不知道服务是否挂掉。服务器资源浪费一个连接被长时间占用影响并发能力。中间结果无法利用无法在生成过程中进行实时过滤、修改或中断。流式响应通过Server-Sent Events或WebSocket将模型生成的内容以Token或词块为单位实时地推送给客户端。用户几乎在请求发出后立刻就能看到第一个词出现体验是连贯和即时的。而“异步”是为了不让生成任务阻塞HTTP请求线程从而让服务器能够同时处理成千上万个并发的生成请求。3.2 引擎的组件模型一个典型的流式执行引擎包含以下核心组件它们通过消息队列或事件总线松散耦合任务队列与调度器接收来自上游的、已准备好Prompt的生成任务。调度器负责决定哪个任务在哪个时刻、由哪个模型工作节点执行。调度策略可能基于优先级付费用户优先、资源负载选择最空闲的节点或模型亲和性特定任务路由到有特定微调模型的节点。模型工作节点这是实际运行大模型推理的进程。它从调度器领取任务加载对应的模型权重执行前向传播生成下一个Token。关键点在于工作节点内部也是流式的它不应该一次生成全部Token再返回而是每生成一个或一小批Token就通过一个异步通道如asyncio.Queue或Go channel发送出去。这个通道的另一端连接着响应流组装器。响应流组装器它订阅来自模型工作节点的Token流。它的职责不仅仅是转发。它需要格式化将原始的Token ID转换为字符串并按照API约定的格式如OpenAI的data: {choices:[{delta:{content:hello}}]}\n\n进行封装。中间处理在流式传输过程中实时进行内容安全过滤例如检测到有害内容时立即中断流并返回错误标记、格式化修正如确保代码块的开始和结束标记配对等。状态管理维护每个流的状态如已生成的Token数、是否已结束并在生成完成或出错时发送特殊的结束事件data: [DONE]。流传输网关负责将组装好的事件流通过长连接如SSE可靠地推送给客户端。它需要处理网络抖动、客户端断开重连等复杂情况。一个常见的模式是每个流都有一个唯一的stream_id客户端断开后如果在一定时间内重连并携带相同的stream_id网关可以尝试让其重新连接到尚未结束的流上但这需要引擎支持回溯和状态恢复实现难度较高通常更简单的做法是让客户端重新发起请求。3.3 异步生成器的实现模式在Python的asyncio生态中这通常通过async/await和异步生成器async for来实现。下面是一个高度简化的概念性代码展示核心数据流import asyncio async def model_inference_worker(prompt: str, response_queue: asyncio.Queue): 模拟模型工作节点异步生成Token流。 # 模拟模型逐步生成 for token in [Hello, , , world, !]: await asyncio.sleep(0.1) # 模拟推理耗时 await response_queue.put(token) # 将Token放入队列 await response_queue.put(None) # 发送结束信号 async def stream_assembler(request_id: str, response_queue: asyncio.Queue, send_chan): 响应流组装器从队列消费格式化并发送。 async for token in _async_queue_iterator(response_queue): if token is None: # 发送流结束事件 await send_chan.send(data: [DONE]\n\n) break # 格式化事件 event_data fdata: {{choices:[{{delta:{{content:{token}}}}}]}}\n\n await send_chan.send(event_data) # 这里可以插入安全检查等逻辑 # if contains_harmful_content(token): # await send_chan.send(data: {error: content policy violation}\n\n) # break async def handle_request(prompt: str): 处理单个用户请求的入口函数。 response_queue asyncio.Queue() # 创建模型推理任务 inference_task asyncio.create_task(model_inference_worker(prompt, response_queue)) # 创建并返回一个异步生成器给上层框架如FastAPI async def event_generator(): try: async for event in stream_assembler(req_123, response_queue, some_send_channel): yield event finally: # 确保推理任务被正确清理 if not inference_task.done(): inference_task.cancel() await inference_task return event_generator()这个模式的核心是生产者模型推理-消费者流组装器通过异步队列解耦。模型可以按照自己的速度生产Token流组装器则一旦有Token就立刻消费并发送两者互不阻塞最大化并发效率。踩坑实录我们曾经直接将模型的同步生成函数放在异步视图中用asyncio.to_thread包装。这在低并发下没问题但当并发量高时大量线程的创建和切换开销巨大导致系统负载飙升。后来我们彻底重构将模型推理本身也改造成了基于异步IO的生成器利用模型框架如vLLM、TGI提供的原生异步接口让整个数据流完全在异步事件循环中运行性能提升了数倍。4. 引擎中的高级特性与优化策略一个基础的流式引擎能跑起来但一个工业级的引擎需要考虑更多。4.1 优先级调度与抢占并非所有请求都是平等的。一个交互式对话的请求优先级理应高于一个后台批量生成文档的请求。引擎需要支持优先级队列。更复杂的情况下还需要支持抢占当一个高优先级任务到来时能否暂停一个正在运行的低优先级任务对于大模型推理来说完全的暂停和恢复成本很高需要保存和加载巨大的中间激活状态。一种折中的方案是“非抢占式”调度即低优先级任务一旦开始生成就让它完成当前的一个“段落”或若干Token后再让出资源同时调度器不再将新任务分配给繁忙的节点直到高优先级任务被处理。4.2 推测解码与并行采样为了提升生成速度引擎可以集成推测解码这样的高级推理优化技术。其思想是用一个小的、快速的“草稿模型”一次性生成多个候选Token序列然后用大的“验证模型”并行地对这些候选序列进行验证接受其中正确的部分。这相当于用计算资源换取了时间能显著降低每个输出Token的延迟。引擎需要协调草稿模型和验证模型的工作管理候选序列的树状结构这对调度和内存管理提出了更高要求。4.3 缓存与优化注意力键值缓存是大模型推理性能的生命线。引擎需要高效管理每个请求的KV Cache使其在生成过程中得以复用避免重复计算。当处理长对话时如何高效地存储和加载历史对话的KV Cache是一个重要的优化点。一些框架会将Cache存储在GPU内存甚至高速SSD上并设计精巧的置换算法。输出日志化处理也是一个细节。对于代码生成场景模型输出的内容具有很强的结构性代码块、注释、缩进。引擎可以在流式输出的同时进行轻量级的语法高亮预分析或结构提取为客户端提供更丰富的显示信息但这不能增加明显的延迟。4.4 可观测性与调试一个黑盒般的引擎是运维的噩梦。引擎必须内置强大的可观测性指标请求排队时长、Token生成延迟首Token延迟、尾Token延迟、吞吐量Tokens/s、错误率、GPU利用率等。分布式追踪一个请求的完整生命周期跨越网关、会话服务、多个引擎组件需要用唯一的TraceID串联起来方便在出现问题时进行端到端的根因分析。调试接口在开发或排查问题时能够“潜入”一个正在进行的流查看其内部的Prompt构造、当前的生成状态等而不影响其他请求。5. 从设计回到现实构建你自己的简易引擎理论说了这么多我们来点实际的。如何用最少的代码搭建一个具备核心流式能力的引擎原型这里给出一个基于Python FastAPI和异步迭代器的极简方案。假设我们已经有了一个可以逐步生成文本的模拟函数mock_model_stream。from fastapi import FastAPI, Request from fastapi.responses import StreamingResponse import asyncio import json app FastAPI() async def mock_model_stream(prompt: str): 模拟流式生成每次yield一个词。 # 这里应该替换为真实的模型调用例如使用OpenAI API的streamTrue模式 # 或者本地部署的模型如vLLM的异步生成接口。 simulated_tokens prompt.split() # 简单按空格分割实际应用需用Tokenizer for token in simulated_tokens: await asyncio.sleep(0.05) # 模拟生成延迟 yield token async def handle_stream_request(prompt: str): 处理流式请求的核心异步生成器。 async for token in mock_model_stream(prompt): # 构建符合OpenAI流式响应格式的事件 event_data { choices: [{ index: 0, delta: {content: token }, # 加空格模拟自然输出 finish_reason: None }] } yield fdata: {json.dumps(event_data)}\n\n # 流结束标志 yield data: [DONE]\n\n app.post(/v1/chat/completions) async def chat_completions(request: Request): 仿OpenAI格式的流式聊天接口。 body await request.json() messages body.get(messages, []) stream body.get(stream, False) # 简单地将所有消息内容拼接成prompt prompt \n.join([f{m[role]}: {m[content]} for m in messages]) if stream: # 返回流式响应 return StreamingResponse( handle_stream_request(prompt), media_typetext/event-stream, headers{ Cache-Control: no-cache, Connection: keep-alive, } ) else: # 非流式响应此处简化处理 full_response async for token in mock_model_stream(prompt): full_response token return { choices: [{ message: {role: assistant, content: full_response.strip()}, finish_reason: stop }] } if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)这个原型虽然简单但清晰地展示了流式响应的核心模式一个异步生成器函数不断产出格式化的SSE事件StreamingResponse将其包装并持续推送给客户端。你可以在此基础上逐步加入前面讨论的会话管理、队列调度、错误处理等组件最终演进成一个功能完备的引擎。6. 总结与展望流式引擎的未来通过对Claude Code可能采用的架构思路的探讨我们可以看到一个现代AI服务的后端早已不是简单的“模型推理API包装”。它是一个复杂的分布式系统需要处理状态、并发、流数据、调度优化等一系列经典软件工程问题。流式执行引擎作为这个系统的核心其设计直接决定了产品的用户体验、资源利用率和可扩展性。未来的演进方向可能会集中在更智能的调度结合强化学习根据请求内容、模型状态和集群负载进行动态预测和调度。异构计算支持不仅支持GPU还能高效利用CPU、NPU甚至未来新的AI加速硬件进行混合推理。成本与性能的极致平衡在保证响应速度的前提下通过模型蒸馏、量化、动态批处理等技术将单次请求的成本降到最低。更强的自定义能力允许开发者为自己的应用定制推理步骤、中间件处理链使引擎成为一个可编程的AI计算平台。从一次“泄露”中学习其价值不在于复现某个具体的代码行而在于理解顶尖团队在面对通用难题时所选择的架构范式与权衡之道。希望这次对“请求生命周期”和“流式执行引擎”的深度拆解能为你下一次设计自己的AI系统时提供一张有价值的思维蓝图。

相关新闻

UATD 数据集介绍、下载及YOLO/VOC/COCO训练格式转换

UATD 数据集介绍、下载及YOLO/VOC/COCO训练格式转换

UATD 完整数据集下载目录 同时包含三种主流标注格式:COCO JSON、VOC XML、YOLO TXT UATD 数据集🌊:数据集介绍、下载📥 | 目标检测 | 水平框📌|原始图像✅|VOC标签✅ | COCO 标签✅ | YOLO 标…

2026/10/11 17:14:12 阅读更多 →
做德胜门网站建设,别只看价格,更要看这套“死磕”底线的服务哲学

做德胜门网站建设,别只看价格,更要看这套“死磕”底线的服务哲学

在北京德胜门这块地界儿,要是你提起做互联网、搞线上推广,老北京人或者在附近转悠做生意的哥们儿,可能第一时间想到的不是冷冰冰的代码,而是那几家老牌的国企大院,或者是那种在电话亭里喊“修电脑办宽带”的广告牌。毕竟,德胜门连着西直门和西四,这里是北平的咽喉,也是…

2026/10/12 18:22:43 阅读更多 →
ArcGIS裁剪操作全解析:从原理到实战,避坑指南与效率提升

ArcGIS裁剪操作全解析:从原理到实战,避坑指南与效率提升

1. 项目概述:为什么“裁剪”是GIS数据处理的核心操作 在ArcGIS的日常数据处理工作中,“裁剪”这个操作出现的频率,可能比你想象中要高得多。无论是处理遥感影像、地形数据,还是管理行政区划、项目边界,我们总会遇到一个…

2026/10/5 15:05:54 阅读更多 →

最新新闻

跨界资源整合:内容与资本的战略合作模式

跨界资源整合:内容与资本的战略合作模式

1. 战略合作背景解析启明社与安盛投资的这次战略合作,本质上是一次典型的跨界资源整合案例。启明社作为内容创作领域的头部机构,拥有强大的IP孵化能力和粉丝基础;而安盛投资则是金融投资领域的专业机构,在资本运作和商业资源方面具…

2026/10/14 14:27:40 阅读更多 →
SpringBoot+Vue3疾病防控系统开发实战

SpringBoot+Vue3疾病防控系统开发实战

1. 项目概述与核心价值这个基于SpringBoot2Vue3MyBatis-PlusMySQL8.0技术栈的疾病防控综合系统,是我去年带队为某三甲医院开发的实战项目。系统上线后日均处理2000条疫情数据,成功将基层医疗机构的数据上报效率提升47%。不同于简单的CRUD管理系统&#x…

2026/10/14 14:27:40 阅读更多 →
贪心算法实战:跳跃游戏问题解析与优化

贪心算法实战:跳跃游戏问题解析与优化

1. 问题背景与核心挑战跳跃游戏是算法面试中的经典题型,考察对贪心算法的理解和应用能力。题目描述如下:给定一个非负整数数组nums,数组中的每个元素代表在该位置可以跳跃的最大长度。初始位于数组的第一个位置,判断是否能够到达最…

2026/10/14 14:27:40 阅读更多 →
IP102害虫数据集转YOLO格式:4400张子集训练实践

IP102害虫数据集转YOLO格式:4400张子集训练实践

做智慧农业害虫检测的朋友,应该都绕不开IP102这个数据集——102类农作物害虫、数万张图片,光看规模确实诱人。但真正下载下来用过的人都知道,原始标注格式是XML/JSON结构,直接扔给YOLO训练是不可能的,还得自己写脚本做…

2026/10/14 14:27:40 阅读更多 →
SpringBoot+Vue3全栈图书管理系统开发实战

SpringBoot+Vue3全栈图书管理系统开发实战

1. 项目概述:全栈图书管理系统的技术选型与价值 这套基于SpringBoot2Vue3MyBatis-PlusMySQL8.0的图书管理系统源码,是当前企业级应用开发的典型技术组合方案。作为前后端分离架构的实战案例,它完整实现了图书的增删改查、分类管理、借阅归还等…

2026/10/14 14:27:40 阅读更多 →
Vue3图片查看器:鼠标为中心缩放与拖拽实现详解

Vue3图片查看器:鼠标为中心缩放与拖拽实现详解

图片查看功能在后台系统、编辑器、图库工具里太常用了,但很多人做的时候都栽在同一个坑上:缩放是缩了,但中心点永远在左上角,鼠标滚轮一滚,图片直接跑偏;想拖拽吧,又和文字选中等浏览器默认行为…

2026/10/14 14:26:39 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →