GraphQL 设计原则实战指南:从选型判断到 Schema 与安全防护(agentic-awesome-skills api-patterns 系列)
  • AI 技能
  • AI 插件
  • 人工智能

【免费下载链接】agentic-awesome-skills

AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600+ agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.

项目地址:https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills
点击查看免费下载

本篇以 agentic-awesome-skills 仓库中api-patterns技能包的 GraphQL 主题文档为核心,系统讲解 GraphQL 的适用场景判断、Schema 设计原则与安全防护清单,并延伸至仓库内关联的 API 风格选型、分页、版本策略与安全测试材料,帮助开发者在真实项目中做出有依据的架构决策。

引言:GraphQL 在 API 架构决策中的位置

GraphQL 是一种面向复杂、互联数据的查询语言与运行时,其核心价值在于让客户端自主选择所需的字段与关联数据,从而减少请求往返和过度获取(over-fetching)。在 agentic-awesome-skills 的 api-patterns 技能包 中,GraphQL 与 REST、tRPC 并列,作为三种主要 API 风格之一供架构决策时权衡;该技能包明确强调"Learn to THINK, not copy fixed patterns"(学会思考,而非复制固定模式),因此本文不提供万能模板,而是给出可复用的判断框架、Schema 设计准则与安全防线。

一、何时使用 GraphQL:适用性判断框架

1.1 适合采用 GraphQL 的场景

根据 graphql.md 原始文档的清单,以下情形是 GraphQL 的良好契合点:

✅ Good fit: ├── Complex, interconnected data # 复杂、互联的数据模型 ├── Multiple frontend platforms # 多端前端(Web / iOS / Android) ├── Clients need flexible queries # 客户端需要灵活的查询能力 ├── Evolving data requirements # 数据需求持续演进 └── Reducing over-fetching matters # 减少过度获取是重要诉求

逐一解读:

  • 复杂互联数据:当实体之间存在多级关联(如订单 → 商品 → 供应商 → 库存),REST 需要多次请求或用嵌入参数拼凑响应,而 GraphQL 可以用一棵查询树一次取回。
  • 多前端平台:Web、移动端各自关心的字段不同,GraphQL 让每个客户端按需取字段,避免"为最大公约数设计响应"。
  • 灵活查询:客户端(尤其是第三方或内部业务方)需要自定义查询组合,服务端不必为每种组合新增端点。
  • 数据需求演进:Schema 可以渐进添加字段和类型,通常不需要像 REST 那样频繁引入版本号(详见下文"Schema 演进"一节)。
  • 减少过度获取:带宽与响应体是真实的成本,窄带环境(弱网、低端移动设备)下尤其值得引入。

1.2 不适合使用 GraphQL 的场景

❌ Poor fit: ├── Simple CRUD operations # 简单 CRUD ├── File upload heavy # 文件上传密集 ├── HTTP caching important # 强依赖 HTTP 缓存 └── Team unfamiliar with GraphQL # 团队不熟悉 GraphQL

关键权衡:

  • 简单 CRUD:纯增删改查用 REST 更直接,GraphQL 的 schema 与 resolver 反而带来不必要的心智成本。
  • 文件上传:GraphQL 规范对上传支持较弱(虽有多部分请求扩展,但生态与工具链不如 REST 成熟)。
  • HTTP 缓存:GraphQL 默认走单一POST /graphql端点,难以复用 REST 的 HTTP 级缓存(ETag、Cache-Control);对比可见 api-style.md 中"REST 原生支持 HTTP 缓存,GraphQL 缓存复杂"的结论。
  • 团队熟悉度:GraphQL 的 resolver 性能优化、N+1 问题解决、客户端缓存(如 Apollo/Relay)都需要学习曲线。

1.3 与 REST、tRPC 的横向对比

仓库的 api-style.md 给出了三者的对照,可直接用于决策会议:

因素RESTGraphQLtRPC
最佳场景公共 API复杂应用TS 单体仓库(monorepo)
学习曲线低中低(若用 TS)
过度/不足获取为消费者定制端点客户端自选字段;需强制成本上限取决于过程设计
类型安全手动(OpenAPI)基于 Schema自动(端到端推断)
缓存HTTP 原生复杂客户端侧

决策树要点:公共 API / 多平台 → REST + OpenAPI(兼容性最广);复杂数据需求 / 多前端 → GraphQL(灵活查询);TS 前后端同仓 → tRPC(端到端类型安全)。选择前应回答五个问题:消费者是谁?前端是否 TypeScript?数据关联多复杂?缓存是否关键?公共还是内部 API?

二、Schema 设计五原则

graphql.md 将 Schema 设计浓缩为五条核心原则:

Principles: ├── Think in graphs, not endpoints # 以图思考,而非端点 ├── Design for evolvability (no versions) # 面向可演进设计(不设版本) ├── Use connections for pagination # 用 Connections 做分页 ├── Be specific with types (not generic "data") # 类型要具体,避免泛化的 data └── Handle nullability thoughtfully # 审慎处理可空性

2.1 以图思考,而非端点

REST 的心智模型是"资源 + 端点 + 方法";GraphQL 的心智模型是类型图。设计时先画实体关系图(如User、Order、Product及它们之间的边),再据此定义对象类型与字段,最后通过 Query/Mutation 暴露入口。字段即"边",客户端沿边自由遍历。

2.2 面向可演进设计(无版本)

GraphQL 的演进哲学是通过添加而非破坏来演进 Schema:

  • 新增:可以安全地添加新类型、新字段、新参数(可空字段、带默认值的参数),旧客户端不受影响。
  • 变更:重命名或删除字段、把可空改成非空、改变参数类型都是破坏性变更,应避免或走废弃流程。
  • 弃用:使用@deprecated指令标记旧字段,引导客户端迁移,而不是立刻移除。

仓库的 versioning.md 也印证了这一判断:"GraphQL?→ 通常不设版本(演进 Schema)";相对地,REST 公共 API 通常走 URI 版本化(/v1/users)。由于 Schema 是前后端共享的契约,任何破坏性修改前必须排查所有已部署客户端。

2.3 用 Connections 做分页

GraphQL 推荐 Relay Connections 风格的分页,即edges/node/pageInfo结构:

type Query { orders(first: Int, after: String): OrderConnection } type OrderConnection { edges: [OrderEdge!]! pageInfo: PageInfo! } type OrderEdge { node: Order! cursor: String! } type PageInfo { hasNextPage: Boolean! hasPreviousPage: Boolean! startCursor: String endCursor: String }

设计要点:

  • cursor是不透明的分页游标(常为 base64 编码的(created_at, id)组合键),客户端不解析其含义。
  • pageInfo.hasNextPage让客户端判断是否继续翻页,避免偏移量分页在大数据集上的性能问题。
  • 关联到仓库 response.md 的分页选型表:Offset 适合简单可跳页场景、Cursor 适合大数据集、Keyset 适合性能敏感场景;GraphQL 的 Connections 本质是 Cursor/Keyset 思路的标准化。

仓库 SKILL.md 的实操示例进一步给出了分页契约的验证要点:对"公共订单列表在客户端翻页期间发生变化"的场景,应选择有界页大小 + 基于稳定顺序(created_at, id)的游标,并明确 next-cursor 格式、鉴权过滤、被删除记录或非法游标的处理,测试两个相等时间戳与页间插入两种边界——目标是在快照语义下不出现重复 ID,并明确新插入行是否可出现。

2.4 类型要具体,避免泛化的 data

不要定义type Result { data: JSON }这类"万能字段"。泛化类型会让客户端丧失类型检查与补全能力,也让服务端失去契约约束。应为每种业务对象定义明确的 GraphQL 类型(User、OrderItem、Address),让 Schema 本身就是可读的 API 文档。

2.5 审慎处理可空性

GraphQL 的可空性(!后缀表示非空)直接影响客户端错误处理与演进空间:

写法含义建议
name: String可空字段可能缺失(如未填写的可选资料)
name: String!非空数据必然存在(如主键、必填字段)
user: User可空关联关联对象可能不存在(如未分配负责人)
[Order]!列表非空、元素可空列表总有返回,但个别元素可能为 null
[Order!]!完全非空严格保证列表与元素均存在

实践建议:

  • 区分"业务上可空"与"实现上可空":业务上可选(如middleName)应可空;实现上依赖外部系统、可能失败的数据(如第三方评分)建议可空,避免单点失败导致整棵树报错。
  • 错误响应而非全树失败:单个字段解析失败时,GraphQL 会将该字段置为null并在errors数组返回错误,其余字段照常返回。设计时应接受这一"部分成功"语义,并让客户端有处理部分失败的策略。
  • 面向未来的非空化是破坏性变更:把一个可空字段改成非空会破坏旧客户端,应在 Schema 稳定后再收紧。

三、安全防护:GraphQL 特有的攻击面

graphql.md 给出的安全清单是 GraphQL 部署前必须过一遍的检查项:

Protect against: ├── Query depth attacks → Set max depth # 查询深度攻击 → 设置最大深度 ├── Query complexity → Calculate cost # 查询复杂度 → 计算成本 ├── Batching abuse → Limit batch size # 批处理滥用 → 限制批次大小 ├── Introspection → Set policy for the audience; not an authorization boundary # 自省(Introspection)→ 为受众设定策略;它不是鉴权边界

3.1 查询深度攻击(Query Depth Attack)

恶意客户端可以构造深层嵌套查询(如user → friends → user → friends …)造成服务端深度递归、资源耗尽。缓解手段:

  • 设置最大查询深度:限制 AST 嵌套层数(如max_depth: 10),超过即拒绝。
  • 常见实现:graphql-depth-limit(JS)、graphql-validation-complexity、服务端框架的深度限制中间件。

3.2 查询复杂度与成本计算(Query Complexity)

深度限制无法覆盖"广度"攻击——客户端可以一次请求大量字段或大量列表元素。更严谨的方案是为每个字段估算成本(复杂度权重),累加整个查询的复杂度分值并设上限:

// 伪代码示意:为字段分配复杂度权重并求和 const complexity = query.ast.reduce((acc, node) => { // 列表字段按 expectedCost * 预估数量计分 return acc + fieldCost(node); }, 0); if (complexity > MAX_COMPLEXITY) reject(query);
  • 列表字段按estimatedCount × fieldCost计分,配合first/limit参数的约束。
  • 复杂度上限应结合吞吐量、数据库查询成本反复校准,避免误伤正常业务。

3.3 批处理滥用(Batching Abuse)

部分客户端库支持_batch批量查询(一次 HTTP 请求携带多个查询)。这既是性能优化手段,也可能被用来放大单请求成本(暴力枚举、批量探测)。缓解方式:

  • 限制批次大小:设置单次请求最多允许的查询数量。
  • 对批量请求同样执行深度与复杂度校验(按批内查询总和计费)。

3.4 自省(Introspection)策略

自省查询(__schema、__type)会完整暴露 Schema,攻击者可借此侦察类型结构、字段与关联关系,辅助构造攻击。文档特别强调:

Introspection → Set policy for the audience; not an authorization boundary

即:自省开关应针对受众设定策略,但绝不能把"关闭自省"当作鉴权手段。生产环境可对公共客户端关闭自省、对内部工具或授权开发者开放;但数据级安全必须依赖 resolver 内的字段级鉴权与数据过滤,而不是隐藏 Schema。

3.5 与 OWASP API Top 10 的映射

仓库的 security-testing.md 专门列出一节 GraphQL 安全测试矩阵,可视为上述防护清单的测试落地:

测试项关注点
IntrospectionSchema 泄露
Batching查询型 DoS
Nesting深度型 DoS
Authorization字段级访问控制

同时在 OWASP 视角下,GraphQL 服务还应当重点测试API4: 资源消耗(限流、DoS,对应深度/复杂度/批处理限制)与API1: BOLA(越权访问他人资源——GraphQL 的灵活查询让字段级鉴权遗漏更隐蔽)。别忘了常规防线:仓库的 rate-limiting.md 给出令牌桶/滑动窗口等限流策略与X-RateLimit-Limit/Remaining/Reset响应头规范;response.md 提醒错误响应应包含错误码、用户可读信息、调试细节与请求 ID,但绝不暴露内部实现细节。

四、落地检查:如何验证你的 GraphQL 设计

仓库 api-patterns 技能包 提供了系统化的验证思路,可直接用于设计评审:

  1. 先问消费者与约束:记录已知消费者与已部署版本、预期负载大小、访问规则、兼容性义务与一个具体操作——GraphQL 的类型共享不保证独立部署的客户端仍然兼容。
  2. 选择性阅读:根据需求只读相关文件(选型看 api-style.md,分页与错误格式看 response.md,版本策略看 versioning.md,安全测试看 security-testing.md)。
  3. 制定具体规格:给出请求/响应示例与被拒用例(rejection cases),明确非法输入、越权、超限时的行为。
  4. 边界测试:按前文分页示例所述,测试相等时间戳、页间插入等边界,确认无重复 ID 与快照语义。

技能包还附带启发式扫描脚本 api_validator.py,用于对本地项目做 API 代码的快速体检(如错误处理、状态码、输入校验、鉴权、限流、日志等模式的正则探测,最多扫描 15 个匹配文件):

python3 plugins/agentic-awesome-skills/skills/api-patterns/scripts/api_validator.py <project_path>

注意其定位:脚本输出是"分诊提示(triage hint)",并非 OpenAPI 校验、鉴权审计或部署批准;GraphQL 查询形态本身不强制资源鉴权与向后兼容,需配合真实的鉴权实现与兼容性测试。另外,脚本限定最多 15 个文件、基于正则与浅层 JSON/YAML 检查,切勿将其结果当作完整的安全结论。安全测试应在授权范围内的本地/测试环境进行。

五、常见误区与决策检查清单

5.1 反模式提醒

结合 SKILL.md 的反模式清单,涉及 GraphQL 的高频错误包括:

  • 默认 REST 一把梭:不做消费者分析,遇到复杂互联数据仍硬造十几个嵌套端点。
  • 把 GraphQL 当万能钥匙:简单 CRUD 也上 GraphQL,徒增复杂度。
  • Schema 无成本约束:开放无限深度/复杂度,等于把资源耗尽漏洞交给客户端。
  • 把隐藏 Schema 当安全:关闭自省却不做 resolver 级鉴权(对应文档中"Introspection 不是鉴权边界"的警告)。
  • 忽视字段级鉴权:GraphQL 单端点模式下,任何字段都可能成为越权读取的通道(BOLA/IDOR),必须按字段落实授权。

5.2 决策检查清单

在设计 GraphQL API 前,逐项确认:

  • 已与用户确认 API 消费者(谁在用、多端还是单端)?
  • 已针对当前上下文选择 API 风格(REST / GraphQL / tRPC)而非默认套用?
  • Schema 是否按"图"建模,类型是否具体而非泛化data?
  • 分页是否采用 Connections + 不透明游标,且定义了被删记录/非法游标行为?
  • 是否设置了最大深度、复杂度上限与批次大小限制?
  • 是否明确自省开关的受众策略,并落实字段级鉴权?
  • 是否规划了限流(令牌桶/滑动窗口)与错误响应格式?
  • 是否按 OWASP API Top 10 对 GraphQL 端点做过安全测试?

结语

GraphQL 是解决"复杂互联数据 + 多端灵活查询 + 减少过度获取"这类问题的强有力工具,但它并非默认选择:简单 CRUD、文件上传密集、强依赖 HTTP 缓存或团队未准备好的场景,REST 依然更合适。采用后,应以"图"而非端点来设计 Schema,用 Connections 支撑分页,用具体类型与审慎的可空性构建清晰契约,并把深度限制、复杂度成本、批处理限制与自省策略作为上线前的必修课——正如仓库技能包反复强调的:学会思考(THINK),而非复制固定模式。

  • AI 技能
  • AI 插件
  • 人工智能

【免费下载链接】agentic-awesome-skills

AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600+ agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.

项目地址:https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills
点击查看免费下载

相关推荐

上一篇:AI 威胁检测系统扩展实战:用 9 个进阶挑战把规则引擎演化为 SOAR 级检测平台(AngelusVigil)
下一篇:如何在Nexa SDK中快速运行Qwen3-VL视觉语言模型:完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

5 分钟装好 foobar2000 皮肤 foobox:零配置完整指南

5 分钟装好 foobar2000 皮肤 foobox:零配置完整指南

5 分钟装好 foobar2000 皮肤 foobox&#xff1a;零配置完整指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox 是一套现成的 foobar2000 皮肤 配置包&#xff0c;不是独立播放器&#xff0c…

2026/10/21 1:28:11 阅读更多 →
N_m3u8DL-RE 实战教程:从第一条命令到直播录制,搞定 M3U8/MPD 流媒体下载

N_m3u8DL-RE 实战教程:从第一条命令到直播录制,搞定 M3U8/MPD 流媒体下载

N_m3u8DL-RE 实战教程&#xff1a;从第一条命令到直播录制&#xff0c;搞定 M3U8/MPD 流媒体下载 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHu…

2026/10/21 1:28:11 阅读更多 →
UniHacker 实测:三步完成 Unity 许可证验证绕过,免费打开任意工程

UniHacker 实测:三步完成 Unity 许可证验证绕过,免费打开任意工程

UniHacker 实测&#xff1a;三步完成 Unity 许可证验证绕过&#xff0c;免费打开任意工程 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker 凌晨一点&#xff…

2026/10/21 1:28:10 阅读更多 →

最新新闻

Terminal-Bench完整指南:4步跑通你的第一个AI终端评测

Terminal-Bench完整指南:4步跑通你的第一个AI终端评测

Terminal-Bench完整指南&#xff1a;4步跑通你的第一个AI终端评测 【免费下载链接】terminal-bench-1 A benchmark for LLMs on complicated tasks in the terminal 项目地址: https://gitcode.com/GitHub_Trending/tb/terminal-bench-1 你的Agent演示很精彩&#xff0c…

2026/10/21 2:02:39 阅读更多 →
免 root 三步跑通 WorkTool:你的企业微信自动回复机器人

免 root 三步跑通 WorkTool:你的企业微信自动回复机器人

免 root 三步跑通 WorkTool&#xff1a;你的企业微信自动回复机器人 【免费下载链接】worktool 一款安全稳定的Android无障碍服务工具&#xff0c;支持控制企微/微信来运行的无人值守群管理企业微信机器人 项目地址: https://gitcode.com/GitHub_Trending/wo/worktool W…

2026/10/21 2:02:39 阅读更多 →
STM32驱动W25Q64 SPI Flash实战:从硬件连接到代码实现

STM32驱动W25Q64 SPI Flash实战:从硬件连接到代码实现

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

2026/10/21 2:02:39 阅读更多 →
如何用 Jasna 自动修复 VR180 视频:从分眼处理到投影选择的完整新手教程

如何用 Jasna 自动修复 VR180 视频:从分眼处理到投影选择的完整新手教程

如何用 Jasna 自动修复 VR180 视频&#xff1a;从分眼处理到投影选择的完整新手教程 【免费下载链接】jasna Video restoration tool 项目地址: https://gitcode.com/GitHub_Trending/ja/jasna Jasna 是一款面向 GPU 的视频修复工具&#xff0c;内置 VR180 自动修复能力…

2026/10/21 2:02:39 阅读更多 →
gamdl:Apple Music 无损下载工具完全指南,一键收藏歌曲与 4K 音乐视频

gamdl:Apple Music 无损下载工具完全指南,一键收藏歌曲与 4K 音乐视频

gamdl&#xff1a;Apple Music 无损下载工具完全指南&#xff0c;一键收藏歌曲与 4K 音乐视频 【免费下载链接】gamdl A command-line app for downloading Apple Music songs, music videos and post videos. 项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl …

2026/10/21 2:02:39 阅读更多 →
Django数据可视化实践:超市销售系统全流程开发与热词分析

Django数据可视化实践:超市销售系统全流程开发与热词分析

毕业设计做到一半才意识到"选对题"比“写代码”重要得多——这是我在带几个应届生做完整套毕设流程后最深的体会。今天这篇想好好拆解一个很有代表性的题目&#xff1a;基于PythonDjango的超市销售系统&#xff0c;以及其中数据可视化模块的具体实现。这个选题好在哪…

2026/10/21 2:01:38 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于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 阅读更多 →