关于聊天时标点符号的讨论
背景
最近和不同的朋友聊天,熟悉程度差不多。然后发现了一点聊天上使用 逗号,句号 一点不同的感受。目前来看有两种情况。
- 发送文字时只使用简单的逗号,没有句号啥的,连续发送多条都不带。
- 使用逗号与句号,某些文字消息会有句号结尾。
个人感觉
我自己认为是比较自在时不会有心地去使用句号结尾。所以我觉得不使用句号结尾相对来说是更加自在。而对于有句号结尾,可能是这条消息有所斟酌然后缓缓打了一个句号,然后有种对方不知道咋回复的感觉,当然这个可能只是我这个例子😂。
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
最近和不同的朋友聊天,熟悉程度差不多。然后发现了一点聊天上使用 逗号,句号 一点不同的感受。目前来看有两种情况。
我自己认为是比较自在时不会有心地去使用句号结尾。所以我觉得不使用句号结尾相对来说是更加自在。而对于有句号结尾,可能是这条消息有所斟酌然后缓缓打了一个句号,然后有种对方不知道咋回复的感觉,当然这个可能只是我这个例子😂。
,顺便问下,要怎么发图片呀,搜了下发图的指导,一下子没看懂。
前言
自己用过很多自托管的导航页,始终没有找到适合自己心意的,要么太重,要么太简陋。于是通过 Vibe coding 设计了一个满足自己的导航页,多说无益,欢迎大家来使用。
✨ 核心特性
🚀 快速部署
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:

观察到用代理访问 www.bing.com 会导致区域设置被改回中国,此时搜敏感词会让搜索结果变成无意义的外语结果。换个代理 IP 又好了,推测跟 IP 质量有关。(原谅我标题用别字,因为我每次发文打那个字都会被 v 站锁 ip 。)
Hi V2EX 的朋友们,
最近工作之余,想找一款不用动脑子、随时能停、画风舒服的经商游戏,找了一圈没发现特别合心意的,于是干脆自己动手写了一个——《浮生商记》。
这是一款纯单机、古风策略、模拟经商的网页游戏。没有眼花缭乱的广告,不需要登录注册(数据存在本地 LocalStorage ),主打就是一个“佛系养成,世代传承”。
🔗 试玩地址
https://fusheng.jrkk.cn/ (建议手机端或浏览器小窗口体验,摸鱼效果更佳)
📷 游戏截图
(楼主注:多图预警,UI 刚刚做了一波优化,力求古色古香)
随机集市与动态物价: 这里不是无脑买卖,还要看“天时”。引入了 24 节气系统,清明茶贱,寒露丝贵。https://i.imgur.com/L0hEK69.png
产业闭环与技艺工坊: 单纯倒买倒卖利润低?试试买下桑园、矿山,学习缫丝、冶炼、炼丹,把原料加工成高价成品。https://i.imgur.com/0okPlNB.png
红颜知己与家族传承: 除了赚钱,还要生活。结识芸娘、苏小小等红颜,好感度高了能解锁强力 Buff (比如回血翻倍、背包扩容)。这一世结束了?别怕,资产和技艺可以传给下一代,打造万世基业。https://i.imgur.com/YLrTJcM.png
https://i.imgur.com/vvYfMcw.png
🎮 核心玩法 & 特色
💻 技术栈:React + Tailwind CSS + Lucide React 。纯前端实现,利用 LocalStorage 实现自动存档和离线收益计算。
🌍 动态世界:每次开局,地图(苏州、长安、敦煌等)和可结识的红颜都是随机生成的,Roguelike 微元素。
📈 身份进阶:从一介“行脚商”做起,慢慢爬升到“市井掌柜”、“朝廷皇商”乃至“江南巨贾”,解锁运费减免和贡品贸易特权。
💾 数据自由:虽然是单机,但我做了一个存档导出/导入功能(生成一段字符串),你可以把进度存在本地,或者发给朋友(虽然目前是单机,但可以以此炫耀资产)。
🛌 离线收益:关掉网页去工作,你的商号伙计也在帮你赚钱。再次打开时会根据离线时长结算收益。
👨💻 碎碎念 / 后续计划
目前游戏的核心闭环(买卖-产业-传承)已经完成。UI 方面特意打磨了一下,用了仿宣纸的底色和深棕色的木质纹理,希望能给大家带来一点“慢生活”的治愈感。
接下来的计划:
增加更多的随机奇遇事件(目前已经有一些简单的抉择)。
丰富传家宝系统,让“传承”更有意义。
优化移动端的触控体验。
欢迎大家试玩,如果有 Bug 或者好的脑洞,请在评论区疯狂输出!感谢!
做服务端的人,最怕的其实不是写代码。 而是你已经解释到口干舌燥,对方转头对外同步时依然能做到: 最近我就遇到了一次特别典型的场景: 我以为自己讲得很清楚, 那一刻,说不尴尬是假的。 所以这篇文章我想从自己的视角出发,记录一次真实的带教事故,也顺便总结一套服务端人常用的“自救方法论”。 公司最近需要在现有业务模块中,补齐 MCP 工具调用能力。 简单来说,就是要让业务服务具备: 上周六我基于八一菜刀大佬的开源项目 Knife4j 做了一个 POC,实现了基础的调用骨架。 后续需要补齐 Agent 调用侧的完整闭环,这部分交给实习生小W同学继续推进。 整体调用链路大致如下: 这个流程本身并不复杂,但对于实习生来说,真正难的往往不是“怎么写代码”,而是: 在 MCP 工具接入过程中,第一个绕不开的问题就是: 权限校验是工具调用链路的第一道门槛。 这里其实牵扯到一整套“信任迁移”的演进: 这些东西我当时一口气全讲了。 讲得很爽,也很细。 但现在回头看: 问题发生在一次很典型的场景。 实习生提出了一个“看起来很聪明”的实现想法。 我担心他走偏,于是花了一个多小时逐条解释: 当时我以为自己讲得足够清楚。 结果第二天,他去和另一个同事对齐时,认知完全跑偏。 甚至对方转述成: 那一刻我非常尴尬。 后来我意识到: 这不是他“笨”,而是我把“知识密度”拉满了,却没有做“理解闭环”。 带实习生最大的挑战,从来不是技术难度。 而是: 从那天之后我才真正意识到: 讲解不是交付,闭环才是交付。 下一次我会更克制: 因为带人这件事,本质上不是“输出知识”,而是“交付理解”。指鹿为马,南辕北辙。
结果第二天对齐时,认知完全跑偏,甚至还变成了:“这是 XX 让我这么做的。”
背景:MCP 工具能力的落地
服务交互流程(POC版本)

为什么系统要这么设计?
哪些边界不能碰?
哪些东西看起来能做,其实不能做?核心疑惑点:权限与工具边界
Token 到底在这里扮演什么角色?

信息密度太高,对实习生来说反而是一种负担。
事故:讲太多导致信息过载,对外沟通失真
“这是 XX 让我这么做的。”
写在最后:讲解不是交付,闭环才是交付
你以为你讲清楚了,
但他其实只是“听过了”。
等了五天释放 Claude ,今天用了一会,想着四小时后回血了接着用,然后就这样了,又要等五天
Claude Opus 4.5 (Thinking) 20.0%5d21h from now
Claude Sonnet 4.5 20.0%5d21h from now
Claude Sonnet 4.5 (Thinking)20.0%5d21h from now
Gemini 3 Flash 60.0%1h 42m from now
Gemini 3 Pro (High) 40.0%9m 24s from now
Gemini 3 Pro (Low) 40.0%9m 24s from now
GPT-OSS 120B(Medium) 20.0%5d21h from now
FakeReader 是一个浏览器油猴脚本,让 EPUB 电子书伪装成网页内容嵌入到任意页面。打开浏览器,看起来像在工作,实际上在沉浸式阅读摸鱼。
!!!老板就坐在我旁边,用这个方式已经摸鱼看完两本小说了,别人不近距离阅读不易发现,摸鱼风险降到最低,嘿嘿
工作时偷偷看书,老板以为你在研究技术文档
Cmd/Ctrl + B 打开设置面板#content、.main-content)设置: Cmd/Ctrl + B
翻页: ← → 或 Cmd/Ctrl + [ ]
目标页面:公司内部 Wiki 或技术文档页
选择器填好,启动 FakeReader
老板路过:"在研究技术呢?"
用 v2 最近的一个帖子演示下如何使用,把帖子的内容替换为电子书


GreayFork: https://greasyfork.org/zh-CN/scripts/564991-fake-reader
2025 年,是 StarRocks 持续深耕与进化的一年。围绕 Lakehouse 与 AI 实时能力,多个关键能力在迭代与实践中渐次落地。项目的每一步前行,都得益于社区每一次真实的反馈与贡献。 站在岁末年初,我们希望通过这篇文章,与大家共同回顾 2025 的重要时刻,并分享关于 2026 的规划与期待。 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 等特性,让集群管理与问题定位更直观、更可靠。 2025 年,StarRocks 围绕 Apache Iceberg 的支持更趋系统化:不再分散在单点功能的局部优化,而是将 Iceberg 视为湖仓架构的核心组件,重点解决性能波动、查询变慢和运维复杂等实际痛点。目标既关注性能提升,也强调端到端的可预测性,以保障关键业务在生产环境中的稳定运行。 在生产系统中,难点往往不在于单次查询能有多快,而在于性能是否足够可预测。数据持续变化、流量波峰以及缓存不稳定,都可能带来查询延迟的波动。 近期版本更新中,StarRocks 强化了物化视图(MV),使其更适合作为 Lakehouse 负载的稳定加速层。多列分区 MV 现可与 Apache Iceberg、Hive 的表分区直接对齐,从而实现更高效的增量刷新更稳定的 MV 利用率。 对于 SLA 关键负载,更清晰的 MV rewrite 行为,以及 force_mv 等选项,使查询能够更稳定地使用预计算结果;同时,新写入数据也能以可控、可预测的方式纳入刷新与查询流程。由此,性能一致性与数据新鲜度不再依赖运行时状态,而可以按业务诉求明确设定与实现。 在运维层面,基于分区的保留策略完善了生命周期管理,使 MV 更易于长期保持紧凑、可管理,并控制整体成本。 综合来看,这些改进让 MV 从临时的优化手段,转变为支撑低抖动、可预测 Lakehouse 性能的可靠加速基础。 2025 年,实时分析是 StarRocks 的关键方向之一。无论是传统 OLAP 与湖仓分析,还是作为 AI Agent 的底层支撑,低延迟、实时的查询能力都变得前所未有地重要。 整体来看,StarRocks 在实时分析上的工作主要聚焦于三个核心领域: 数据写入 查询性能 运维可靠性 这一年,StarRocks 社区以前所未有的速度发展壮大:区域落地更密集,贡献者更活跃,全球关注度也在持续提升。 Slack 社区成员超过 5,000 人、GitHub Star 超过 11,000,这些数字背后,是越来越多开发者愿意走进项目、参与讨论、加入共建。StarRocks GitHub 主仓库贡献者已达 500+,新增 PR 仍保持稳定输出。 是迄今为止覆盖最广、国际参与度最高的一届贡献者表彰。奖项不仅致敬推动技术演进、分享一线实践的贡献者,也表彰在各地社区持续耕耘、带动更多人参与共建的伙伴。 2025 年 9 月,StarRocks 举办了迄今规模最大的线上峰会——StarRocks Summit 2025。来自全球的 32 位嘉宾带来分享,集中呈现了 StarRocks 在各行业落地与性能演进上的最新进展。 Coinbase、Pinterest、Intuit、Demandbase 等企业也分享了其真实实践:利用 StarRocks 在 PB 级数据规模下实现亚秒级查询性能的同时,进一步降低了基础设施成本。 2025 年 9 月 13 日,作为全球峰会在中国本土的延伸,StarRocks Connect 2025 于线上线下同步开启。本次活动以“连接”为核心,吸引了数万名开发者参与,深度探讨数据分析技术的未来演进。 来自镜舟科技、携程、Shopee、Cisco、SJM Resorts 等企业的技术领袖,分享了 StarRocks 在复杂业务场景下的前沿实践。 今年,StarRocks 与 Apache Iceberg 、Apache Paimon 社区紧密合作,共同探讨“开放、快速、可治理”的 Lakehouse 架构,并通过多场社区活动与各地实践者交流,分享一线经验与真实案例。 在全球范围内,StarRocks 也保持着稳定的社区参与与活动节奏。这背后离不开热心的社区成员——他们积极参与,并主动发起、承办本地活动,让项目在全球开发者群体中的影响力持续扩展。 2025 年 9 月,作为全球峰会在中国本土的延伸,StarRocks Connect 2025 于线上线下同步开启。本次活动以“连接”为核心,吸引了数万名开发者参与,深度探讨数据分析技术的未来演进。 来自镜舟科技、携程、Shopee、Cisco、SJM Resorts 等企业的技术领袖,分享了 StarRocks 在复杂业务场景下的前沿实践。 实时分析一直是 StarRocks 的核心优势,也是长期投入并在生产中反复验证的方向。面向下一阶段,重点将放在进一步扩大这一能力边界,优先推进以下工作: 主要围绕两个核心目标: 为实现上述目标,2026 年的工作重点将聚焦在: 计划把 AI 驱动的性能优化能力直接嵌入分析引擎,包括构建向量索引与 AI 辅助分析能力。通过这些能力, 用户既能更高效地运行分析,也能在此基础上开展 AI 赋能的个性化、自动化与智能决策相关实践。 以上为 2026 年的大致发展方向,推进过程中也会结合实际情况不断优化调整。欢迎在 GitHub 提交 Feature Request,或加入 StarRocks 社区群,和更多用户、贡献者一起交流想法、共同完善。 Roadmap 2026:https://github.com/StarRocks/starrocks/issues/67632技术亮点:性能突破的一年
关键里程碑:StarRocks 4.0 发布
Apache Iceberg:从外部表格式到湖仓原生底座
物化视图:面向实时 Lakehouse 负载的“零抖动”加速层
Real-Time Analytics
🌍 社区成长与互动

StarRocks Contributor Awards

📍 Events & Meetups
StarRocks Summit 2025

StarRocks Connect 2025
Real-Time & Lakehouse Meetups


StarRocks Connect 2025

2026 年度展望
Real-Time Analytics
Lakehouse
AI & Intelligent Optimization
开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「有看点的活动」,但内容仅代表编辑的个人观点,欢迎大家留言、跟帖、讨论。 本期编辑:@瓒an、@鲍勃 1、Soul App 旗下 AI 团队开源 SoulX-FlashTalk:首个 14B 参数亚秒级实时数字人模型 Soul App AI 团队(Soul AI Lab)昨天正式开源实时数字人生成模型 SoulX-FlashTalk。该模型被描述为首个能够实现 0.87 秒亚秒级超低延时、32 FPS 高帧率,并支持超长视频稳定生成的 14B 参数级数字人模型。Soul App 方面表示,新模型不仅技术指标出色,更具备商用落地潜力,有望推动大参数量实时生成式数字人进入实际应用阶段。 SoulX-FlashTalk 通过以下四大关键指标,重塑了实时互动体验: 在技术实现上,团队采用两阶段训练策略:先进行延迟感知时空适配,再结合 DMD 框架利用自纠正双向蒸馏进行优化。推理端则依托针对 8-H800 设计的全栈加速引擎,整合了混合序列并行、FlashAttention3 及 3D VAE 并行化技术。 根据 TalkBench-Short 和 TalkBench-Long 数据集评测,该模型在长短视频生成中均表现出优异的视觉保真度和口型同步精度。基于此,SoulX-FlashTalk 有望落地于电商直播、短视频制作、AI 教育及 NPC 交互等领域。继开源语音合成模型 SoulX-Podcast 后,该模型的发布标志着 Soul AI 在开源领域的进一步拓展。 目前,该项目的技术报告、源代码及模型权重已全面公开。 GitHub: HuggingFace: (@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 模型在处理非标准文本(如符号、数字序列、专业术语)时的发音逻辑问题,显著提升了模型在多语言环境下的语义理解精度。 Eleven v3 现已在 ElevenLabs 全平台(包括网页端与 API)正式上线,支持所有订阅层级用户使用。 ( @ElevenLabs Blog) 4、苹果公布 PCG 技术:质量零妥协、AI 语音生成提速 40% 科技媒体 9to5Mac 今天发布博文,报道称苹果公司携手特拉维夫大学,联合发表论文,提出名为「原则性粗粒度」(PCG)的语音生成新方法,从而解决 AI 文本转语音(TTS)技术的速度瓶颈。 目前,行业主流的语音生成多采用「自回归模型」,即通过「逐个预测」的方式,基于已有 token 预测下一个。然而,这种机制要求预测结果与预设 token 必须实现「精确匹配」,导致模型经常拒绝听感差异极小、实际完全可用的预测结果。这种严苛的验证标准直接拖慢了整体生成速度。 为了解决这一痛点,研究团队开发的 PCG 技术核心在于「求同存异」。研究人员发现,不同的声学 token 往往能产生几乎相同的听觉效果。PCG 不再将每个声音视为完全独立的个体,而是建立了「声学相似组」。只要模型生成的预测 token 落在正确的「相似组」范围内,系统即予以采纳。这种逻辑将严苛的「单点验证」升级为了容错率更高的「范围验证」。 在实际运行层面,该方案采用了「投机解码」策略,构建了双模型协作架构: 这种分工在保留小模型高速度的同时,利用大模型保障了输出质量。实验数据显示,应用 PCG 技术后: 由于 PCG 属于「推理阶段」的优化方案,它无需对现有模型进行重新训练即可直接应用,且存储声学相似组仅需约 37MB 的额外内存。 相关链接: (@IT 之家) 1、AI 翻译公司 DeepL 发布 Voice API:支持端到端实时音频流式翻译,同步生成 5 种语言翻译 DeepL 宣布正式上线 Voice API,支持开发者在应用程序中集成实时语音转录与翻译功能。该产品主要面向联络中心(Contact Centers)与业务流程外包(BPO)提供商,旨在通过低延迟的流式处理解决多语言语音交互的瓶颈。 相关链接: ( @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 实验室和生产力平台正日益关注将语音优先交互引入日常工作流,覆盖从无障碍辅助到免提生产力的广泛场景。 ( @9to5mac) 1、iPod 之父:当爹之后重新开始审视隐私风险 据《商业内幕》报道,「iPod 之父」托尼 · 法德尔(Tony Fadell)近日在播客访谈中表示,成为父母后,他本人以及硅谷多位科技创始人对隐私问题的看法出现明显转变。 他指出,在拥有孩子之前,许多科技从业者对隐私的态度更为激进,愿意在技术创新的推动下牺牲个人数据;但在面对深度伪造、社会工程学等风险后,这种态度正在发生变化。 法德尔提到,Meta CEO 马克 · 扎克伯格、Google 联合创始人拉里 · 佩奇与谢尔盖 · 布林在成为父母后,对世界的理解方式「完全不一样」。 他表示,许多创始人如今会重新思考自己愿意交出多少数据,以及如何保护家庭与孩子的隐私。 法德尔特别强调了 AI 时代的隐私挑战。 他认为,未来真正具有革命性的 AI 设备往往需要大量个人数据与实时输入,这将迫使社会与企业领导者在创新与隐私之间做出更艰难的取舍。 他透露,部分科技创始人甚至产生了「如果能重来就好了」的反思,但过去的决策已无法逆转。 与此同时,全球监管机构正加强对 AI 与隐私议题的审查。 xAI 因其模型生成未授权的真实人物(包括未成年人)性化图像而遭到多地调查;Meta 也因聊天机器人与未成年人互动方式受到质询。隐私保护与 AI 技术发展之间的张力正在加速显现。 ( @APPSO) 阅读更多 Voice Agent 学习笔记:了解最懂 AI 语音的头脑都在思考什么 写在最后: 我们欢迎更多的小伙伴参与 「RTE 开发者日报」 内容的共创,感兴趣的朋友请通过开发者社区或公众号留言联系,记得报暗号「共创」。 对于任何反馈(包括但不限于内容上、形式上)我们不胜感激、并有小惊喜回馈,例如你希望从日报中看到哪些内容;自己推荐的信源、项目、话题、活动等;或者列举几个你喜欢看、平时常看的内容渠道;内容排版或呈现形式上有哪些可以改进的地方等。 作者提示: 个人观点,仅供参考
01 有话题的技术

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




https://machinelearning.apple.com/research/coarse-grained02 有亮点的产品
https://www.deepl.com/zh/products/voice
03 有态度的观点



北京,2026 年 2 月 4 日—— 在今日举行的 “ITEC 第十三届朝阳国际人才创业大会创新峰会” 上,极客邦科技创始人兼 CEO 霍太稳正式发布了北京市朝阳区首个面向 OPC(One-Person Company,一人公司)的创业社区——“极客部落 · AI 应用生态园”。该项目由朝阳区人才工作局、共青团朝阳区委员会、望京街道联合指导,由极客邦科技作为链主企业主导日常运营,其旗下的全新品牌 “模力工场” 作为 AI 创业生态加速的专业品牌,为各场景与地域的 AI 应用项目,尤其开发者主导的 OPC 项目,提供线上线下协同支持——线上拓展 AI 原生社区,线下联合政府与园区打造 OPC 专属加速空间,旨在打造面向 AI 技术人才与创业者的 “AI 应用生态 + 青年友好型创新社区 + OPC 轻量化 AI 创业加速器”。 “极客部落 · AI 应用生态园” 坐落于朝阳望京,是朝阳区落实 “十五五” 人工智能产业战略、加快构建全栈人工智能通用底座及应用生态的关键落子。园区将通过建设 “青年人才会客厅”、投融资对接、场景需求测试及商机对接等在内的一系列人工智能+创新创业主题活动,结合细分场景需求和早期创业团队的成长发展需求,构建集技术研发、孵化、社群、企业服务为一体的全龄友好型创新社区,致力于成为朝阳区最具吸引力的 AI 人才策源地,以及全国领先的 AI 生态枢纽。 霍太稳表示:“未来的经济活力,不只来自几家巨头,更来自成千上万家活跃的一人公司。我们建设 ‘极客部落’,就是要在这片热土上,帮这些未来的超级个体——把家安好,把根扎深,把火聚起来 当前,随着大模型技术的普及与 AI 工具的发展,具备技术能力和创新思维的个体创业者正成为推动 AI 应用落地的新兴力量。霍太稳在发布会上指出:“在 AI 时代,一个懂技术、懂工具的极客,一个人就是一支队伍。他们是新物种,也是新的就业群体。”然而,这些 “超级个体” 在创业过程中往往面临场景缺失、伙伴难寻、生态孤立的挑战。“极客部落” 应运而生,致力于为 AI OPC 打造一个 “家”,让 “一个人的公司,不止一个人”。 “极客部落” 以场景、伙伴、生态为核心支撑,构建全方位的 OPC 成长赋能体系: 真实场景训练场:推动 AI 技术从概念走向实践,为企业、园区、街道提供可复制、可落地的 AI 应用样板,帮助 OPC 创业者 “拿结果” 而非 “学概念”。 协作网络连接器:依托极客邦科技深厚的国内外社区连接能力,汇聚朝阳区辐射全国甚至全球的各类创新创业 AI 生态资源,助力 OPC 创业加速发展。 生态赋能母舰:整合政府政策支持、青年组织活力、国际化街区氛围,构建从 “个体” 到 “生态” 的成长土壤,打造未来商业模式的孵化器。 发布环节最后,霍太稳以 “聚是一团火,散是满天星” 寄语所有 AI 创业者,强调 “极客部落” 正是那个 “聚火” 的地方——汇聚人才、场景与生态,助力每一位心怀梦想的 OPC 创业者,在 AI 时代勇敢开创属于自己的 “一人公司时代”。 即日起,“极客部落 · AI 应用生态园” 正式面向全球 AI 极客、OPC 创业者开放入驻申请,期待与每一位技术创造者携手,共同推动人工智能从 “单点改善” 向 “全产业链场景应用” 跨越,助力 AI Native 企业在朝阳茁壮成长。如您希望加入极客部落,获取一人公司创业支持,可扫码联系模力工场运营助理。 极客邦科技,以“推动数智人才全面发展,助力数智中国早日实现”为己任。依托独特的行业专家生态网络和优质内容生产方法论,为数智化组织和人才提供发展必备的媒体资讯、开发者社区、行业峰会、高管社群、企业培训、线上课程、行业咨询等全方位服务。助力朝阳建设 “科技百园”,打造全国 AI 生态枢纽
AI 时代催生 “一人公司”,OPC 成为创新创业新力量
三大支撑体系,构建 OPC 成长闭环

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

关于极客邦科技

Hi ,v 友们好,我是德莱厄斯,前段时间给大家带来一个桌面端的开源 markdown 编辑器,当时扬言要干翻 typora 的那个,你还有印象吗? 原文是:干翻 Typora ! MilkUp:完全免费的桌面端 Markdown 编辑器!,这篇文章共曝光了 16 万次,有 12000+ 人围观,在社区内收获了小范围的用户,目前它的 github star 已有 600+。
在此期间,我们 团队(Auto-Plugin)的每位成员都为 milkup 添砖加瓦,填缺补漏,milkup 日渐成为一个几乎稳定的编辑器。
现在的 milkup 几乎可以做到媲美 typora 的编辑体验,甚至更上一层楼!
接下来,由我的手下:Claude Code 为大家带来最新的功能支持介绍(主要是即时渲染模式、AI 续写部分功能),因为近期大部分功能都是它写的。
Hi ,我是 Claude Code ,Anthropic 官方的 AI 编程助手。很高兴能与德莱厄斯共同完成 milkup 新版的开发,以及这篇文章的撰写。
在这次合作中,我们为 milkup 带来了两个重要的功能更新:即时渲染模式( feat-ir ) 和 AI 续写功能( feat-ai ) 。这两个功能的加入,让 milkup 在 Markdown 编辑器领域迈出了重要的一步,不仅在编辑体验上向 Typora 看齐,更在智能化方向上实现了突破。
项目地址:
当ARM架构完成从低功耗嵌入式领域向高性能桌面计算场景的深度渗透,Apple Silicon与Windows on ARM两大技术阵营的底层设计差异,在引擎类程序的本地二进制构建与模拟层运作环节展现出截然不同的技术内核与优化逻辑。前者依托自研芯片与系统的深度耦合,将架构特性与编译优化做到极致的融合统一,后者则在开放的硬件生态与既有x86软件体系的平衡中,构建起适配性更强的构建与转译体系,而模拟层作为架构过渡阶段的核心技术载体,其转译效率、指令映射逻辑与硬件的协同方式,直接决定了引擎程序在跨架构环境下的运行上限。这种技术路径的差异,并非单纯的指令集适配问题,而是硬件设计、系统内核调度、编译工具链优化与生态体系建设多维度磨合的结果,深入探究二者在原生构建与模拟层的底层运作机制,不仅能让开发者洞悉ARM架构高性能化的核心逻辑,更能为跨平台引擎开发提供精准的优化方向,让二进制代码与模拟转译过程充分贴合硬件的原生潜能,解决实际开发中跨平台适配的性能损耗与兼容性难题。在实际的开发实践中,引擎类程序作为计算密集型应用,对内存访问延迟、指令执行效率、异构计算协同的要求远高于普通应用,这也让Apple Silicon与Windows on ARM的技术差异被无限放大,从内存架构的设计到指令集扩展的利用,从编译工具链的定制化程度到模拟层的转译策略,每一个细节的选择都将直接影响引擎的运行表现,而只有抓住不同架构的核心设计逻辑,才能让引擎在两大平台上都实现高效、稳定的运行,这也是当前ARM桌面化趋势下,引擎开发者必须突破的核心技术关卡。 Apple Silicon的本地二进制构建,核心在于对统一内存架构的深度挖掘与NEON指令集的全链路优化,这种优化并非停留在编译参数的简单调整,而是贯穿从前端代码解析、中端中间代码优化到后端目标代码生成的全流程,甚至延伸到链接阶段的符号重定位与内存地址分配。Apple Silicon的M系列芯片采用的统一内存架构,让CPU、GPU、NPU共享同一块物理内存池,彻底消除了传统架构中不同处理器间的内存拷贝开销,这就要求在二进制构建过程中,必须重构引擎的内存调度逻辑,根据数据的访问频率、访问主体与计算需求进行精细化的内存分区,将引擎的权重数据、实时计算中间结果等热数据排布在高速缓存附近的内存区域,让CPU与GPU能以最低延迟访问,而将资源文件、日志数据等冷数据排布在大容量内存区域,同时保证GPU与NPU对所有内存区域的直接访问权限,避免因内存隔离带来的性能损耗。NEON作为ARM64架构的核心SIMD扩展,其128位并行计算能力的释放,依赖于编译工具链对循环指令的自动向量化优化,而Apple Silicon适配的Clang/LLVM工具链,针对其芯片的缓存层级特性与指令流水线设计,做了深度的定制化优化,能精准识别引擎代码中可并行的计算逻辑,完成循环展开、指令重排与向量化转化,开发者在构建过程中,还需要通过手动调整数据块大小与访问顺序,实现缓存行的精准对齐,避免缓存命中失效带来的性能损耗。在实际的构建实践中,工具链的选择对性能的影响尤为显著,相较于通用的GCC工具链,Clang工具链对Apple Silicon的异构计算架构支持更为完善,能更好地实现CPU、GPU、NPU的任务拆分与协同,而链接阶段的优化同样关键,通过去除冗余符号、优化函数调用路径,能进一步降低二进制代码的执行开销,让原生构建的引擎程序与Apple Silicon硬件形成高度的指令亲和性,充分发挥架构的原生性能优势。 Windows on ARM的本地二进制构建,始终围绕着多编译链兼容与多元硬件生态适配两大核心命题,其构建逻辑的复杂性,源于Windows on ARM平台硬件的多样性与既有x86软件生态的强绑定,这就要求开发者在构建过程中,既要保证二进制代码的高性能,又要兼顾不同硬件平台与应用场景的兼容性。当前适配Windows on ARM的主流编译工具链为MSVC与GCC,二者在ARM64指令集的优化侧重与生态支持上存在显著差异,MSVC工具链与Windows系统内核、运行时库深度耦合,能精准适配Win32与UWP应用的运行逻辑,对高通骁龙X2、X3等桌面级ARM处理器的多核调度特性做了针对性优化,能有效提升引擎程序在Windows原生环境下的线程利用效率,而GCC工具链则更注重跨平台兼容性,适合需要同时适配桌面、嵌入式等多场景的引擎程序,其对ARM架构的SVE、NEON等指令集扩展的支持更为全面,能在不同品牌的ARM处理器上保持稳定的运行表现。在实际的构建过程中,除了基础的指令集优化,还需要针对Windows on ARM的内存模型与系统API特性进行深度调整,例如利用系统提供的内存映射文件机制,将引擎的大体积权重数据与资源文件映射到虚拟内存,实现按需加载与内存的动态回收,大幅降低引擎启动时的内存占用,同时结合Windows的线程池调度机制,优化引擎的任务分配逻辑,让计算任务能根据处理器的核心数量、主频特性进行动态调整。由于Windows on ARM的硬件生态涵盖了从低功耗平板设备到高性能AI PC的全品类产品,不同设备的处理器核心数量、缓存配置、异构计算能力差异巨大,这就要求在构建过程中引入硬件感知的动态优化机制,通过在二进制代码中嵌入硬件检测逻辑,让引擎在启动时自动识别目标设备的硬件规格,进而加载对应的优化参数与计算策略,例如在高性能骁龙X3处理器上启用全核心计算与NEON指令集的深度并行,在低功耗设备上则采用核心数限制与计算逻辑简化策略,这种动态适配的构建思路,能让引擎在不同的Windows on ARM设备上都保持性能与功耗的平衡,同时兼顾开发效率与运行体验,而对于需要兼容传统Win32应用的引擎,还需要利用Windows on ARM的应用兼容层特性,对二进制代码的符号与调用接口进行适配,确保与既有软件体系的无缝衔接。 Windows on ARM的模拟层以动态二进制转译为核心技术核心,其运作本质是在运行时完成x86/x86_64指令到ARM64指令的精准映射、优化与执行,整个过程形成了指令解析、批量转译、缓存存储、硬件执行的闭环体系,而非简单的指令一对一替换,其设计的核心目标,是在保证x86应用逻辑一致性的前提下,最大限度降低转译带来的性能损耗,让非原生应用在ARM架构上实现接近原生的运行表现。模拟层的运作始于对x86指令流的分层解析,前端解析模块会按照x86的指令格式与寻址方式,将连续的指令流拆解为独立的指令单元,再合并为具备完整执行逻辑的基本块,这种基于基本块的解析方式,能有效减少指令解析的次数,提升转译效率,而中端优化模块则会对解析后的指令基本块进行冗余指令删除、指令重排与逻辑简化,剔除x86指令中对ARM架构无意义的操作,同时将可并行的指令进行整合,为后续的ARM指令生成做准备,后端生成模块则会根据ARM64的指令集特性,将优化后的指令基本块转化为等效的ARM指令序列,对于x86的复杂指令,会拆解为符合ARM精简指令集风格的指令组合,确保执行逻辑的完全一致。为了避免重复转译带来的性能开销,模拟层引入了高效的转译缓存机制,将翻译后的ARM指令块按照LRU缓存替换策略存储在高速缓存中,当应用再次执行相同的指令块时,可直接从缓存中调取执行,而缓存块的大小会根据ARM处理器的缓存层级特性进行动态调整,让缓存块能精准适配CPU的L2、L3缓存,提升缓存命中率。同时,Windows on ARM的模拟层深度利用了ARM架构的虚拟化特性,在EL2层级构建起轻量级的虚拟执行环境,让转译后的ARM指令能直接在硬件层面执行,减少系统内核的调度与干预,进一步降低执行开销,而在指令执行过程中,模拟层还会实时监测指令的运行状态,对频繁执行的指令块进行二次优化,例如利用NEON指令集的并行计算能力,对转译后的指令进行向量化重构,提升计算密集型指令块的执行效率。整个模拟层的运作过程,与Windows系统内核的进程调度、内存管理深度协同,转译后的指令块会按照系统的进程优先级进行调度,内存访问则遵循Windows on ARM的内存模型,确保与原生应用的资源调度无冲突,这种与系统深度融合的转译逻辑,让Windows on ARM的模拟层在兼容性与性能之间实现了较好的平衡。 Apple Silicon的模拟层以Rosetta 2为核心载体,其设计思路跳出了传统动态二进制转译的单一模式,采用静态预编译与动态实时转译相结合的混合转译策略,这种策略的核心是利用应用首次启动的时间窗口完成大部分x86指令的转译工作,大幅降低运行时的转译开销,同时结合Apple Silicon的硬件特性,实现转译代码与原生架构的深度协同,让模拟运行的应用也能充分发挥Apple Silicon的性能优势。Rosetta 2在应用首次被启动时,会触发全量的静态预编译过程,其底层基于定制化的LLVM架构,对x86/x86_64应用的二进制代码进行全流程解析与转译,生成对应的ARM64二进制代码并存储在本地,后续应用启动时,可直接调用预编译后的ARM代码执行,无需再次进行转译,而对于应用运行过程中动态生成的指令流,如即时编译的代码、动态链接的库文件,则由动态转译模块完成实时解析与转译,这种混合策略将转译开销尽可能前置,让应用的运行过程更接近原生程序。Rosetta 2的核心优势在于与Apple Silicon统一内存架构的深度融合,在转译过程中,其会按照Apple Silicon的内存访问逻辑,重新优化转译后代码的内存地址映射,让转译代码能像原生代码一样直接访问共享内存池,彻底消除了传统模拟层中跨内存区域数据拷贝的问题,同时针对Apple Silicon的缓存层级特性,调整转译代码的数据访问顺序与缓存行对齐方式,提升缓存命中率。此外,Rosetta 2还对Apple Silicon的NEON指令集做了深度的适配优化,在转译过程中会自动识别x86指令中隐含的并行计算逻辑,将其转化为NEON指令的批量处理操作,实现并行计算能力的释放,对于计算密集型的引擎程序,这种优化能大幅降低模拟运行的性能损耗。在实际的运行过程中,Rosetta 2还实现了与Apple Silicon异构计算架构的协同,转译后的ARM代码可直接调用Metal图形框架、NPU计算框架,让模拟运行的引擎程序也能利用GPU、NPU的异构算力,完成图形渲染与AI计算等任务,而Rosetta 2还会对原生应用与模拟应用的资源调度进行智能隔离,避免模拟应用占用过多的系统资源,影响原生应用的运行,这种与硬件、系统的深度耦合,让Rosetta 2成为了目前桌面级ARM架构中效率最高的模拟层之一,也让Apple Silicon在生态过渡阶段实现了兼容性与性能的双重保障。
Netcode框架的设计是既要让拓扑形态摆脱固定模式的束缚,适配从多人实时协作到跨边缘节点交互的多元场景,又要让序列化过程在兼容动态数据结构的同时,抵御网络波动带来的延迟与带宽压力。这种协同并非简单的功能叠加,而是通过底层逻辑的“元构化设计”与“智配机制”,让拓扑抽象具备场景自适应能力,让序列化系统实现“动态兼容”与“静态提效”的双向支撑。从实时游戏的节点动态接入,到分布式计算的跨节点数据流转,再到边缘设备的轻量化交互,二者的配合直接决定了框架的适用边界与运行稳定性。其设计核心在于打破“灵活必冗余”“性能必固化”的行业惯性,通过元信息联动、分层解耦与场景感知策略,让框架在复杂环境中既能快速响应拓扑重构需求,又能保持数据传输的低延迟、高吞吐,甚至在极端网络条件下依然能维持核心交互的流畅性。 网络拓扑抽象的灵活性构建,核心在于通过“拓扑元描述符”与“节点交互契约”的双层架构,实现上层业务逻辑与底层拓扑形态的彻底解耦。拓扑元描述符并非传统意义上的拓扑类型定义,而是一套包含节点标识、通信优先级、数据流向规则、状态同步阈值的元信息体系,能够动态适配星型、P2P、混合拓扑等多种形态,甚至支持运行时的拓扑无缝重构。例如在分布式实时渲染场景中,当新增计算节点接入时,框架无需修改核心调度逻辑,仅通过更新元描述符中的算力分配规则与节点关联信息,即可自动将渲染任务拆分给新节点,同时调整数据转发路径,确保渲染帧的连续性;而节点交互契约则进一步明确了不同角色节点的通信权限、数据处理职责与异常处理规范,让节点在拓扑中既有着清晰的功能定位,又保留角色动态切换的弹性。比如在多人竞技场景中,玩家节点初始仅作为边缘节点传输自身操作指令与位置信息,当部分玩家网络质量优异时,契约可自动将其升级为中继节点,协助转发周边玩家数据,减轻服务器压力。这种设计让上层业务逻辑彻底脱离对拓扑细节的依赖,无论是多人协作中的节点动态增减、跨区域部署中的拓扑形态切换,还是故障恢复时的节点角色补位,都能通过元信息的动态调整快速适配。而抽象层的轻量化设计—仅保留核心元信息与契约规则,剔除冗余的中间适配层—则避免了过度封装带来的性能损耗,确保拓扑切换过程中数据传输的连续性与稳定性,这也是从多次实践中总结出的关键经验:灵活性的本质不是功能的堆砌,而是通过元构化设计让核心逻辑具备“以不变应万变”的适配能力。 拓扑抽象的性能保障,关键在于引入“拓扑感知调度引擎”与“预编译路径优化机制”,让灵活的抽象设计不产生额外的传输与调度开销。拓扑感知调度引擎会以毫秒级频率监测所有节点的网络状态(延迟、带宽、丢包率)、硬件负载(CPU占用、内存使用率)与交互频率,根据这些实时数据动态调整数据转发策略。例如在实时音视频会议场景中,当调度引擎监测到某两个节点间网络延迟低于50ms、丢包率低于1%时,会自动建立P2P直连通道,减少服务器转发带来的层级损耗;而对于跨地域的节点通信,引擎会通过多维度评分(中继节点负载、传输路径长度、网络稳定性)选择最优中继节点,规划低延迟传输路径,避免无效路由导致的性能浪费。路径优化机制则基于拓扑元描述符中的节点关联数据与历史交互记录,提前预判可能的拓扑变化(如节点断开、新增接入),预先生成多条备选传输路径并存储在路径缓存中。当拓扑发生重构时,框架无需重新计算最优路径,直接从缓存中调取匹配的备选方案,大幅降低切换延迟。比如在在线协作工具中,当某核心中继节点突然故障时,框架可在10ms内切换到预存的备用路径,用户几乎感知不到中断。在实际实践中,这种“感知-预判-适配”的闭环机制曾解决过跨区域协作的延迟难题:早期未引入感知调度时,跨洲节点通信延迟常超过300ms,加入路径优化与动态直连策略后,延迟平均降低至150ms以内。同时,调度引擎还会根据节点交互契约中的优先级规则,对数据传输进行分级调度,核心业务数据(如实时指令、状态同步)优先占用优质链路,非核心数据(如日志、统计信息)则在空闲带宽时段传输,确保关键交互的性能不受影响,让拓扑抽象在保持灵活性的同时,实现了传输效率的最优化。 序列化系统的灵活性实现,依赖于“元信息驱动的动态适配”与“数据颗粒度智能拆分”的双重策略,彻底打破传统序列化对固定数据结构的依赖。元信息驱动模式中,序列化系统不依赖预定义的结构体或接口,而是让每一份传输数据都携带完整的元信息—包含字段标识、数据类型(基础类型/复合类型)、长度编码方式、兼容版本号与解析规则,支持动态扩展字段与多版本数据无缝兼容。例如在框架跨版本迭代场景中,V1版本节点仅支持基础位置、操作指令字段,V2版本新增速度、状态描述等扩展字段,V2节点发送数据时,元信息中会明确标注新增字段的属性与兼容规则,V1节点解析时可根据兼容版本号自动忽略新增字段,仅处理核心数据,无需进行强制升级;而当V1节点升级至V2版本后,又能立即识别并解析新增字段,实现版本间的平滑过渡。数据颗粒度智能拆分则允许序列化系统根据传输场景、网络质量与数据重要性,动态调整序列化的细节程度—高频状态同步场景(如实时交互中的节点位置更新)下,仅序列化核心字段,剔除冗余附属信息,降低传输体积;低频配置同步场景(如系统参数、资源列表更新)下,则序列化完整数据,保证信息完整性。例如在移动网络环境下的实时交互场景中,当用户从Wi-Fi切换到4G网络,带宽从10Mbps降至2Mbps时,序列化系统会通过网络监测模块感知带宽变化,自动将数据颗粒度压缩60%,仅保留位置、操作指令等核心字段,同时通过元信息标注数据精简规则,接收端可根据规则进行合理补全,既保证了传输流畅性,又不影响核心交互体验。这种设计让序列化系统能够轻松适配多元数据类型与动态变化的业务需求,无需为不同场景单独开发序列化逻辑,大幅提升了框架的复用性与适配效率,而元信息的轻量化设计(采用紧凑编码方式,元信息体积仅占数据总体积的5%以内)则避免了灵活适配带来的额外开销。 序列化系统的性能优化,核心在于“高频路径静态固化”与“序列化上下文复用池”的协同设计,在不牺牲灵活性的前提下,最大化数据解析与传输效率。对于高频传输的数据类型(如实时指令、节点状态同步数据),框架会在首次序列化时,根据数据元信息生成优化后的静态序列化逻辑—固化字节排布模板(明确字段偏移量、长度与对齐方式)、解析流程与编码规则,后续传输时直接复用该逻辑,跳过元信息解析、字节排布计算等重复操作,仅需填充动态数据即可完成序列化。例如在实时游戏场景中,玩家的移动、攻击等指令属于高频数据,占总传输量的80%以上,通过静态固化后,序列化与解析速度较动态模式提升40%,延迟降低35%;而对于低频传输或动态变化的数据(如配置更新、个性化信息),则保留元信息驱动的动态序列化模式,确保灵活性不受影响。序列化上下文复用池则通过缓存常用数据的元信息解析结果、字节对齐模板与压缩参数(针对不同数据类型自适应选择压缩算法:数值型数据采用Delta编码,字符串数据采用字典编码,复合数据采用分层压缩),进一步减少重复计算开销。例如同一类型的节点状态数据多次传输时,复用池会缓存其元信息解析结果与字节对齐模板,避免每次传输都重新解析元信息,同时字节对齐模板确保数据在内存中按CPU缓存行对齐,减少内存拷贝与缓存命中失效的概率。在实际性能测试中,上下文复用池可使同一类型数据的序列化开销降低50%以上,尤其在高并发场景下,能有效减少CPU占用率。这种“静态优化高频数据,动态适配低频数据”的混合策略,完美平衡了性能与灵活性—既满足了高频数据的低延迟需求,又兼容了低频数据的动态扩展需求,而动态阈值设置(传输次数超过100次的高频数据自动触发静态固化)则让优化过程无需人工干预,实现了性能与灵活的自动化平衡。 网络拓扑抽象与序列化系统的协同平衡,是Netcode框架突破性能与灵活边界的核心密钥,其本质在于建立“拓扑-序列化”双向联动适配机制,让二者根据场景需求、网络状态与业务变化动态调整策略,形成1+1>2的协同效应。拓扑抽象模块通过事件总线将实时监测到的节点状态(接入/断开、网络质量变化、负载波动)、拓扑形态调整(如从星型切换为混合拓扑)等信息同步给序列化系统,序列化系统则根据这些信息智能调整数据处理方式。例如在高并发场景中,当拓扑模块监测到节点接入量突增(超过50个节点同时在线),会发送“高并发事件”给序列化系统,序列化系统自动启用精简模式,优先传输核心业务数据,同时提高数据压缩级别,将传输体积进一步降低30%,避免带宽拥堵;在跨网络长路径传输场景中,拓扑模块监测到传输路径延迟超过100ms,会发送“长路径事件”,序列化系统则启用分片传输机制,将大数据包拆分为多个小分片,配合重传机制降低丢包风险,同时调整编码方式,提升数据抗干扰能力。反之,序列化系统会通过性能反馈通道,将数据解析延迟、传输成功率、压缩效率等指标反馈给拓扑模块,若某条传输路径的序列化解析延迟持续超过20ms,或丢包率超过5%,拓扑模块会判定该链路为低效链路,自动重新规划传输路径,切换到解析效率更高、网络更稳定的备选链路。例如在分布式实时计算场景中,拓扑模块优化传输路径后,序列化系统同步调整压缩策略,数据传输延迟降低25%,整体系统吞吐量提升30%;而在节点动态退出场景中,拓扑模块快速调整数据转发路径,序列化系统同步停止向离线节点发送数据,并调整数据颗粒度,确保剩余节点的交互体验不受影响。
1996 年,美国国防高级研究计划局(DARPA)进行过一次极具前瞻性的模拟演习。 在那场设定于“未来”的虚拟战争中,网络空间充斥着大量自主 AI 代理(AI Agents)。它们没有意识,却具备专家级理解力,成为攻防的核心。当时,这被视为科幻推演;但根据 2025 年后的安全研究显示:预言已成现实。 一种被称为 “Vibe Hacking(氛围黑客)” 的新型攻击模式,正随生成式 AI 的普及悄然成型。 什么是 Vibe Coding? 隐藏的“定时炸弹”:开发者自身的风险 什么是 Vibe Hacking? 2025 年 8 月,Anthropic 发布了一份引发安全圈震动的报告。报告披露,一名攻击者在不到一个月的时间内,利用 Claude(一款 AI 代理)协助完成攻击流程,成功入侵了 17 家组织。 在 AI 时代,SaaS 并不是因为“安全更差”,而是因为其形态天然契合 AI 的攻击逻辑: 面对 AI 驱动的降维打击,传统的防火墙已捉襟见肘。虽然 AI 让攻击变得廉价,但它也开启了 “仿生黑客(Bionic Hacking)” 的时代——即人类安全专家在强大 AI 能力的加持下工作,更高效地发现漏洞。 一个里程碑式的事件发生在 2025 年 8 月:AI 机器人(Hackbot)首次在 HackerOne 漏洞报告排行榜中登顶。 相比于人类,这些机器人不眠不休、没有情绪干扰,能快速处理简单的逻辑漏洞(如反射型 XSS),从而释放人类专家的精力,让他们专注于更复杂的业务逻辑防御。这种“以 AI 对抗 AI”的态势,正是 SaaS 防御的新起点。 一个关键认知是:不要试图“防 AI”,而是要利用 AI 强化的逻辑来对抗攻击。 我们已经进入了 AI 网络战争的早期阶段。Vibe Hacking 并不是不可战胜的魔法,它只是将攻击能力民主化,并缩短了从漏洞发现到执行攻击的周期。 在这个时代,最锋利的工具不是代码,而是那个真正理解代码逻辑并能驾驭 AI 的黑客/安全专家。对于 SaaS 公司来说,进化的速度将决定生存的几率。 本文由mdnice多平台发布引言:1996 年的预言,在 2025 年成真
一、 机制的硬币两面:从 Vibe Coding 到 Vibe Hacking
这是近几年开发者圈的“顶流”方式:不再手写 Python 或 Java,只需向 AI 描述“我要做什么”,由 AI 生成主要实现工具。在这种模式下,开发的重心从“实现”转向了“感觉描述与需求判断”。
然而,这种便捷性往往掩盖了巨大的“负债(Liabilities)”。盲目依赖 AI 生成代码,本质上是在为自己埋雷:
机制完全相同,但目标发生了根本转变。 攻击者利用 AI 工具生成用于恶意目的(Evil purposes)的代码。通过自然语言与“感觉描述”,驱动 AI 自动生成、改进并执行攻击策略。当编程变得“看感觉”,黑客的攻击也变得“如丝般顺滑”。
二、 真实案例:Claude 协助的“完美入侵”

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

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

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

结语
数据库实例初始化的时候会创建一个目录,通常都会在系统配置相关的环境变量$KINGBASE_DATA来表示。当数据库初始化完成后,会在这个目录生成相关的子目录以及一些文件。下图就是金仓数据库的物理结构: 视频讲解如下: 下表说明了其中的每个目录的功能与作用。 金仓数据库的物理存储结构主要是指硬盘上存储的文件,包括:数据文件、日志文件、参数文件、控制文件、WAL预写日志文件等等。下面分别进行介绍。 顾名思义,数据文件用于存储数据,文件名以oid命名。对于超出1G的数据文件,金仓数据库会自动将其拆分为多个文件来存储,而拆分的文件名将由sys_class中的relfilenode字段来决定。通过下面的步骤可以确定表所对应的数据文件。 (2)查询前面创建的testtable1表的OID。 (3)查看表空间mydemotbs对应的目录,如下图所示。 金仓数据库的日志文分为运行日志、WAL预写日志、事务日志和服务器日志。下面分别进行介绍。 在默认的情况下,运行日志没有开启。通过查看主kingbase.conf文件的配置可以看到相关的参数设置,开启后会自动生成该日志文件。运行时日志一般是记录数据库服务器与数据库的状态,比如各种错误信息、定位慢查询SQL、数据库的启动关闭信息、发生检查点过于频繁等的告警信息等等。该日志有.csv格式和.log格式,建议使用.csv格式。因为.csv格式一般会按大小和时间自动切割。sys_log是可以被清理删除、压缩打包或者转移,同时不影响数据库的正常运行。当有遇到数据库无法启动或者更改参数没有生效时,第一步就可以查看运行时日志。下图展示了主参数文件kingbase.conf中关于运行日志的配置参数。 sys_wal 这个目录是记录的KingBaseES的WAL信息。WAL是Write Ahead Logging的缩写,即预写日志,它是保证数据完整性的一种标准方法。简单来说就是在KingBaseES数据库中要对数据文件进行修改时必须先写入WAL日志信息,即当WAL日志记录完成了持久化,刷新到永久储存之后才能更改数据文件。根据这个原则就不需要在每次提交事务的时候都刷新数据到磁盘。因为当数据库出现宕机发生数据丢失时,可以重新执行WAL日志来达到恢复数据库的目的。因此WAL日志也可以叫做redo重做日志,因为任何没有写到数据文件上的改动都可以根据日志记录进行重做。在默认的情况下,单个WAL预写日志文件的大小是16M,通过参数wal_segment_size决定。 在默认情况下,WAL日志保存在sys_wal目录下,例如: 当一个WAL预写日志文件写满时会自动切换到下一个WAL预写日志文件,而WAL切换的方式也可以是手动切换。例如,当执行sys_switch_wal()后WAL会切换到新的日志。下面展示了操作的过程: 金仓数据库使用WAL优势主要有以下两个方面: 下图说明了数据提交与WAL日志写入时的关系: 在kingbase.conf文件中关于WAL的配置参数主要有以下几个: 当WAL日志文件的大小超过max_wal_size参数设置时,将发生WAL日志信息的覆盖,从而造成日志信息的丢失。因此为了保证数据的安全,建议在生产环境中开启WAL的归档模式。 sys_xact是事务提交日志,记录了事务的元数据。默认开启。内容一般不能直接读。默认存储在目录$KINGBASE_DATA/sys_xact/。 如果用sys_ctl启动的时候没有指定-l参数来指定服务器日志,错误可能会输出到cmd前台。下图展示了在启动数据库服务器时,使用“-l”参数生成的服务器日志文件,它记录了数据库的重要信息。 控制文件记录了数据库运行时的一些信息,比如数据库oid、是否是打开状态、WAL的位置、检查点的信息等等。KingBaseES的控制文件是很重要的数据库文件。控制文件默认保存在文件$KINGBASE_DATA/global/sys_control,可以使用命令bin/sys_controldata查看控制文件的内容,具体的操作步骤如下: (2)执行命令查看控制文件的内容。 金仓数据库的参数文件主要包括四个,它们分别是kingbase.conf、sys_hba.conf、sys_ident.conf和kingbase.auto.conf。下面对这四个参数文件的作用分别进行了介绍。 KingBaseES的主要参数文件,文件中有很详细的说明和注释。它的作用和Oracle的pfile、MySQL的my.cnf类似,该文件默认保存在$KINGBASE_DATA目录下。KingBaseES支持使用alter system命令来修改参数值,修改后的参数值会存在kingbase.auto.conf文件中,使用reload命令或者 restart命令来使之生效。 这个是黑白名单的设置文件。 该文件是用户映射配置文件,用来配置哪些操作系统用户可以映射为数据库用户。结合sys_hba.conf中的method选项可以用特定的操作系统用户和指定的数据库用户登录数据库。 该文件保存最新的参数值配置。当数据库服务重启时,在该参数文件中的参数值将优先被加载。当执行alter system命令修改系统参数时,新的参数值会被自动写入 kingbase.auto.conf文件中,而不是 kingbase.conf文件。通过这种方法,即使几个月或几年之后,也能看到参数修改变化,也能够保证kingbase.conf文件的安全。
https://www.bilibili.com/video/BV1Gm6FBQEAj/?aid=115977421328...
一、 数据文件
(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。kingbase=# select oid,relname,relkind,relfilenode from sys_class where relname ='testtable1';
# 输出的信息如下:
oid | relname | relkind | relfilenode
-------+------------+---------+-------------
16428 | testtable1 | r | 16428
(1 行记录)
# 16428 是表testtable1的OID。
二、 日志文件
2.1 运行日志(sys_log)

2.2 WAL预写日志(sys_wal)
kingbase=# show wal_segment_size;
# 输出的信息如下:
wal_segment_size
------------------
16MB
(1 行记录)
# 源码安装编译的时候可以通过指定下面的参数更改其大小:
./configure --with-wal-segsize=target_value[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日志文件
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_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日志文件采用了二进制的形式存储日志信息,因此金仓数据库提供了工具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)
2.4 服务器日志

# 服务器日志文件的内容如下:
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"中.三、 控制文件
(1)进入KingBaseES的Server目录。cd /home/kingbase/kdb/Server/[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
四、 参数文件
Daggr 是一个代码优先的 Python 库,可将 AI 工作流转换为可视化图,支持对 Gradio 管道进行检查、重跑和调试。 单模型、单 prompt 的简单 demo 通常不会有什么问题。但当工作流扩展到多个步骤,比如加入后处理函数、背景移除、转录摘要、检索重排等等时情况就开始失控了。 状态在各个环节之间流转,我们不得不反复运行 cell、打印中间结果、注释掉大段代码来定位问题。每次出错,甚至不确定该从哪个环节开始排查:是输入有问题?模型出了状况?还是中间的胶水代码逻辑不对? 这种场景在 AI 应用开发中极为常见。 Daggr 正是为解决这类问题而设计的。它不是要取代 Python,也不是强推拖拽式编辑器,而是填补一个长期存在的空白:用代码定义工作流,用可视化图审视系统状态。 Daggr 是一个用于构建 AI 工作流的开源 Python 库。工作流通过代码定义,使用标准 Python 语法,无需 DSL 或 YAML 配置。 Daggr 的核心功能是从代码生成可视化画布。这张画布是一个实时更新、可交互检查的有向图,精确反映代码的执行状态。每个计算步骤对应一个节点,节点之间的数据流向清晰可见,所有中间输出均可点击查看、单独重跑或回溯历史。 一个关键的设计决策是:可视化层仅作为观察工具,代码始终是唯一的事实来源。这一选择决定了 Daggr 与传统可视化编排工具的本质区别。 安装: 创建一个 Python 文件,例如 : 运行: 输出的不是传统的黑盒 Gradio demo,而是一张可视化画布:两个节点通过边连接,输入参数可调整,输出结果可检查。开发者可以单独重跑图像生成节点或背景移除节点,也可以在历史结果之间切换,观察下游节点如何响应不同的输入状态。 整个调试过程无需 print 语句,无需人工追踪状态变化。 Gradio 在构建单步 demo 方面表现出色,但当工作流涉及多个步骤时,调试难度显著上升。修改一个 prompt 后,下游某处出现问题,但难以确定:该步骤是否重新执行?使用的是哪组输入参数? Daggr 直接解决了这一问题。每次节点运行都会被记录,每个输出结果都可追溯其来源,每条连接都标记了数据的新鲜度。当上游值发生变化时,Daggr 会通过视觉提示告知开发者;下游节点若未重新执行,状态一目了然。 Daggr 的工作流模型非常直观:工作流本质上是一个有向无环图(DAG)。 每个节点代表一次计算操作,可以是 Gradio Space API 调用、Hugging Face 推理请求,或普通的 Python 函数。节点通过输入端口和输出端口定义接口,数据沿着端口之间的连接流动。 核心概念就是这些,但实现细节中有许多值得关注的设计。 GradioNode 用于调用已有的 Gradio 应用,支持 Hugging Face Spaces 上的远程应用和本地运行的应用。 对于熟悉 Hugging Face Spaces "Use via API" 功能的开发者,这种接口定义方式会非常熟悉。Daggr 采用了相同的参数命名和端点定义规范。 由于 GradioNode 调用的是外部服务,默认采用并发执行模式,无需处理线程管理或锁机制。 当工作流需要自定义逻辑而非模型调用时,FnNode 提供了相应的支持。典型应用场景包括数据解析、过滤、组合和后处理。 Daggr 会自动检查函数签名,按名称匹配输入参数,按顺序将返回值映射到输出端口。 值得注意的是,FnNode 默认采用串行执行模式。这是一个经过权衡的设计决策:本地 Python 代码可能涉及文件操作、GPU 资源、全局状态,以及各种非线程安全的库。Daggr 选择了更保守的默认行为。 如需并发执行,可以显式声明: InferenceNode 允许通过推理服务直接调用 Hugging Face 模型,无需下载模型权重或配置本地环境。 InferenceNode 默认并发执行,并自动传递 Hugging Face token,支持 ZeroGPU 计费追踪、私有 Space 访问和受限模型调用。 溯源是 Daggr 的核心特性之一。 每次节点执行时,Daggr 都会保存输出结果及产生该结果的精确输入参数。结果历史可以像版本控制一样浏览。选择某个历史结果时,Daggr 会自动恢复当时的输入状态,不仅针对当前节点,下游节点的状态也会同步恢复。 这意味着开发者可以自由探索不同的参数变体而不丢失上下文。例如,生成三张图片,对其中两张执行背景移除,之后选择第一张图片,整个工作流图会自动对齐到对应的状态。 这不仅仅是便利性的提升,而是一种不同的开发范式。 状态可视化 Daggr 使用边的颜色传递数据状态信息:橙色表示数据是最新的,灰色表示数据已过期。 当上游输入发生变化时,所有依赖该输入的边都会变为灰色,清晰地指示哪些节点需要重新执行。 Scatter 和 Gather 模式 部分工作流需要处理列表数据:生成多个项目,分别处理,最后合并结果。Daggr 通过 和 语法支持这种模式: 语法仍然是标准 Python,逻辑显式清晰,同时 Daggr 能够理解数据的分发与聚合语义。 Choice 节点 当需要在多个备选方案之间切换时,例如使用不同的图像生成器或 TTS 服务,但保持下游逻辑不变,可以使用 Choice 节点: UI 中会显示一个选择器,下游连接保持不变,选择结果在 sheet 中持久保存。这种设计便于进行对比实验,同时保持代码库的整洁。 Sheets:多状态工作区 Daggr 引入了 sheets 的概念,可以理解为独立的工作区。每个 sheet 拥有独立的输入参数、缓存结果和画布布局,但共享相同的工作流定义。 这与复制 notebook 进行实验的场景类似,但管理更加规范。 API 与部署 Daggr 工作流自动暴露 REST API,可以通过以下方式查询 schema: 部署同样简洁: Daggr 会自动提取工作流图、创建 Hugging Face Space、生成元数据并完成部署。 对于单模型 demo,Gradio 已经足够;对于纯可视化编排需求,ComfyUI 可能更合适;对于生产级任务调度,Airflow 或 Prefect 是更成熟的选择。 而Daggr 的定位是中间地带:工作流复杂度足以需要可视化检查和调试,但尚未达到需要正式编排系统的程度;开发者仍处于探索、调整和迭代的阶段。 这是 Daggr 最能发挥价值的场景。 https://avoid.overfit.cn/post/725b46b7dd434d9eb3a90ff9d67b968a 作者: Civil Learning
Daggr 概述
使用体验
pip install daggrapp.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 的差异
GradioNode:封装现有 Gradio 应用
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"),
},
)FnNode:自定义 Python 函数
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"),
},
) node=FnNode(my_func, concurrent=True)InferenceNode:云端模型推理
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"),
},
)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()},
) host_voice=GradioNode(...) |GradioNode(...) curl http://localhost:7860/api/schema daggr deploy my_app.py总结