尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
DeepSeek 零售库存预测实战:从特征工程到企业微信推送
简介这份PDF文档面向零售业从业者、数据分析人员及希望将大模型落地业务场景的技术学习者聚焦库存管理中需求预测不准、供应链波动、成本控制困难等痛点系统讲解如何借助DeepSeek搭建智能预测模型。资源包共1个PDF文件大小约1.62MB内容完整、目录清晰涵盖零售库存现状与挑战、DeepSeek核心原理与预测优势、数据收集清洗与环境搭建、模型架构设计与训练评估、超参数调优与过拟合防治、交叉验证与业务适用性验证并附完整应用案例与未来展望。读者可据此掌握从数据预处理到模型上线的全流程方法理解高精度预测与自适应学习在库存优化中的实际价值获得可复用的建模思路与业务结合经验。目前已有66人学习适合希望提升预测精度与库存周转效率的读者参考。1. 零售库存预测为什么总在促销季翻车从拍脑袋到 DeepSeek 建模做过零售库存的人都有一个血泪经验平时跑得好好的预测模型一到双十一、618、春节前就集体翻车。不是备货多了压资金就是备货少了断码断货门店店长电话打到你手机上骂人。传统做法要么是 Excel 拉移动平均要么是上一套 ARIMA、Prophet但这些方法对促销脉冲、节假日突变、新品冷启动几乎无能为力。而 DeepSeek 这类大模型的出现给库存优化提供了一条新路径——不是让模型直接预测销量而是用它做特征理解、异常归因和预测结果修正。这篇内容面向零售数据从业者、供应链工程师和想用 DeepSeek API 做智能预测模型的开发者把从数据准备、模型搭建到落地部署的完整链路拆开讲清楚让你能照着复现一套可用的库存预测系统。2. 用 DeepSeek 搭库存预测模型数据管道与特征工程怎么落地2.1 零售库存数据的三个脏乱差源头在动手调 DeepSeek API 之前先把数据管道理清楚。零售库存数据通常来自三个系统POS 收银系统、WMS 仓储管理系统、ERP 采购系统。这三个系统的数据对不上的情况太常见了。POS 显示某 SKU 当天卖了 50 件WMS 出库记录是 48 件ERP 采购在途还有 200 件。你直接拿这种数据去喂模型预测结果必然是玄学。常见做法是先用 SQL 做一层数据清洗和对齐。核心思路是以 SKU 门店 日期为主键把三个系统的数据做全外连接缺失值用业务规则填充而不是简单填零。比如 WMS 出库缺失但 POS 有销售记录说明出库数据延迟应该用 POS 数据回填。下面这段 SQL 是清洗管道的核心逻辑-- 零售库存数据对齐POS WMS ERP 三源合并 WITH pos_daily AS ( SELECT sku_id, store_id, sale_date, SUM(qty) AS pos_qty, SUM(amount) AS pos_amount FROM pos_sales WHERE sale_date DATE_SUB(CURRENT_DATE, INTERVAL 730 DAY) GROUP BY sku_id, store_id, sale_date ), wms_daily AS ( SELECT sku_id, store_id, out_date, SUM(out_qty) AS wms_out_qty FROM wms_outbound WHERE out_date DATE_SUB(CURRENT_DATE, INTERVAL 730 DAY) GROUP BY sku_id, store_id, out_date ), erp_stock AS ( SELECT sku_id, store_id, snapshot_date, SUM(on_hand_qty) AS on_hand, SUM(in_transit_qty) AS in_transit FROM erp_inventory GROUP BY sku_id, store_id, snapshot_date ) SELECT COALESCE(p.sku_id, w.sku_id, e.sku_id) AS sku_id, COALESCE(p.store_id, w.store_id, e.store_id) AS store_id, COALESCE(p.sale_date, w.out_date, e.snapshot_date) AS dt, COALESCE(p.pos_qty, w.wms_out_qty, 0) AS daily_sales, COALESCE(e.on_hand, 0) AS on_hand_qty, COALESCE(e.in_transit, 0) AS in_transit_qty, -- 标记数据来源后续做质量评估 CASE WHEN p.pos_qty IS NOT NULL AND w.wms_out_qty IS NOT NULL THEN both WHEN p.pos_qty IS NOT NULL THEN pos_only WHEN w.wms_out_qty IS NOT NULL THEN wms_only ELSE erp_only END AS source_flag FROM pos_daily p FULL OUTER JOIN wms_daily w ON p.sku_id w.sku_id AND p.store_id w.store_id AND p.sale_date w.out_date FULL OUTER JOIN erp_stock e ON COALESCE(p.sku_id, w.sku_id) e.sku_id AND COALESCE(p.store_id, w.store_id) e.store_id AND COALESCE(p.sale_date, w.out_date) e.snapshot_date;这段 SQL 的关键参数说明时间窗口取 730 天是为了覆盖两个完整的年度周期让模型能学到季节性规律source_flag字段用于后续判断数据可信度both的数据质量最高pos_only次之erp_only需要谨慎使用。清洗后的数据落到宽表里按 SKU 门店 日期存储作为后续特征工程的输入。2.2 特征工程把促销日历、天气、竞品价格变成模型能吃的信号库存预测的准确度七分靠特征三分靠模型。DeepSeek 再强你给它喂垃圾特征它也出不来好结果。零售场景下以下几类特征必须构造第一类是时间特征。除了常规的年、月、日、星期还要构造「距最近促销日的天数」「促销持续天数」「是否在促销期内」这类业务特征。第二类是价格与促销特征包括当前售价、折扣率、是否参与满减、竞品同款价格。第三类是外部特征天气数据对服装、饮料、生鲜品类影响极大高温天饮料销量能翻三倍。第四类是库存状态特征当前库存水位、在途库存、安全库存阈值。下面是用 Python 构造特征矩阵的核心代码import pandas as pd import numpy as np from datetime import timedelta def build_features(df, promo_calendar, weather_df, competitor_df): df: 清洗后的库存宽表含 sku_id, store_id, dt, daily_sales, on_hand_qty promo_calendar: 促销日历含 promo_date, promo_type, discount_rate weather_df: 天气数据含 city, dt, temp_high, temp_low, precipitation competitor_df: 竞品价格含 sku_id, dt, comp_price df df.sort_values([sku_id, store_id, dt]).copy() # 时间特征 df[year] df[dt].dt.year df[month] df[dt].dt.month df[dayofweek] df[dt].dt.dayofweek df[is_weekend] (df[dayofweek] 5).astype(int) df[dayofyear] df[dt].dt.dayofyear # 促销特征计算距最近促销日的天数 promo_dates pd.to_datetime(promo_calendar[promo_date]).sort_values() def days_to_nearest_promo(dt): future promo_dates[promo_dates dt] past promo_dates[promo_dates dt] d_future (future.iloc[0] - dt).days if len(future) 0 else 999 d_past (dt - past.iloc[-1]).days if len(past) 0 else 999 return min(d_future, d_past) df[days_to_promo] df[dt].apply(days_to_nearest_promo) df[is_promo_day] df[dt].isin(promo_dates).astype(int) # 滞后特征过去 7/14/28 天销量 for lag in [7, 14, 28]: df[fsales_lag_{lag}] df.groupby([sku_id, store_id])[daily_sales].shift(lag) # 滚动统计过去 7 天均值和标准差 df[sales_roll_mean_7] df.groupby([sku_id, store_id])[daily_sales] \ .transform(lambda x: x.rolling(7, min_periods1).mean()) df[sales_roll_std_7] df.groupby([sku_id, store_id])[daily_sales] \ .transform(lambda x: x.rolling(7, min_periods1).std()) # 库存周转特征 df[stock_ratio] df[on_hand_qty] / (df[sales_roll_mean_7] 1) df[days_of_supply] df[on_hand_qty] / (df[sales_roll_mean_7] 0.1) # 合并天气和竞品价格 df df.merge(weather_df, on[city, dt], howleft) df df.merge(competitor_df, on[sku_id, dt], howleft) df[price_gap] (df[comp_price] - df[price]) / df[price] return df这段代码里几个参数需要根据业务调整滞后窗口 7/14/28 天是零售场景的常用值快消品可以缩短到 3/7/14耐用品可以拉长到 14/28/56stock_ratio和days_of_supply是库存健康度的核心指标days_of_supply低于 3 天就要预警补货。特征构造完之后用 DeepSeek 做一步特征重要性解释和异常检测比直接上 XGBoost 更可控。2.3 调用 DeepSeek API 做预测修正与异常归因DeepSeek 在库存预测里的角色不是替代传统时序模型而是做「预测后修正」和「异常归因」。具体做法是先用 LightGBM 或 Prophet 跑一个基线预测然后把基线预测值、特征矩阵、近期实际销量一起打包成 prompt让 DeepSeek 判断哪些 SKU 的预测需要上调或下调并给出原因。调用 DeepSeek API 的代码示例如下import requests import json DEEPSEEK_API_URL https://api.deepseek.com/v1/chat/completions DEEPSEEK_API_KEY your_api_key_here def deepseek_predict_adjust(sku_info, baseline_pred, recent_actuals, features): sku_info: SKU 基础信息品类、价格带、生命周期阶段 baseline_pred: 基线模型预测的未来 7 天销量列表 recent_actuals: 过去 14 天实际销量列表 features: 关键特征字典促销、天气、库存水位 prompt f你是一个零售库存预测专家。以下是某个 SKU 的预测请求 SKU信息{json.dumps(sku_info, ensure_asciiFalse)} 基线预测未来7天{baseline_pred} 过去14天实际销量{recent_actuals} 关键特征{json.dumps(features, ensure_asciiFalse)} 请分析 1. 基线预测是否合理如有偏差给出修正后的7天预测值。 2. 指出最可能导致偏差的2个因素。 3. 给出补货建议建议补货量、补货优先级。 请用JSON格式返回字段包括adjusted_forecast列表、key_factors列表、replenish_qty整数、priority高/中/低。 headers { Authorization: fBearer {DEEPSEEK_API_KEY}, Content-Type: application/json } payload { model: deepseek-chat, messages: [ {role: system, content: 你是零售供应链领域的预测分析助手只返回JSON。}, {role: user, content: prompt} ], temperature: 0.1, # 低温度保证输出稳定 max_tokens: 1024, response_format: {type: json_object} } resp requests.post(DEEPSEEK_API_URL, headersheaders, jsonpayload, timeout30) resp.raise_for_status() return json.loads(resp.json()[choices][0][message][content])参数说明temperature设为 0.1 是为了让输出稳定可复现库存预测场景不需要创造性response_format指定 JSON 输出方便后续程序解析max_tokens设 1024 足够返回一个 SKU 的修正结果。实际生产中要批量处理建议用异步请求 限流控制DeepSeek API 的并发限制根据你的账户等级不同一般建议 QPS 控制在 10 以内。3. 从离线跑通到线上部署DeepSeek 库存预测系统的工程化路径3.1 本地部署 DeepSeek 做批量预测的硬件门槛如果你的 SKU 数量超过 5000 个每天都要跑一遍预测修正走 API 调用的成本会很高。这时候可以考虑本地部署 DeepSeek 蒸馏版模型。常见做法是用 vLLM 或 Ollama 部署 DeepSeek-R1-Distill-Qwen-7B 或 14B 版本消费级显卡就能跑。如果 SKU 数量在 10 万级别建议上 32B 以上的模型需要 A100 或同等算力的卡。本地部署的核心命令以 vLLM 为例# 安装 vLLM pip install vllm # 启动 DeepSeek 蒸馏版服务指定模型路径和端口 python -m vllm.entrypoints.openai.api_server \ --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \ --served-model-name deepseek-local \ --port 8000 \ --max-model-len 4096 \ --gpu-memory-utilization 0.85 \ --dtype float16参数说明--max-model-len 4096对库存预测场景足够因为 prompt 不会太长--gpu-memory-utilization 0.85留 15% 显存给系统和其他进程--dtype float16在保证精度的同时降低显存占用。启动后用 OpenAI SDK 兼容的方式调用把上面的DEEPSEEK_API_URL改成http://localhost:8000/v1/chat/completions即可。3.2 预测结果落库与补货建议自动生成预测修正完成后结果要落库并生成补货建议。补货逻辑的核心公式是建议补货量 预测销量 × 补货周期 安全库存 - 当前库存 - 在途库存。安全库存根据历史预测偏差动态调整偏差大的 SKU 安全库存系数调高。def generate_replenishment(forecast_df, inventory_df, lead_time_days7, service_level0.95): forecast_df: 预测结果含 sku_id, store_id, forecast_date, adjusted_forecast inventory_df: 当前库存含 sku_id, store_id, on_hand_qty, in_transit_qty lead_time_days: 补货提前期 service_level: 服务水平决定安全库存系数 from scipy.stats import norm z_score norm.ppf(service_level) # 95% 服务水平对应 1.645 # 按 SKU 门店聚合未来 lead_time_days 天的预测总量 forecast_sum forecast_df.groupby([sku_id, store_id])[adjusted_forecast] \ .sum().reset_index() forecast_sum.columns [sku_id, store_id, total_forecast] # 计算预测标准差用历史偏差近似 forecast_std forecast_df.groupby([sku_id, store_id])[adjusted_forecast] \ .std().reset_index() forecast_std.columns [sku_id, store_id, forecast_std] result forecast_sum.merge(forecast_std, on[sku_id, store_id]) \ .merge(inventory_df, on[sku_id, store_id]) # 安全库存 z_score × 预测标准差 × sqrt(提前期) result[safety_stock] z_score * result[forecast_std] * np.sqrt(lead_time_days) # 建议补货量 result[replenish_qty] ( result[total_forecast] result[safety_stock] - result[on_hand_qty] - result[in_transit_qty] ).clip(lower0).round().astype(int) # 补货优先级库存天数低于 3 天为高3-7 天为中其余为低 result[days_of_supply] result[on_hand_qty] / (result[total_forecast] / lead_time_days 0.1) result[priority] pd.cut( result[days_of_supply], bins[-1, 3, 7, float(inf)], labels[高, 中, 低] ) return result[[sku_id, store_id, total_forecast, safety_stock, replenish_qty, priority]]这段代码的关键参数service_level0.95意味着 95% 的情况下不会缺货生鲜品类可以调到 0.98长尾商品可以降到 0.90lead_time_days根据供应商实际到货时间设定国内供应商一般 3-7 天进口商品 30-60 天。补货建议生成后推送到采购系统或企业微信让采购人员确认后下单。3.3 用回测框架验证预测效果MAPE、WAPE 和库存周转率模型上线前必须做回测。零售库存预测的核心指标有三个MAPE平均绝对百分比误差、WAPE加权绝对百分比误差、库存周转率。MAPE 对低销量 SKU 不友好WAPE 按销量加权更合理。库存周转率是最终业务指标预测准不准最终要看周转率有没有提升。def backtest_metrics(actual, predicted, sku_weightsNone): actual: 实际销量数组 predicted: 预测销量数组 sku_weights: 每个 SKU 的销量权重用于 WAPE actual np.array(actual) predicted np.array(predicted) # MAPE注意分母为 0 的情况 mask actual 0 mape np.mean(np.abs((actual[mask] - predicted[mask]) / actual[mask])) * 100 # WAPE加权绝对百分比误差 if sku_weights is None: sku_weights np.ones_like(actual) wape np.sum(np.abs(actual - predicted) * sku_weights) / \ np.sum(actual * sku_weights) * 100 # 预测偏差Bias bias np.mean(predicted - actual) / np.mean(actual) * 100 return {MAPE: round(mape, 2), WAPE: round(wape, 2), Bias: round(bias, 2)}回测的常见做法是滚动窗口用过去 90 天训练预测未来 7 天然后窗口向前滑动 7 天重复 12 次取平均。WAPE 控制在 20% 以内算合格15% 以内算优秀。如果 WAPE 超过 30%优先检查特征工程和数据质量而不是换模型。4. DeepSeek 库存预测落地避坑5 个真实踩坑记录4.1 坑一API 返回 JSON 解析失败导致批量任务中断现象批量调用 DeepSeek API 处理 2000 个 SKU 时跑到第 300 多个突然报 JSON 解析错误整个任务挂掉。原因DeepSeek 在temperature稍高或 prompt 复杂时偶尔会在 JSON 前后加解释性文字比如「好的以下是分析结果{...}」导致json.loads直接失败。解决在解析前做一层清洗用正则提取第一个{到最后一个}之间的内容同时把temperature降到 0.1 以下并在 system prompt 里强调「只返回 JSON不要任何其他文字」。另外给每个请求加 try-except失败的 SKU 记录下来重试不要让单个失败拖垮整个批次。4.2 坑二本地部署显存溢出导致服务频繁重启现象用 vLLM 部署 DeepSeek 7B 模型跑了几十个请求后服务 OOM 崩溃日志显示显存不足。原因--gpu-memory-utilization设成了 0.95留给 KV Cache 的显存不够并发请求一多就爆。另外--max-model-len设了 8192但实际 prompt 只有 1000 多 token浪费了大量显存。解决--gpu-memory-utilization降到 0.80-0.85--max-model-len按实际 prompt 长度设库存预测场景 2048 足够。如果并发量高加--tensor-parallel-size做多卡并行或者用--enable-prefix-caching复用 system prompt 的 KV Cache。4.3 坑三促销期预测值被 DeepSeek 过度修正现象双十一期间DeepSeek 把基线预测值上调了 3-5 倍导致备货严重过量节后库存积压。原因prompt 里给了「促销」特征但没有给历史促销期的实际销量参考DeepSeek 只能根据「促销销量大涨」的常识做修正修正幅度失控。解决在 prompt 里加入「去年同期促销期实际销量」和「今年促销力度对比去年」两个关键信息让 DeepSeek 有锚点。同时给修正幅度加上下限约束比如修正后预测值不能超过基线预测的 2 倍超过的部分需要人工确认。4.4 坑四新品冷启动时特征缺失导致预测完全不可用现象新上架的 SKU 没有历史销量滞后特征和滚动统计全是 NaN模型输出毫无意义。原因特征工程里滞后特征依赖历史数据新品没有历史整个特征向量是残缺的。解决对新品走单独的预测通道。用同品类、同价格带、同门店的相似商品销量做类比预测DeepSeek 在这个场景下特别有用——把相似商品的特征和销量喂给它让它推断新品的销量曲线。等新品积累了 14 天以上真实销量后再切换到常规预测通道。4.5 坑五预测结果与采购系统对接时单位不一致现象预测系统输出的是「件」采购系统按「箱」下单一箱 12 件结果采购量放大了 12 倍。原因两个系统的计量单位没有对齐预测结果落库时没有做单位转换。解决在 SKU 主数据里维护「销售单位」和「采购单位」的换算关系预测结果落库前统一转成采购单位。这个坑看起来低级但实际项目中因为单位问题导致的库存事故非常常见血泪经验。5. 把 DeepSeek 预测接入企业微信让店长每天收到补货建议系统跑通之后最后一步是让业务人员用起来。最轻量的落地方式是把补货建议推送到企业微信店长和采购每天早上一打开手机就能看到今天该补什么、补多少。企业微信的机器人 Webhook 接入非常简单不需要复杂的鉴权流程。import requests import json WECOM_WEBHOOK https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyyour_key_here def push_replenishment_to_wecom(replenish_df, top_n20): replenish_df: 补货建议 DataFrame top_n: 只推送优先级最高的 N 条 # 按优先级和补货量排序取 Top N priority_order {高: 0, 中: 1, 低: 2} df replenish_df.copy() df[priority_rank] df[priority].map(priority_order) df df.sort_values([priority_rank, replenish_qty], ascending[True, False]).head(top_n) # 构造 Markdown 消息 lines [## 今日补货建议, ] lines.append(| SKU | 门店 | 建议补货量 | 优先级 |) lines.append(|-----|------|-----------|--------|) for _, row in df.iterrows(): lines.append(f| {row[sku_id]} | {row[store_id]} | {row[replenish_qty]} | {row[priority]} |) lines.append() lines.append(f 共 {len(df)} 条建议请及时确认下单。) payload { msgtype: markdown, markdown: {content: \n.join(lines)} } resp requests.post(WECOM_WEBHOOK, jsonpayload, timeout10) resp.raise_for_status() return resp.json()这段代码的关键点企业微信 Markdown 消息对表格支持有限列数不宜超过 4 列否则手机上显示会换行错乱top_n20是经验值超过 20 条店长根本看不过来建议按门店拆分推送每个店长只收到自己门店的建议。推送时间建议设在每天早上 7:30赶在门店开门前让店长有时间确认。还有一个进阶技巧把 DeepSeek 生成的「关键因素」也附在推送里。比如「该 SKU 预测上调 30%因为下周有降温天气且竞品缺货」店长看到原因后更容易信任建议并执行。这个反馈闭环跑上三个月预测准确率和业务配合度都会有明显提升。我自己踩过最深的坑是早期太迷信模型输出没有做人工确认环节结果促销期一次性备了半年的货。后来学乖了所有补货建议都先推送给采购确认确认后才下单。模型负责提效人负责兜底这个习惯我一直保持到现在。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

C++移动构造函数与移动语义:右值引用、noexcept与性能优化

C++移动构造函数与移动语义:右值引用、noexcept与性能优化

C 的移动构造函数这个东西,我见过太多人背得滚瓜烂熟,一到真写代码就翻车。面试的时候能一口气答出"右值引用、资源转移、不拷贝",实际项目里却把 std::move 当装饰品到处乱撒,性能没上去,隐藏 bug 倒是多…

📅 2026/9/30 10:07:23
基于生成对抗网络的心电信号降噪:从论文选题到工程实现

基于生成对抗网络的心电信号降噪:从论文选题到工程实现

简介:这是一份面向生物医学工程、信号处理方向本科生与研究生的毕业论文资料,聚焦基于生成对抗网络(GAN)的心电信号降噪算法及性能分析,适合正在做心电信号去噪、深度学习信号处理相关课题的读者参考。压缩包内共1个PD…

📅 2026/9/30 10:07:23
WeKnora知识库部署调优实战:RAG原理、混合检索与踩坑全记录

WeKnora知识库部署调优实战:RAG原理、混合检索与踩坑全记录

最近有一款叫WeKnora的知识库工具在技术圈里讨论度不低,腾讯微信 AI 团队开源的项目。我同事上周还在群里问 WeKnora 和 Dify 该怎么选,另一个团队已经拿它跑了一套专利文档问答系统。所以这篇把我自己从部署到调优、再到踩坑的完整记录整理出来&#xf…

📅 2026/9/30 10:07:23
MORE NEWS

更多资讯

📰

基于 Mosquitto 与 paho-mqtt 的 MQTT 客户端封装

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

📰

C++临时对象全解析:产生场景、性能代价与优化实战

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

📰

aStor-EDS分布式存储实战:从架构选型到性能调优的完整避坑指南

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

📰

封阳台与旧房换窗怎么选,关键藏在你的居住条件里

很多朋友在装修或改造旧房时,最容易在一个环节上栽跟头:换窗户。 你满心欢喜地量好了阳台尺寸,打开各类装修软件,迎面扑来一堆诸如“原生铝、多腔体、三玻两腔、充氩气、超大落地玻璃”的专业术语。直觉告诉你,只要照着…

📰

交通网络建模基础:从节点路段到信号控制的路网骨架搭建指南

1. 这是系列第三篇,为什么我从“画路网”而不是“跑模型”讲起前两篇聊了 Paramics 的安装部署和界面逻辑,到了第三篇,我特意把“交通网络建模基础”单独拎出来写。原因倒不是这套操作有多难,而是太多人栽在这里:拿到一…

📰

工业安全回路三要素:输入逻辑输出物理隔离设计

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

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬