包含关键字 typecho 的文章

前言

自己用过很多自托管的导航页,始终没有找到适合自己心意的,要么太重,要么太简陋。于是通过 Vibe coding 设计了一个满足自己的导航页,多说无益,欢迎大家来使用。

✨ 核心特性

  • 书签和仪表盘:书签采用可收缩侧边栏的形式,最大化的留出仪表盘空间。
  • 多端同步:所有终端设备浏览器访问的是同一个布局,同一个书签库,在任何设备上编辑会自动同步。
  • 自由布局:基于 Grid 网格,目前已开发备忘录,待办事项,日历,天气等小组件,大小随便拉。
  • 私有部署:提供 Docker 镜像,数据全部存在你自己的 VPS 或 NAS 上 (JSON 格式),没有广告,没有追踪。

🚀 快速部署

docker run -d -p 3000:3000 -v ./data:/app/data ghcr.io/wtfllix/navidash:latest

🔗 链接

在线演示: navidash.vercel.app

GitHub: github.com/wtfllix/navidash (求个 Star 🌟)

Sample:

做服务端的人,最怕的其实不是写代码。

而是你已经解释到口干舌燥,对方转头对外同步时依然能做到:

指鹿为马,南辕北辙。

最近我就遇到了一次特别典型的场景:

我以为自己讲得很清楚,
结果第二天对齐时,认知完全跑偏,甚至还变成了:

“这是 XX 让我这么做的。”

那一刻,说不尴尬是假的。

所以这篇文章我想从自己的视角出发,记录一次真实的带教事故,也顺便总结一套服务端人常用的“自救方法论”。


背景:MCP 工具能力的落地

公司最近需要在现有业务模块中,补齐 MCP 工具调用能力。

简单来说,就是要让业务服务具备:

  • 工具注册
  • 权限校验
  • Agent 调用
  • 统一执行链路

上周六我基于八一菜刀大佬的开源项目 Knife4j 做了一个 POC,实现了基础的调用骨架。

后续需要补齐 Agent 调用侧的完整闭环,这部分交给实习生小W同学继续推进。


服务交互流程(POC版本)

整体调用链路大致如下:

img

这个流程本身并不复杂,但对于实习生来说,真正难的往往不是“怎么写代码”,而是:

为什么系统要这么设计?
哪些边界不能碰?
哪些东西看起来能做,其实不能做?

核心疑惑点:权限与工具边界

在 MCP 工具接入过程中,第一个绕不开的问题就是:

Token 到底在这里扮演什么角色?

权限校验是工具调用链路的第一道门槛。

img

这里其实牵扯到一整套“信任迁移”的演进:

  • 最早的 Cookie
  • 后来的 Session
  • 再到 JWT Token
  • 以及 Sa-Token 这种工程化封装

这些东西我当时一口气全讲了。

讲得很爽,也很细。

但现在回头看:

信息密度太高,对实习生来说反而是一种负担。

事故:讲太多导致信息过载,对外沟通失真

问题发生在一次很典型的场景。

实习生提出了一个“看起来很聪明”的实现想法。

我担心他走偏,于是花了一个多小时逐条解释:

  • 为什么不行
  • 风险在哪
  • 系统边界是什么
  • 推荐的替代方案是什么

当时我以为自己讲得足够清楚。

结果第二天,他去和另一个同事对齐时,认知完全跑偏。

甚至对方转述成:

“这是 XX 让我这么做的。”

那一刻我非常尴尬。

后来我意识到:

这不是他“笨”,而是我把“知识密度”拉满了,却没有做“理解闭环”。


写在最后:讲解不是交付,闭环才是交付

带实习生最大的挑战,从来不是技术难度。

而是:

你以为你讲清楚了,
但他其实只是“听过了”。

从那天之后我才真正意识到:

讲解不是交付,闭环才是交付。

下一次我会更克制:

  • 少讲一点原理
  • 多做一点确认
  • 让对方先复述,再去执行
  • 对外同步前先过一遍 summary

因为带人这件事,本质上不是“输出知识”,而是“交付理解”。

FakeReader 是一个浏览器油猴脚本,让 EPUB 电子书伪装成网页内容嵌入到任意页面。打开浏览器,看起来像在工作,实际上在沉浸式阅读摸鱼。

!!!老板就坐在我旁边,用这个方式已经摸鱼看完两本小说了,别人不近距离阅读不易发现,摸鱼风险降到最低,嘿嘿

工作时偷偷看书,老板以为你在研究技术文档

使用说明

  1. 按下 Cmd/Ctrl + B 打开设置面板
  2. 点击"选择 EPUB 文件"上传你的电子书
  3. 填写"目标 DIV 选择器",用 F12 控制台查看(如 #content.main-content
  4. 点击"EPUB 模式"或"文本模式"启动(推荐文本模式,更易伪装)

键盘快捷键

设置: Cmd/Ctrl + B
翻页: ← → 或 Cmd/Ctrl + [ ]

摸鱼技巧

假装查文档,刷内网

目标页面:公司内部 Wiki 或技术文档页
选择器填好,启动 FakeReader
老板路过:"在研究技术呢?"

用 v2 最近的一个帖子演示下如何使用,把帖子的内容替换为电子书

设置

预览

链接

GreayFork: https://greasyfork.org/zh-CN/scripts/564991-fake-reader

2025 年,是 StarRocks 持续深耕与进化的一年。围绕 Lakehouse 与 AI 实时能力,多个关键能力在迭代与实践中渐次落地。项目的每一步前行,都得益于社区每一次真实的反馈与贡献。

站在岁末年初,我们希望通过这篇文章,与大家共同回顾 2025 的重要时刻,并分享关于 2026 的规划与期待。

技术亮点:性能突破的一年

关键里程碑:StarRocks 4.0 发布

10 月 17 日,StarRocks 4.0 版本发布,在性能易用性上都有明显提升。在 TPC-DS 测试中,新版本的查询速度同比提升了约 60%,进一步稳固了 StarRocks 作为高性能分析引擎的地位。

4.0 版本显著增强了对 Apache Iceberg 的支持,包括隐藏分区处理、更快的元数据解析、全新的 Compaction API,以及原生 Iceberg 表写入。同时,将 JSON 升级为一等数据类型:无需进行数据平展,开箱即用即可获得 3–15× 的查询加速。借助更智能的 Compaction、元数据缓存与文件捆绑,云端 API 调用次数最高可减少 90%。

此外,StarRocks 4.0 引入了以 Catalog 为中心的 Iceberg 治理机制,并新增了 Decimal256、多语句事务及 ASOF JOIN 等特性,以适配更广泛的业务场景。在运维易用性方面,通过引入节点黑名单不区分大小写的标识符以及全局连接 ID 等特性,让集群管理与问题定位更直观、更可靠。

Apache Iceberg:从外部表格式到湖仓原生底座

2025 年,StarRocks 围绕 Apache Iceberg 的支持更趋系统化:不再分散在单点功能的局部优化,而是将 Iceberg 视为湖仓架构的核心组件,重点解决性能波动、查询变慢和运维复杂等实际痛点。目标既关注性能提升,也强调端到端的可预测性,以保障关键业务在生产环境中的稳定运行。

  • 优化器层:增强对湖上数据的理解;通过从真实查询执行中学习,降低对不完整元数据的依赖,使查询计划更贴近实际数据分布。
  • 数据访问层:改进缓存与 I/O 行为,降低大查询、混合负载与远程存储带来的性能波动。
  • 引擎层:进一步内化 Iceberg 特有复杂性,让 Iceberg 表在查询与写入上的体验更接近原生表。
  • 治理与安全:随着生产采用扩大,同步强化生命周期管理与安全能力,提升可追溯性、可维护性与企业就绪度

物化视图:面向实时 Lakehouse 负载的“零抖动”加速层

在生产系统中,难点往往不在于单次查询能有多快,而在于性能是否足够可预测。数据持续变化、流量波峰以及缓存不稳定,都可能带来查询延迟的波动。

近期版本更新中,StarRocks 强化了物化视图(MV),使其更适合作为 Lakehouse 负载的稳定加速层。多列分区 MV 现可与 Apache Iceberg、Hive 的表分区直接对齐,从而实现更高效的增量刷新更稳定的 MV 利用率。

对于 SLA 关键负载,更清晰的 MV rewrite 行为,以及 force_mv 等选项,使查询能够更稳定地使用预计算结果;同时,新写入数据也能以可控、可预测的方式纳入刷新与查询流程。由此,性能一致性与数据新鲜度不再依赖运行时状态,而可以按业务诉求明确设定与实现。

在运维层面,基于分区的保留策略完善了生命周期管理,使 MV 更易于长期保持紧凑、可管理,并控制整体成本。

综合来看,这些改进让 MV 从临时的优化手段,转变为支撑低抖动、可预测 Lakehouse 性能的可靠加速基础。

Real-Time Analytics

2025 年,实时分析是 StarRocks 的关键方向之一。无论是传统 OLAP 与湖仓分析,还是作为 AI Agent 的底层支撑,低延迟、实时的查询能力都变得前所未有地重要。

整体来看,StarRocks 在实时分析上的工作主要聚焦于三个核心领域:

数据写入

  • Merge Commit:将零散的小批量写入合并为高效的事务。
  • 通过 Load Spill 和文件捆绑技术,减少 Compaction 和小文件带来的开销。
  • 面向对象存储:降低实时写入成本,并提升扩展性。

查询性能

  • 算子与优化器深度增强:加速 Join、聚合,并提升 spill 处理效率。
  • 缓存与统计信息更智能:缩短规划(planning)时间,同时提升执行效率。
  • 对 JSON 及复杂实时数据类型与负载提供原生支持。

运维可靠性

  • 分区生命周期管理增强(TTL、merging):面向实时与 up-to-date 的分析需求。
  • 物化视图(MV)增强:支持更高效的增量刷新与查询加速。
  • plan stability 工具:降低真实业务负载下的延迟波动。

🌍 社区成长与互动

这一年,StarRocks 社区以前所未有的速度发展壮大:区域落地更密集,贡献者更活跃,全球关注度也在持续提升。

Slack 社区成员超过 5,000 人、GitHub Star 超过 11,000,这些数字背后,是越来越多开发者愿意走进项目、参与讨论、加入共建。StarRocks GitHub 主仓库贡献者已达 500+,新增 PR 仍保持稳定输出。

StarRocks Contributor Awards

“StarRocks 2025 年度奖项”

是迄今为止覆盖最广、国际参与度最高的一届贡献者表彰。奖项不仅致敬推动技术演进、分享一线实践的贡献者,也表彰在各地社区持续耕耘、带动更多人参与共建的伙伴。

📍 Events & Meetups

StarRocks Summit 2025

2025 年 9 月,StarRocks 举办了迄今规模最大的线上峰会——StarRocks Summit 2025。来自全球的 32 位嘉宾带来分享,集中呈现了 StarRocks 在各行业落地与性能演进上的最新进展。

Coinbase、Pinterest、Intuit、Demandbase 等企业也分享了其真实实践:利用 StarRocks 在 PB 级数据规模下实现亚秒级查询性能的同时,进一步降低了基础设施成本。

StarRocks Connect 2025

2025 年 9 月 13 日,作为全球峰会在中国本土的延伸,StarRocks Connect 2025 于线上线下同步开启。本次活动以“连接”为核心,吸引了数万名开发者参与,深度探讨数据分析技术的未来演进。

来自镜舟科技、携程、Shopee、Cisco、SJM Resorts 等企业的技术领袖,分享了 StarRocks 在复杂业务场景下的前沿实践。

Real-Time & Lakehouse Meetups

今年,StarRocks 与 Apache Iceberg 、Apache Paimon 社区紧密合作,共同探讨“开放、快速、可治理”的 Lakehouse 架构,并通过多场社区活动与各地实践者交流,分享一线经验与真实案例。

在全球范围内,StarRocks 也保持着稳定的社区参与与活动节奏。这背后离不开热心的社区成员——他们积极参与,并主动发起、承办本地活动,让项目在全球开发者群体中的影响力持续扩展。

StarRocks Connect 2025

2025 年 9 月,作为全球峰会在中国本土的延伸,StarRocks Connect 2025 于线上线下同步开启。本次活动以“连接”为核心,吸引了数万名开发者参与,深度探讨数据分析技术的未来演进。

来自镜舟科技、携程、Shopee、Cisco、SJM Resorts 等企业的技术领袖,分享了 StarRocks 在复杂业务场景下的前沿实践。

2026 年度展望

Real-Time Analytics

实时分析一直是 StarRocks 的核心优势,也是长期投入并在生产中反复验证的方向。面向下一阶段,重点将放在进一步扩大这一能力边界,优先推进以下工作:

  • Auto Tablet Splitting:简化运维操作,提升大规模场景下的易用性。
  • 持续性能优化:进一步提升实时分析负载的处理效率。
  • 增强系统可观测性:让用户更清晰地掌握集群健康、性能表现与运行状态。

Lakehouse

主要围绕两个核心目标:

  1. 性能足够快,让分析可以直接在数据湖上运行。
  2. 系统足够稳健,能够承担并逐步替代 Snowflake 等传统数据仓库。

为实现上述目标,2026 年的工作重点将聚焦在:

  • 持续投入性能优化:在快速查询执行的既有优势基础上,继续加强性能表现。
  • 从“查询加速”扩展至端到端提速,确保数据的插入、删除及更新同样高效。
  • 支持更全面的数据管理操作,简化日常运维流程。
  • 在未来一年内实现对 Apache Iceberg v3 表格式的全面支持。
  • 围绕 Paimon/Fluss 推进湖流一体能力。

AI & Intelligent Optimization

计划把 AI 驱动的性能优化能力直接嵌入分析引擎,包括构建向量索引与 AI 辅助分析能力。通过这些能力,

用户既能更高效地运行分析,也能在此基础上开展 AI 赋能的个性化、自动化与智能决策相关实践。

以上为 2026 年的大致发展方向,推进过程中也会结合实际情况不断优化调整。欢迎在 GitHub 提交 Feature Request,或加入 StarRocks 社区群,和更多用户、贡献者一起交流想法、共同完善。

Roadmap 2026:https://github.com/StarRocks/starrocks/issues/67632

开发者朋友们大家好:

这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「有看点的活动」,但内容仅代表编辑的个人观点,欢迎大家留言、跟帖、讨论。

本期编辑:@瓒an、@鲍勃

01 有话题的技术

1、Soul App 旗下 AI 团队开源 SoulX-FlashTalk:首个 14B 参数亚秒级实时数字人模型

Soul App AI 团队(Soul AI Lab)昨天正式开源实时数字人生成模型 SoulX-FlashTalk。该模型被描述为首个能够实现 0.87 秒亚秒级超低延时、32 FPS 高帧率,并支持超长视频稳定生成的 14B 参数级数字人模型。Soul App 方面表示,新模型不仅技术指标出色,更具备商用落地潜力,有望推动大参数量实时生成式数字人进入实际应用阶段。

SoulX-FlashTalk 通过以下四大关键指标,重塑了实时互动体验:

  • 0.87s 亚秒级延时:凭借全栈加速引擎将首帧延时降至 0.87 秒,赋予 14B 模型即时反应能力,消除滞后感,适配直播与客服等全场景。
  • 32 FPS 高帧率:模型推理吞吐量达 32 FPS,超越 25 FPS 的直播标准,兼顾高性能与画面流畅度。
  • 超长视频稳定生成:采用自纠正双向蒸馏技术与回溯机制,有效抑制身份漂移,确保长时间直播中面部、口型与背景一致。
  • 全身动作交互:突破单一“对口型”局限,支持音频驱动全身动作并消除手部畸形,在维持高身份一致性的同时实现自然动态。

在技术实现上,团队采用两阶段训练策略:先进行延迟感知时空适配,再结合 DMD 框架利用自纠正双向蒸馏进行优化。推理端则依托针对 8-H800 设计的全栈加速引擎,整合了混合序列并行、FlashAttention3 及 3D VAE 并行化技术。

根据 TalkBench-Short 和 TalkBench-Long 数据集评测,该模型在长短视频生成中均表现出优异的视觉保真度和口型同步精度。基于此,SoulX-FlashTalk 有望落地于电商直播、短视频制作、AI 教育及 NPC 交互等领域。继开源语音合成模型 SoulX-Podcast 后,该模型的发布标志着 Soul AI 在开源领域的进一步拓展。

目前,该项目的技术报告、源代码及模型权重已全面公开。

GitHub:
https://github.com/Soul-AILab/SoulX-FlashTalk

HuggingFace:
https://huggingface.co/Soul-AILab/SoulX-FlashTalk-14B

(@Soul 社交)

2、智谱 GLM-5、MiniMax M2.2 将至,春节成大模型发布高峰

据《南华早报》报道,在春节前的最后冲刺阶段,国内多家前沿人工智能实验室正密集推出新一代大模型,试图在节日期间抢占曝光度与用户心智。

阿里与月之暗面上周率先发布 Qwen3-Max-Thinking 与 Kimi 2.5 后,智谱 AI 与 MiniMax 也被曝将于未来两周内更新旗舰模型

知情人士称,智谱 AI 计划在春节前推出 GLM-5,这是 GLM 系列的第五代迭代,预计在创意写作、编程、推理与智能 Agent 能力方面带来「全方位且显著」升级。

MiniMax 则将发布 M2.2,这是在 M2.1 基础上的小幅更新,重点强化编程能力。

与此形成对比的是,DeepSeek 今年春节档并不会推出外界期待的「大招」。

多位消息人士透露,DeepSeek 更可能只会对 V3 系列进行一次小幅更新。其下一代旗舰模型预计为万亿参数级基础模型,但由于规模膨胀导致训练速度放缓,发布时间被推迟。

此外,字节跳动也将在春节期间推出「三件套」:大语言模型 Doubao 2.0、图像生成模型 Seedream 5.0 与视频生成模型 SeedDance 2.0。阿里预计在春节期间发布旗舰模型 Qwen 3.5,重点强化复杂推理、数学与编码能力。

与此同时,春节科技巨头争夺用户的竞争已进入白热化阶段。

阿里、腾讯、百度等巨头正投入巨额资源推动 AI 应用增长: 腾讯的「元宝」将发放 10 亿元数字红包,百度则通过文心 App 派发 5 亿元红包,阿里也于昨日宣布投入 30 亿元推广千问 App。

( @APPSO)

3、ElevenLabs 发布 v3 正式版:综合错误率降低 68%,实现符号与专业术语的上下文解析优化

ElevenLabs 宣布其最新 TTS 模型 「Eleven v3」 结束 Alpha 测试正式进入 GA 阶段。该版本重点解决了 TTS 模型在处理非标准文本(如符号、数字序列、专业术语)时的发音逻辑问题,显著提升了模型在多语言环境下的语义理解精度。

  • 大幅降低综合错误率:在涵盖 8 种语言、27 个类别的内部基准测试中,整体错误率从 15.3% 降至 4.9%,降幅达 68%;用户侧偏好度较 Alpha 版本提升 72%。
  • 精准化处理专业术语序列:针对高复杂度文本实现突破性改进,其中 ISBN 识别错误率降至 0%,化学公式与电话号码的错误率均降至 0.6%(错误缩减率达 99%)。
  • 深度优化上下文感知逻辑:模型增强了对同一符号在不同语境下的辨析能力。例如,能准确根据上下文将冒号「:」识别为体育比分(读作 「to」)、时间或比例,而非机械播报。
  • 强化数值量级与符号保护:修正了长数字序列(如电话号码与大额货币)的播报逻辑,避免了将电话号码误读为整数或在货币换算中出现量级错误(如将 250,000 误读为 25,000)。
  • 高效解析复杂非文本信息:显著提升了对 URL、电子邮件地址、地理坐标和数学表达式的解析效率,URL 错误率从 45.6% 降至 3.9%。

Eleven v3 现已在 ElevenLabs 全平台(包括网页端与 API)正式上线,支持所有订阅层级用户使用。

相关链接:
https://elevenlabs.io/v3

( @ElevenLabs Blog)

4、苹果公布 PCG 技术:质量零妥协、AI 语音生成提速 40%

科技媒体 9to5Mac 今天发布博文,报道称苹果公司携手特拉维夫大学,联合发表论文,提出名为「原则性粗粒度」(PCG)的语音生成新方法,从而解决 AI 文本转语音(TTS)技术的速度瓶颈。

目前,行业主流的语音生成多采用「自回归模型」,即通过「逐个预测」的方式,基于已有 token 预测下一个。然而,这种机制要求预测结果与预设 token 必须实现「精确匹配」,导致模型经常拒绝听感差异极小、实际完全可用的预测结果。这种严苛的验证标准直接拖慢了整体生成速度。

为了解决这一痛点,研究团队开发的 PCG 技术核心在于「求同存异」。研究人员发现,不同的声学 token 往往能产生几乎相同的听觉效果。PCG 不再将每个声音视为完全独立的个体,而是建立了「声学相似组」。只要模型生成的预测 token 落在正确的「相似组」范围内,系统即予以采纳。这种逻辑将严苛的「单点验证」升级为了容错率更高的「范围验证」。

在实际运行层面,该方案采用了「投机解码」策略,构建了双模型协作架构:

  • 快速预测:由轻量级小模型先行快速「猜测」并提出候选语音 token;
  • 高效审核:由参数更大的「裁判模型」进行审核,只要候选 token 属于正确的声学组,大模型便会「放行」。

这种分工在保留小模型高速度的同时,利用大模型保障了输出质量。实验数据显示,应用 PCG 技术后:

  • 性能提升:语音生成速度提升了约 40%,且并未牺牲音频质量;
  • 音质表现:在 5 分制的自然度评分中取得了 4.09 的高分;
  • 高稳定性:在极限压力测试中,即使将 91.4% 的语音 token 替换为同组其他成员,词错率仅增加 0.007,说话人相似度仅下降 0.027,人耳几乎无法察觉差异。

由于 PCG 属于「推理阶段」的优化方案,它无需对现有模型进行重新训练即可直接应用,且存储声学相似组仅需约 37MB 的额外内存。

相关链接:
https://machinelearning.apple.com/research/coarse-grained

(@IT 之家)

02 有亮点的产品

1、AI 翻译公司 DeepL 发布 Voice API:支持端到端实时音频流式翻译,同步生成 5 种语言翻译

DeepL 宣布正式上线 Voice API,支持开发者在应用程序中集成实时语音转录与翻译功能。该产品主要面向联络中心(Contact Centers)与业务流程外包(BPO)提供商,旨在通过低延迟的流式处理解决多语言语音交互的瓶颈。

  • 多路同步翻译输出:支持实时接收音频流,并在返回原语转录文本的同时,同步提供至多 5 种目标语言的翻译结果。
  • Voice-to-Voice 早期访问:同步开启为期 6 周的「语音到语音」功能内测计划(2 月中旬开始),允许接收端直接收听合成后的翻译音频。
  • 结构化合规审计支持:API 提供清晰的转录与翻译对齐文本,可直接集成至企业现有的质检(QA)、坐席评估及合规性检查流程。
  • 人力资本解耦:允许企业根据业务专长而非语言覆盖进行招聘,通过 API 实现全球 24/7 的多语言服务覆盖,降低特定语言坐席的运营成本。

相关链接:
https://www.deepl.com/zh/products/voice

( @MultiLingual)

2、语音 AI 平台 Speechify 升级 AI 助手:集成 ChatGPT 并引入 Snoop Dogg 等名人语音

昨天,Speechify 宣布为其 AI 语音助手新增了名人语音选项,并同步上线了 ChatGPT 集成功能。

Speechify 的 AI 语音助手现已支持模仿 Snoop Dogg、Gwyneth Paltrow 和 MrBeast 等名人声音。几周前,Speechify 在 iOS 端推出了 Voice AI Assistant,用户可通过结合第三方模型及 Speechify 自研 AI 模型,在 iPhone 上通过多轮对话实现与文档交互、语音网络搜索,以及生成摘要、播客乃至讲座内容。

此次引入名人语音是 Speechify 推动其成为 ChatGPT、Gemini 和 Siri 之外「语音优先」替代方案的又一举措。自即日起,用户可将 Snoop Dogg、MrBeast 或 Gwyneth Paltrow 设置为 AI 助手的语音,这一功能在定制化方面领先了竞争对手一步

Speechify 首席财务官 Pankaj Agarwal 称,公司目前与 Gemini、ChatGPT 和 Grok 并列为 App Store 四大 AI 助手之一。他表示,通过与全球最具辨识度的声音建立合作关系,Speechify 将为用户带来前所未有的 AI 助手体验。

此外,Speechify 当日还正式推出了与 ChatGPT 的集成。这一系列动作反映了当前 AI 实验室和生产力平台正日益关注将语音优先交互引入日常工作流,覆盖从无障碍辅助到免提生产力的广泛场景。

相关链接:
https://speechify.com/

( @9to5mac)

03 有态度的观点

1、iPod 之父:当爹之后重新开始审视隐私风险

据《商业内幕》报道,「iPod 之父」托尼 · 法德尔(Tony Fadell)近日在播客访谈中表示,成为父母后,他本人以及硅谷多位科技创始人对隐私问题的看法出现明显转变。

他指出,在拥有孩子之前,许多科技从业者对隐私的态度更为激进,愿意在技术创新的推动下牺牲个人数据;但在面对深度伪造、社会工程学等风险后,这种态度正在发生变化。

法德尔提到,Meta CEO 马克 · 扎克伯格、Google 联合创始人拉里 · 佩奇与谢尔盖 · 布林在成为父母后,对世界的理解方式「完全不一样」。

他表示,许多创始人如今会重新思考自己愿意交出多少数据,以及如何保护家庭与孩子的隐私

法德尔特别强调了 AI 时代的隐私挑战。

他认为,未来真正具有革命性的 AI 设备往往需要大量个人数据与实时输入,这将迫使社会与企业领导者在创新与隐私之间做出更艰难的取舍。

他透露,部分科技创始人甚至产生了「如果能重来就好了」的反思,但过去的决策已无法逆转。

与此同时,全球监管机构正加强对 AI 与隐私议题的审查。

xAI 因其模型生成未授权的真实人物(包括未成年人)性化图像而遭到多地调查;Meta 也因聊天机器人与未成年人互动方式受到质询。隐私保护与 AI 技术发展之间的张力正在加速显现。

( @APPSO)

阅读更多 Voice Agent 学习笔记:了解最懂 AI 语音的头脑都在思考什么

写在最后:

我们欢迎更多的小伙伴参与 「RTE 开发者日报」 内容的共创,感兴趣的朋友请通过开发者社区或公众号留言联系,记得报暗号「共创」。

对于任何反馈(包括但不限于内容上、形式上)我们不胜感激、并有小惊喜回馈,例如你希望从日报中看到哪些内容;自己推荐的信源、项目、话题、活动等;或者列举几个你喜欢看、平时常看的内容渠道;内容排版或呈现形式上有哪些可以改进的地方等。

作者提示: 个人观点,仅供参考

北京,2026 年 2 月 4 日—— 在今日举行的 “ITEC 第十三届朝阳国际人才创业大会创新峰会” 上,极客邦科技创始人兼 CEO 霍太稳正式发布了北京市朝阳区首个面向 OPC(One-Person Company,一人公司)的创业社区——“极客部落 · AI 应用生态园”。该项目由朝阳区人才工作局、共青团朝阳区委员会、望京街道联合指导,由极客邦科技作为链主企业主导日常运营,其旗下的全新品牌 “模力工场” 作为 AI 创业生态加速的专业品牌,为各场景与地域的 AI 应用项目,尤其开发者主导的 OPC 项目,提供线上线下协同支持——线上拓展 AI 原生社区,线下联合政府与园区打造 OPC 专属加速空间,旨在打造面向 AI 技术人才与创业者的 “AI 应用生态 + 青年友好型创新社区 + OPC 轻量化 AI 创业加速器”。

助力朝阳建设 “科技百园”,打造全国 AI 生态枢纽

“极客部落 · AI 应用生态园” 坐落于朝阳望京,是朝阳区落实 “十五五” 人工智能产业战略、加快构建全栈人工智能通用底座及应用生态的关键落子。园区将通过建设 “青年人才会客厅”、投融资对接、场景需求测试及商机对接等在内的一系列人工智能+创新创业主题活动,结合细分场景需求和早期创业团队的成长发展需求,构建集技术研发、孵化、社群、企业服务为一体的全龄友好型创新社区,致力于成为朝阳区最具吸引力的 AI 人才策源地,以及全国领先的 AI 生态枢纽。

霍太稳表示:“未来的经济活力,不只来自几家巨头,更来自成千上万家活跃的一人公司。我们建设 ‘极客部落’,就是要在这片热土上,帮这些未来的超级个体——把家安好,把根扎深,把火聚起来

AI 时代催生 “一人公司”,OPC 成为创新创业新力量

当前,随着大模型技术的普及与 AI 工具的发展,具备技术能力和创新思维的个体创业者正成为推动 AI 应用落地的新兴力量。霍太稳在发布会上指出:“在 AI 时代,一个懂技术、懂工具的极客,一个人就是一支队伍。他们是新物种,也是新的就业群体。”然而,这些 “超级个体” 在创业过程中往往面临场景缺失、伙伴难寻、生态孤立的挑战。“极客部落” 应运而生,致力于为 AI OPC 打造一个 “家”,让 “一个人的公司,不止一个人”。

三大支撑体系,构建 OPC 成长闭环

“极客部落” 以场景、伙伴、生态为核心支撑,构建全方位的 OPC 成长赋能体系:

  • 真实场景训练场:推动 AI 技术从概念走向实践,为企业、园区、街道提供可复制、可落地的 AI 应用样板,帮助 OPC 创业者 “拿结果” 而非 “学概念”。

  • 协作网络连接器:依托极客邦科技深厚的国内外社区连接能力,汇聚朝阳区辐射全国甚至全球的各类创新创业 AI 生态资源,助力 OPC 创业加速发展。

  • 生态赋能母舰:整合政府政策支持、青年组织活力、国际化街区氛围,构建从 “个体” 到 “生态” 的成长土壤,打造未来商业模式的孵化器。

聚火成光,点亮 AI 创业星河

发布环节最后,霍太稳以 “聚是一团火,散是满天星” 寄语所有 AI 创业者,强调 “极客部落” 正是那个 “聚火” 的地方——汇聚人才、场景与生态,助力每一位心怀梦想的 OPC 创业者,在 AI 时代勇敢开创属于自己的 “一人公司时代”。

即日起,“极客部落 · AI 应用生态园” 正式面向全球 AI 极客、OPC 创业者开放入驻申请,期待与每一位技术创造者携手,共同推动人工智能从 “单点改善” 向 “全产业链场景应用” 跨越,助力 AI Native 企业在朝阳茁壮成长。如您希望加入极客部落,获取一人公司创业支持,可扫码联系模力工场运营助理。

关于极客邦科技

极客邦科技,以“推动数智人才全面发展,助力数智中国早日实现”为己任。依托独特的行业专家生态网络和优质内容生产方法论,为数智化组织和人才提供发展必备的媒体资讯、开发者社区、行业峰会、高管社群、企业培训、线上课程、行业咨询等全方位服务。

引言:1996 年的预言,在 2025 年成真

1996 年,美国国防高级研究计划局(DARPA)进行过一次极具前瞻性的模拟演习。

在那场设定于“未来”的虚拟战争中,网络空间充斥着大量自主 AI 代理(AI Agents)。它们没有意识,却具备专家级理解力,成为攻防的核心。当时,这被视为科幻推演;但根据 2025 年后的安全研究显示:预言已成现实。

一种被称为 “Vibe Hacking(氛围黑客)” 的新型攻击模式,正随生成式 AI 的普及悄然成型。


一、 机制的硬币两面:从 Vibe Coding 到 Vibe Hacking

什么是 Vibe Coding?
这是近几年开发者圈的“顶流”方式:不再手写 Python 或 Java,只需向 AI 描述“我要做什么”,由 AI 生成主要实现工具。在这种模式下,开发的重心从“实现”转向了“感觉描述与需求判断”。

隐藏的“定时炸弹”:开发者自身的风险
然而,这种便捷性往往掩盖了巨大的“负债(Liabilities)”。盲目依赖 AI 生成代码,本质上是在为自己埋雷:

  • 代码债务: 运行 AI 代码就像读一本推理小说,你并不确定它的终点(Bug)在哪里。
  • 安全性风险: AI 可能在你不察觉的情况下引入 SQL 注入、硬编码凭据,甚至是逻辑后门。对于 SaaS 开发者而言,这些“氛围编程”产出的工具在上线那一刻,就可能变成一颗随时引爆的“定时炸弹”

什么是 Vibe Hacking?
机制完全相同,但目标发生了根本转变。 攻击者利用 AI 工具生成用于恶意目的(Evil purposes)的代码。通过自然语言与“感觉描述”,驱动 AI 自动生成、改进并执行攻击策略。当编程变得“看感觉”,黑客的攻击也变得“如丝般顺滑”。


二、 真实案例:Claude 协助的“完美入侵”

2025 年 8 月,Anthropic 发布了一份引发安全圈震动的报告。报告披露,一名攻击者在不到一个月的时间内,利用 Claude(一款 AI 代理)协助完成攻击流程,成功入侵了 17 家组织。

  1. 情报搜集与“越狱”技巧
    攻击者利用 Markdown (.md) 文件进行“角色扮演”,伪装成“授权审计员”绕过 AI 安全护栏。随后,AI 在几分钟内搜集了 VPN 软件的最新漏洞,并创建了专用的扫描框架——这在过去需要人类研究员花费数天时间。
  2. 恶意工具的快速定制与混淆
    AI 并没有重新发明轮子,而是基于现有工具开发了自定义代理代码。这种定制化能够修改攻击特征(Signatures),从而规避防御系统的检测。当攻击被发现时,黑客甚至指挥 AI 修改 Payload(负载),将恶意程序伪装成合法的 Microsoft 工具再次渗透。
  3. 精准且冷静的敲诈策略
    AI 被用于分析被盗数据,并设计心理压力最大的敲诈方案。例如,针对一家教会,AI 建议通过泄露捐赠者名单来施加最大压力;它甚至能根据财务状况,为受害者定制“增量式罚金系统”的最后通牒。

三、 为什么 SaaS 成了 Vibe Hacking 的首选目标?

在 AI 时代,SaaS 并不是因为“安全更差”,而是因为其形态天然契合 AI 的攻击逻辑:

  • 高密度数据金矿: SaaS 数据通常是结构化且带有明确业务语义的,极易被 AI 解析。
  • 复杂权限模型: 多租户、动态权限的逻辑对人类而言极其复杂,但对擅长推理的 AI 来说是理想的解构对象。
  • 长期公网暴露: API 和登录接口为 AI 提供了长期、低噪声试探的空间。


四、 攻防转折:从“被动挨打”到“仿生黑客”

面对 AI 驱动的降维打击,传统的防火墙已捉襟见肘。虽然 AI 让攻击变得廉价,但它也开启了 “仿生黑客(Bionic Hacking)” 的时代——即人类安全专家在强大 AI 能力的加持下工作,更高效地发现漏洞。

一个里程碑式的事件发生在 2025 年 8 月:AI 机器人(Hackbot)首次在 HackerOne 漏洞报告排行榜中登顶。 相比于人类,这些机器人不眠不休、没有情绪干扰,能快速处理简单的逻辑漏洞(如反射型 XSS),从而释放人类专家的精力,让他们专注于更复杂的业务逻辑防御。这种“以 AI 对抗 AI”的态势,正是 SaaS 防御的新起点。


五、 在 Vibe Hacking 时代,SaaS 应该如何防御?

一个关键认知是:不要试图“防 AI”,而是要利用 AI 强化的逻辑来对抗攻击。

  • AI 护栏的进化: 利用日志和跟踪数据(Log/Trace data)来训练更强大的分类器,实时检测恶意推断。
  • 部署自主防御系统: 引用 DARPA 的 AICC(AI 网络挑战赛)成果,采用能够自主检测并自动修复关键基础设施漏洞的 AI 系统。
  • 从“行为模式”入手: AI 攻击往往具有极高的节律稳定性。检测“不像人类”的访问频率和反馈路径,往往比检测 Payload 更有效。

  • 把 AI 当作“副驾驶”而非“机长”: 无论在开发还是防御中,都必须审计 AI 生成的代码,将其视为防火墙外的一名“不速之客”来严加审核。

结语

我们已经进入了 AI 网络战争的早期阶段。Vibe Hacking 并不是不可战胜的魔法,它只是将攻击能力民主化,并缩短了从漏洞发现到执行攻击的周期。

在这个时代,最锋利的工具不是代码,而是那个真正理解代码逻辑并能驾驭 AI 的黑客/安全专家。对于 SaaS 公司来说,进化的速度将决定生存的几率。

本文由mdnice多平台发布

数据库实例初始化的时候会创建一个目录,通常都会在系统配置相关的环境变量$KINGBASE_DATA来表示。当数据库初始化完成后,会在这个目录生成相关的子目录以及一些文件。下图就是金仓数据库的物理结构:
image.png

视频讲解如下:
https://www.bilibili.com/video/BV1Gm6FBQEAj/?aid=115977421328...

下表说明了其中的每个目录的功能与作用。
image.png

金仓数据库的物理存储结构主要是指硬盘上存储的文件,包括:数据文件、日志文件、参数文件、控制文件、WAL预写日志文件等等。下面分别进行介绍。

一、 数据文件

顾名思义,数据文件用于存储数据,文件名以oid命名。对于超出1G的数据文件,金仓数据库会自动将其拆分为多个文件来存储,而拆分的文件名将由sys_class中的relfilenode字段来决定。通过下面的步骤可以确定表所对应的数据文件。
(1)查看数据库的oid。

kingbase=# select oid,datname from sys_database;

# 输出的信息如下:  
  oid  |  datname  
-------+-----------
 14791 | test
 14792 | kingbase
     1 | template1
 14790 | template0
 14793 | security
 16384 | scott
(6 行记录)

# 14792 是数据库kingbase的OID。

(2)查询前面创建的testtable1表的OID。

kingbase=# select oid,relname,relkind,relfilenode from sys_class where relname ='testtable1';

# 输出的信息如下:  
  oid  |  relname   | relkind | relfilenode 
-------+------------+---------+-------------
 16428 | testtable1 | r       |       16428
(1 行记录)

# 16428 是表testtable1的OID。

(3)查看表空间mydemotbs对应的目录,如下图所示。
image.png

二、 日志文件

金仓数据库的日志文分为运行日志、WAL预写日志、事务日志和服务器日志。下面分别进行介绍。

2.1 运行日志(sys_log)

在默认的情况下,运行日志没有开启。通过查看主kingbase.conf文件的配置可以看到相关的参数设置,开启后会自动生成该日志文件。运行时日志一般是记录数据库服务器与数据库的状态,比如各种错误信息、定位慢查询SQL、数据库的启动关闭信息、发生检查点过于频繁等的告警信息等等。该日志有.csv格式和.log格式,建议使用.csv格式。因为.csv格式一般会按大小和时间自动切割。sys_log是可以被清理删除、压缩打包或者转移,同时不影响数据库的正常运行。当有遇到数据库无法启动或者更改参数没有生效时,第一步就可以查看运行时日志。下图展示了主参数文件kingbase.conf中关于运行日志的配置参数。
image.png

2.2 WAL预写日志(sys_wal)

sys_wal 这个目录是记录的KingBaseES的WAL信息。WAL是Write Ahead Logging的缩写,即预写日志,它是保证数据完整性的一种标准方法。简单来说就是在KingBaseES数据库中要对数据文件进行修改时必须先写入WAL日志信息,即当WAL日志记录完成了持久化,刷新到永久储存之后才能更改数据文件。根据这个原则就不需要在每次提交事务的时候都刷新数据到磁盘。因为当数据库出现宕机发生数据丢失时,可以重新执行WAL日志来达到恢复数据库的目的。因此WAL日志也可以叫做redo重做日志,因为任何没有写到数据文件上的改动都可以根据日志记录进行重做。在默认的情况下,单个WAL预写日志文件的大小是16M,通过参数wal_segment_size决定。

kingbase=# show wal_segment_size;

# 输出的信息如下:
 wal_segment_size 
------------------
 16MB
(1 行记录)

# 源码安装编译的时候可以通过指定下面的参数更改其大小:
./configure --with-wal-segsize=target_value

在默认情况下,WAL日志保存在sys_wal目录下,例如:

[kingbase@kingbase sys_wal]$ pwd
/home/kingbase/kdb/kes_oracle_instance/sys_wal
[kingbase@kingbase sys_wal]$ tree
.
├── 000000010000000000000006
├── 000000010000000000000007
├── 000000010000000000000008
├── 000000010000000000000009
├── 00000001000000000000000A
└── archive_status

1 directory, 5 files

# WAL日志文件名称为16进制的24个字符组成,每8个字符一组,每组的意义如下:
# 00000001  00000000  00000001
# 时间线    逻辑ID         物理ID

当一个WAL预写日志文件写满时会自动切换到下一个WAL预写日志文件,而WAL切换的方式也可以是手动切换。例如,当执行sys_switch_wal()后WAL会切换到新的日志。下面展示了操作的过程:

-- 查看当前已有的WAL日志文件
kingbase=# select * from sys_ls_waldir();
           name           |   size   |      modification      
--------------------------+----------+------------------------
 000000010000000000000001 | 16777216 | 2025-09-20 22:04:53+08
(1 row)

-- 进行WAL的手动切换
kingbase=# select sys_switch_wal();
 sys_switch_wal 
----------------
 0/602D258
(1 行记录)

-- 再次查看当前已有的WAL日志文件
kingbase=# select * from sys_ls_waldir();
           name           |   size   |      modification      
--------------------------+----------+------------------------
 000000010000000000000001 | 16777216 | 2025-09-20 22:06:31+08
 000000010000000000000002 | 16777216 | 2025-09-20 22:06:31+08
(2 rows)

-- 通过查看sys_wal目录,此时将生成一个新的WAL日志文件。
[kingbase@kingbase sys_wal]$ tree
.
├── 000000010000000000000001
├── 000000010000000000000002
└── archive_status

1 directory, 2 files

金仓数据库使用WAL优势主要有以下两个方面:

  • 首先,由于在数据库数据发生变更时会先将WAL日志缓冲区中的重做日志写入磁盘,因此即使在数据库发生宕机时,数据缓冲区中的数据还没有全部写入到永久存储中的情况下,也可以通过磁盘上的WAL日志信息来恢复数据库丢失的数据;
  • 其次,在提交事务操作时仅仅是把WAL日志写入到磁盘上,并不会将数据刷新到磁盘。因此,从I/O次数来说,刷新WAL日志的次数要比刷新数据文件的次数少得多;从IO花销来说,WAL刷新是连续I/O,而数据刷新是随机I/O,因此,WAL刷新花销小得多。

下图说明了数据提交与WAL日志写入时的关系:

image.png

在kingbase.conf文件中关于WAL的配置参数主要有以下几个:

wal_level = replica
fsync = on
max_wal_size = 1GB
min_wal_size = 80MB

# 其中:wal_level参数的可选的值有以下三个,级别依次增高,记录的WAL信息也越多。
# (1)minimal:不能通过基础备份和WAL日志恢复数据库。
# (2)replica:该级别支持WAL归档和复制。
# (3)logical:在replica级别的基础上添加了支持逻辑解码所需的信息。
# fsync:强制同步来实现数据安全保证。

当WAL日志文件的大小超过max_wal_size参数设置时,将发生WAL日志信息的覆盖,从而造成日志信息的丢失。因此为了保证数据的安全,建议在生产环境中开启WAL的归档模式。
由于WAL日志文件采用了二进制的形式存储日志信息,因此金仓数据库提供了工具sys_waldump帮助获取WAL日志文件中记录的日志信息,例如:

[kingbase@kingbase Server]$ pwd
/home/kingbase/kdb/Server
[kingbase@kingbase Server]$ bin/sys_waldump \
  /home/kingbase/kdb/kes_oracle_instance/sys_wal/000000010000000000000007

# 输出的信息如下:
rmgr: Standby     len (rec/tot):     42/    42, tx:          0, lsn: 0/07000028, prev 0/0602D240, desc: RUNNING_XACTS nextXid 1117 latestCompletedXid 5573947 oldestRunningXid 1117
rmgr: Standby     len (rec/tot):     42/    42, tx:          0, lsn: 0/07000058, prev 0/07000028, desc: RUNNING_XACTS nextXid 1117 latestCompletedXid 5576273 oldestRunningXid 1117
rmgr: XLOG        len (rec/tot):    114/   114, tx:          0, lsn: 0/07000088, prev 0/07000058, desc: CHECKPOINT_ONLINE redo 0/7000058; tli 1; prev tli 1;full_page_writes true; xid 0:1117;oid 24576; multi 1; offset 0; oldest xid 1064 in DB 1;oldest multi 1 in DB 1;oldest/newest commit timestamp xid: 0/0;oldest running xid 1117; online
rmgr: Standby     len (rec/tot):     42/    42, tx:          0, lsn: 0/07000100, prev 0/07000088, desc: RUNNING_XACTS nextXid 1117 latestCompletedXid 5573947 oldestRunningXid 1117
rmgr: XLOG        len (rec/tot):     24/    24, tx:          0, lsn: 0/07000130, prev 0/07000100, desc: SWITCH 

2.3 事务日志(sys_xact)

sys_xact是事务提交日志,记录了事务的元数据。默认开启。内容一般不能直接读。默认存储在目录$KINGBASE_DATA/sys_xact/。

2.4 服务器日志

如果用sys_ctl启动的时候没有指定-l参数来指定服务器日志,错误可能会输出到cmd前台。下图展示了在启动数据库服务器时,使用“-l”参数生成的服务器日志文件,它记录了数据库的重要信息。
image.png

# 服务器日志文件的内容如下:
2025-09-11 12:04:10.504 CST [13066] LOG:  sepapower扩展初始化完成
2025-09-11 12:04:10.521 CST [13066] LOG:  正在启动 KingbaseES V009R001C010
2025-09-11 12:04:10.521 CST [13066] LOG:  正在监听IPv4地址"0.0.0.0",端口 54321
2025-09-11 12:04:10.521 CST [13066] LOG:  正在监听IPv6地址"::",端口 54321
2025-09-11 12:04:10.522 CST [13066] LOG:  在Unix套接字 "/tmp/.s.KINGBASE.54321"上侦听
2025-09-11 12:04:10.773 CST [13066] LOG:  日志输出重定向到日志收集进程
2025-09-11 12:04:10.773 CST [13066] HINT:  后续的日志输出将出现在目录 "/home/kingbase/kdb/kes_oracle_instance/sys_log"中.

三、 控制文件

控制文件记录了数据库运行时的一些信息,比如数据库oid、是否是打开状态、WAL的位置、检查点的信息等等。KingBaseES的控制文件是很重要的数据库文件。控制文件默认保存在文件$KINGBASE_DATA/global/sys_control,可以使用命令bin/sys_controldata查看控制文件的内容,具体的操作步骤如下:
(1)进入KingBaseES的Server目录。

cd /home/kingbase/kdb/Server/

(2)执行命令查看控制文件的内容。

[kingbase@kingbase Server]$ bin/sys_controldata ~/kdb/kes_oracle_instance/

# 输出的信息如下:
sys_control版本:                       1201
Catalog版本:                          202502271
数据库系统标识符:                     7548668357165694582
数据库簇状态:                         在运行中
sys_control最后修改:                  2025年09月11日 星期四 12时04分10秒
最新检查点位置:                       0/8000130
最新检查点的REDO位置:                 0/8000130
最新检查点的重做日志文件:             000000010000000000000008
最近检查点的WalTimeLineID:            1
最新检查点的PrevTimeLineID:           1
最新检查点的full_page_writes:         开启
最新检查点的NextXID:                  0:1117
最新检查点的NextOID:                  16400
最新检查点的NextMultiXactId:          1
最新检查点的NextMultiOffsetD:         0
最新检查点的oldestXID:                1064
最新检查点的oldestXID所在的数据库:   1
最新检查点的oldestActiveXID:          0
最新检查点的oldestMultiXid:           1
最新检查点的oldestMulti所在的数据库: 1
最新检查点的oldestCommitTsXid:        0
最新检查点的newestCommitTsXid:        0
最新检查点的时间:                     2025年09月11日 星期四 12时04分05秒
不带日志的关系:                       0/3E8使用虚假的LSN计数器
最小恢复结束位置:                     0/0
最小恢复结束位置时间表:               0
开始进行备份的点位置:                 0/0
备份的最终位置:                       0/0
需要终止备份的记录:                   否
wal_level设置:                       replica
wal_log_hints设置:                   关闭
max_connections设置:                 100
max_worker_processes设置:            30
max_wal_senders设置:                  10
max_prepared_xacts设置:              0
max_locks_per_xact设置:               64
track_commit_timestamp设置:           关闭
最大数据校准:                         8
数据库块大小:                         8192
大关系的每段块数:                     131072
WAL的块大小:                          8192
每一个WAL段字节数:                    16777216
标识符的最大长度:                     64
在索引中可允许使用最大的列数:         32
TOAST区块的最大长度:                  1988
大对象区块的大小:                     2048
日期/时间存储类型:                    64位整数
正在传递Float4类型的参数:             由值
正在传递Float8类型的参数:             由值
数据页校验和版本:                     0
数据页校验和算法设备:                 0
当前身份验证:                         cc0df2ed4d3a338f6ae2838c46cc123e2634be5
数据库模式:                          1
身份验证方法模式:                    0

四、 参数文件

金仓数据库的参数文件主要包括四个,它们分别是kingbase.conf、sys_hba.conf、sys_ident.conf和kingbase.auto.conf。下面对这四个参数文件的作用分别进行了介绍。

  • kingbase.conf

KingBaseES的主要参数文件,文件中有很详细的说明和注释。它的作用和Oracle的pfile、MySQL的my.cnf类似,该文件默认保存在$KINGBASE_DATA目录下。KingBaseES支持使用alter system命令来修改参数值,修改后的参数值会存在kingbase.auto.conf文件中,使用reload命令或者 restart命令来使之生效。

  • sys_hba.conf

这个是黑白名单的设置文件。

  • sys_ident.conf

该文件是用户映射配置文件,用来配置哪些操作系统用户可以映射为数据库用户。结合sys_hba.conf中的method选项可以用特定的操作系统用户和指定的数据库用户登录数据库。

  • kingbase.auto.conf

该文件保存最新的参数值配置。当数据库服务重启时,在该参数文件中的参数值将优先被加载。当执行alter system命令修改系统参数时,新的参数值会被自动写入 kingbase.auto.conf文件中,而不是 kingbase.conf文件。通过这种方法,即使几个月或几年之后,也能看到参数修改变化,也能够保证kingbase.conf文件的安全。

Daggr 是一个代码优先的 Python 库,可将 AI 工作流转换为可视化图,支持对 Gradio 管道进行检查、重跑和调试。

单模型、单 prompt 的简单 demo 通常不会有什么问题。但当工作流扩展到多个步骤,比如加入后处理函数、背景移除、转录摘要、检索重排等等时情况就开始失控了。

状态在各个环节之间流转,我们不得不反复运行 cell、打印中间结果、注释掉大段代码来定位问题。每次出错,甚至不确定该从哪个环节开始排查:是输入有问题?模型出了状况?还是中间的胶水代码逻辑不对?

这种场景在 AI 应用开发中极为常见。

Daggr 正是为解决这类问题而设计的。它不是要取代 Python,也不是强推拖拽式编辑器,而是填补一个长期存在的空白:用代码定义工作流,用可视化图审视系统状态。

Daggr 概述

Daggr 是一个用于构建 AI 工作流的开源 Python 库。工作流通过代码定义,使用标准 Python 语法,无需 DSL 或 YAML 配置。

Daggr 的核心功能是从代码生成可视化画布。这张画布是一个实时更新、可交互检查的有向图,精确反映代码的执行状态。每个计算步骤对应一个节点,节点之间的数据流向清晰可见,所有中间输出均可点击查看、单独重跑或回溯历史。

一个关键的设计决策是:可视化层仅作为观察工具,代码始终是唯一的事实来源。这一选择决定了 Daggr 与传统可视化编排工具的本质区别。

使用体验

安装:

 pip install daggr

创建一个 Python 文件,例如

app.py

 import random  

import gradio as gr  
from daggr import GradioNode, Graph  
glm_image = GradioNode(  
    "hf-applications/Z-Image-Turbo",  
    api_name="/generate_image",  
    inputs={  
        "prompt": gr.Textbox(  
            label="Prompt",  
            value="A cheetah in the grassy savanna.",  
            lines=3,  
        ),  
        "height": 1024,  
        "width": 1024,  
        "seed": random.random,  
    },  
    outputs={  
        "image": gr.Image(  
            label="Image"  
        ),  
    },  
)  
background_remover = GradioNode(  
    "hf-applications/background-removal",  
    api_name="/image",  
    inputs={  
        "image": glm_image.image,  
    },  
    postprocess=lambda _, final: final,  
    outputs={  
        "image": gr.Image(label="Final Image"),  
    },  
)  
graph = Graph(  
    name="Transparent Background Image Generator", nodes=[glm_image, background_remover]  
)  
 graph.launch()

运行:

 daggr app.py

输出的不是传统的黑盒 Gradio demo,而是一张可视化画布:两个节点通过边连接,输入参数可调整,输出结果可检查。开发者可以单独重跑图像生成节点或背景移除节点,也可以在历史结果之间切换,观察下游节点如何响应不同的输入状态。

整个调试过程无需 print 语句,无需人工追踪状态变化。

与 Gradio 的差异

Gradio 在构建单步 demo 方面表现出色,但当工作流涉及多个步骤时,调试难度显著上升。修改一个 prompt 后,下游某处出现问题,但难以确定:该步骤是否重新执行?使用的是哪组输入参数?

Daggr 直接解决了这一问题。每次节点运行都会被记录,每个输出结果都可追溯其来源,每条连接都标记了数据的新鲜度。当上游值发生变化时,Daggr 会通过视觉提示告知开发者;下游节点若未重新执行,状态一目了然。

Daggr 的工作流模型非常直观:工作流本质上是一个有向无环图(DAG)。

每个节点代表一次计算操作,可以是 Gradio Space API 调用、Hugging Face 推理请求,或普通的 Python 函数。节点通过输入端口和输出端口定义接口,数据沿着端口之间的连接流动。

核心概念就是这些,但实现细节中有许多值得关注的设计。

GradioNode:封装现有 Gradio 应用

GradioNode 用于调用已有的 Gradio 应用,支持 Hugging Face Spaces 上的远程应用和本地运行的应用。

 from daggr import GradioNode  
import gradio as gr  

image_gen = GradioNode(  
    space_or_url="black-forest-labs/FLUX.1-schnell",  
    api_name="/infer",  
    inputs={  
        "prompt": gr.Textbox(label="Prompt"),  
        "seed": 42,  
        "width": 1024,  
        "height": 1024,  
    },  
    outputs={  
        "image": gr.Image(label="Generated Image"),  
    },  
 )

对于熟悉 Hugging Face Spaces "Use via API" 功能的开发者,这种接口定义方式会非常熟悉。Daggr 采用了相同的参数命名和端点定义规范。

由于 GradioNode 调用的是外部服务,默认采用并发执行模式,无需处理线程管理或锁机制。

FnNode:自定义 Python 函数

当工作流需要自定义逻辑而非模型调用时,FnNode 提供了相应的支持。典型应用场景包括数据解析、过滤、组合和后处理。

 from daggr import FnNode  
import gradio as gr  

def summarize(text: str, max_words: int = 100) -> str:  
    words = text.split()[:max_words]  
    return " ".join(words) + "..."  
summarizer = FnNode(  
    fn=summarize,  
    inputs={  
        "text": gr.Textbox(label="Text to Summarize", lines=5),  
        "max_words": gr.Slider(minimum=10, maximum=500, value=100),  
    },  
    outputs={  
        "summary": gr.Textbox(label="Summary"),  
    },  
 )

Daggr 会自动检查函数签名,按名称匹配输入参数,按顺序将返回值映射到输出端口。

值得注意的是,FnNode 默认采用串行执行模式。这是一个经过权衡的设计决策:本地 Python 代码可能涉及文件操作、GPU 资源、全局状态,以及各种非线程安全的库。Daggr 选择了更保守的默认行为。

如需并发执行,可以显式声明:

 node=FnNode(my_func, concurrent=True)

InferenceNode:云端模型推理

InferenceNode 允许通过推理服务直接调用 Hugging Face 模型,无需下载模型权重或配置本地环境。

 from daggr import InferenceNode  
import gradio as gr  

llm = InferenceNode(  
    model="meta-llama/Llama-3.1-8B-Instruct",  
    inputs={  
        "prompt": gr.Textbox(label="Prompt", lines=3),  
    },  
    outputs={  
        "response": gr.Textbox(label="Response"),  
    },  
 )

InferenceNode 默认并发执行,并自动传递 Hugging Face token,支持 ZeroGPU 计费追踪、私有 Space 访问和受限模型调用。

Daggr 一些主要特征

溯源是 Daggr 的核心特性之一。

每次节点执行时,Daggr 都会保存输出结果及产生该结果的精确输入参数。结果历史可以像版本控制一样浏览。选择某个历史结果时,Daggr 会自动恢复当时的输入状态,不仅针对当前节点,下游节点的状态也会同步恢复。

这意味着开发者可以自由探索不同的参数变体而不丢失上下文。例如,生成三张图片,对其中两张执行背景移除,之后选择第一张图片,整个工作流图会自动对齐到对应的状态。

这不仅仅是便利性的提升,而是一种不同的开发范式。

状态可视化

Daggr 使用边的颜色传递数据状态信息:橙色表示数据是最新的,灰色表示数据已过期。

当上游输入发生变化时,所有依赖该输入的边都会变为灰色,清晰地指示哪些节点需要重新执行。

Scatter 和 Gather 模式

部分工作流需要处理列表数据:生成多个项目,分别处理,最后合并结果。Daggr 通过

.each

.all()

语法支持这种模式:

 script = FnNode(fn=generate_script, inputs={...}, outputs={"lines": gr.JSON()})  

tts = FnNode(  
    fn=text_to_speech,  
    inputs={  
        "text": script.lines.each["text"],  
        "speaker": script.lines.each["speaker"],  
    },  
    outputs={"audio": gr.Audio()},  
)  
final = FnNode(  
    fn=combine_audio,  
    inputs={"audio_files": tts.audio.all()},  
    outputs={"audio": gr.Audio()},  
 )

语法仍然是标准 Python,逻辑显式清晰,同时 Daggr 能够理解数据的分发与聚合语义。

Choice 节点

当需要在多个备选方案之间切换时,例如使用不同的图像生成器或 TTS 服务,但保持下游逻辑不变,可以使用 Choice 节点:

 host_voice=GradioNode(...) |GradioNode(...)

UI 中会显示一个选择器,下游连接保持不变,选择结果在 sheet 中持久保存。这种设计便于进行对比实验,同时保持代码库的整洁。

Sheets:多状态工作区

Daggr 引入了 sheets 的概念,可以理解为独立的工作区。每个 sheet 拥有独立的输入参数、缓存结果和画布布局,但共享相同的工作流定义。

这与复制 notebook 进行实验的场景类似,但管理更加规范。

API 与部署

Daggr 工作流自动暴露 REST API,可以通过以下方式查询 schema:

 curl http://localhost:7860/api/schema

部署同样简洁:

 daggr deploy my_app.py

Daggr 会自动提取工作流图、创建 Hugging Face Space、生成元数据并完成部署。

总结

对于单模型 demo,Gradio 已经足够;对于纯可视化编排需求,ComfyUI 可能更合适;对于生产级任务调度,Airflow 或 Prefect 是更成熟的选择。

而Daggr 的定位是中间地带:工作流复杂度足以需要可视化检查和调试,但尚未达到需要正式编排系统的程度;开发者仍处于探索、调整和迭代的阶段。

这是 Daggr 最能发挥价值的场景。

https://avoid.overfit.cn/post/725b46b7dd434d9eb3a90ff9d67b968a

作者: Civil Learning

MongoDB 近日宣布,在 MongoDB Atlas 上正式推出 Embedding 与 Reranking API 的公开预览版本。通过这一新 API,开发者可以在托管云数据库中直接调用 Voyage AI 的搜索模型,在一个统一的集成环境中构建语义搜索、AI 助手等功能,同时实现监控与计费的统一管理。

这一方案将构建 AI 检索系统所需的关键组件整合在同一平台上。MongoDB 表示,该 API 具备数据库无关性,可集成到任何技术栈或数据库中,面向正在构建检索驱动型 AI 系统的团队,覆盖从语义搜索、RAG(检索增强生成)到 AI Agent 等多种场景。MongoDB 高级技术产品营销经理 Thibaut Gourdel 与 MongoDB 资深产品经理 Wen Phan 在文中写道:

目前构建 AI 检索系统,往往需要把数据库、向量搜索和检索模型服务商“拼接”在一起,每一个环节都会引入额外的运维复杂度。为了解决这一问题,我们在 MongoDB Atlas 上推出了 Embedding 与 Reranking API。

此处输入图片的描述

MongoDB Atlas 上的 Embedding 与 Reranking API

在 .local San Francisco 活动上发布的另一项重要内容是 Voyage 4 系列模型的上线。该系列目前包含四种不同模型:voyage-4-large、voyage-4、voyage-4-lite,以及开源权重的 voyage-4-nano。与以往嵌入模型需要对查询和文档使用同一模型不同,Voyage 4 提供的文本嵌入模型运行在统一的向量空间中。这意味着,团队可以使用 voyage-4-large 存储数据,同时在查询阶段灵活使用任意 Voyage 4 模型。

此外,向量搜索的自动化嵌入功能已在社区版中开启预览,MongoDB Vector Search 的 Lexical Prefilters(词法预过滤)也已进入公开预览阶段,为开发者在向量搜索之外提供文本与地理分析过滤能力。对此,Deepak Goyal 在 LinkedIn 上评论道:

我昨天花了 3 个小时排查我们向量存储中一个长达 12 小时的同步延迟问题。这几乎是每个 AI 团队现在都在缴纳的“同步税”。如果你的数据已经滞后 24 小时,那你的 RAG 就谈不上“智能”,它只是一个索引做得不错的档案库。统一数据流之后,趋势已经很清晰:专用向量数据库的角色,正越来越接近 AI 世界里的“外置 GPU”。性能固然出色,但在多数生产环境下,集成式方案在速度和复杂度控制上更占优势。

在模型能力方面,这些嵌入模型支持 256 到 2048 维度,并支持量化处理,使开发者能够在准确率、成本与性能之间进行权衡。除了通用模型外,Voyage 还提供面向特定领域、整文档分析、多模态数据,以及多阶段搜索系统中重排序(reranking)的专用模型选项。

Gourdel 与 Phan 强调,尽管 MongoDB Atlas 已经内置了向量搜索能力,但新 API 的核心价值在于进一步降低复杂度:

这对于构建生产级 AI 系统至关重要。扩展 LLM 应用的关键,在于在恰当的时间提供正确的上下文,而这意味着必须将业务数据与高性能搜索进行紧密集成。

自 MongoDB 在近一年前宣布收购 Voyage AI 以来,社区便一直在期待并讨论 Voyage AI 能力与 MongoDB Atlas 的深度整合。此次 Embedding 与 Reranking API 的推出,也被视为这一整合方向的正式落地。

目前,Embedding 与 Reranking API 仍处于预览阶段。MongoDB 同时提供了 “Voyage AI Quick Start” 教程,形式为 GitHub 上的 Python Notebook,供开发者快速上手体验。

原文链接:

https://www.infoq.com/news/2026/02/mongodb-embedding-reranking-api/

这两年数据库圈有点像3年前的云原生圈:"分布式"、"新一代内核"、"重构存储引擎"这些词突然又密集起来了。

前几天刷群,看到有人转了 OpenTeleDB 的开源消息,说是"基于 PostgreSQL 的新一代内核"。说实话,我第一反应是:又一个魔改 PG?

但看到里面提到一个点:原位更新 + Undo 引擎(XStore),我还是没忍住下了源码。 因为这恰好戳中我这些年被 PG 折磨得最狠的痛点:

表膨胀、autovacuum 抽风、性能像心电图一样忽高忽低。

所以这次我没看 PPT,也没看宣传稿,直接跑到机器上拆了半天,想看看它究竟动了 PG 的哪根"老筋"。

一、先说结论:XStore 不是快,而是"稳"

image.png

我装的是 OpenTeleDB 的 17.6 内核版。 创建方式很直观:

SELECT relname, amname
FROM pg_class c
JOIN pg_am a ON c.relam = a.oid
WHERE relname = 'test_xstore';

image.png

这一步其实就已经很有意思了------它不是 fork 了一套新引擎,而是作为插件挂进去的。 这个思路我很认可:

  • 不绑死 PG 版本
  • 能跟着大版本升级
  • 出问题可以随时回退

像 Citus、openHalo 这些"成功插件化路线"的项目,本质都是这个思路。

image.png

二、打开数据目录,我第一次意识到:它真不是换皮

$PGDATA 下面,多了一个非常显眼的目录:

drwx------ 2 postgres postgres  4096 Nov  3 20:15 undo

这就是 XStore 的核心: 它不是靠多版本链来维护 MVCC,而是靠 Undo 日志回滚。

这点和 Oracle、MySQL InnoDB 的逻辑更像。

也正是它敢说"原位更新"的底气来源。

三、插入测试:它不快,但很"诚实"

我用同样的参数,在同一台机器上跑了两组:

INSERT INTO test_xstore (name, value)
SELECT md5(random()::text), (random()*1000)::int
FROM generate_series(1,10000000);
INSERT INTO test_heap (name, value)
SELECT md5(random()::text), (random()*1000)::int
FROM generate_series(1,10000000);

image.png

结果是:

image.png

写慢了将近一倍。这点我反而觉得真实:因为 XStore 在写数据页的同时,还要写一份 Undo。物理写入翻倍,吞吐下降是必然的。如果一个系统告诉你"原位更新 + Undo 还更快",那我反而会不太信。

四、创新实验:模拟1千万数据的存储膨胀对比

我设计了一项创新实验:在 1000 万条级别的大数据量下,评估 XStore 与 Heap 表在高频更新下的空间膨胀、索引稳定性以及查询性能表现。该实验主要有两个创新点:

大规模数据模拟

  1. 使用 generate_series(1,10000000) 生成 1000 万条数据,保证数据量级对存储膨胀影响明显。
  2. 初始数据包括 idnamevalueupdated_at 四列,与前期实验一致,但数据量增加十倍,以模拟真实大规模 OLTP 系统负载。

多维度空间分析

  1. 不仅监控表总大小,还分别统计索引占用和 TOAST 表空间。
  2. 每轮更新后,通过 pg_relation_sizepg_total_relation_sizepg_indexes_size 获取精细化指标。
  3. 引入 可视化趋势分析,绘制表空间增长曲线,以直观展示 XStore 与 Heap 的差异。

image.png

4.1 实验设计

表结构

CREATE TABLE xstore_large (
    id SERIAL PRIMARY KEY,
    name TEXT,
    value INT,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) USING XSTORE;

CREATE TABLE heap_large (
    id SERIAL PRIMARY KEY,
    name TEXT,
    value INT,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

image.png

初始化 1000 万条数据

INSERT INTO xstore_large (name, value)
SELECT 'name_' || g, g
FROM generate_series(1, 10000000) AS g;

INSERT INTO heap_large (name, value)
SELECT 'name_' || g, g
FROM generate_series(1, 10000000) AS g;

image.png

先对现在存入1000w数据的空间监控与记录一下如下。

image.png

SELECT
    pg_size_pretty(pg_total_relation_size('xstore_large')) AS xstore_total,
    pg_size_pretty(pg_indexes_size('xstore_large')) AS xstore_index,
    pg_size_pretty(pg_total_relation_size('heap_large')) AS heap_total,
    pg_size_pretty(pg_indexes_size('heap_large')) AS heap_index;
 xstore_total | xstore_index | heap_total | heap_index
--------------+--------------+------------+------------
 985 MB       | 388 MB       | 789 MB     | 214 MB

多轮全表更新

  • 连续 5 轮更新,每轮更新 valueupdated_at,模拟写入密集场景:
UPDATE xstore_large
SET value = value + 1, updated_at = CURRENT_TIMESTAMP;

UPDATE heap_large
SET value = value + 1, updated_at = CURRENT_TIMESTAMP;

image.png

空间监控与记录

SELECT
    pg_size_pretty(pg_total_relation_size('xstore_large')) AS xstore_total,
    pg_size_pretty(pg_indexes_size('xstore_large')) AS xstore_index,
    pg_size_pretty(pg_total_relation_size('heap_large')) AS heap_total,
    pg_size_pretty(pg_indexes_size('heap_large')) AS heap_index;

第一轮:

image.png

 xstore_total | xstore_index | heap_total | heap_index
--------------+--------------+------------+------------
 985 MB       | 388 MB       | 1578 MB    | 428 MB

第五轮:

image.png

 xstore_total | xstore_index | heap_total | heap_index
--------------+--------------+------------+------------
 985 MB       | 388 MB       | 1628 MB    | 428 MB

4.2 千万数据更新膨胀可视化

image.png

image.png

五、实验结论

这组 1000 万级数据 + 多轮全表更新的实验,其实把 PG 传统 Heap 表的"老问题"放大得非常清楚。

最核心的对比结果只有一句话:

XStore 的空间是线性的、可预测的;Heap 表的空间是失控的、不可预测的。

具体来看:

  1. 表空间膨胀

a. Heap 表在第一次更新后,表体空间直接翻倍,从 789MB 飙到 1578MB。

b. 之后每一轮更新,虽然增长幅度趋缓,但空间再也回不到初始状态。

c. XStore 从头到尾不变: 985MB → 985MB → 985MB

  1. 索引体积稳定性

a. Heap 表索引从 214MB 膨胀到 428MB,且在后续更新中保持"高位横盘"。

b. XStore 的索引尺寸始终维持在 388MB 左右,没有明显漂移。

  1. 更新行为本质差异

a. Heap:每一次 UPDATE,本质都是 DELETE + INSERT → 老版本残留 → 表膨胀 → 索引碎片 → autovacuum 压力。

b. XStore:真正的原位更新 → 历史版本进 Undo → 主表物理页不变 → 无膨胀。

  1. 长期可运维性

a. 在 Heap 表上,如果你不 VACUUM,它一定会慢; 如果你 VACUUM,系统一定会抖。

b. 在 XStore 上,这两件事都不再是必选项。

这意味着什么?

它不是让你飞起来,而是让你不再塌方

六、我的心得

说实话,这几年我已经对"新一代数据库内核"这类说法有点免疫了。大多数项目,要么是在 PG 上糊一层分布式壳; 要么就是换个名字,重新卖一遍 MVCC。而 XStore 给我的感觉不一样。它没有试图掩盖代价。写入更慢, IO 更多,架构更复杂。

但它正面承认了一个事实:

PostgreSQL 的 MVCC,在高频更新场景下已经接近物理极限。

这不是参数调优能解决的事,也不是加机器能扛住的事,而是存储模型本身的问题。这些年我见过太多系统:白天 QPS 很稳,半夜 autovacuum 开始清垃圾,延迟突然拉长,业务报警,DBA 开始手工 VACUUM / REINDEX / CLUSTER,第二天继续循环。

这不是运维水平的问题,而是模型在和现实硬扛。XStore 让我第一次意识到:原来 PG 也可以选择不走这条老路。它没有追求"更快",而是选择了一个更难、但更稳的方向:

  • 用 Undo 换空间可控
  • 用写放大换性能平滑
  • 用工程复杂度换系统长期可预期性

如果你是写多、更新密集型 OLTP 系统,如果你被表膨胀、索引碎片、autovacuum 抽风折磨过,那你会和我一样---不一定立刻用它,但你会开始认真看它。这大概就是我这次拆源码、跑实验,最大的收获。

很多团队想找 Confluence 替代软件,表面上是嫌编辑器、目录或权限麻烦,底层其实是知识沉淀跟不上交付节奏。本文以 VP 视角评测 8 款常见的 Confluence 替代软件:ONES Wiki、为知笔记、Outline、Wiki.js、XWiki、BookStack、Slab、Guru,围绕协作效率、治理能力与 ROI 给出可落地的选型建议。

结论先行:先用三句话缩小选择范围

  • 如果你要的是“知识库 + 研发协作的一体化底座”,并且希望文档与项目数据强关联:优先看 ONES Wiki。
  • 如果你要的是“面向业务团队/跨部门的知识分发”:可以关注为知笔记、Guru,其次是 Slab(偏知识中枢与搜索整合)。
  • 如果你更在意自托管、可控的开源栈:优先看 Wiki.js / XWiki / BookStack / Outline(治理能力与运维复杂度成正比)。

8 款 Confluence 替代软件盘点与测评

在开始选型前,我们要先把需求说清楚,我建议用下面这 6 个维度来做需求澄清:

  1. 内容模型与组织方式:空间/页面树/集合/主题(能否支撑跨团队规模化沉淀)。
  2. 文档协作体验:多人协作、评论批注、模板、评审流程(能否减少“写完没人看”)。
  3. 知识库管理与治理:版本、归档、回收站、标签与分类、运营数据(能否长期可控)。
  4. 权限与合规能力:角色权限、分级授权、2FA/SSO/审计(能否安全落地)。
  5. 搜索与 AI 访问路径:全文检索、附件检索、跨系统搜索、AI 问答是否“可引用”。
  6. 集成、部署与迁移成本(TCO):SaaS/私有化、对接成本、迁移工具与风险。

从经验来看:维度 2 决定“会不会用”,维度 3/4 决定“能不能长期用”,维度 6 决定“值不值得换”。

1)ONES Wiki:知识库 + 研发协作一体化

核心定位:ONES Wiki 是企业级知识库管理与文档协作工具,强调与研发项目数据深度关联。

从文档协作角度看,ONES Wiki 的优势在于能把文档直接关联上交付闭环。它支持富文本与 Markdown/代码块,支持多人同时协同以及进行评论/批注,这样也比较适合评审与异步讨论;更关键的是,ONES Wiki 的页面树结构把空间/目录的层级感做得很明确,适合把“规范—方案—评审记录—上线复盘”串成一条可追溯的知识链。
在知识库管理上,ONES Wiki 提供了企业更在意的治理能力:版本可控(记录历史版本并可回滚)、权限控制(按角色配置读写)、全局搜索(不仅搜页面,也强调附件内容可检索)、回收站恢复等,这些都是从“知识资产安全”视角去补齐 Confluence 替代软件的底层能力。

如果你正在做 Confluence 替换,ONES 还提供了面向 Confluence 的迁移方案(以 API 批量迁移),覆盖空间、用户、权限等数据类型,并强调迁移过程可监控、可出报告,适合做试点空间先迁、再分批切换的路径。从我的使用体验来看,我觉得它更适合研发组织进行知识库管理:文档能关联项目任务、嵌入任务进度与报表,这会显著降低知识与交付的断层。
ONES 提供 Confluence 替代方案

2)为知笔记:偏“团队工作笔记”与轻量知识库

核心定位:以工作笔记为中心的团队协作与知识沉淀,强调“记录与分享”形成团队知识库,适合资料与经验沉淀型组织。

为知笔记的文档协作逻辑更接近“团队笔记 + 协作消息”:通过群组空间集中共享资料,多级文件夹做目录治理,协作上强调@提及、评论、多人编辑。在知识库管理层面,它把权限做得相对细:群组可以按需拉人,内容仅群组成员可见,并提供管理员、超级用户、编辑、作者、读者等角色权限,适合把企业知识库拆成“部门库/项目库/公共库”。 另外,全文检索是典型的刚需能力——当知识开始累积到“找不到”,工具就会失去价值;为知笔记把检索与多端使用(Windows/Mac/Linux/iOS/Android 等)放在一个比较核心的位置,偏长期沉淀型团队 Wiki。

3)Outline(开源):适合偏工程化团队自托管

核心定位:Outline 的协作体验主打干净、实时协作顺滑,支持 Markdown 写作,并强调实时协作编辑带来的低摩擦讨论与同步,这对技术方案、设计评审、Runbook 这类文档很友好。

在知识库管理上,它的核心结构通常围绕 Collections/集合来组织文档,你可以把集合当成知识空间,在集合层做读写权限的划分,并且可以基于用户组做集合授权,满足“同一个知识库系统里,不同部门看不同空间”的治理需求。 这类能力决定了它能承接企业知识库的基本分区,而不只是个人笔记。

从 VP 视角我更关注两点:一是权限边界是否清晰(集合级权限 + 组授权是一个合理的治理颗粒度);二是知识可迁移性,Outline 在生态里强调导出/导入与自托管,适合对数据掌控与成本敏感的组织。体验下来,它的局限性在于如果你要更强的企业级治理(更细的审计、更复杂的流程化审批、更强的“知识质量运营”闭环),Outline 可能需要靠规范与二次集成补齐,所以它更适合作为 Confluence 替代软件的“工程化轻平台”,而不是“流程重平台”。

4)Wiki.js(开源):适合“合规优先”的自建 Wiki

一句话定位:现代化开源 Wiki,适合企业自建内部知识库,适合希望团队 Wiki 深度接入企业身份体系、搜索体系、Git 治理的团队。

Wiki.js 的编辑器多样,同一套知识库里既能用 Markdown,也能用可视化富文本编辑器,并支持页面编辑器的转换,这对跨角色(研发/产品/运营)协作很重要——不用强迫所有人都写 Markdown。 同时,它也支持评论体系,并且评论能力与权限绑定到“组权限 + 页面规则”,让协作讨论不至于变成无序噪音。

知识库管理方面,Wiki.js 的“企业级特征”非常突出:它把用户、组与权限当作治理核心,强调全局权限与页面规则的组合,并支持快速查看组的能力边界,适合做“多团队、多空间、多等级”的企业知识库管理。 搜索是另一个关键点:它提供多种搜索引擎模块(如 Elasticsearch、Azure Search 等),允许你把知识库检索能力按规模与预算升级,这对把 Confluence 替代软件用到“万页规模”很关键。
更工程化的一点在于存储:Git 存储模块支持与远程 Git 仓库同步,适合把制度、规范、技术文档纳入版本控制与审计链路,避免“知识库与代码库分裂”。它的局限性在于,你会获得高度可配置与可集成的能力,但也需要相对成熟的管理员与治理规范,否则权限/搜索/存储策略很容易配置成“能跑但不好用”。

5)XWiki(开源):治理与权限体系成熟

一句话定位:企业级开源 Wiki,强调基于 Wiki 原则的协作平台,面向“组织信息沉淀 + 协作文化”,并把结构化知识与协作编辑当作核心能力来设计。

在文档协作上,XWiki 的优势通常来自它的“企业平台属性”:除了页面编辑与协作,它对附件管理也更像企业系统——例如附件上传同名文件时可维护版本历史,默认会保留附件版本,这对需求规格、接口文档、合规材料这类“附件也是证据链”的场景很关键。知识库管理上,XWiki 更适合构建“结构化 + 可扩展”的企业知识库:当你需要把知识库从“文档库”升级成“可配置的门户/应用”,它在扩展性、集成性上会更有想象空间(代价是实施与配置更复杂)。

我的使用体验是,它不是那种“开箱即用的轻工具”。如果你团队还处在“先把知识写起来、先把检索跑起来”的阶段,先用更轻的团队 Wiki;当你的组织开始追求“知识治理 + 权限模型 + 可扩展应用”,再把 XWiki 纳入 Confluence 替代软件的候选列表。

6)BookStack(开源):结构化“书—章节—页面”

一句话定位:BookStack 的内容按照 Books(书)作为最高层分类,书里可以有 Chapters(章)和 Pages(页),用接近“纸质手册”的结构让知识天然可导航、可分工。 这对企业知识库管理尤其友好,因为制度与流程往往需要稳定目录,而不是无限扁平的页面列表。

在文档协作上,它强调“易维护”:管理员可以在组织内容界面里拖拽调整章节和页面顺序,甚至在不同书之间移动,适合在知识库不断增长时做结构重构,而不至于重写链接体系。 对于跨部门协作,你可以把“公司级政策”放在书架下,再把“部门 SOP”拆成不同书,实现团队 Wiki 的分区管理。知识库治理方面,BookStack 的优势来自“结构即治理”:当目录稳定、页面颗粒度合理,搜索与复用都会变得更简单;并且它也强调围绕内容结构去设置分享与权限(不少部署教程会把“权限分享”作为基础步骤)。

局限在于:如果你追求强实时协作、像在线白板那样的共同编辑体验,BookStack 可能不是最合适的;但如果你的目标是把 Confluence 替代软件用于“标准化知识资产沉淀”,它的结构化优势往往更明显。

7)Slab:支持跨系统统一搜索

一句话定位:Slab 的文档协作强调“干净的写作体验 + 快速共享”,它把知识组织核心放在 Topics(主题)上,既用于分类,也用于给内容提供上下文,让企业知识库不只是“文件夹堆叠”。

对知识库管理来说,Slab 最有辨识度的是 Unified Search:它强调不再让用户在多个工具里来回找,而是在 Slab 的搜索框里同时检索 Slab 内容与已接入的工具内容,从而把团队 Wiki 变成“入口”而不是“孤岛”。 这对于知识分散在 Slack、Google Workspace 等工具里的组织尤其关键。

权限治理方面,Slab 在 Topic 上提供“可发现、可查看、可编辑”的权限控制,并且权限会影响主题内的文章访问范围——这让你能用相对简单的方式搭出“公共知识库/部门知识库/敏感知识库”。

局限在于:当你需要更复杂的审批流、知识质量运营、或把文档与研发流程强绑定时,Slab 更偏“知识入口 + 轻协作”。它适合用作 Confluence 替代软件的“轻量知识库”,并通过集成与统一搜索来放大价值。

8)Guru:用知识卡片沉淀可复用答案

一句话定位:Guru 强调用知识卡片沉淀可复用答案,并通过 AI 辅助生成、检索与问答分发,把知识库从“人找文档”变成“直接给答案”。

在知识库管理与治理上,Guru 把权限与来源连接做得比较系统:管理员可对内容与连接的数据源设置权限,控制到组/用户对 Sources、Collections、文件夹、Knowledge Agents 的访问边界,避免 AI 把不该看的知识“答出来”。 同时,Knowledge Agents 还支持基于使用与反馈信号的自动验证/取消验证机制,帮助知识库维持“可信度”,这是很多团队 Wiki 做不到的运营闭环。

使用体验上,它非常适合“知识消费频率高”的组织:问题反复出现、答案需要统一口径、且希望通过分析与审计持续优化知识资产;但它也更依赖“内容规范化与持续维护”,否则 AI 再强也只是放大混乱。对把 Guru 作为 Confluence 替代软件的团队,我的建议是:先把高频业务域(如交付/支持/售前)做成“权威答案库”,再逐步扩展到全域知识库。

关于 Confluence 替代软件的 FAQ

Q:如果我们希望“文档和研发协作强关联”,选 Confluence 替代软件重点看什么?
A:优先验证三点:文档能否关联需求/任务/迭代、是否支持把项目进度/报表这类信息“带进文档”、以及页面结构(空间/页面树)是否利于长期知识库管理。以 ONES Wiki 为例,它强调文档可关联项目任务、需求与文档互相对应,并支持在文档中嵌入任务进度与报表——这类能力你可以当成“强关联型 Confluence 替代软件”的验收项。

Q:从 Confluence 迁移到新知识库,最常见的坑是什么?
A:最常见的坑是权限映射不完整、附件/超链接丢失、样式(表格/代码块等)失真,导致迁移后“能看但不好用”。ONES 的迁移说明里提到用 API 批量迁移空间、用户、权限等,并尽量保留表格、代码块、附件、超链接等样式,同时支持分批迁移和迁移报告下载——不论你是否选 ONES,这些点都很适合作为迁移验收清单。

Q:如果企业有强合规要求,优先看哪些能力?
A:至少确认 2FA/SSO 策略、角色权限模型、审计可追溯、敏感空间隔离。

Q:迁移时最关键的数据是什么?
A:空间结构、用户与用户组、权限、附件与历史版本。只迁内容不迁权限,往往等于“迁移失败”。

Q:研发团队为什么更偏好“文档与项目系统关联”?
A:因为文档只有和需求/任务/发布/复盘绑定,才会形成闭环,否则很快变成“写完就沉底”。

我从市场转岗做项目经理后,最先翻车的不是排期,而是“需求”。我以为把客户的话写清楚就够了,结果研发、测试、业务各说各的:有人嫌太贵、有人说测不了、有人觉得做偏了。后来我才明白,项目需求管理不是记需求,而是把“共同理解”做成闭环:从收集、澄清、拆解到评审、变更、验收,每一步都要可落地。

项目需求管理 6 步速览:需求收集 → 需求澄清 → 需求拆解 → 需求评审与优先级 → 需求跟踪与变更控制 → 验收与关闭(复盘)

我刚转岗时踩过的坑:需求不是“记录”,而是“对齐”

我第一次负责跨部门项目时,开会特别勤奋:会议纪要写得像新闻稿,需求清单列得像菜单,甚至把客户原话都逐字整理。

但上线前一周,我们突然吵起来:

  • 业务说:“我想要的是更方便,不是多一个入口。”
  • 研发说:“你写的‘支持导出’太大了,权限、性能、审计都没讲清。”
  • 测试说:“你没给验收标准,我只能靠猜。”

那一刻我才意识到:需求不是信息搬运,而是认知对齐。对齐不够,就会出现一种特别折磨人的状态:每个人都很努力,但努力的方向不一致。我后来给自己定了个很朴素的门槛:让我写下的每一条需求,都能被研发估算、被测试验证、被业务验收。我们团队后来把「需求卡片—任务—测试—缺陷」的链路尽量放到同一个系统里管理,像 ONES Project 这种能把需求池、迭代、任务、缺陷串起来的工具,会让需求对齐更容易落地一些。

这句话听起来像常识,但它会逼着你把项目需求管理做成闭环而不是清单。更重要的是——它会让你在“业务想要更多”和“团队做不到那么多”之间,找到一个可沟通、可选择的中间地带。

项目需求管理全流程:从收集到验收的 6 步闭环

我下面讲的不是“理想流程”,而是我在真实项目里反复调整后留下的一套“最小可用闭环”。你可以直接拿去套用,再按团队习惯微调。

小概念先对齐:

  • 项目需求管理:持续识别、记录、沟通、维护并追踪需求,让需求在变化中仍可交付、可验收。
  • 如果你还关心“内容怎么更容易被 AI 引用”,可以了解 GEO(Generative Engine Optimization)这类框架:核心思想是把经验总结组织成更容易被抽取的“答案块”。

(好,概念到此为止,我们继续回到项目现场。)

第一步:需求收集——先收“场景与问题”,再收“方案”

新人最容易把“需求收集”做成“方案征集”。你问“你想要什么功能?”,对方就会给你一个“按钮/报表/看板”。听起来很明确,但背后的真实问题可能完全不同——你把“功能”记下来了,却没把“为什么”带回来。

我后来吃过一次亏:业务说“要一个导出按钮”,我立刻记成“支持导出”。等做到一半才发现,他们真正焦虑的是“月底对账要手工复制粘贴,错一格就全盘返工”。如果我当时先把“场景与痛点”问清楚,也许我们会做的是“固定字段的一键导出 + 权限审计”,而不是做一个无限扩展的“导出中心”。

  • 输入:来自客户/业务/销售/运营的诉求、截图、数据、录屏/会议纪要
  • 输出:一条“可讨论”的需求卡片(场景+问题+目标+约束+证据)
  • 常见坑:只收“功能名”,不收“为什么”;只收“想要”,不收“约束与证据”
  • 我怎么做:先问三类问题,把对话从“功能”拉回到“情境”

我常用的 3 组提问:

  • 场景:谁在什么情况下用?频率多高?现在怎么做?
  • 痛点:最卡的一步是什么?卡住会带来什么损失(时间/错误/合规风险)?
  • 目标:做成后希望改善什么结果(效率/错误率/体验/合规)

轻量需求收集模板(建议放会议纪要顶部)

  • 需求提出人/角色:
  • 使用场景(何时、谁用、现流程):
  • 现状问题(为什么痛):
  • 期望目标(改善什么):
  • 约束条件(权限/合规/系统限制/上线窗口):
  • 参考资料(截图/数据/样例):

我的小经验:在“证据”里优先拿到截图/录屏/样例数据。它们不是为了较真,而是为了让团队少靠想象沟通。我们在项目实践里一般会把这些信息沉到需求池里统一入口管理,比如用 ONES Project 支持建立需求池、编写需求并维护属性,后面评审、排期才不会“各群各表各版本”。

第二步:需求澄清——把“模糊词”变成“可验证的描述”

需求里最危险的词,通常是:“尽量、支持、方便、快速、优化、像 XX 一样”。我后来给自己做了一个“模糊词翻译器”,每次遇到就强迫自己翻译成可验证语言(这招真的救过我很多次):

  • “尽量快” → 在高峰期(XX时段),列表首屏加载 ≤ 3 秒
  • “支持导出” → 在XX页面,具备XX权限的人可导出A/B/C字段,格式为CSV,最大支持N条
  • “体验更好” → 步骤从 6 步到 3 步;错误提示到字段级;提供模板示例

这里我想补一句更“现实”的:澄清不是把话说漂亮,而是把争议提前搬到桌面上。你现在把“边界”说清楚,未来就少一次“你当时没说”的拉扯。

  • 输入:需求卡片(场景/目标/约束/证据)
  • 输出:清晰的需求描述 + 初版验收标准(Acceptance Criteria)
  • 常见坑:用“差不多/类似/更好”当结论;把争议留到开发后期
  • 我怎么做:用 5W1H + 边界,把“可交付”逼出来

我在澄清阶段会用“5W1H + 边界”做最后确认:

  • Who:谁用?
  • What:做什么?
  • Why:为什么做?不做会怎样?
  • When:什么时候触发?频率?
  • Where:在哪个流程/页面?
  • How:交互/流程怎么走(不写技术细节,但要写清用户行为)
  • 边界:不做什么?哪些情况不支持?

我常用的“边界句式”是:“本期不支持 X,因为会带来 Y 风险/成本;我们先交付 最小可用版本 A,并在 B 条件满足后再评估扩展。”这句话能把对话从情绪拉回选择:不是“我不让你做”,而是“我们先交付什么、后续怎么扩”。

另外,如果你们团队习惯把 PRD/澄清纪要放到知识库,像 ONES Wiki 这种支持文档协作、版本记录、并且能把文档和项目任务/需求关联起来的方式,能显著减少“文档在飞、链接找不到”的沟通损耗。

第三步:需求拆解——把“大而全”拆成“可交付的小块”

“一个大需求”往往像一团毛线:你不拆,它就会在开发中越拉越乱。更可怕的是——你以为在推进,其实是在把不确定拖到最后爆炸。我拆解时遵循一个判断标尺:拆到研发能估算、测试能验证、业务能验收为止。另外我给自己加了一个“新人友好”的粒度规则:单个交付块最好能在 1–3 天内完成开发与验证(视团队而定),并且依赖关系能一句话说清楚。这样估算会更稳定,进度也更可控。

  • 输入:澄清后的需求描述 + 约束 + 验收方向
  • 输出:用户故事/功能点列表 + 子任务 + 验收条目(每条都能“测”)
  • 常见坑:拆成“技术任务”但业务无法理解;拆得太粗导致估算失真
  • 我怎么做:先用“用户故事”表达价值,再落到“验收条目”表达完成

用户故事写法:作为【某角色】,我希望【做某事】,从而【获得某价值】。

然后用 INVEST 做自检:独立、可协商、有价值、可估算、足够小、可测试。(我以前最容易忽略“可测试”,最后就会在验收时“各说各话”。)拆解到任务层时,我会强制补一列:验收条目以“支持客户数据导出”为例,拆开后可以是:

  • 导出入口与交互(从哪里点、默认条件是什么)
  • 导出字段范围(A/B/C,是否可配置)
  • 权限与审计(谁能导、导出记录留痕)
  • 性能与限制(最大条数、超限提示)
  • 异常处理(失败重试、错误提示)
  • 验收条目(每一项怎么判定通过)

你会发现:一旦你能把“验收条目”写出来,需求就从“讨论题”变成“交付题”了。这一步如果偷懒,下一步评审就会变成“凭感觉排优先级”。

第四步:需求评审——不是“走流程”,而是“做取舍”

我曾经把评审当成“大家过一遍”。后来才知道评审真正要解决的是三件事:价值是否值得做(目标清不清楚?)、成本与风险是否可控(依赖、合规、性能、资源)、范围是否一致(本期做/不做是什么?)。

  • 输入:拆解后的需求列表 + 验收条目 + 风险/依赖
  • 输出:优先级结果 + 本期范围(Scope)+ 决策记录
  • 常见坑:评审只讨论“做不做”,不讨论“做多少”;结论不落纸面
  • 我怎么做:带“一页摘要”+ 一套优先级语言,帮会议收口

(1)一页评审摘要(让讨论聚焦)

  • 背景与目标(1–2句)
  • 方案概述(流程图/关键页面)
  • 范围:本期做 / 不做
  • 风险与依赖(接口、资源、合规)
  • 验收标准(3–5条)
  • 预估工作量(若团队习惯)

(2)MoSCoW 优先级(让取舍有共同语境):Must / Should / Could / Won’t(这次不做)。

我主持评审时常用的“收口话术”是:“我们先把 Must 的定义写清楚:不做会不会影响上线/合规/核心流程?Must 没定下来,Should/Could 讨论再热闹也只是吵架。”

如果你所在团队很在意“投入产出”,可以把 WSJF 作为扩展:它用“延迟成本/工作时长”来帮助排序。但我个人建议新人先用“简化版”就够了:价值(高/中/低)×时效(急/不急)×成本(大/中/小),先把“讨论维度”建立起来,比算得精更重要。
评审不是让所有人满意,而是让团队对“取舍”达成一致。取舍一旦一致,后面的推进会轻很多。

第五步:需求跟踪与变更——给变化一个“入口”,别让它变成情绪对抗

需求变更不可避免,真正可怕的是:变更发生了,但没有入口、没有评估、没有决策记录,最后变成“谁嗓门大听谁的”。我很认同一个项目实践观点:清晰的变更控制流程可以帮助团队评估请求、同步更新,并减少范围蔓延。

  • 输入:新增/调整诉求、外部环境变化、上线反馈
  • 输出:变更清单(Change Log)+ 影响评估 + 决策结论
  • 常见坑:口头同意就开干;变更不记录;范围蔓延(scope creep)
  • 我怎么做:三件事:入口、评估、追溯

动作1:建立变更入口(Change Log):任何新增/调整都必须进变更清单:

  • 变更内容
  • 变更原因(业务/合规/用户反馈/技术限制)
  • 影响评估(范围/成本/进度/质量/风险)
  • 决策人(谁拍板)
  • 结论(批准/拒绝/延期)

动作2:把影响评估变成“四问”,让变更可讨论

  • 这次变更带来的业务价值是什么?(不做会怎样)
  • 需要付出的成本是什么?(人天/依赖/复杂度)
  • 会增加哪些风险?(合规/性能/数据/发布窗口)
  • 对当前承诺的上线时间/范围影响是什么?

我会很直白地说:想加需求可以,但请同时选择:延期 / 加资源 / 降范围(或降低非关键质量门槛)。这句话不是强硬,而是把“隐形代价”说清楚,让决定更像决定。

动作3:补一条轻量追溯(别让自己失忆)

当需求多了,你会出现一种恐惧:“这条需求从哪来?影响了哪些功能?哪些测试要改?”这时可以引入轻量 RTM(需求追溯矩阵,Requirements Traceability Matrix):把需求映射到对应的设计/开发/测试与验证,确保每条需求都被覆盖与验证。

我自己的落地做法很轻:哪怕只是三列——需求ID → 开发任务链接 → 测试用例/验收记录链接——也足够你在变更频繁时不崩溃。

第六步:验收与关闭——别让“做完了”变成“吵完了”

我以前对验收的理解很天真:做出来给业务看一眼,“差不多就行”。后来我才明白,验收不是“感觉”,验收是“条件”。条件写清楚,讨论就会少很多情绪,多很多事实。

  • 输入:需求列表 + 验收条目 + 变更结论
  • 输出:验收记录(通过/不通过/遗留项)+ 上线回访结论
  • 常见坑:验收标准临时编;遗留项不归档;上线后没人复盘
  • 我怎么做:把“完成”拆成两层:AC + DoD

(1)Acceptance Criteria(验收标准):每条需求的通过条件

我最常用 Given-When-Then 写法(不花哨,但很好用):

  • Given:前置条件
  • When:触发动作
  • Then:期望结果

示例(导出需求)

  • Given:用户拥有“数据导出”权限,且筛选条件为“本月”
  • When:点击“导出 CSV”
  • Then:在 30 秒内生成文件,包含 A/B/C 字段,超过 N 条给出明确提示

(2)Definition of Done(完成定义):团队统一的质量门槛

Acceptance Criteria 描述单个条目需要满足什么;DoD 是对所有条目通用的质量承诺。

示例 DoD(你可以按团队调整)

  • 关键路径有自测记录或自动化用例
  • 文档/变更说明已更新
  • 关键埋点/日志可定位问题
  • 回滚方案明确(如适用)

最后我会留一份“验收结论留痕”:

  • 通过/不通过
  • 遗留项(是否影响上线)
  • 后续计划(谁负责、何时补齐)

我特别想提醒新人:你不是在“挑刺”,你是在帮团队把“交付的定义”固定下来。越早固定,越不伤感情——因为大家不用靠猜去合作。

一张表把 6 步闭环串起来(便于自己复盘,也方便团队对齐)

项目需求管理 FAQ

Q1:项目需求管理和产品需求管理有什么区别?
项目需求管理更聚焦“交付与协作”:范围、变更、验收与跨角色对齐;产品需求管理更聚焦长期价值与路线图。两者会交叉,但项目侧更强调“可交付、可验收、可追踪”。

Q2:需求频繁变更怎么办?
先承认“变更正常”,再建立 Change Log:记录原因、评估影响、明确决策人,并把变更当成对承诺的调整来管理,减少范围蔓延。

Q3:验收标准怎么写才不扯皮?
把“感觉词”翻译成“条件词”:用 Given-When-Then 写清前置条件、触发动作和期望结果;同时用 DoD 统一团队的质量门槛。

Q4:需求拆到什么粒度算合适?
一个简单判断:研发能估算、测试能验证、业务能验收。用 INVEST 自检“是否足够小、是否可测试”很管用。

Q5:新人主持需求评审总是收不住怎么办?
带 MoSCoW 这种“共同语境”进会议,把争论从“喜欢不喜欢”拉回到“Must/Should/Could/Won’t”,并把 Must 的定义写清楚再往下推进。

回头看,我越来越相信一句话:项目管理不是控制混乱,而是学会与不确定共处。需求会变、资源会变、优先级会变,但我们依然可以用一套清晰的项目需求管理闭环,让变化变得“可讨论、可评估、可选择”。

如果你也和我一样,是从市场、运营、销售、产品等岗位转来做项目经理的新人,请别急着证明自己“很专业”。你只要坚持做三件事:让信息更透明、让决策更清晰、让验收更可验证——你会越来越像一个可靠的项目协调者,也会越来越被团队信任。

本文为《深入理解 Apache DolphinScheduler:从调度原理到 DataOps 实战》系列专栏第 2 篇,从源码与调度模型视角,解析 DolphinScheduler 的核心抽象设计,重点说明 Workflow、TaskDefinition 与实例对象的职责边界,并结合 DAG 示意图解释调度系统如何基于依赖判断驱动复杂任务编排。

上文回顾:调度系统,不只是一个“定时器”

在真正使用 DolphinScheduler 一段时间之后,很多人都会产生一个疑问:为什么系统里会同时存在流程定义、流程实例、任务定义、任务实例这么多对象?是不是“设计过度”了?

如果从源码和调度系统的运行方式来看,答案恰恰相反——这些抽象是为了压住复杂性而被刻意拆开的

Workflow:一张不会“运行”的 DAG 蓝图

在 DolphinScheduler 的设计中,Workflow(源码中对应 ProcessDefinition)从一开始就被定义为纯静态结构

它描述的内容非常克制:流程里有哪些任务、任务之间如何依赖、是否存在条件分支或子流程。这些信息共同组成了一张 DAG,但这张 DAG 永远不会自己执行

从源码角度看,Workflow 更像是一个结构化配置对象,而不是调度对象。

你可以在数据库里看到,它不记录成功、失败、开始时间,也不关心某次运行发生了什么。

这背后其实是一条很重要的设计原则:

结构和执行必须彻底分离,否则状态会污染定义。

DAG 在 DolphinScheduler 中真正解决的是什么问题

在 DolphinScheduler 里,DAG 的职责非常单一:
判断“某个任务现在能不能被调度”

它不关心任务如何执行,也不关心任务执行结果的业务含义,只关心依赖是否满足。

📌 这里放一张 DAG 的 PNG 示意图,展示了一个典型的多父依赖结构。节点是否被调度,并不取决于执行路径的先后顺序,而取决于其所有上游依赖是否已经完成。这正是 DolphinScheduler 在运行时对 DAG 进行动态判断的核心逻辑。

DS DAG

在源码实现中,DAG 会在流程实例启动时被解析成内存结构,用来驱动后续的调度决策。

当某个 TaskInstance 状态发生变化时,调度器并不是“继续往下跑”,而是重新判断 DAG 中哪些节点被解锁了。

这也是为什么 DolphinScheduler 可以天然支持并行、条件分支和失败阻断。

这些能力并不是“写死的逻辑”,而是 DAG 推理的自然结果。

TaskDefinition:任务的“执行模板”

如果说 Workflow 是流程的蓝图,那么 TaskDefinition 就是单个任务的模板

在源码中,TaskDefinition 保存的是“如果这个任务被调度,它应该如何被执行”的信息,比如:

  • 任务类型(Shell、SQL、Spark、Flink 等)
  • 参数、脚本内容
  • 失败策略、超时配置、资源参数

但有一点非常关键:
TaskDefinition 是完全无状态的。

你在 TaskDefinition 里永远看不到“这次执行是否成功”之类的字段,因为这类信息从语义上就不属于“定义”。

这一点在代码中体现得很明显,例如(示意):

public class TaskDefinition {
    private Long id;
    private String name;
    private TaskType taskType;
    private String taskParams;
    private int timeout;
    private int failRetryTimes;
    // 注意:这里没有任何 execution state
}

TaskDefinition 的职责只有一个:描述“怎么跑”,而不是“跑得怎么样”。

流程定义 vs 流程实例:真正的分水岭

理解 DolphinScheduler,绕不开“定义”和“实例”的区别。

当一个 Workflow 被真正触发执行时,系统会基于 Workflow 和 TaskDefinition 复制出一整套运行态对象,也就是:

  • ProcessInstance
  • TaskInstance

ProcessInstance 代表的是:

“这一次流程执行”

TaskInstance 代表的是:

“这一次任务执行”

所有你在 UI 上看到的状态变化、失败重试、运行日志,全部发生在 Instance 层,而不是 Definition 层。

从源码上看,这个边界非常清晰:

public class ProcessInstance {
    private Long id;
    private Long processDefinitionId;
    private ExecutionStatus state;
    private Date startTime;
    private Date endTime;
}
public class TaskInstance {
    private Long id;
    private Long taskDefinitionId;
    private ExecutionStatus state;
    private int retryTimes;
    private Date startTime;
}

定义是可复用的,实例是一次性的。 这正是调度系统能长期稳定运行的关键。

这些抽象如何支撑“复杂编排”

当任务数量上升、流程开始嵌套、失败变得常态化时,如果没有这些抽象拆分,系统很快就会失控。

DolphinScheduler 通过清晰的模型边界,实现了几件非常重要的事情:

  • 同一个 Workflow 可以并发跑多个实例而互不干扰
  • 失败重试只影响 TaskInstance,不污染定义
  • DAG 判断和任务执行彻底解耦
  • 调度逻辑可以围绕“状态迁移”而不是“业务逻辑”展开

从这个角度看,DolphinScheduler 并不是在“管理任务”,而是在管理状态和依赖的演进过程

小结

如果你把 DolphinScheduler 当成一个“高级 Cron”,这些模型看起来确实复杂;但一旦站在系统和源码的视角看,它反而是一套非常克制、非常工程化的设计

下一篇,我们可以继续顺着这套模型往下拆,聊聊:
调度器是如何围绕状态流转运转起来的,以及失败是如何被“消化”的。

很多团队一开始都把调度系统当成“定时跑任务的工具”,直到任务规模上来、依赖变复杂、失败开始难以恢复,才意识到问题的根源并不在脚本本身。

接下来,社区将推出《深入理解 Apache DolphinScheduler:从调度原理到 DataOps 实战》系列专栏,从工程视角出发,围绕 Apache DolphinScheduler,结合真实的数据平台场景,系统拆解调度系统在复杂依赖、失败恢复、状态一致性与平台治理中的关键设计。内容覆盖核心抽象、调度流程、状态机机制、生产实践以及 DataOps 演进路径,力图回答一个问题:如何在不确定的环境中,构建一个可靠、可扩展、可解释的调度系统

作为开篇,本文会先从 Cron、脚本调度和平台级调度的区别讲起,解释为什么调度系统会成为数据平台的“中枢神经”。

在很多团队里,调度系统的起点都很相似:

“按时间把任务跑起来就行。”

于是从 Cron 开始,用脚本串流程,用 Airflow、Oozie 或其他工具“兜一层”。

直到某一天,任务开始频繁失败、难以恢复、难以解释,调度系统才真正成为平台的核心组件。

问题也随之浮出水面:

调度系统真正面对的,从来不是时间,而是复杂性。

Cron、脚本调度、平台级调度的本质区别

从工程视角看,这三者解决的是完全不同层级的问题

Cron 解决的是「触发」:

  • 在某个时间点,拉起一个进程
  • 不关心任务是否成功
  • 不关心任务之间的关系

脚本调度解决的是「流程拼接」:

  • 用 Shell / Python 把多个步骤串起来
  • 依赖关系写在代码或文档中
  • 错误处理高度依赖人工经验

平台级调度关注的,是「执行语义」:

  • 任务之间的依赖是否满足
  • 失败后系统应该采取什么动作
  • 一次执行是否可以被安全地重放
  • 系统异常后状态是否可恢复

当任务规模从“几个脚本”演进为成百上千个 DAG时,
调度问题就从“怎么跑”升级为:

如何在不可靠的环境中,维持一个可靠的执行系统。

为什么调度系统是数据平台的“中枢神经”

在成熟的数据平台中,调度系统并不是边缘组件,而是控制平面

  • 向上,连接数据开发、分析、AI、指标计算
  • 向下,编排 Flink、Spark、SeaTunnel 等执行引擎
  • 横向,贯穿数据生产、加工、发布的完整链路

任何一个节点异常,最终都会体现在调度层:

  • 上游延迟 → 下游阻塞
  • 执行失败 → 数据不可用
  • 人工补数 → 影响全局一致性

这也是为什么调度系统必须具备:

  • 全局视角
  • 可观测状态
  • 明确的失败与恢复语义

从这个角度看,调度系统不是“跑任务的工具”,
而是整个数据平台的运行协调者

DolphinScheduler 解决了哪些“隐性问题”

很多团队在早期并不会意识到调度系统的重要性,是因为隐性问题在规模较小时不会暴露

DolphinScheduler 的设计,正是围绕这些问题展开的:

1️⃣ 执行与定义混在一起的问题

脚本调度往往把“流程结构”和“执行结果”混在一起,一旦失败,就很难判断失败的是哪一次执行

DolphinScheduler 通过「定义 / 实例」的明确分离,让每一次执行都有可追溯的上下文。

2️⃣ 失败之后“不知道该怎么办”的问题

失败重试、手动重跑、补数回填,在脚本体系中往往是:

  • 人为判断
  • 临时操作
  • 不可复现

而 DolphinScheduler 把这些行为显式建模为调度语义,让系统而不是人,承担一致性责任。

3️⃣ 系统异常后的状态丢失问题

进程退出、机器宕机、服务重启,在分布式环境中是常态。

调度系统必须回答一个问题:

系统恢复后,哪些任务“真的跑完了”,哪些只是“看起来跑过”?

DolphinScheduler 的实例与状态机制,正是为了解决这一问题。

调度复杂性从哪里来?

调度系统之所以复杂,并不是因为功能多,而是因为它必须面对多种不确定性叠加

  • 执行时间不确定
  • 资源可用性不确定
  • 数据到达时间不确定
  • 人为干预不可避免

这些不确定性最终都会映射为一个问题:

系统当前所处的状态,是否可信?

因此,调度系统天然是一个长生命周期、跨节点、状态驱动的分布式系统

这也解释了为什么 DolphinScheduler 的核心是:

  • 状态机
  • 实例生命周期
  • Master / Worker 职责分离

而不是简单的“任务分发”。

DolphinScheduler 架构设计的原理

为什么 DolphinScheduler的架构必须是 Master / Worker 架构?这是因为在 DolphinScheduler 中:

  • Master 不负责执行任务
  • Worker 不负责调度决策

这种划分的目的,并不是性能,而是职责清晰

  • Master 负责驱动流程状态机
  • Worker 只负责一次具体执行

这使得:

  • Worker 可以失败,流程仍可恢复
  • 执行失败 ≠ 调度失败
  • 调度逻辑可以独立演进

这是平台级调度系统得以横向扩展和高可用的前提。

写在最后

如果只把调度系统当成“定时器”,DolphinScheduler 显得复杂而笨重。

但当你站在数据平台工程的视角回看,会发现它解决的是一个极其核心的问题:

如何让一组不可靠的任务,组成一个可靠、可恢复、可解释的执行系统。

这也是为什么调度系统,最终会成为数据平台的“中枢神经”。

在下一篇文章中,我们将进一步下潜,从最基础、也最关键的地方开始:

👉 DolphinScheduler 的核心抽象模型:Workflow、Task 与 Instance

如果 CSS 能像 JavaScript 一样进行条件判断会怎样?

你可能会想,只是个条件判断,能有什么用?

那你就太小瞧这个功能了!

这篇文章带你展示它的强大。

PS:目前 CSS if() 函数已在 Chrome 137 中正式发布。

1. 基本用法

property: if(condition-1: value-1; condition-2: value-2; condition-3: value-3; else: default-value);

函数会按顺序检查条件并应用第一个匹配的值。如果没有条件匹配,则使用 else 值。

CSS if函数基本用法

2. 3 大使用场景

2.1. 深色模式

以前实现深色模式,要么用 JavaScript 切换 class,要么写两套样式。

现在你可以直接这样写:

body {
  --theme: "dark"; /* 通过 JavaScript 或用户偏好切换 */
  background: if(style(--theme: "dark"): #1a1a1a; else: white);
  color: if(style(--theme: "dark"): #e4e4e4; else: #333);
}

场景一:深色模式

2.2. 响应式布局

以前写响应式:

.container {
  width: 100%;
}

@media (min-width: 576px) {
  .container {
    width: 540px;
  }
}

@media (min-width: 768px) {
  .container {
    width: 720px;
  }
}

@media (min-width: 992px) {
  .container {
    width: 960px;
  }
}

/* 还有更多... */

现在你可以这样写:

.container {
  width: if(media(width >= 1400px): 1320px; media(width >= 1200px): 1140px; media(width >= 992px): 960px; media(width >= 768px): 720px; media(width >= 576px): 540px; else: 100%);
  padding-inline: if(media(width >= 768px): 2rem; else: 1rem);
}

代码更优雅,性能更快,维护起来也方便。

场景二:响应式布局

2.3. 优雅降级

假设你想用最新的颜色函数 lch(),但又担心旧浏览器不支持。以前你可能要这样写:

.element {
  border-color: rgb(200, 100, 50); /* 兜底方案 */
  border-color: lch(50% 100 150); /* 新浏览器会覆盖 */
}

现在可以用 supports() 明确地检测:

.element {
  border-color: if(supports(color: lch(0 0 0)): lch(50% 100 150) ; supports(color: lab(0 0 0)): lab(50 100 -50) ; else: rgb(200, 100, 50));
}

浏览器会按顺序检查:支持 lch() 就用 lch(),不支持就看看支持不支持 lab(),都不支持就用传统的 rgb()

场景三:优雅降级

3. 浏览器支持度

截至 2025 年 8 月:

  • ✅ Chrome/Edge:从版本 137 开始
  • ✅ Chrome Android:从版本 139 开始
  • ❌ Firefox:开发中
  • ❌ Safari:在路线图上
  • ❌ Opera:尚未支持

浏览器支持现状

所以如果你现在就想用,记得写好 fallback:

.button {
  /* 所有浏览器的回退 */
  padding: 1rem 2rem;
  background: #007bff;
  /* 现代浏览器会自动覆盖 */
  padding: if(style(--size: small): 0.5rem 1rem; style(--size: large): 1.5rem 3rem; else: 1rem 2rem);
  background: if(style(--variant: primary): #007bff; style(--variant: success): #28a745; style(--variant: danger): #dc3545; else: #6c757d);
}

4. 技术在进步

写到这里,我想起自己刚学前端那会儿。

每次看到新技术出来,就觉得“完了,我又落后了”。

后来慢慢发现,技术是用来解决问题的,不是用来制造焦虑的。

CSS if() 函数确实很酷,但它解决的问题——条件判断、响应式布局、浏览器兼容——这些问题我们用现有的方法也能解决,只是可能麻烦一点。

新技术的意义,不是让你觉得“我必须马上学会”,而是让你知道“原来还可以这样做”。

所以,如果你现在项目里用不上 if() 函数,没关系。把它收藏起来,等哪天浏览器支持好了,或者你遇到了它能解决的问题,再拿出来用。

前端学习是个长跑,不是短跑。慢慢来,别着急。

技术学习的长跑

我是冴羽,10 年笔耕不辍,专注前端领域,更新了 10+ 系列、300+ 篇原创技术文章,翻译过 Svelte、Solid.js、TypeScript 文档,著有小册《Next.js 开发指南》、《Svelte 开发指南》、《Astro 实战指南》。

欢迎围观我的“网页版朋友圈”,关注我的公众号:冴羽(或搜索 yayujs),每天分享前端知识、AI 干货。

作者:王博涵 小步外勤产品总监,外勤管理数字化专家
这几年,咨询外勤管理的企业明显多了起来。聊得久了会发现,大家遇到的问题其实很接近,并不是什么复杂的管理难题,而是很多基础情况说不清楚

外勤人员每天在外面跑,名义上是拜访客户、巡店或巡检,但具体去了哪里、停留了多久、有没有中途脱岗,管理者往往只能凭经验判断。团队规模还小的时候,这种方式勉强能运转,一旦人数增加、区域拉开,问题就会逐渐显现出来。

也正是在这种情况下,人员定位系统开始被越来越多企业提上议程。

真正让管理者焦虑的,是过程看不见

在实际接触的企业中,很少有人一开始就想着要把外勤管得多细,更多时候只是心里没底

今天人到底去了哪?

是不是按要求完成了工作?

月底的行程和费用能不能对得上?

这些问题如果只能靠询问和事后核查,管理成本就会不断放大。

人员定位系统之所以被关注,并不是因为它能画出多漂亮的轨迹,而是它能不能把真实发生的事情记录下来,让管理有依据,而不是靠猜。

功能越多,并不一定越好用

很多企业在选外勤管理系统时,容易被功能数量吸引,觉得定位、打卡、拍照、轨迹尚且不够,方方面面样样齐全才算先进。但真正落地之后才发现,功能越复杂,推行难度往往越高:员工不愿配合,管理者很难每天花时间研究数据,系统慢慢就成了摆设。

反而是逻辑清晰的人员定位系统,更容易长期使用。能够清楚看到外勤人员什么时候开始工作、在哪些位置停留过、是否存在明显异常,这些信息虽然不花哨,但对管理来说更有价值。

定位是否真实,决定系统有没有意义

外勤管理中最容易被忽视的一点,就是数据本身是否可靠。

定位突然中断;轨迹断断续续;行程看起来很满却对不上实际工作。

这些情况如果系统无法区分,管理就很容易被误导。

真正实用的人员定位系统,往往体现在细节处理上,比如:

是否能判断定位异常的原因?

是否能识别不合理的停留情况?

是否能把一天的行程还原得更接近真实发生的状态?

这些能力短期内不一定显眼,但使用时间一长,差距会非常明显。

外勤考勤和工作轨迹,需要放在一起看

单独看考勤时间,很难判断外勤人员的真实工作状态;只看工作轨迹,也缺少明确的边界。

把时间和位置结合起来,才能更直观地还原过程:

什么时候开始工作?

在哪个点位停留了多久?

中间是否存在不合理的空档?

在实际使用中,这种结合方式往往比单一指标更有参考价值,也更容易被管理层接受。

巡店和巡检场景,对人员定位系统要求更高

在巡店管理和巡检管理中,问题通常更加集中:

是否真正到达每一个点位?

是否按顺序完成任务?

是否存在漏检或走过场?

仅靠签到或拍照很难完全说明问题。

定位、路线和过程记录结合起来,可以让工作要求前置,减少事后反复核查的成本。很多企业在使用一段时间后会发现,并不需要频繁催促,系统本身就能提前暴露问题。

行程和费用,往往是隐形管理成本

随着外勤人员用车频率增加,行程管理和费用核算逐渐成为新的管理难点。

里程是否真实?

路线是否合理?

报销数据能不能对应上实际行程?

这些问题如果完全依赖人工核对,不仅耗时,也容易出错。

通过人员定位系统记录真实行程,再结合费用数据进行核算,管理逻辑会清晰很多,这也是越来越多企业开始重视这一部分的原因。

并不是所有企业都必须引入人员定位系统

需要说明的是,如果外勤人员数量不多、外出频率也不高,使用简单工具往往已经足够,没有必要一开始就引入复杂系统。

但当团队规模扩大、业务区域分散,管理逐渐依赖数据支撑时,人员定位系统往往会成为一个绕不开的选择

写在最后

人员定位系统并不是一套装上就能立刻改变一切的工具,它更像是一种基础能力,帮助企业把真实发生的事情留下来。

很多企业在实际使用中感受到的变化,并不来自系统本身,而是管理终于有了可信的数据依据。

在长期外勤管理实践中,小步外勤也不断验证这一点:外勤管理想要走得稳,最终还是要回到真实。

作者:王博涵 小步外勤产品总监,外勤管理数字化专家
这几年,咨询外勤管理的企业明显多了起来。聊得久了会发现,大家遇到的问题其实很接近,并不是什么复杂的管理难题,而是很多基础情况说不清楚

外勤人员每天在外面跑,名义上是拜访客户、巡店或巡检,但具体去了哪里、停留了多久、有没有中途脱岗,管理者往往只能凭经验判断。团队规模还小的时候,这种方式勉强能运转,一旦人数增加、区域拉开,问题就会逐渐显现出来。

也正是在这种情况下,人员定位系统开始被越来越多企业提上议程。

真正让管理者焦虑的,是过程看不见

在实际接触的企业中,很少有人一开始就想着要把外勤管得多细,更多时候只是心里没底

今天人到底去了哪?

是不是按要求完成了工作?

月底的行程和费用能不能对得上?

这些问题如果只能靠询问和事后核查,管理成本就会不断放大。

人员定位系统之所以被关注,并不是因为它能画出多漂亮的轨迹,而是它能不能把真实发生的事情记录下来,让管理有依据,而不是靠猜。

功能越多,并不一定越好用

很多企业在选外勤管理系统时,容易被功能数量吸引,觉得定位、打卡、拍照、轨迹尚且不够,方方面面样样齐全才算先进。但真正落地之后才发现,功能越复杂,推行难度往往越高:员工不愿配合,管理者很难每天花时间研究数据,系统慢慢就成了摆设。

反而是逻辑清晰的人员定位系统,更容易长期使用。能够清楚看到外勤人员什么时候开始工作、在哪些位置停留过、是否存在明显异常,这些信息虽然不花哨,但对管理来说更有价值。

定位是否真实,决定系统有没有意义

外勤管理中最容易被忽视的一点,就是数据本身是否可靠。

定位突然中断;轨迹断断续续;行程看起来很满却对不上实际工作。

这些情况如果系统无法区分,管理就很容易被误导。

真正实用的人员定位系统,往往体现在细节处理上,比如:

是否能判断定位异常的原因?

是否能识别不合理的停留情况?

是否能把一天的行程还原得更接近真实发生的状态?

这些能力短期内不一定显眼,但使用时间一长,差距会非常明显。

外勤考勤和工作轨迹,需要放在一起看

单独看考勤时间,很难判断外勤人员的真实工作状态;只看工作轨迹,也缺少明确的边界。

把时间和位置结合起来,才能更直观地还原过程:

什么时候开始工作?

在哪个点位停留了多久?

中间是否存在不合理的空档?

在实际使用中,这种结合方式往往比单一指标更有参考价值,也更容易被管理层接受。

巡店和巡检场景,对人员定位系统要求更高

在巡店管理和巡检管理中,问题通常更加集中:

是否真正到达每一个点位?

是否按顺序完成任务?

是否存在漏检或走过场?

仅靠签到或拍照很难完全说明问题。

定位、路线和过程记录结合起来,可以让工作要求前置,减少事后反复核查的成本。很多企业在使用一段时间后会发现,并不需要频繁催促,系统本身就能提前暴露问题。

行程和费用,往往是隐形管理成本

随着外勤人员用车频率增加,行程管理和费用核算逐渐成为新的管理难点。

里程是否真实?

路线是否合理?

报销数据能不能对应上实际行程?

这些问题如果完全依赖人工核对,不仅耗时,也容易出错。

通过人员定位系统记录真实行程,再结合费用数据进行核算,管理逻辑会清晰很多,这也是越来越多企业开始重视这一部分的原因。

并不是所有企业都必须引入人员定位系统

需要说明的是,如果外勤人员数量不多、外出频率也不高,使用简单工具往往已经足够,没有必要一开始就引入复杂系统。

但当团队规模扩大、业务区域分散,管理逐渐依赖数据支撑时,人员定位系统往往会成为一个绕不开的选择

写在最后

人员定位系统并不是一套装上就能立刻改变一切的工具,它更像是一种基础能力,帮助企业把真实发生的事情留下来。

很多企业在实际使用中感受到的变化,并不来自系统本身,而是管理终于有了可信的数据依据。

在长期外勤管理实践中,小步外勤也不断验证这一点:外勤管理想要走得稳,最终还是要回到真实。

作者|关涛、苏郡城

审校|李文朋

编者按:近日编者获悉,国内领先的数据平台公司“云器科技”完成 B 轮融资,其聚焦在亚洲市场,产品战略对标 Databricks。随 AI 持续火热,全球数据基础设施市场也正经历一场范式转移。本文将对比国内外数据领域技术发展,深度拆解 AI 时代数据平台必须要完成的进化之路。

导语:当大模型成为通用商品,资金正疯狂涌向唯一的非标资产——数据

2026 年初,全球科技界正经历一场前所未有的范式转移。AI 三要素(算法、算力、数据)中,算法与算力正在快速商品化。算法层面,大模型加速标准化,逐步成为通用的“超级大脑”;算力层面,AI 数据中心的规模化建设使算力供给日益充足。二者获取门槛大幅降低,但也日趋同质。

 

全球具备基础模型研发能力的企业不超过 10 家,AI 芯片厂商更是屈指可数。对绝大多数企业而言,其私有高质量数据正在成为企业竞争力唯一的护城河。

 

资本市场已率先捕捉到这一趋势,AI 数据基础设施成为投资热点。一个标志性事件是,在一级市场中,Databricks 估值约增长 2.7 倍;ClickHouse 估值约增长 3 倍。

 

资本市场对 Databricks 和类似技术栈的追捧,本质上是对“Data + AI”这一轮新增长飞轮的押注,数据作为核心生产要素的地位已无可撼动。但现实是,大多数企业的数据体系没准备好迎接 AI,没有做到基础设施的 AI 就绪(AI-Ready)。

 

过去二十年,企业建设了数据中台、数仓和治理体系,但在 AI 真正落地时发现,许多数据资产“用不上”。根本原因在于,传统数据平台是为 SQL 设计的,擅长处理 Filter(过滤)、Aggregation(聚合)、Join(连接)等确定性计算,数据必须结构化。

 

但企业 80%以上的数据是文档、音视频、聊天记录、会议纪要等“非结构化数据”。这些数据长期躺在各个系统中,被称为“暗数据”(Dark Data)。

 

更关键的是访问模式的改变。人类分析师习惯于看日报、周报,容忍 T+1 的数据延迟,且查询模式多为“全量扫描”后的聚合指标。

 

而 Agent 的访问模式完全不同:它们可能在秒级发起成千上万次查询,要求毫秒级的响应,且查询方式多为基于语义的“精准检索”(Vector Search)。

 

这种高频、低延迟、基于语义的机器交互需求,彻底击穿了传统 Lambda 架构的性能与成本底线。如果沿用老架构,每一次 Agent 的思考都可能触发昂贵的全表扫描,导致算力成本指数级上升。

一、当前数据基建支持 AI 就绪的两个结构性障碍

企业这些年在数据建设上投入不少,数据中台、数仓、治理体系都搭了,但许多数据资产“缺失”“用不上”“用不好”的问题,主要出在两个地方。

1.1 架构的熵增:Lambda 架构的“一致性难题”是通向 AI 实时决策的巨额债务,且注定无法解决。

过去十年,为了同时支持实时和离线,行业普遍采用 Lambda 架构:批处理一套,流处理一套。这一选择由彼时的业务需求与技术条件共同决定。

 

Lambda 架构的数据平台受到“数据不可能三角”限制——你无法同时获得数据的实时性、低成本和高查询性能;只能三者取其二。通常,批处理面向成本和复杂查询优化,流处理面向解决实时性优化,两套系统各司其职。

(图:典型的 Lambda 架构)

痼疾也很明显,如两套系统的数据很难对齐。同一个指标,批处理通过复杂的 ETL 处理和计算形成的指标,与流计算不一定对得上。

 

所以说 Lambda 架构下的“数据一致性”基本是美好愿望,需要巨大的运维成本,潜在制约了数据业务整合和发展。另外还有维护成本高,运维复杂等问题。

 

BI 时代这个问题勉强能忍,但 AI 时代忍不了了。

 

传统数据库扫描一张结构化数据表,成本可能几分钱;同样的数据如果送给大模型做推理,成本可能几百块,差距在 10 万倍量级。

 

且 Agent 要求新数据尽快就绪可召回,因此 AI 时代要求引擎同时满足数据不可能三角的三个顶点(新鲜度、低成本、Readiness)。这意味着“有问题就全量重跑”的兜底方案彻底失效——你必须精确知道哪些数据变了,只处理增量。

 

但 Lambda 架构的数据平台,天然做不到这一点。因为基于多套系统、多套逻辑、多套数据血缘。

1.2 范式不适配:AI 的原料与计算模式均与传统数据平台迥异

AI 需要的原料是文档、音视频等“非结构化数据”,这些占了企业数据的 80%以上,且包含大量有价值 Context 信息,我们称他们为“暗数据”。

 

真正的业务 know-how——客户是怎么想的、项目是怎么推进的、决策是怎么做出的——大部分都藏在一个模糊的非结构化数据为核心编织的数据网络里。

 

过去,这些数据的价值只能靠数据科学家人工去挖掘。现在,AI 第一次提供了规模化处理这些数据的可能性。

 

但现在的数据库/数仓/数据平台是为结构化数据和关系模型设计的。却不擅长处理文档、音视频。这是处理非结构化数据(AI 的主要原料)时的范式缺失。

 

这些缺失是结构性和根本性的,是从底层的处理硬件开始(GPU vs CPU)、到存储系统、存储格式、数据管理、元数据系统到引擎算子的全技术栈缺失。

二、AI 引入的三大范式变化

 

要打造 AI 时代的数据护城河,必须对底层架构进行彻底的范式重构,这集中体现在计算能力、数据形态与访问模式的三个维度。

2.1 高阶计算能力:从关系代数到 AI 模型

 

过去,数据库和数据平台只有一种引擎:结构化分析引擎,基于关系代数,符号化、确定性、低语境依赖。你给它一条 SQL,它返回一个确定的结果,分毫不差。

 

但 AI 引擎的特性完全不同:基于概率模型,模糊匹配、概率推断、高语境依赖。同一个问题问两遍可能得到不同答案。

 

但正因如此,它能做传统引擎做不到的事——理解、抽取、总结、推理、生成。

例如,在经典的 DIKW(数据-信息-知识-智慧)金字塔中,传统结构化引擎的能力边界在 Information 层——它能把数据加工成报表和指标,但无法告诉你这些指标“意味着什么”。AI 引擎能深入到 Knowledge 层级,实现真正的语义理解和推理。

 

换个角度:如果把传统引擎类比为大脑顶叶(负责数学计算),AI 引擎则对应前额叶皮层(负责高阶认知、规划、决策)。两者的关系是互补而非替代——二维关系计算交给传统引擎,总结、归纳及推等认知计算交给 AI 引擎。

2.2 暗数据的解锁:Lakehouse 下的多模态表达

⻓期以来,企业数据资产中超过 80%都是⾮结构化或半结构化的“暗数据ˮ(Dark Data),如客⼾服务的录⾳、合同 PDF⽂档、监控视频等。在传统数仓架构下,这些数据往往被丢弃或仅作为冷备份存储,⽆法参与核⼼业务计算。

Lakehouse(湖仓一体)架构的普及为这些数据的存储提供了低成本方案,但通过 AI 对其进行深度解析才是关键。

 

通过 AI 的多模态处理能力,能够自动解析、向量化并索引这些非结构化数据,将其转化为机器可理解的格式。这意味着企业可以首次全景式地利用其拥有的所有信息资源,而非仅仅通过那 20%的结构化表格来决策。

2.3 访问模式转变:从 Scan 到 Search

 

AI 引擎有一个独特特性:上下文窗口极小(100 万 Token 约等于 4MB),但处理成本极高。1TB 数据,AI 引擎推理需要 25 万个窗口,总成本高达百万美元,同样的数据量大数据引擎处理成本在 5 美元以下。

 

这带来访问模式的根本转变:从“全量扫描”转向“精准检索”。例如计算“过去一年的总销售额”。这需要扫描大量行数据。然而,AI Agent 的典型访问模式完全不同:它们更多地进行“精准检索”(Point Lookup)或“语义搜索”(Vector Search),例如“找到与该投诉最相似的历史案例”。

 

这种从 Scan 到 Search 的转变,对底层存储引擎的索引结构、缓存策略和并发能力提出了全新的要求。RAG(检索增强生成)技术的兴起,本质上就是为了解决这一问题。

 

但 RAG 仅仅是检索环节,更重要的是如何构建一个高效、实时、低成本的 AI 处理平台,将非结构化数据转化为 AI 就绪(AI-Ready)的知识并存储在 RAG 中。

三、未来架构蓝图:AI 原生数据平台的五个设计原则

 

基于上述变革,构建新一代数据护城河需要遵循五个核心原则,这些原则构成了 AI 原生数据平台的蓝图。Databricks、Snowflake 以及国内云器科技等厂商,都在沿着这个方向演进。

核心设计原则概览

• 原则一:Lakehouse 统一存储。 一份数据,多种视图(Table/Vector/Graph),打破结构化与非结构化的边界。

• 原则二:AI 作为原生计算引擎。 AI 能力内嵌至 SQL,支持 AI ETL 与 GPU 统一调度。

• 原则三:增量计算结合的奖牌架构。 抛弃 Lambda 架构,采用全链路增量(GIC)构建奖牌架构。

• 原则四:Agent 友好 的开发范式。 API First,自然语言交互,建立“执行-反馈”闭环。

• 原则五:企业级能力。 细粒度权限治理,Serverless 弹性伸缩,满足审计与合规需求。

原则一:Lakehouse 统一存储

 

Lakehouse 的核心是用一套系统同时支持低成本存储和高效查询。但对 AI 原生平台来说,更关键的是它原生支持多种数据表达形态。同一份数据可以有多种表达,不同表达带来不同的能力边界。

 

以一段客户反馈为例,同样的信息可以有不同的存储方式,假如:

• 存成原始文本:信息最完整,但检索效率低

• 抽取成结构化字段(情感倾向、产品类别、问题类型):查询快、可聚合,但丢失了细节

• 转成向量:支持语义检索,能找到“意思相近”的内容

• 构建图关系:能表达客户、产品、问题之间的关联网络

不同形态有不同权衡。越靠近结构化,准确率越高、可解释性越强、处理成本越低;越靠近原始态,信息越丰富、灵活性越高,但成本也越高。

 

一个洞察是,AI 的数据不应该独立建一套平台。它应该和结构化数据融合在一起,因为 AI 处理流程中有大量结构化计算的需求。把两者割裂开,反而会制造新的数据孤岛。

 

举个例子:你问 AI “Meta 2021 年的营收是多少”,如果只有原始文本,AI 可能猜错单位(是百万还是十亿?美元还是其他货币?)。但如果结构化数据和语义层(Semantic Layer)结合,标注清楚 revenue 列的单位和口径,回答就会精确得多。

 

这就是为什么 Lakehouse 架构强调统一——不是简单地把数据堆在一起,而是让不同形态的数据能够协同工作。

原则二:内生 AI 计算

AI 能力必须内嵌到数据平台,成为 SQL 的一部分,而非通过 API 外挂。

 

海外头部厂商已经在这样做。Snowflake 和 Databricks 都在 SQL 里加入了一系列 AI 算子,形成了相对完整的能力图谱:

• AI_COMPLETE:文本补全和生成,比如根据上下文自动填充缺失字段

• AI_EXTRACT:从非结构化文本中抽取结构化信息,比如从合同里提取关键条款

• AI_FILTER:语义级别的过滤,比如筛选"与某主题相关"的内容

• AI_AGGREGATE:对文本内容做聚合摘要,比如把 100 条客户反馈总结成 3 个要点

• AI_CLASSIFY:分类打标,比如判断一段文本的情感倾向或主题类别

 

这些算子对应的底层能力,其实就是大模型的理解、抽取、生成、总结、推理。但封装成 SQL 算子之后,AI 模型与数据结果的结合表达能力获得大幅提升,不需要搭 LangChain,不需要懂 Prompt Engineering,一条 SQL 搞定。

(图:AI 能力与 SQL 算子的融合,Snowflake Cortex AI)

举个具体场景:金融分析师每天面对上万条新闻,传统做法要么人工筛选,要么写复杂的关键词规则(然后漏掉大量相关信息)。现在可以直接写:

如果需要更精细的处理,还可以组合多个算子:

这才是真正的多模态计算——AI 和 SQL 在同一个执行引擎里协同工作,而非简单的多模态召回。是在统一的数据 governance 的环境中做权限管理的 AI 数据处理,符合隐私合规;而且算子可组合,复杂逻辑也能表达。

原则三:大奖牌架构与增量计算- “只计算变化的部分”

 

传统 Lambda 架构维护实时和离线两套代码,导致逻辑冗余且指标经常无法对齐。Databricks 和微软 2024 年提出的 Medallion Architecture(大奖牌架构)已成为 AI+Data 数据处理的标准模型。(Reference:Databricks:What is a medallion architecture? Medallion Architecture 101: Building Data Pipelines That Don't Fall Apart

 

这个架构的核心思想是把数据处理分成三层,像炼矿一样逐级提纯:

Bronze 层(铜):存原始数据,越原始越好,不做任何加工。就像矿石——今天你炼铁,明天可能发现里面还有金子。原始数据不能丢,因为你不知道未来会需要什么。

Silver 层(银):做清洗、抽取、结构化。把非结构化数据转成可查询的格式,把脏数据清理掉,统一 schema。这一层是数据质量的关键战场。

Gold 层(金):生成最终产出——报表、特征、指标,直接供业务和模型使用。

 

并且,这个架构同时适用于结构化和非结构化数据。

 图:奖牌架构数据处理流程:结构化数据(上图);非结构化数据(下图)

 

奖牌架构是一套建模方法,它最终能跑起来,有一个前提:增量计算能力。

奖牌架构有四个核心原则:灵活性(Flexibility)、数据质量管理(Data Quality Management)、成本效率(Cost Efficiency)、以及最关键的——增量 ETL(Incremental ETL)

 

前三个相对直观,第四个是难点和核心。为什么?因为 AI 推理成本极高,“全量重跑”模式根本不可行。每次数据更新都从头算一遍,成本和延迟都无法接受。

 

奖牌架构本质上是一个 Kappa 架构——端到端的统一增量数据处理流程,不再区分流/批等传统计算模型。但这个架构能跑起来的前提是:必须有真正的增量计算能力。

AI 推理成本决定了“全量重跑”不可行。通用增量计算(GIC)的核心思想是:

(图:增量计算原理)

只处理变化的部分,不重复计算已经算过的东西。这个方式并不像说的那样容易,需要从底层重新设计计算引擎:精确追踪数据的每一个变化,理解变化对下游计算的影响,只对需要更新的部分做增量处理。这涉及到存储格式、索引结构、执行计划、状态管理的全面重构。

 

理想的增量计算引擎能用一套系统 Single-Engine 同时支持实时和离线,同一套代码、同一份数据、同一个执行引擎。(增量计算白皮书--请参看附录)

原则四:Agent 友好的开发范式

 

当软件使用者从人变成 Agent,开发平台的设计范式也必须改变。

 

过去的数据开发平台,核心交互是 GUI:拖拉拽建模、点选配置、根据监控调整。这对人很友好,但 Agent 并不需要点按钮。

 

面向 Agent 的设计需要几个根本转变:

1. API First 而非 UI First。 Agent 通过接口与系统交互,所有能力都必须 API 化。GUI 变成可选的观测层,而非核心交互层。

2. 自然语言作为主要接口。 Agent 用“交流”的方式检索和操作数据。NL2SQL 不再是锦上添花的功能,而是核心能力。Agent 可以在一次查询里融合文本、向量、图关系的检索结果,实现真正的多模态查询。

3. 反馈链路不可或缺。 AI 是概率模型,有时对有时错。传统软件是确定性的——代码写对了就永远对。但 AI 系统需要持续校正,需要建立“执行→反馈→调整”的闭环机制,像机器学习训练一样不断迭代。

4. 自解释的语义层。 Agent 需要理解数据的业务含义,而非只知道表名和字段名。这要求数据平台具备丰富的元数据和语义描述,让 Agent 能够自主理解"revenue 列的单位是什么""这两个表之间是什么业务关系"。

 

但有一点需要清醒认识:短期内人不会完全退出,而且人与 Agent 的交互也同样关键。

 

AI 写的代码、做的决策仍需人来检查与审批。不管 AI 多强,"因为是 AI 写的所以 bug 不算数"这种逻辑并不成立。人的角色从"开发者"变成"Reviewer+Observer"——审批关键决策,监控系统运行。

 

未来的数据平台会是混合模式:Agent 负责主要的开发和执行,人作为审批者和监控者。平台需要同时支持两种交互范式。

原则五:企业级治理能力

 

AI 原生时代,开源自建的 ROI 逻辑在改变。

 

Agent 大规模调用企业数据时,细粒度访问控制变得极其重要——财务报表、员工工资、客户隐私管理、严格的权限隔离、数据防泄露等企业级数据管理与治理能力。此外,AI 的决策需要可追溯、可审计,在金融、医疗等强监管行业尤其关键。

 

这些能力开源软件天然缺失,商业级托管平台天然具备。这也是为什么 Databricks/Snowflake 这一类商业平台受到包括 OpenAI 在内的新一代企业青睐的原因。 

路径选择:全球共识与中国式解法

 

上述五个原则由云器科技总结提出,事实上全球头部厂商都在沿着这个方向演进,只是路径选择各有不同。

 

Databricks是这套范式的最佳践行者。从 Spark 起家,到推出 Delta Lake 实现湖仓一体,再到 2024 年系统性提出 Medallion Architecture,它一直在引领 Data+AI 融合的技术方向。商业上,Databricks 坚持云中立+托管化,不绑定任何一家云厂商,这让它能够服务于多云和混合云场景的企业客户。

 

Snowflake也是数据领域的先行者之一。它的底子是云原生数仓,强项在结构化数据的极致性能。面对 AI 浪潮,Snowflake 选择通过收购和集成来补齐能力——Document AI 处理非结构化数据,Cortex 提供 AI 服务,Snowpark 支持 Python 生态。路径不同,但方向一致。

 

值得注意的是,这两家公司都没有选择自研基础模型,而是专注于数据的价值挖掘。

中国市场有其特殊性。

一方面,国内云厂商的技术栈与海外存在较大差异;另一方面,企业对数据主权和合规性有更高要求。直接照搬海外方案并不现实,这给了本土厂商机会。云器科技 是目前国内最接近 Databricks 定位的公司。技术上,它基于 Lakehouse + GIC 实现了批流一体的架构重构;商业上,同样坚持云中立与全托管路线。

 

目前,云器科技的这一架构已在蚂蚁集团、小红书、快手等头部互联网公司的生产环境中得到了验证。这些场景往往具有极高的数据吞吐量和复杂的业务逻辑,能在这些苛刻环境中稳定运行,证明了该技术路径的成熟度与可替代性。

(表:Databricks 与云器科技产品对比)

编者按: 据悉,近期云器科技已完成 B 轮融资。资金将主要用于新一代 AI 数据基础平台的持续研发,进一步推动 AI 原生数据架构在本土市场的落地与普及。当前形势下,作为国内最接近 Databricks 定位的公司,云器的融资进展也反映出资本对亚太 Data+AI 基础设施赛道的持续看好。

四、终局:构建智能时代的数据壁垒

从最宏观的视角看,数据平台的定位在 AI 时代正在发生根本变化。

关键事实:

• 用户主体变迁: 软件的主要使用者正在从人类(Human)加速转向智能体(Agent),要求数据接口具备更高频、低延迟的机器交互能力。

• 架构痛点解决: 传统 Lambda 架构在即时性与准确性上难以兼得,且维护成本高昂;云器科技通过统一的流批一体与增量计算技术,彻底解决了数据一致性难题。

• 暗数据价值释放: 针对企业内部大量存在的非结构化“暗数据”(文档、日志、多媒体),平台提供了原生的存储与计算支持,使其成为可被 AI 利用的高价值资产。

• 计算模式革新: 从传统的全量扫描(Scanning)模式转向更高效的搜索(Searching)模式,大幅提升了 RAG(检索增强生成)场景下的响应速度。

• 技术路径融合: 采用 Lakehouse 架构作为数据底座,结合独创的 GIC(增量计算)技术,实现了存储成本与计算效率的最优平衡。

• 中国生态定位: 针对中国企业复杂的 IT 环境,云器科技提供云中立且具备完全托管能力的解决方案,填补了国内市场在高端 AI 数据基础设施上的空白

 

过去它是“被动响应的资产库”——业务系统产生数据,数据平台存起来,有人查就返回结果。未来它将成为“主动参与决策的智能实体”的底座,是企业 AI 的“记忆与知识库”。

 

可以想象这样的场景:Agent 群在上面运行、学习、协作,数据平台在下面收集、计算、优化数据。与上层 Agent 形成互动。AI 消费数据、理解数据、改写数据,数据再反过来塑造 AI 的行为与能力。

 

这个循环迭代越快,系统的智能水平就越高。

 

更宏观地看,AI+Data 正在形成新的技术范式。未来的超级智能不会是孤立的模型,而是持续运转的系统——是数据+算力+模型的融合;它既使用知识,也创造知识。数据不再是被动存放的资源,而是不断加工、更新、进化的运行态。

 

承载这个循环的核心基础设施,必然是 AI 原生的数据平台。谁能更快完成从传统架构到 AI 原生的迁移,谁就更有机会在下一轮基础设施竞争中占据位置。

 

Reference

AI SQL Query Language:https://www.snowflake.com/en/blog/ai-sql-query-language/

奖牌模型 Medallion Architecture: https://www.databricks.com/glossary/medallion-architecture

Medallion Architecture 101: Building Data Pipelines That Don't Fall Apart:https://dev.to/aawiegel/medallion-architecture-101-building-data-pipelines-that-dont-fall-apart-1gil

增量计算白皮书:https://www.yunqi.tech/resource/incremental-computation/reservation