惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园_首页
罗磊的独立博客
B
Blog
T
Threat Research - Cisco Blogs
C
Cisco Blogs
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
G
GRAHAM CLULEY
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
SecWiki News
SecWiki News
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
T
Tor Project blog
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
H
Hacker News: Front Page
V
V2EX
Security Latest
Security Latest
Cloudbric
Cloudbric
Simon Willison's Weblog
Simon Willison's Weblog
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
NISL@THU
NISL@THU
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
P
Palo Alto Networks Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
Google DeepMind News
Google DeepMind News
Webroot Blog
Webroot Blog

人人都是产品经理

为什么你的产品找不到差异化?90%的失败都卡在第一步上(下) – 人人都是产品经理, 3年从30万到1300万用户、获2200万美元融资,这个AI教育产品用“抽卡”破解了获客难题 – 人人都是产品经理, 园区招商系统怎么做才能真正帮到去化?我加了这一个功能,推广链接转发400次阅读过万 – 人人都是产品经理, AI大事件:OpenAI发完网络安全模型又搞药物研发,小鹏汽车要抓”DeepSeek时刻” – 人人都是产品经理, 电商不是卖货,是一场更残酷的产品经理实战 – 人人都是产品经理, 没想到,活动营销又回来了! – 人人都是产品经理, 为何All-in海外KOC:一场关于AI时代窗口期的豪赌 – 人人都是产品经理, 重新理解企业的内部协作 – 人人都是产品经理, 苹果的 AI 战略到底是什么? – 人人都是产品经理, 医疗智能体·第2讲——合规护城河:等保、PIPL与HIPAA的架构实战 – 人人都是产品经理, 向量知识库五步法:从“答非所问”到“精准回复” – 人人都是产品经理, 鸿蒙PC三方库构建总指挥HPKBUILD(sha)库为例 – 人人都是产品经理, 何时该用LLM?AI产品经理的LLM设计指南 – 人人都是产品经理, 医疗信息领域的需求方、决策方、准入方以及关注点(二) – 人人都是产品经理, 即梦涨价:一场被误读的「傲慢」 – 人人都是产品经理, 面试AI PM必答题:Hermes和OpenClaw的区别,如何讲清楚业务价值 – 人人都是产品经理, AI的下一张船票:世界模型——AI产品经理必须理解的技术拐点 – 人人都是产品经理, 小红书做GEO,怎么让AI信你?记住这 3 个重要信息 – 人人都是产品经理, 5 家印度 AI 初创公司,看看印度 AI 再做什么 – 人人都是产品经理, AI项目跨团队协作:产品技术业务如何不打架 – 人人都是产品经理, Agentic Workflow(智能体工作流):让AI从”答案生成器”变成”数字员工” – 人人都是产品经理, lycium_plusplus 项目全景解读:OpenHarmony 三方库构建的“大管家” – 人人都是产品经理, 从爆单救火到前置履约:两套预采策略,把生鲜大促履约效率拉满 – 人人都是产品经理, 什么时候该补货?我用一轮数据做了一个决定 – 人人都是产品经理, 从“机械兜底”到“动态分流”:AI客服重复进线治理的4大底层逻辑 – 人人都是产品经理, 抖音拼效率,红书拼洞察 – 人人都是产品经理, 全民狂欢与退潮——为什么龙虾这波热潮冷却得如此之快? – 人人都是产品经理, Stripe押注!MPP重塑全球支付 – 人人都是产品经理, 小红书GEO:AI引用你的内容,不是因为你对,而是因为你看起来可信 – 人人都是产品经理, 前百度副总裁押注办公Agent,日韩付费爆发,Manus迎来强劲对手 – 人人都是产品经理, 企事业单位数字化的业务供需本质 – 人人都是产品经理, 医疗智能体·第1讲——医疗信息化重构:从“辅助软件”到“自主智能体”的范式转移 – 人人都是产品经理, 粉丝量就是空气!!! – 人人都是产品经理, 用户说“薯片碎了”,机器回“要买吗?”:意图识别的翻车与破局 – 人人都是产品经理, RAG召回准确率从75到90 我做对了这三件事 – 人人都是产品经理, AI大事件:Anthropic改收费、OpenAI发安全版、手术机器人纳入医保、阿里发布”秒悟” – 人人都是产品经理, Chrome 推出 Skills 新功能,Agent 重塑上网方式 – 人人都是产品经理, GitHub前创始人拿了a16z的1700万美元,做Agent时代的Git – 人人都是产品经理 拷贝或克隆其他 Flutter OH 项目到本地后无法运行 – 人人都是产品经理, 优惠券设计:优惠券创建 – 人人都是产品经理, 不用死磕文档!AI 助手 1 小时搞定飞书 CLI 安装 + 配置 + 知识库 – 人人都是产品经理, 用小龙虾做竞品分析报告:从2天到20分钟,我是怎么做到的 – 人人都是产品经理 用小龙虾做市场分析报告:搞懂这3个公式,市场规模不再靠猜 – 人人都是产品经理, 你早就在做 Harness 工程,只是不知道它叫这个名字 – 人人都是产品经理, Think Long就够?你可能想多了! – 人人都是产品经理, 货代SRM实战:供应商准入怎么做,才能让资源池不是通讯录而是可交付网络? – 人人都是产品经理, 如何做好用户调研?详解基本技巧 – 人人都是产品经理, 木鸟、途家、美团对打,平台春天行动开“卷” – 人人都是产品经理, 入职才发现公司不靠谱?小红书从业者求职避坑指南 – 人人都是产品经理, 美国 AI 三巨头联手封堵,中国 AI 突围之路在何方 – 人人都是产品经理, 小红书,放在需求对面的镜子 – 人人都是产品经理, AI 会带来大规模失业吗? – 人人都是产品经理, 从出单到补货前,我第一次犹豫:该不该放大? – 人人都是产品经理, Flutter 三方库鸿蒙化适配:5 种高效检查方式,快速判断是否需要适配 – 人人都是产品经理, 从做产品进阶拿结果:医美机构产品经理转岗科室运营经理 – 人人都是产品经理, 阿里HappyHorse,一场关于“Token经济”的阳谋 – 人人都是产品经理, To B AI:客户留存落地的观察与思考 – 人人都是产品经理, AI产品的“生命线”——数据采集、标注、清洗的产品化设计 – 人人都是产品经理, 谈谈AI Agent(二):当“孩子”能自己“体验世界”时,你该学什么? – 人人都是产品经理, UI/UX设计师的3层能力进阶,前两层让你活下来,第三层…才是真正的分水岭 – 人人都是产品经理, 2分钟 → 30秒,效率提升75%:B端产品经理如何用「规则枷锁」驯服AI幻觉? – 人人都是产品经理, 还没来得及学OpenClaw,来了个更猛的:Hermes Agent – 人人都是产品经理, AI日报:宇树机器人跑出10m/s刷新世界纪录 – 人人都是产品经理, 一文说透基金互金如何用情绪价值引导用户决策做转化 – 人人都是产品经理, 当浏览器开始替你”看”网页:AI 浏览器正在亲手拆掉它脚下的那张网 – 人人都是产品经理, 0代码,一天时间我Vibe Coding了个网站 – 人人都是产品经理, Hermes 和 OpenClaw 之争,Agent 的能力应该“装上去”还是“长出来”? – 人人都是产品经理 视频生成的“桌子”,字节Seedance 2掀完,阿里快乐马掀 – 人人都是产品经理, 从听不懂到完全信任:我的 Codex 深度产品体验 – 人人都是产品经理, 当虚拟偶像有了北京户口,与真人偶像还有什么区别? – 人人都是产品经理, 会说,远远比会做更重要 —— 对 SBTI 爆火现象的五层观察 – 人人都是产品经理, AI产品经理必看:当“搭环境”比“选模型”更重要,你的认知还在2024年吗? – 人人都是产品经理, 2026年AI产品商业化核心逻辑:从功能demo到规模化营收的3个必破卡点 – 人人都是产品经理, 京东围绕供应链,卷起裤腿下场的那些事儿 – 人人都是产品经理, SBTI一夜刷屏:它赢在了“太会说人话” – 人人都是产品经理, 折扣零售的真相:不是便宜,而是价值感! – 人人都是产品经理, 和甲方吵了一架,最后加钱做了——我学到的ToB产品经理生存法则 – 人人都是产品经理, 和几位小红书操盘手聊了8小时,干货全在这 – 人人都是产品经理, 智谱GLM-5.1登场,开源模型首超Opus4.6!!! – 人人都是产品经理 Anthropic收入凭什么反超OpenAI,终于有人把这事说清楚了 – 人人都是产品经理, 史上最有故事感的技术报告——Claude最强模型Mythos 7个极其精彩的细节 – 人人都是产品经理, 模型不是壁垒,Harness 也不是 – 人人都是产品经理, 抖音本地生活业务思考21 – 人人都是产品经理, Superpowers:145k Star的AI编码框架,到底是什么来头? Superpowers:145k Star的AI编码框架,到底是什么来头? – 人人都是产品经理, OpenAI 的路走错了,Anthropic Harness 解法启示:模型需要实践专科生 – 人人都是产品经理, 画原型图的前一步:设计站点地图 – 人人都是产品经理, 给 DeepSeek 的最后一封催更信 – 人人都是产品经理, 手把手教你用 Claude Code 搭建 AI 营销团队:5 个 Agent、12 项技能,独立完成研究、写作、设计全流程 – 人人都是产品经理, 你以为大模型在学语言?不,它在重新发明语言学 – 人人都是产品经理 所谓Skill,不过是AI时代的工业垃圾 – 人人都是产品经理, 聊一聊内容传播的几个方法 – 人人都是产品经理, 当平台开始吃掉生态:从 OpenClaw 被封杀,读懂 Anthropic 的这盘棋 – 人人都是产品经理, 你装了 10 个 AI 插件,Obsidian 还是一个文件夹 – 人人都是产品经理 关于AI智能体架构演进的系统性思考:从单体试水到多体协同的重构 – 人人都是产品经理, 当“人”变成Skill,我们又该何去何从? – 人人都是产品经理 Mythos 事件:前沿 AI 治理的意外实验 – 人人都是产品经理, 货代CRM:信用与风险管理怎么做,才能把坏账风险拦在放货之前? – 人人都是产品经理, 从HR收集自拍照到员工自助录入——我见证了园区人脸识别从”不可用”到”真好用”的全过程 – 人人都是产品经理 千问闯关AI混沌期:阿里画靶,吴嘉张弓,马云射箭? – 人人都是产品经理,
WMS上架策略的产品设计与背后的执行逻辑拆解
PM维他命 · 2025-07-08 · via 人人都是产品经理

本文深入拆解了WMS(仓储管理系统)上架策略的产品设计及其背后的执行逻辑。从策略配置指南、系统执行逻辑,到预设规则详解和典型业务场景配置示例,作者详细阐述了如何通过精准的筛选条件、灵活的上架规则和严格的限制条件,优化仓储管理中的货物存储位置分配。文章还提供了丰富的配置示例和最佳实践建议,帮助读者更好地理解和应用WMS上架策略,提升仓储作业效率和空间利用率。

目录

  1. 概述
  2. 上架策略配置指南
  3. 系统执行逻辑
  4. 预设上架规则详解
  5. 筛选条件与限制条件深度解析
  6. 典型业务场景配置示例

概述

WMS上架策略是仓储管理系统的核心功能之一,它决定了货物在入库后应该被存放到哪个具体的库位。一个设计良好的上架策略能够:

  • 提高作业效率:将高频商品放在易取位置,减少拣货行走距离
  • 优化空间利用:合理分配库位资源,避免浪费
  • 保证库存准确性:通过严格的混放规则,降低库存差异
  • 支持业务流程:区分处理不同类型的订单(采购、退货、调拨等)

上架策略由策略包头信息策略包明细行两部分组成,前者定义策略的基本信息和适用范围,后者包含具体的执行规则和约束条件。

上架策略配置指南

2.1 策略包头信息配置

基础字段说明

配置要点

1)策略代码的唯一性:确保在整个系统中不重复

2)货主绑定策略:

  • 留空:作为该仓库的默认策略,适用于所有货主
  • 指定货主:仅对选定的货主生效
  • 多货主:可同时选择多个货主

3)仓库级隔离:不同仓库的策略完全独立,可以有相同的策略代码

2.2 策略包明细行配置

策略包明细行是上架策略的核心,定义了具体的执行逻辑。系统按优先级从高到低依次评估每一行,直到找到合适的库位或所有规则都无法匹配。

2.2.1核心字段说明

2.2.2字段间的联动关系

不同的上架规则对”推荐库区”和”固定库位”字段有不同的要求:

2.3 筛选条件配置

筛选条件采用单选模式,确保每个上架单能精准匹配到对应的处理规则。

可配置的筛选维度

筛选逻辑示例

2.4 限制条件配置

限制条件用于对候选库位进行校验,确保选中的库位满足业务要求。可同时配置多个限制条件。

2.4.1库位混放限制

2.4.2库位属性限制

2.4.3空间限制

系统执行逻辑

3.1 上架策略执行流程

3.2 策略匹配逻辑

3.2.1策略包匹配优先级

系统会按以下优先级选择策略包:

  1. 精确匹配:货主+仓库完全匹配的策略
  2. 仓库默认:该仓库的默认策略(货主字段为空)
  3. 系统默认:系统级默认策略

3.2.2多策略包匹配处理机制

当同一优先级存在多个匹配的策略包时,系统按以下规则选择:

容错机制: 如果所有匹配逻辑都失败,系统将记录错误日志并将上架任务标记为”待人工处理”。

3.2.3规则行筛选逻辑

对于策略包中的每一行规则,系统会验证以下条件:

3.3 限制条件校验顺序

为了提高系统性能,限制条件按以下顺序进行校验:

1)快速校验(需要查询数据库)

  • 库位状态校验(是否可用)
  • 基础属性匹配

2)空间校验(需要计算)

  • 体积限制
  • 重量限制
  • 长宽高限制

3)库存校验(需要查询库存数据)

混放产品限制

混放批次限制

SKU库位数量限制

4)复杂业务校验(需要复杂查询)

产品周转级别匹配

相同产品要求

预设上架规则详解

4.1 规则分类概述

系统提供了6种预设的上架规则,用户仅允许从这6种预设的规则中选择一条或者多条,大致可分为三大类:

4.1.1库区导向型规则

规则1:推荐指定库区中,合适的库位

规则2:推荐空库位

这类规则基于库区进行库位分配,适合有明确存储区域规划的场景。

4.1.2固定分配型规则

规则3:推荐固定的库位

适合异常处理、特殊商品或临时存储场景。

4.1.3 智能寻址型规则

  • 规则4:推荐最近一次上架的库位
  • 规则5:同品集中存放(已占货位优先)
  • 规则6:同品集中存放(空货位优先)

这类规则基于历史数据和库存状态进行智能决策,能够优化存储效率。

4.2 各规则详细解析

4.2.1规则1:推荐指定库区中,合适的库位适用场景:

  • 有明确的库区功能划分(如拣货区、存储区、退货区)
  • 需要将特定类型的商品存储在指定区域
  • 按商品属性进行区域化管理

执行逻辑:

  1. 获取指定库区内所有可用库位
  2. 按优化策略排序(通常是距离最近、剩余容量最大)
  3. 逐一校验限制条件
  4. 返回第一个通过校验的库位

配置要点:

  • 必须指定“推荐库区”
  • “固定库位”字段被禁用
  • 建议配合空间限制条件使用

典型配置示例:

筛选条件:

批次属性=良品,产品ABC=A类

上架规则:推荐指定库区中,合适的库位

推荐库区:PK-01-拣货区

限制条件:校验体积 + 匹配产品周转级别

4.2.2规则2:推荐空库位适用场景:

  • 新品入库,需要开辟新的存储位置
  • 避免与现有库存混放
  • 隔离存储要求

执行逻辑:

  1. 查询系统中所有空闲库位
  2. 如果指定了库区,优先在该库区内查找
  3. 按距离、便利性等因素排序
  4. 校验限制条件后返回

配置要点:

  • “推荐库区”可选,留空表示全仓搜索
  • “固定库位”字段被禁用
  • 通常配合“必须是空的库位”限制条件使用

4.2.3规则3:推荐固定的库位适用场景:

  • 异常商品的临时存储
  • 特殊商品的指定存储
  • 作为兜底规则使用

执行逻辑:

  1. 直接返回配置的固定库位
  2. 校验该库位是否满足限制条件
  3. 如果校验失败,则此规则失效

配置要点:

  • 必须指定“固定库位”
  • “推荐库区”字段可选(主要用于备注)
  • 建议设置为较低优先级的兜底规则

4.2.4规则4:推荐最近一次上架的库位适用场景:

  • 连续入库的相同商品
  • 希望保持存储连续性
  • 减少库位分散

执行逻辑:

  1. 查询该SKU的上架历史记录
  2. 获取最近一次上架的库位
  3. 检查该库位是否仍有剩余容量
  4. 校验限制条件

业务价值:

  • 减少同一SKU的库位分散
  • 提高拣货效率
  • 便于库存管理

4.2.5规则5:同品集中存放(已占货位优先)适用场景:

  • 追求存储密度最大化
  • 先填满现有库位再开新位
  • 适合高频周转商品

执行逻辑:

  1. 查询仓库内所有存储该SKU的库位
  2. 按剩余容量从小到大排序(优先填满快满的库位)
  3. 逐一校验限制条件
  4. 如果所有已占用库位都不可用,则查找空闲库位

业务价值:

  • 最大化库位利用率
  • 减少零散库存
  • 便于库存盘点

4.2.6规则6:同品集中存放(空货位优先)适用场景:

  • 预留缓冲空间
  • 便于后续批量拣货
  • 适合波动较大的商品

执行逻辑:

  1. 查询仓库内所有存储该SKU的库位
  2. 按剩余容量从大到小排序(优先使用有充足空间的库位)
  3. 校验限制条件
  4. 如果已占用库位都不满足,再查找空闲库位

与规则5的区别:

  • 规则5:填满现有→开新位(密度优先)
  • 规则6:有余量的现有→开新位(灵活性优先)

筛选条件与限制条件深度解析

5.1 筛选条件设计原理

5.1.1为什么采用单选模式?

在设计初期,筛选条件曾考虑支持多选模式,但实际业务中发现多选会带来以下问题:

  1. 匹配歧义:当上架单同时满足多个条件时,难以确定使用哪个规则
  2. 逻辑复杂:多选条件的组合爆炸,难以预测所有可能的匹配情况
  3. 维护困难:规则间可能存在冲突或重叠,问题排查复杂

因此,采用单选模式确保每个上架单都能精准匹配到唯一的处理规则。

5.1.2各筛选维度的业务含义订单类型维度:

  • 采购入库:新品入库,通常需要检验和质检流程
  • 销售退货:退回商品,需要区分良品和次品处理
  • 调拨入库:仓库间调拨,商品状态明确,流程相对简单

批次属性维度:

  • 良品:质量合格,可正常销售的商品
  • 次品:存在瑕疵,需要特殊处理或报废
  • 待检:需要进一步质检确认状态的商品

产品循环级别(ABC):

  • A类(高频):销售频次高,应存储在便于拣货的位置
  • B类(中频):销售频次中等,存储在次优位置
  • C类(低频):销售频次低,可存储在较远或较高的位置

包装级别:

  • 托盘:整托盘存储,需要承重较强的库位
  • 原箱:以箱为单位,适合箱拣货库位
  • 单件:散装商品,适合件拣货库位

5.2 限制条件组合策略

5.2.1常见限制条件组合

严格隔离组合:

✓ 不许混放产品

✓ 不许混放批次

✓ 必须是空的库位

✓ 校验体积

✓ 校验重量

适用于:贵重商品、危险品、易污染商品

集中存储组合:

✓ 库位内必需有相同产品

✓ SKU最多可占用的库位数:3

✓ 校验体积

✓ 匹配产品周转级别

适用于:高频商品、批量拣货商品

质量管控组合:

✓ 不许混放批次

✓ 校验体积

✓ 校验重量

适用于:有保质期的商品、需要批次追溯的商品

5.2.2限制条件与系统基础数据的联动机制

限制条件的校验需要结合多个系统模块的基础数据,以下详细解析各限制条件的判断逻辑:

混放限制条件的判断逻辑:

空间限制条件的计算逻辑:

业务属性匹配的逻辑:

典型业务场景配置示例

6.1 B2C电商仓库配置

场景描述

  • 仓库类型:B2C电商仓储
  • 商品特点:SKU多样、小批量、高频次
  • 业务要求:快速拣货、严格质控、异常处理

策略配置

策略名称:B2C电商标准上架策略

策略代码:PUTAWAY-B2C-STANDARD

绑定仓库:华东-01仓

绑定货主:(留空,作为默认策略)

明细行配置:

6.2 B2B批发仓库配置

场景描述

  • 仓库类型:B2B批发配送
  • 商品特点:大批量、标准化、周转稳定
  • 业务要求:高效率、大容量、批量作业

策略配置

策略名称:B2B批发标准上架策略

策略代码:PUTAWAY-B2B-WHOLESALE

绑定仓库:华北-02仓

绑定货主:(留空,作为默认策略)

明细行配置:

6.3 冷链仓库配置

场景描述

  • 仓库类型:冷链物流仓储
  • 商品特点:温度敏感、保质期短、批次严格
  • 业务要求:温区管理、批次控制、先进先出

策略配置

策略名称:冷链仓储上架策略

策略代码:PUTAWAY-COLD-CHAIN

绑定仓库:冷链-01仓

绑定货主:生鲜食品供应商

明细行配置:

6.4 配置最佳实践

6.4.1优先级设计原则

  1. 异常处理优先:次品、待检商品的规则应设置高优先级
  2. 精确匹配优先:条件越精确的规则优先级越高
  3. 业务关键优先:影响关键业务指标的规则优先级更高
  4. 兜底规则垫底:确保所有商品都有去处

6.4.2测试验证方法场景测试矩阵:

验证步骤:

  1. 准备测试数据,覆盖所有可能的筛选条件组合
  2. 执行上架策略,记录实际匹配的规则
  3. 对比期望结果,确认配置正确性
  4. 测试边界条件和异常情况

6.4.3性能优化建议

  1. 规则数量控制:单个策略包的规则行建议不超过20条
  2. 条件简化:避免过于复杂的筛选条件组合
  3. 索引优化:确保库位查询相关字段有适当的数据库索引
  4. 缓存机制:对频繁查询的库位信息进行缓存
  5. 异步处理:非关键路径的限制条件校验可考虑异步执行

总结

WMS上架策略是一个复杂而精密的业务系统,它通过策略包头信息、策略包明细行、筛选条件和限制条件的组合,实现了对货物存储位置的智能决策。

核心设计原则:

  • 精准匹配:通过单选模式的筛选条件确保规则匹配的确定性
  • 灵活配置:提供多种上架规则和限制条件的组合
  • 性能优化:合理的执行顺序和算法设计
  • 业务适配:支持不同类型仓库的个性化需求

应用价值:

  • 提高仓储作业效率
  • 优化库位空间利用
  • 保证库存管理准确性
  • 支持复杂业务场景

通过合理配置上架策略,企业可以在确保业务合规的前提下,最大化仓储运营效率,这是现代WMS系统的核心竞争力之一。

本文由人人都是产品经理作者【PM维他命】,微信公众号:【PM维他命】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于 CC0 协议。