普通视图

发现新文章,点击刷新页面。
今天 — 2026年1月29日首页

4-1.【协议导向编程】什么是协议导向编程(POP),它解决了传统面向对象设计中的哪些问题?

作者 项阿丑
2026年1月29日 11:05

1️⃣ 什么是协议导向编程(POP)

协议导向编程 是 Swift 提出的编程范式,它的核心思想是:

  • 通过协议(protocol)定义接口和行为,而不是依赖类继承。
  • 通过协议扩展(protocol extensions)提供默认实现,减少重复代码。
  • 关注行为组合而非继承层级,强调“能力”的组合而不是类的层级关系。

简单理解:

在 POP 中,我们关注对象 能做什么(行为),而不是它 是什么(类型/类继承)。


Swift 中的协议示例

protocol Flyable {
    func fly()
}

protocol Swimmable {
    func swim()
}

// 给 Flyable 提供默认实现
extension Flyable {
    func fly() {
        print("I can fly!")
    }
}

// 使用协议组合
struct Bird: Flyable, Swimmable {
    func swim() {
        print("I can swim too!")
    }
}

let duck = Bird()
duck.fly()   // 输出: I can fly!
duck.swim()  // 输出: I can swim too!

✅ 这里你可以看到:

  • 没有继承自基类。
  • 通过协议组合实现多种能力。
  • 默认实现避免重复代码。

2️⃣ POP 解决了传统 OOP 的哪些问题

在传统面向对象编程(OOP)中,我们通常使用 类继承 来复用代码:

class Animal { ... }
class Bird: Animal { ... }
class Duck: Bird { ... }

OOP 的局限

  1. 继承层级僵化

    • 类只能单继承(Swift 中类也只支持单继承)。
    • 行为复用受限。
    • 如果想让一个类同时拥有多种能力(fly、swim、run),继承树会变得复杂。
  2. 代码复用困难

    • 父类提供通用方法,但子类可能需要修改。
    • 多个不相关类要重复实现相同功能。
  3. 类型耦合强

    • 子类依赖父类,导致灵活性下降。
    • 改变父类可能影响整个继承链。

POP 的优势

问题 POP 的解决方案
单继承限制 协议可以任意组合,轻松实现多能力组合(多重“继承”效果)
代码重复 协议扩展提供默认实现,避免重复实现
耦合性强 类型依赖协议接口而非具体类,实现低耦合
灵活性差 POP 强调行为组合,可在不改变继承关系的前提下扩展功能
测试难度大 使用协议作为依赖(依赖注入),单元测试更容易模拟/mock

Swift POP 的典型实践

  1. 使用协议定义能力(Abilities)

    • Flyable, Swimmable, Runnable 等。
  2. 协议扩展提供默认实现

    • 避免每个类型都重复实现。
  3. 通过协议组合创建对象

    • 组合多种能力而不依赖继承层级。
  4. 依赖抽象而非具体类型

    • 代码更灵活,可测试性高。

总结

协议导向编程(POP) 的核心思想是:

“面向协议编程,而不是面向类编程”
通过协议组合和扩展,实现行为复用和灵活的类型组合,从而解决了传统 OOP 的继承僵化、代码重复、耦合度高等问题。

Swift 官方甚至强调:

Swift 是协议导向语言,而不是类继承语言

一夜大涨超百元,金饰克价突破1700元

2026年1月29日 10:29
国际黄金市场再度迎来历史性突破,今日早间,伦敦金现逼近5600美元,国际金价的飙升迅速传导至国内市场,国内部分主流金饰品牌报价刷新1700元/克,创下历史新高,单日上涨百元左右。其中,老庙黄金报1722元/克,单日上涨104元,周生生为1708元/克,单日上涨94元;老凤祥为1713元/克,单日上涨93元/克。(新浪财经)

Neo-Cupertino 档案:撕开 Actor 的伪装,回归 Non-Sendable 的暴力美学

2026年1月29日 10:18

在这里插入图片描述

当前时间:2077年,一个阴雨连绵的周二 地点:Neo-Cupertino,第 42 区,“无限循环” 咖啡馆 人物

  • Jet:资深架构师,义眼闪烁着蓝光的代码老兵,热衷于复古的 Swift 语法。
  • Nova:刚入行的初级工程师,满脑子是最新的神经链接框架,但经常被编译器暴揍。
  • 反派“The Race Condition” (竞态幽灵),一个游荡在系统内存缝隙中的古老 AI 病毒,专门吞噬不安全的变量。

窗外的霓虹灯光透过雨幕,在 Jet 的合成皮风衣上投下斑驳的阴影。他抿了一口手中的高浓度咖啡因液,看着面前焦头烂额的 Nova。

“我的编译器又在尖叫了,” Nova 把全息屏幕推向 Jet,上面红色的错误提示像鲜血一样流淌,“我只是想在一个 Actor 里用个简单的类,结果 Swift 的并发检查像个疯狗一样咬着我不放。我是不是该把所有东西都加上 @MainActor 算了?”

在这里插入图片描述

Jet 叹了口气,那是见惯了无数次堆栈溢出后的沧桑。“滥用主线程隔离?那是饮鸩止渴。Nova,你被恐惧蒙蔽了双眼。来,看看这份 2025 年的加密文档。那时候我们管这个叫——Non-Sendable First Design。”

在本篇博文中,您将学到如下内容:

  • 🦾 序章:尴尬却必要的兴奋
  • 🧠 核心概念重载 (Quick Refresher)
  • 🔒 困兽之斗?不,是绝对领域 (Getting Stuck)
  • ⚖️ 权衡:光与影 (The Pros and Cons)
    • 💎 优势 #1:极致的简单 (Simplicity)
    • 🌐 优势 #2:通用性 (Generality)
    • 🕳️ 弱点 #1:启动任务的陷阱 (Starting Tasks)
  • 💊 并不完美的解药
  • 🛑 启动任务本身就是一种充满危险的诱惑
    • 🕸️ 弱点 #2:诡异的属性 (Weird Properties)
  • 🎬 终章:回归本源 (First for a Reason)

Jet 手指轻挥,将文档投影在两人中间,开始了他的解构。

在这里插入图片描述


🦾 序章:尴尬却必要的兴奋

Jet 指着文档的开头说道:“这作者是个老实人。他承认自己对 Non-Sendable Types (非跨域传输类型) 的痴迷程度简直到了走火入魔的地步,甚至有点尴尬。”

“这就好比给自己的战术命名一样,听起来有点自以为是。但他把这种设计理念称为 ‘Non-Sendable First Design’。虽然名字听起来像是什么二流黑客的代号,但其核心思想在当年可是振聋发聩。”

在这里插入图片描述

“在那个年代,因为语言特性的限制,大家对 Non-Sendable 类型避之唯恐不及。它们虽然有用,但用起来就像是在满是碎玻璃的地上跳舞——人体工程学极差。直到有一天,NonisolatedNonsendingByDefault(即 Swift 6 中的‘可接近并发’特性)横空出世。这一切都变了!Non-Sendable 类型突然变得顺滑无比,仿佛这才是它们原本的宿命。”


🧠 核心概念重载 (Quick Refresher)

“在深入之前,我们要先进行一次思维格式化。” Jet 的义眼转动,调出了基础理论图谱。

Swift 解决 Data Race (数据竞争) 的手段非常硬核:它要求在编译时就确立对非线程安全数据的保护。这种抽象被称为 Isolation (隔离)

  • 实现层:可能是锁 (Lock)、队列 (Queue),或者是专用的线程。
  • 运行时:由 Actor 负责具体的保护机制。

“编译器其实是个‘脸盲’,” Jet 解释道,“它不知道某个 Actor 到底是怎么运作的(比如 MainActor 其实是把任务倒进主线程这个大漏斗里),它只知道一点:Actor 能护犊子。”

在这里插入图片描述

Swift 将数据世界一分为二:

  1. Sendable (可传输类型):天生的战士,线程安全,可以在并发的枪林弹雨中随意穿梭,无需保护。
  2. Non-Sendable (非可传输类型):共享的可变状态。它们是我们程序中最有趣、最核心的部分,比如你的用户数据、缓存状态。但它们也是脆弱的,就像没有穿护甲的平民,必须被保护。

“很多人误以为 Actor 只是用来‘后台运行’的工具,这完全是买椟还珠。Actor 的真正使命,是充当 Non-Sendable 数据的保镖,防止它们被竞态幽灵吞噬。”


🔒 困兽之斗?不,是绝对领域 (Getting Stuck)

“听着,Nova。世界上最好的安保系统,如果不允许任何人进出,那也没用。但在 Swift Concurrency 的法则里,有一个非常有趣的特性:”

如果一个 Actor 拥有(通常是创建)了一个 Non-Sendable 类型,这个类型就被‘困’住了。

“想象一下,” Jet 描绘道,“一个由类和协议组成的庞大网络,彼此交织,协同工作。它们可以在 Actor 的围墙内为所欲为。但编译器这个冷酷的守门人,绝对禁止你不安全地将它们扔到墙外。”

在这里插入图片描述

“这听起来像是限制,但这正是 Non-Sendable 类型的强大之处——画地为牢,反而成就了绝对的安全。”


⚖️ 权衡:光与影 (The Pros and Cons)

Jet 调出了对比数据面板。“作者曾纠结于如何展示这些,最后他决定返璞归真,先给你看甜头,再告诉你陷阱。注意,这里默认的语境是 nonisolated (非隔离) 的。”

💎 优势 #1:极致的简单 (Simplicity)

“看这段代码,Nova。它简单得像是一首儿歌。”

class Counter {
    var state = 0
    
    func reset() {
        self.state = 0
    }
}

“这就是一个普通的类,甚至还有可变状态。再看这一步:”

class Counter {
    // ...

    // 这里加上了 async
    func toggle() async {
        self.state += 1
    }
}

extension Counter: Equatable {
    static func == (lhs: Counter, rhs: Counter) -> Bool {
        lhs.state == rhs.state
    }
}

Jet 敲着桌子强调:“这里有两个关键点!”

  1. Async 方法:在旧时代,nonisolated + async 意味着代码会跑去后台线程,但这对于 Non-Sendable 类型来说是个悖论(它不能离开 Actor 的保护)。这曾经是个第22条军规式的死锁。但现在,有了 NonisolatedNonsendingByDefault,这个问题迎刃而解。
  2. 协议一致性 (Protocol Conformance):看那个 Equatable。这对于普通类来说易如反掌。但如果是 MainActor 隔离的类型?那简直是噩梦,你得处理各种隔离上下文的匹配问题。

Non-Sendable 类型拥有隔离类型所不具备的纯粹和简单。

在这里插入图片描述

🌐 优势 #2:通用性 (Generality)

“这需要一点悟性,” Jet 眯起眼睛,“这关乎同步访问 (Synchronous Access)。”

“如果你给类型加上了 @MainActor,那只有主线程的朋友才能同步访问它。这就像是个 VIP 俱乐部。但 Non-Sendable 类型是通用的雇佣兵。”

actor ActorClient {
    // ActorClient 拥有这个 counter
    private let counter = Counter()
    
    func accessSynchronously() {
        // ✅ 这是完全可能的!
        // 因为 counter 是 Non-Sendable,它被"困"在了 ActorClient 的隔离域内,
        // 所以 ActorClient 可以像操作自家后院一样同步操作它。
        counter.reset() 
    }
}

“它的接口保持不变,不管是谁‘拥有’它。这就是海纳百川的通用性。”

在这里插入图片描述


🕳️ 弱点 #1:启动任务的陷阱 (Starting Tasks)

此时,全息投影变成了警告的红色。

“这就是那个让我开始反思的地方,” Jet 指着下面的代码,“也是新手最容易踩的雷区。”

class Counter {
    // ...

    func printStateEventually() {
        Task {
            // ❌ 错误: 将闭包作为 'sending' 参数传递...
            // 编译器会阻止你,因为你试图在新的 Task 里捕获非 Sendable 的 self
            print(self.state)
        }
    }
}

“为什么不编译?把它翻译成古老的 GCD 你就懂了:”

// ⚠️ 警告: 在 @Sendable 闭包中捕获了 non-Sendable 类型 'Counter'
DispatchQueue.global().async {
    print(self.state)
}

“这就像你在没有任何保护措施的情况下,试图把一个易碎的花瓶扔到正在高速运转的传送带上。在一个 nonisolated 的函数里启动 Task,意味着上下文是不确定的。没有线程安全的保证,编译器绝不会放行。

在这里插入图片描述

💊 并不完美的解药

“为了解决这个问题,我们要么回到原来的队列(像 GCD 那样),要么把 isolation 参数传进去。”

class Counter {
    // 显式传递隔离上下文,这代码丑得像被辐射过的变异体
    func printStateEventually(isolation: isolated any Actor) {
        Task {
            _ = isolation // 这里的魔法是为了继承隔离域
            print(self.state)
        }
    }
}

“这方案有毒,” Jet 摇摇头,“第一,它有传染性,调用者必须提供 Actor。第二,这语法太啰嗦。最重要的是……”

在这里插入图片描述

🛑 启动任务本身就是一种充满危险的诱惑

“Jet 突然严肃起来:“有人曾告诉我,不应该在这种类型内部创建非结构化的 Task。以前我觉得那是废话,现在我觉得那是金玉良言。”

“在类型内部悄悄启动一个外部无法等待 (await) 的任务,这是埋雷。这让代码变得难以观测、难以测试。这其实是一种语法盐 (Syntactic Salt)——语言故意让你难受,是为了告诉你:别这么干!

“正确的做法是使用 async 方法,保持在结构化并发的世界里。如果非要开新任务,让调用者去开。”

在这里插入图片描述


🕸️ 弱点 #2:诡异的属性 (Weird Properties)

“还有一些边缘情况,” Jet 快速带过,“比如 lazy var、属性包装器 (Property Wrappers) 或者宏 (Macros)。如果在这些东西里混合复杂的并发要求,你会发现自己进退维谷。”

class Counter {
    // 这种延迟加载在并发环境下可能极其复杂
    lazy var internal = {
        SpecialCounter(isolatedParam: ???) 
    }()
}

“这虽然罕见,但一旦遇到,就像是撞上了隐形墙。前车之鉴,不可不防。”

在这里插入图片描述


🎬 终章:回归本源 (First for a Reason)

雨渐渐停了,Neo-Cupertino 的黎明即将来临。Jet 关闭了全息投影,看着若有所思的 Nova。

“‘Non-Sendable First’,不是让你永远只用这一招,而是把它作为起点。”

在这里插入图片描述

“在 Swift 5.5 之前,所有东西本质上都是 nonisolated 的。这才是‘常态’。只要不涉及跨线程,它们就是最轻量、最高效的选择。”

“当然,当你遇到真正的并发需求,当你发现无法在 Actor 之间安全传递数据时,再考虑加上 SendableActor 约束。但在那之前……” Jet 站起身,整理了一下衣领。

不要为了并不存在的并发问题,去背负隔离带来的沉重枷锁。 利用 Region Isolation (区域隔离) 的特性,让编译器帮你推导安全性。这种感觉就像是作弊,但却是合法的。”

在这里插入图片描述

Nova 看着屏幕上终于变绿的编译通过提示,眼中闪过一丝光芒。“所以,大道至简?”

“没错,” Jet 转身走进晨雾中,留下最后一句话,“如果觉得复杂,说明你走错了路。Non-Sendable 的世界,简单得让人上瘾。”

在这里插入图片描述

广州:推动粤港澳大湾区申办世界杯对提升区域国际影响力意义重大,将配合国家体育总局工作部署

2026年1月29日 10:18
此前,广州市在《体育强市建设规划》中提出“发挥粤港澳三地办赛经验与国际资源,推进联合申办世界杯”。对此,关于工作最新进展,广州市相关主管部门表示,足球世界杯是全球最具有影响力的足球盛会。粤港澳大湾区联合申办世界杯赛事,对于提升区域国际影响力、促进城市群协同发展具有重大战略意义。根据国际足联规定,世界杯申办主体必须是其会员协会,且足球世界杯的申办属于国家重大事项,必须遵循国家顶层设计和统一部署。根据国家体育总局《体育赛事活动管理办法》等相关规定,申办世界杯赛事,需报请国家体育总局或国务院审批,并纳入国家外事活动计划。广州将积极配合国家体育总局和中国足协的工作部署,在符合国家整体战略规划的前提下,继续加强与港澳地区的沟通协作,推动区域体育事业协同发展。接下来,广州将积极贯彻落实广州市体育强市建设规划,继续做好与国内外体育组织、协会等的交流合作,持续关注、了解国际性赛事资源,充分调动社会力量办赛积极性,会同社会企业等,做好国际性赛事的申办工作。(证券时报)

赛博深渊(上):用 Apple Foundation Models 提炼“禁忌知识”的求生指南

2026年1月29日 10:16

在这里插入图片描述

🍎 引子

新九龙城的雨从未停过。霓虹灯的废气在湿漉漉的街道上晕染开来,像极了那个死于代码过载的倒霉蛋老王流出的脑浆。

在贫民窟第 404 区的一间昏暗安全屋里,一名代号为“老 K”的黑客正对着一块发着幽蓝光芒的屏幕,手指在键盘上敲击出残影。墙角的服务器风扇发出濒死的哀鸣,仿佛随时都会起飞爆炸。

在这里插入图片描述

在这个被巨型企业“果核公司(Fruit Corp)”统治的赛博世界里,数据就是生命,而算力就是货币。

老 K 刚刚从公司的主机里偷出了一份代号为“创世纪”的加密文本,文件大得惊人,如果不赶紧在本地进行 “摘要提炼”,追踪程序(那些被称为“猎犬”的 AI)顺着网线摸过来,把他那可怜的脑机接口烧成灰烬只是时间问题。

在本次冒险中,您将学到如下内容:

  • 🍎 引子
  • 🧠 缩水的“大脑”与本地化的艺术
  • 🛠️ 装备检查:不要试图在烤面包机上运行核程序
  • 🕵️‍♂️ 侦测可用性:敌我识别系统
  • 💉 注入代码:瞒天过海
  • 🎭 模拟测试:在母体中演练
  • 🎆 尾声:黎明前的微光

但他不能上传到云端处理。云端是“它们”的地盘。他必须在本地,用那个刚刚解禁的传说级武器——Apple Foundation Models


🧠 缩水的“大脑”与本地化的艺术

“听着,菜鸟,”老 K 转过头,仿佛打破了第四面墙,对着作为学徒的你说道,“想要活命,就得学会如何在端侧(On-device)跑大模型。”

Apple Foundation Models 提供了一种能在用户终端设备(不管是你的义体植入终端,还是手里的 iPhone/Mac)上本地运行的大语言模型(LLM)

在这里插入图片描述

你要知道,传统的 LLM 就像是住在数据中心里的巨型怪兽,吃的是高功率 GPU,喝的是海量的显存和电力。想要把这种怪兽塞进你的口袋里,不仅需要勇气,还需要黑科技。

这里有两个关键的 “瘦身” 魔法:

  1. 参数削减 (Reducing Parameters):把脑子里那些没用的神经元切掉,只保留核心逻辑。
  2. 模型量化 (Quantizing Model Values):如果说原来每个神经元需要 32 位浮点数的高精度,现在我们把它压缩到 4 位或 8 位。虽然精度略有下降,但体积小到可以忽略不计。

在这里插入图片描述

⚠️ 风险提示:这些被“阉割”过的模型依然保留了 LLM 的通病——幻觉 (Hallucinations)。它可能会一本正经地胡说八道,就像喝了假酒的算命先生。但在提炼摘要、理解文本、甚至简单的数据生成任务上,它依然是把好手。

好了,废话少说,让我们开始改装你的代码,让它能驾驭这股力量。


🛠️ 装备检查:不要试图在烤面包机上运行核程序

想要驾驭 Apple Intelligence,你的硬件得跟得上。

“别拿你那台老古董来丢人现眼。”老 K 吐了一口烟圈。

硬性指标:

  • 操作系统:必须是 macOS 26.0 或更高版本(对于 iOS 设备,则是 iOS 26/iPadOS 26)。
  • 硬件支持:设备必须原生支持 Apple Intelligence(那种山寨的义体插件不仅没用,还会炸)。
  • 开关状态:用户必须在设置里手动开启了 Apple Intelligence。

在这里插入图片描述

☠️ 避坑指南:如果你在 macOS 26 的虚拟机里折腾,大概率会翻车。Apple Foundation Models 对虚拟化环境过敏。找台真机,或者支持该特性的物理设备。

在这里插入图片描述


🕵️‍♂️ 侦测可用性:敌我识别系统

我们的目标是那个 Share Extension(分享扩展)。我们要让它变成一个能吞噬长文本并吐出精华摘要的黑洞。

在这里插入图片描述

现在的 App 像个傻子,只会把你选中的文字原样复读一遍。我们要改造它。

首先,在 SummarizeExtension 文件夹下创建一个新的 SwiftUI 视图,命名为 ModelCheckView.swift。这就像是我们的看门狗,用来检测当前环境是否安全。

在这里插入图片描述

在该文件顶部引入这一行禁忌的咒语:

import FoundationModels // 引入 Apple 的本地模型库

然后在结构体里加入这些属性:

// 这里的 sharedText 是我们要处理的“赃物”(文本)
let sharedText: String
// 任务完成后的回调,毕竟我们得知道什么时候跑路
let onDone: () -> Void
// 核心:获取系统默认的语言模型实例
let model = SystemLanguageModel.default 

接下来,把原本的 body 替换成这一段充满求生欲的代码:

// 1. 检查模型的可用性状态
switch model.availability {

// 2. 状态:可用。谢天谢地,我们可以干活了
case .available:
  // 这里调用真正干活的摘要视图(后面我们会讲)
  SummaryView(sharedText: sharedText, onDone: onDone)

// 3. 各种不可用的“死法”
case .unavailable(.deviceNotEligible):
  Text("⚠️ 你的设备太老了,跑不动 Apple Intelligence。")
  
case .unavailable(.appleIntelligenceNotEnabled):
  Text("🛑 Apple Intelligence 虽已就绪,但你还没打开开关。快去设置!")
  
case .unavailable(.modelNotReady):
  Text("⏳ 模型还没热身完毕,稍后再试。") 
  // 注意:在模拟器里看到这个,通常意味着你的宿主机不支持,或者你在虚拟机里套娃。

// 4. 未知错误,最可怕的一种
case .unavailable:
  Text("👾 未知错误阻止了 Apple Intelligence 的运行。可能是赛博幽灵作祟。")
}

在这里插入图片描述

老 K 的技术旁白

  • model.availability:这是你的盖革计数器。一定要先 switch 它,不然直接调用模型会导致程序崩溃,就像在没有氧气的地方点火一样。
  • unavailable 的各种姿势:一定要给用户(或者你自己)清晰的反馈。与其让 App 闪退,不如告诉他“你的装备不行”。

在这里插入图片描述


💉 注入代码:瞒天过海

现在,我们要把这个检测机制植入到 ShareViewController.swift 里。这个文件是连接古老的 UIKit 世界和新锐 SwiftUI 世界的桥梁。

找到 showSwiftUIView(with:) 方法,我们要玩一招“偷梁换柱”。

// 用我们新的 ModelCheckView 替换掉原来的直接调用
let wvc = UIHostingController(
  rootView: ModelCheckView(
    sharedText: text,
    onDone: closeExtension // 事情办完就销毁现场
  )
)

这样,当你在 Safari 里选中一段长得令人发指的文本,点击“分享 -> LocalSummarizer”时,系统会先经过我们的 ModelCheckView 查岗。

在这里插入图片描述


🎭 模拟测试:在母体中演练

“别急着上线,现在的网络全是眼线。”老 K 按住你的手,“先在 Xcode 的模拟环境中跑一遍。”

即使你的设备牛逼哄哄,你也得测试一下如果用户没开功能会怎样。

在这里插入图片描述

  1. 在 Xcode 顶部选择 SummarizeExtension 方案。
  2. 点击 Edit Scheme...
  3. Run -> Options 标签页下,找到 Simulated Foundation Models Availability

在这里插入图片描述

这就是你的上帝模式开关。你可以把它设为:

  • Apple Intelligence Not Enabled:看看你的 App 会不会乖乖提示用户去开启。
  • Off:这是默认值,反映你真实设备的状态。

在这里插入图片描述

⚠️ 警告:测完记得把它改回 Off。别到时候明明设备支持,却因为这里没改回来而对着屏幕怀疑人生,那种感觉就像是找了半天眼镜结果眼镜架在鼻子上一样蠢。

在这里插入图片描述

为了让主 App (LocalSummarizer) 也能自检,我们顺手改一下 ContentView.swift

import FoundationModels

// ... 在 body 里 ...
switch SystemLanguageModel.default.availability {
case .available:
  Text("✅ 此设备已准备好接入 Apple Foundation Models。")
// ... 其他 case 照抄上面的 ...
}

在这里插入图片描述


🎆 尾声:黎明前的微光

老 K 敲下最后一个回车键。屏幕闪烁了一下,那段数百万字的冗长文本,瞬间被 Apple Foundation Models 压缩成了寥寥几百字的精华摘要。

没有联网,没有上传,一切都在悄无声息中完成。

在这里插入图片描述

“搞定了。”老 K 拔掉数据线,嘴角露出一丝不易察觉的微笑,“猎犬们还在云端嗅探我们的踪迹,殊不知我们已经带着情报,大摇大摆地从它们眼皮子底下溜走了。”

在这里插入图片描述

窗外的雨似乎小了一些。在这个被数据淹没的时代,掌握本地大模型技术,不仅仅是为了开发几个花哨的功能,更是为了在这个监视无处不在的赛博丛林里,保留最后一份隐私和自由。

在这里插入图片描述

你看着手里显示着 "Summary Generated" 的屏幕,深知这只是开始。下一章,我们将利用这股力量,去触碰更深层的禁忌……

(未完待续...)

从海外代工到越南建厂,再到集群式海外投资,佩蒂的33年全球化之路|出海踏浪者

2026年1月29日 10:08

12月底,柬埔寨正值一年中最凉爽的时节,但气温仍有30℃上下,空气里弥漫着温润的湿意。波哥山脚下的柬埔寨博格经济特区工业园区里,工人们正将宠物咬胶打包装车,运往65公里外的西哈努克港。几天后,这些产品便会出现在美国各大商超的宠物货架上。

这里是爵味食品有限公司-佩蒂动物营养科技股份有限公司柬埔寨子公司(以下简称“佩蒂”)在境外规模最大的生产基地之一。而像这样的海外生产基地,佩蒂还在越南和新西兰分别布局了3个和2个。

佩蒂诞生于温州皮革产业之乡平阳水头。20世纪90年代初,公司在看到蓬勃发展的海外宠物市场后,决定开展宠物用品代工,而当时中国大多数人对“宠物”的概念还几乎一无所知。

13年前,全球化进程如火如荼,佩蒂已经觉察到“危机”,提前在越南建厂,开启供应链出海步伐,从而得以在后来全球“贸易战”的风浪中平稳前行。

可以说过去20年来,佩蒂从一家代工厂,成长为一家全球化的上市公司,每个关键步骤都踩准了时代的节奏。

1.在缝隙中发现蓝海

90年代初,温州市平阳县里有1200多家大大小小的皮具厂。当时,佩蒂创始人陈振标无意间从客商那里得知,做皮鞋的猪皮、牛皮边角料,竟然还可以制作成宠物咬胶——一种为狗狗设计的“磨牙零食”,而且在美国商超的货架上价格不菲。

彼时,国内宠物经济尚未萌芽,而美国宠物经济正迅速增长,市场竞争对手少且需求量大。陈振标在平阳租了两三间民房,招聘了二三十个员工,开发出了中国第一款宠物咀嚼食品——“狗咬胶”。初期产品以符合美国市场准入要求的牛皮咬胶、猪皮咬胶等基础款为主。

随着市场份额和知名度逐步提高,佩蒂不断加大研发投入,并针对狗狗的不同需求,生产定制化的咬胶产品,比如增强宠物肠胃功能的植物蛋白咬胶、去除牙垢的洁齿咬胶、辅助改善健康状况的功能型咬胶等。

产能持续扩张,佩蒂开始寻求成本更低、供应链更稳定的生产方式,由此启动了“走出去”战略。2008年,佩蒂主持制定了中国宠物行业第一个《宠物食品—狗咬胶》国家标准(GB/T23185-2008)。

2011年,佩蒂在畜皮价格低廉的乌兹别克斯坦设立生产基地,进行上游原料的初加工。乌兹别克斯坦逐渐成为佩蒂的核心原料供应地,这也是佩蒂首次试水海外布局,为后续持续拓展海外市场积累了经验。2013年,佩蒂进一步布局供应链出海,在越南开办工厂,该工厂很快发展为佩蒂重要的生产基地,境外工厂出口额从2014年的600万元,增长为2017年的1.8亿元。也是在2017年,佩蒂成功在深圳交易所创业板上市,成为宠物食品第一股。

2018年,佩蒂继续拓展海外版图,选定柬埔寨博格经济特区作为新的生产基地,同年也在新西兰建设宠物主粮产线。此后,佩蒂在海外的产能逐步追平并反超国内,到2022年海外出口规模达到约9.4亿元,已接近国内出口规模的两倍。

2.如何让越南工人适应“中国节奏”

“2013年佩蒂刚进入越南时,当地的宠物食品、用品行业几乎空白,相关行业分类、海关税号与检验标准更是无从谈起。”柬埔寨博格经济特区副总经理戈剑峰告诉我们,佩蒂曾花大量精力与当地商务、海关系统对接,普及行业知识,从原材料进口规范到成品出口分类,推动宠物食品在越南监管体系中明确归类。

更大的挑战还在管理制度上。“越南当地普遍采用计时工资制,佩蒂一开始推行的计件制遭到当地工人的抵制,一度有近半员工离职。”戈剑峰回忆,佩蒂面对管理危机的解决方案是,派遣中国熟练工人前往越南进行生产示范。当地年轻员工看到年纪比自己大一倍的中国工人,效率高出自己一倍以上,观念开始转变,意识到计件制多劳多得的好处。“在高薪的回报下,工人中形成了一种争先完成的氛围,工作积极性也越来越高。”戈剑峰说。

计件制也使佩蒂在面对市场波动时表现出更强的生产韧性。近几年,为了应对频繁变动的关税政策,海外客户有时会赶在关税生效前集中下单,导致订单量在短期内激增。而计件制使工人在加班时获得更高报酬,从而短时间内快速拉升产能,及时响应保证客户需求。

佩蒂还会不定期采取各类激励措施,比如组织产能比赛,效率前100名的员工有机会参与抽奖,获得深受当地青年人青睐的摩托车等奖品。经过长期磨合,目前佩蒂在越南工厂的2000名员工已经以本地人为主,中方人员仅有50人左右。

年会抽奖

3.培育第二增长曲线

进入博格经济特区,首先映入眼帘的是一幢综合办公楼,四米宽的水泥路在其后笔直延伸,通往横向铺开的一个个两层高的厂房。道路两旁铺设了绿化带,园区内还设有食堂、篮球场和排球场等生活娱乐设施。

博格经济特区j

2018年前后,当越来越多中国工厂涌向越南时,佩蒂反而开始了向其他地区的新一轮布局。“当时有美国客户建议我们,在越南之外建设新的工厂,以分散全球贸易环境变化带来的风险。当地的劳动力与土地成本也在不断上涨”。戈剑峰表示。

最终佩蒂选择了柬埔寨。首先,柬埔寨的土地价格只有越南的三分之一,劳动力成本也更低,并且与中国关系长期友好,政局相对稳定,投资氛围更加安全。同时,企业可享受最高9年免所得税、零增值税、免进口税及出口税等各类税收优惠政策。

其次,柬埔寨的外汇管制环境相当宽松,美元为其主要货币,允许美元自由流通,账户开设、交易结算,甚至在超市买商品都可以直接使用美元,跨境贸易企业可以减少汇率波动风险,降低财务成本和运营复杂度。

戈剑峰回忆,刚来到柬埔寨时,当地基础设施十分薄弱,甚至没有稳定的水电供应。为此,博格经济特区不仅通过变电站铺设电力专线,还自建了一座容量达30万立方米的水库,雨季蓄水、旱季供水,形成自有水循环系统。除了电力专线和水库,特区内还建设了污水处理厂(2000吨)等基础设施,还有方便企业员工日常生活的商业中心、食堂宿舍和医疗卫生服务中心等,并专设柬埔寨发展理事会(CDC)、海关、商检、商务部办公室。

目前,博格经济特区是经中国商务部备案,浙江省在柬埔寨唯一一个省级境外经济示范区(工业方向),占地约2400亩土地,其中近300亩为佩蒂柬埔寨子公司使用,其余面向中国及全球企业合作,提供土地租赁、厂房租赁、联合开发等多种入驻模式,重点引入宠物食品用品、塑料制品、五金家具、服饰箱包、文体玩具、汽车配件等轻工产业企业入驻。

博格经济特区

戈剑峰提到,博格经济特区在招商过程中会有意识地筛选上下游相关企业,以形成配套完整的产业生态,并在每个细分领域仅引入一家代表性企业,避免企业之间的不良竞争。

在配套服务方面,特区与中国银行等多家中资银行建立深层联系,为入园企业搭建各类融资渠道,协助入园企业解决资金需求;与当地国家级安保公司合作成立特区人力资源中心,在当地行业协会、工会、政府职能机构支持下,帮助区内企业统一招工、员工培训、劳工纠纷;还与国内职业技术学院合作,为区内员工提供语言及技能培训。

从最初依托国内成本与产业链优势进行产品出口,到主动将产能向海外转移以贴近市场、规避贸易风险,再到以境外园区为载体,带动产业链上下游企业共同出海,在20多年的出海实践中,佩蒂成长为连接中国与东南亚产业发展、搭建服务平台、促进集群式投资的参与者。这种由“产品出海”到“产能出海”,进而向“生态出海”的演进,正是浙江乃至中国制造企业在全球化进程中的典型路径。

(作者 冯亚玲 杨越欣)

蚂蚁灵波科技开源发布世界模型LingBot-World

2026年1月29日 10:05
36氪获悉,1月29日,继连续发布空间感知与VLA基座模型后,蚂蚁灵波科技再次开源发布世界模型LingBot-World。交互性能上,LingBot-World可实现约16FPS的生成吞吐,并将端到端交互延迟控制在1秒以内。用户可通过键盘或鼠标实时控制角色与相机视角,画面随指令即时反馈。

章源钨业:1月29日起调整焊接机夹刀片价格

2026年1月29日 09:59
36氪获悉,章源钨业发布关于调整焊接机夹刀片价格的通知函,因钨原材料价格持续上涨,致使公司生产成本大幅增长。公司决定从2026年1月29日起,对焊接机夹刀片产品按新价格执行。自调价之日起,产品一律按新价格执行。

理财学习笔记(2):不懂不投

作者 唐巧
2026年1月29日 09:51

这是本系列的第 2 篇,主题是:不懂不投。

我们刚开始投资理财的时候,通常会寻求以下这些方法来找到投资标的。

常见的错误办法

1、问朋友。我们通常会问那些看起来投资理财收益比较高的朋友,问他们应该买什么股票。
对于朋友推荐的股票,我们通常会“无脑”买入。但如果有一天,股票突然大幅回撤,我们通常就会陷入恐慌。我们会怀疑:这个朋友到底靠不靠谱?他之前赚钱是靠运气,还是因为现在判断出了问题?接着,我们就会陷入各种猜忌、焦虑和紧张中,最后甚至睡不着觉。如果股票持续下跌,我们甚至可能割肉离场。所以说,跟着朋友买其实并不那么靠谱。

2、看走势。我们可能会去看某些股票或基金的历史走势。看到它在过去三年或五年涨得很好,我们就买入。这也是理财 App 或者某些理财经理推荐的首选理由:它过去 X 年涨幅 XX,排名 XX。

但这很容易陷入“价值陷阱”,比如:

  1. 周期性误判:有些股票仅仅是在某个周期内表现优秀。比如房地产在过去十年涨得很好,但这并非因为单体公司有多好,而是因为当时整个大环境让所有房企都很赚钱。如果你仅仅因为过去业绩好而买入,一旦遭遇经济下滑或泡沫破裂,就会面临巨大的损失。

  2. 均值回归陷阱:很多股票或基金某年表现出色,仅仅是因为那一年的风格与它匹配。所有行业都有“大小年”之分,未来遇到“小年”时,表现自然就会变差。我把这叫做“均值回归”。

这就好比考试:你的平均水平可能是第三名。发挥好的时候能考第一名,发挥不好则可能掉到第五名,但你始终是在第三名上下徘徊。

很多基金经理或股票的表现也是在自身价值上下震荡。如果你在高点买入,在回撤时就会损失惨重,甚至被深套。

3、跟风。跟风是 A 股散户的常见操作,某个时间什么热,就跟风买什么,涨了就快速卖掉,主打一个击鼓传花,赌谁是最后接盘的大傻子。

这种情况下,我们假设你的胜率是 50%。每次获胜挣 20%,每次赌失败亏 20%。如果你进行了 10 次这样的操作,那你整体的收益期望就是 (1.2^5)*(0.8^5)=0.82,所以你折腾了半天,最后 1 块钱的本金变成了 0.82 元。

当然,如果有人认为自己跟风总是赢,这也是有可能的,但是因为自己不敢长期持有,只要涨一点点就卖,其实每次挣的是一点点收益。但是如果偶尔遇到亏损的时候,自己舍不得卖掉,就会一次亏很多。做这种短线操作的人,需要极强的止损纪律,大部分人也是很难做到的。

不懂不投

所以回到股票投资,我觉得投资理财一定要自己懂才行。如果你完全不懂或一知半解,这些都会成为你的陷阱。因为:

  1. 心理层面:不懂的人往往“拿不住”。当股票大幅下跌时,无论是否割肉,你都会极度焦虑、睡不好觉,担心本金损失。
  2. 投资层面:如果你懂,面对下跌说不定还能逆势加仓;即便不加仓,至少能睡个好觉。

此外,世界上还有很多投资陷阱。有些人甚至专门为“制造陷阱”而生,比如搞资金盘、割韭菜或传销。这些行为有些是非法的,有些则游走在法律边缘。如果大家没有能力分辨这些陷阱,很容易就在投资理财中遭遇严重的亏损。

小结

小结一下,常见的错误投资:

  • 问朋友。其实本质上信的是朋友的业绩,朋友如果业绩下滑,就会怀疑。
  • 看走势。其实本质上是用过去业绩替代未来判断,不靠谱。
  • 跟风。纯投机,50% 胜率下期望是负的。

心理层面,只有懂了,才可能拿得住,睡得着觉。

另外,真正懂也可以避免很多骗局。

以上。

新希望联合非夕科技孵化具身智能公司,天使轮获数千万元融资

2026年1月29日 09:43

 

作者 | 乔钰杰

编辑 | 袁斯来

硬氪获悉,上海希夕智能科技有限责任公司(SUNSEED,以下简称“希夕智能”)近日完成数千万元天使轮融资。我们总结了本轮融资信息和该公司几大亮点:

 

融资金额及投资机构

融资轮次:天使轮

融资金额:数千万元

投资机构:宁波北仑商贸物流投资集团领投,荣成荣鑫基金和盛景嘉成跟投

资金用途:研发投入、产品迭代与业务推广

 

公司基本信息

成立时间:2022年

公司总部:上海市闵行区

技术亮点:希夕智能由新希望智能设备制造有限公司、通用智能机器人头部独角兽企业非夕科技,以及初创合伙人团队联合创立。

希夕智能专注于将AI与柔性机器人技术结合,面向切割、加工、内包等食品生产环节,提供专业灵活的全栈式柔性食品加工解决方案。公司核心产品通用食品加工单站,通过AI视觉系统识别与建模来料,结合智能决策系统推理生成个性化加工策略,在保障效率的同时最大化出成率;执行层则由具备高精度实时力控能力的柔性机械臂完成,其“眼-脑-手”协同架构,可自主完成精细切割、精准配重、标准配餐及随线加工等复杂任务。

 

市场分析

目前,中国具身智能产业已从技术验证迈入商业化试点阶段,食品加工领域自动化基础较好,但在精加工环节,传统自动化设备无法解决食品加工领域的来料随机性和变化性问题,成为制约单个企业内部提高自动化设备配比的瓶颈。

随着AI技术和柔性机器人能力的成熟,具身智能正在与各领域各场景深度融合中,食品加工领域具身智能应用将迎来增长期。通过AI和柔性手臂结合,实现精加工环节的自动化,被认为具备广阔的市场空间。根据企业提供的测算数据,食品加工领域人工替代市场可达万亿元级。

(图源/企业)

 

团队背景

公司联合创始人兼CEO毛梁,曾担任极智嘉科技产品线负责人、明略集团产品总监、产研总负责人。拥有10年以上连续创业团队经历,有丰富的从0到1组建团队打造产品经验。

联合创始人兼董事长刘栩博士,清华大学电子工程系学士,英国帝国理工学院电子电气工程专业博士。新希望智能设备制造有限公司董事长,清华大学深圳国际研究生院实践教授,空中客车集团顾问。曾任西门子中国有限公司副总裁。

 

创始团队问答

硬氪:在食品加工领域应用具身智能的技术难点是什么?希夕的通用柔性机器人的差异化优势体现在哪里?

毛梁:食品加工行业自动化覆盖面其实不低,但不少品类的工厂加工工序实现自动化的占比并不高,大概占比只有20%-30%左右。主要原因是传统自动化设备无法解决食品加工领域的来料随机性和变化性问题。所以目前精加工等环节仍然高度依赖人工。

差异化优势方面,第一,我们采用的是“通用智能 + 力控手臂”的方案,通过 AI 实现“眼—脑—手”协同,让设备像人一样理解来料特征,判断哪部分需要加工、如何加工。在食品加工行业我们积累了非常多的行业knowhow和数据,产品有很强的行业适配性,目前,只有我们在做专门针对食品加工行业的具身智能。

第二,我们的设备可以实现快速部署和一机多用。首先,我们的设备是一个小型的标准化设备,类似一个小的食品加工单站,具体部署时只需要根据用户的需求更改相机类的零部件,可以像搭积木一样实现快速的部署。其次,在软件层面,我们支持不同加工模式的灵活切换,当产线品类或成品要求变化时,可以实现一键切换控制逻辑,实现快速换线。可能会有一些简单的零件需要更换,但也是用户可以自己实现更换的。

硬氪:公司目前的商业模式是怎样的,是设备为主,还是“设备+软件+方案”的整体交付?

毛梁:我们是“设备+软件+方案”的模式。比如客户已经部署了一条产线,后续需要更换加工品种或加工方式,如果是系统已经学习过的场景,客户可以直接购买 license 使用;如果是新的场景,在整体逻辑不变的情况下,客户也可以在我们的操作平台上自行训练模型,或者由我们提供定制化服务。目前我们已经覆盖的应用场景比较多,大部分需求可以通过 license 升级完成,类似于设备的 OTA 更新。

硬氪:目前的商业化交付情况如何,能解决客户痛点吗?

毛梁:2024 年刚开始商业化时,确实有不少客户持观望态度,觉得具身智能设备比较新。但随着实际产线的落地和交付案例增多,越来越多客户看到了设备的实际效果,也开始愿意导入。

对客户来说,收益主要体现在两方面:一是人工替代。食品加工行业招工难问题非常突出,有的企业有订单却招不到人,设备可以直接解决生产能力不足的问题;二是减少损耗。相比人工操作,我们的系统可以实现更高的合格率和稳定性,在切割和配餐等环节更精准、速度也更快。现在已经有不少客户在接到新订单时,会先来和我们沟通,看能否实现整条产线的自动化方案。

硬氪:您怎么看食品加工领域具身智能的未来应用与可能面临的行业竞争?

毛梁:用具身智能解决食品加工问题的趋势越来越明确,同时,这个行业存在很高的门槛。我们从2021 年开始探索,2022 年成立公司,到 2024 年才真正跑出商业化案例。很多传统工业自动化经验在这里并不适用,比如高湿度环境、消毒液喷洒带来的腐蚀问题;再比如不同食材的识别、抓取和加工逻辑,哪些部位可食、哪些部位价值更高,都需要大量行业 know-how 的长期积累。这些垂直领域的模型、数据和经验,本身就是壁垒。未来一定会有更多企业加入这个赛道,但我们持开放心态,更多的参与者一起推动,行业才能真正发展起来。

硬氪:融资之后希夕智能对于未来发展的规划?

刘栩:希夕智能已经完成了从0到1,希望从2026年起尽快完成从1到10,内部继续积累并前瞻性研发,对外业务有跨越式增长。

产品细节把控上,我们产品会更加模块化和标准化,实现更多标准化的硬件组件和应用功能,并持续强化AI模型上的投入,以此保证希夕智能的“通用食品加工单站”批量量产的稳定性和持续升级,覆盖更多场景。

商业化方面,希夕智能也在充分拓展国内食品加工商业市场之后,着重挖掘复制性更高的商业场景;除此之外,我们也放眼全球市场,并已开始和海外食品加工工厂接洽测试产品。

 

 

❌
❌