AI量化交易内卷:多智能体博弈如何导致利润归零 聪明反被聪明误当AI量化交易员在“内卷”中走向利润归零如果你是一名量化研究员或交易员最近可能正被一种无力感包围精心设计的策略回测曲线完美但一上线实盘阿尔法Alpha就迅速衰减甚至转为负值。你投入更多算力、更复杂的模型却发现收益并没有同步增长反而波动加剧风险陡增。这不是你的模型出了问题也不是市场失效了。这背后是一个正在发生的、由AI驱动的“量化内卷”新常态。当市场上充斥着由相似数据、相似算法训练出的AI智能体时它们之间的博弈会迅速将任何微小的市场无效性inefficiency抹平最终导致一个令人沮丧的均衡所有参与者的超额收益总和趋近于零。本文将深入剖析这一现象背后的核心机制——多智能体博弈与市场微观结构的相互作用。我们不止于解释“是什么”更会探讨“为什么”以及“怎么办”。你将理解为什么你的AI策略会“失效”从单智能体优化到多智能体博弈的范式转变。市场微观结构如何成为博弈的战场订单簿、流动性、交易成本这些“细节”如何决定博弈的胜负。从“纳什均衡”到“零和博弈”为什么在高度同质化的AI竞争中利润会系统性消失。破局思路与实践建议作为开发者或研究员如何调整策略研发的视角在“内卷”中寻找新的生存空间。我们将结合简单的模拟代码让你直观感受多智能体博弈的动态过程并提供一套评估策略“博弈脆弱性”的框架。1. 核心问题当市场充满“聪明钱”超额收益去哪了传统量化策略开发本质上是一个单智能体在静态环境中的优化问题。研究员基于历史数据寻找能够预测未来价格走势的因子或模式目标是最大化夏普比率或收益回撤比。这个范式隐含了一个关键假设市场环境特别是其他参与者的行为是相对稳定或可预测的。然而AI和机器学习的普及彻底颠覆了这个假设。当大量机构都采用深度学习、强化学习来挖掘数据中的非线性关系时会发生两件事策略趋同Strategy Convergence大家使用相似的数据源行情、新闻、另类数据、相似的模型架构如LSTM、Transformer、图神经网络最终很可能挖掘出相似的、短暂的“阿尔法信号”。博弈行为显性化你的AI下单行为本身会立即被其他AI捕捉并作为输入特征从而触发对方的反应。你的行动会影响环境市场而环境的变化又立刻被所有其他智能体感知并做出调整。这就构成了一个典型的多智能体强化学习Multi-Agent Reinforcement Learning, MARL场景。在这个场景下追求个人最优的简单加总不等于全局稳定。最可能的结果是陷入“公地悲剧”或“竞相降价”的纳什均衡——所有人都加速交易、争夺有限的流动性导致交易成本飙升最终吞噬掉所有理论上的超额收益。本文的核心判断是当前量化领域的核心矛盾已从“寻找Alpha”部分转变为“在多重AI博弈中守护Alpha”。理解博弈结构和市场微观结构比单纯优化模型预测精度更为紧迫。2. 基础概念多智能体博弈与市场微观结构在深入之前我们需要明确两个支柱性概念。2.1 多智能体博弈Multi-Agent Game这不是一个简单的“有很多人在交易”的概念。在学术和AI领域它特指一个系统中存在多个自主决策的智能体Agent每个智能体的收益Reward不仅取决于自己的行动Action也取决于其他所有智能体的行动。核心要素智能体Agent在量化中就是每一个自动交易程序或AI策略。状态State市场当前的信息如订单簿、持仓、资金等。行动Action下单价格、数量、撤单、等待。收益Reward通常为经过风险调整后的单笔交易损益或一段时间的累计损益。策略Policy智能体根据状态选择行动的规则即我们的交易算法。关键范式转变单智能体RL收益 R(状态, 自身行动)。环境是“自然”的。多智能体RL收益 R(状态, 自身行动, 其他智能体1的行动, 其他智能体2的行动, ...)。环境是由其他智能体共同塑造的。均衡概念——纳什均衡在这种博弈中一个常见的结果是达到纳什均衡。即在给定其他所有智能体策略都不变的情况下没有任何一个智能体可以通过单方面改变自己的策略而获得更高的收益。在量化交易中这可能表现为当所有AI都采用某种相似的激进套利策略时任何一方单独放缓速度都会损失机会而所有人都加速则导致利润消失。此时的均衡点可能就是利润微薄甚至为零的状态。2.2 市场微观结构Market Microstructure这是博弈发生的“物理战场”。它研究交易如何在实际中达成包括订单簿Order Book买一、卖一及其后方的挂单队列是流动性的直接体现。流动性Liquidity市场吸收大额订单而不导致价格剧烈波动的能力。AI的密集交易会消耗流动性。交易成本包括显性的手续费、税费和隐性的滑点Slippage、市场冲击成本Market Impact。信息不对称某些智能体可能因数据源或处理速度更快而拥有信息优势。AI量化与微观结构的致命交互 高频交易HFT是早期的例子。当多个HFT算法同时探测某个交易所和暗池之间的价差时套利机会会在微秒内消失。如今AI将这种竞争从“微秒级价差”扩展到了“分钟级甚至日内的统计规律和模式”。你的AI预测到某个模式会上涨而发出买单但这个买单行为本身会改变订单簿状态可能立刻触发其他AI的跟风或反向策略从而让预期的价格上涨提前发生或根本无法实现你的实际成交价包含冲击成本可能已无利可图。3. 环境准备用Python模拟一个简化的博弈市场为了直观理解我们使用Python来搭建一个极度简化的多智能体交易模拟环境。这个环境将包含基本的订单簿和几个具有不同策略的AI智能体。前置条件Python 3.8基础库numpy,pandas可视化库可选matplotlib# 创建环境并安装依赖 pip install numpy pandas matplotlib4. 核心流程拆解构建模拟器与智能体我们的模拟将包含以下核心组件一个中央限价订单簿CLOB用于记录买卖挂单。多个AI交易智能体每个智能体根据自身策略生成订单。一个模拟引擎按时间步推进处理订单提交、撮合、更新智能体状态。4.1 定义市场状态与订单簿我们首先定义一个简单的订单簿和市场价格。# 文件market.py import numpy as np from dataclasses import dataclass from typing import List, Tuple dataclass class Order: 代表一张限价单 order_id: int agent_id: int is_buy: bool # True为买False为卖 price: float quantity: int timestamp: int class OrderBook: 一个简化的中央限价订单簿 def __init__(self, tick_size0.01): self.buy_orders [] # 按价格降序排列 (价高优先) self.sell_orders [] # 按价格升序排列 (价低优先) self.tick_size tick_size self.last_trade_price 100.0 # 初始价格 self.order_id_counter 0 def add_order(self, agent_id: int, is_buy: bool, price: float, quantity: int, timestamp: int) - int: 添加订单并返回订单ID self.order_id_counter 1 order Order(self.order_id_counter, agent_id, is_buy, price, quantity, timestamp) if is_buy: # 插入到买单列表并保持降序 self.buy_orders.append(order) self.buy_orders.sort(keylambda x: -x.price) else: # 插入到卖单列表并保持升序 self.sell_orders.append(order) self.sell_orders.sort(keylambda x: x.price) return order.order_id def match_orders(self) - List[Tuple[Order, Order, float, int]]: 尝试撮合订单返回成交列表(买订单, 卖订单, 成交价, 成交量) trades [] if not self.buy_orders or not self.sell_orders: return trades best_buy self.buy_orders[0] best_sell self.sell_orders[0] while best_buy.price best_sell.price: # 可以成交成交价为卖单价价格优先时间优先简化处理 trade_price best_sell.price trade_quantity min(best_buy.quantity, best_sell.quantity) trades.append((best_buy, best_sell, trade_price, trade_quantity)) # 更新订单数量或移除已完全成交的订单 best_buy.quantity - trade_quantity best_sell.quantity - trade_quantity if best_buy.quantity 0: self.buy_orders.pop(0) if best_sell.quantity 0: self.sell_orders.pop(0) # 检查是否还有可撮合的订单 if not self.buy_orders or not self.sell_orders: break best_buy self.buy_orders[0] best_sell self.sell_orders[0] # 更新最后成交价 if trades: self.last_trade_price trades[-1][2] return trades def get_mid_price(self) - float: 计算中间价(最优买价 最优卖价) / 2 if self.buy_orders and self.sell_orders: return (self.buy_orders[0].price self.sell_orders[0].price) / 2 else: return self.last_trade_price4.2 定义AI交易智能体基类我们创建几种不同策略的智能体。# 文件agents.py import numpy as np from abc import ABC, abstractmethod from market import OrderBook class TradingAgent(ABC): 交易智能体基类 def __init__(self, agent_id: int, initial_cash: float 10000.0): self.agent_id agent_id self.cash initial_cash self.position 0 # 持仓数量正为多负为空 self.pnl 0.0 # 已实现盈亏 self.wealth initial_cash # 总资产 现金 持仓市值 abstractmethod def decide(self, order_book: OrderBook, current_time: int) - dict: 决策函数返回一个订单字典。 返回格式: {action: BUY/SELL/HOLD, price: float, quantity: int} pass def update_wealth(self, current_price: float): 更新总资产未实现盈亏计入 self.wealth self.cash self.position * current_price class TrendFollowingAgent(TradingAgent): 趋势跟踪智能体价格突破近期高点时买入跌破低点时卖出 def __init__(self, agent_id: int, window5, threshold0.02): super().__init__(agent_id) self.window window self.threshold threshold self.price_history [] def decide(self, order_book: OrderBook, current_time: int) - dict: mid_price order_book.get_mid_price() self.price_history.append(mid_price) if len(self.price_history) self.window 1: return {action: HOLD, price: 0, quantity: 0} recent_prices self.price_history[-self.window-1:-1] current_price self.price_history[-1] high, low max(recent_prices), min(recent_prices) if current_price high * (1 self.threshold) and self.cash current_price * 10: # 突破高点买入 qty int(self.cash * 0.1 / current_price) # 使用10%现金 return {action: BUY, price: current_price * 1.001, quantity: qty} # 挂稍高价 elif current_price low * (1 - self.threshold) and self.position 0: # 跌破低点卖出持仓 return {action: SELL, price: current_price * 0.999, quantity: self.position} else: return {action: HOLD, price: 0, quantity: 0} class MeanReversionAgent(TradingAgent): 均值回归智能体价格偏离移动平均线过多时反向操作 def __init__(self, agent_id: int, window10, sigma_threshold1.5): super().__init__(agent_id) self.window window self.sigma_threshold sigma_threshold self.price_history [] def decide(self, order_book: OrderBook, current_time: int) - dict: mid_price order_book.get_mid_price() self.price_history.append(mid_price) if len(self.price_history) self.window: return {action: HOLD, price: 0, quantity: 0} ma np.mean(self.price_history[-self.window:]) std np.std(self.price_history[-self.window:]) if len(self.price_history[-self.window:]) 1 else 0.1 z_score (mid_price - ma) / std if std 0 else 0 if z_score self.sigma_threshold and self.position 0: # 价格过高卖出 qty min(self.position, int(self.position * 0.5)) # 卖出50%持仓 return {action: SELL, price: mid_price * 0.998, quantity: qty} elif z_score -self.sigma_threshold and self.cash mid_price * 10: # 价格过低买入 qty int(self.cash * 0.1 / mid_price) return {action: BUY, price: mid_price * 1.002, quantity: qty} else: return {action: HOLD, price: 0, quantity: 0}4.3 构建模拟引擎引擎负责驱动整个仿真过程。# 文件simulator.py import numpy as np from market import OrderBook from agents import TrendFollowingAgent, MeanReversionAgent class TradingSimulator: def __init__(self, num_steps1000): self.order_book OrderBook() self.agents [] self.num_steps num_steps self.time 0 # 记录历史数据用于分析 self.mid_price_history [] self.agent_wealth_history [] # 每个时间步所有智能体的财富列表 self.trade_history [] def setup_agents(self): 初始化智能体种群这里我们创建两个趋势跟踪者和两个均值回归者 self.agents.append(TrendFollowingAgent(agent_id1, window5, threshold0.015)) self.agents.append(TrendFollowingAgent(agent_id2, window8, threshold0.025)) self.agents.append(MeanReversionAgent(agent_id3, window12, sigma_threshold1.2)) self.agents.append(MeanReversionAgent(agent_id4, window15, sigma_threshold1.8)) def run_step(self): 运行一个时间步 # 1. 每个智能体根据当前订单簿状态做出决策 for agent in self.agents: decision agent.decide(self.order_book, self.time) if decision[action] ! HOLD: self.order_book.add_order( agent.agent_id, decision[action] BUY, decision[price], decision[quantity], self.time ) # 2. 订单簿撮合 trades self.order_book.match_orders() for buy_order, sell_order, price, qty in trades: # 更新买卖双方的现金和持仓 buyer self.agents[buy_order.agent_id - 1] seller self.agents[sell_order.agent_id - 1] trade_value price * qty buyer.cash - trade_value buyer.position qty buyer.pnl buyer.pnl # 已实现盈亏简化处理暂不更新 seller.cash trade_value seller.position - qty self.trade_history.append({ time: self.time, price: price, quantity: qty, buyer: buy_order.agent_id, seller: sell_order.agent_id }) # 3. 更新所有智能体总资产并记录 current_mid self.order_book.get_mid_price() self.mid_price_history.append(current_mid) step_wealth [] for agent in self.agents: agent.update_wealth(current_mid) step_wealth.append(agent.wealth) self.agent_wealth_history.append(step_wealth) # 4. 引入微小外部价格冲击模拟新闻或大单 if np.random.rand() 0.05: # 5%的概率 shock np.random.randn() * 0.5 # 微小随机冲击 # 通过添加一个市价单来模拟冲击 if shock 0: self.order_book.add_order(agent_id0, is_buyTrue, pricecurrent_mid*(1abs(shock)), quantity100, timestampself.time) else: self.order_book.add_order(agent_id0, is_buyFalse, pricecurrent_mid*(1-abs(shock)), quantity100, timestampself.time) self.time 1 def run(self): 运行整个模拟 self.setup_agents() for _ in range(self.num_steps): self.run_step() return self.collect_results() def collect_results(self): 收集并返回模拟结果 wealth_array np.array(self.agent_wealth_history) # [time_steps, num_agents] total_wealth wealth_array.sum(axis1) # 市场总财富随时间变化 individual_final_wealth wealth_array[-1, :] # 最终个人财富 return { mid_prices: self.mid_price_history, wealth_history: wealth_array, total_wealth_history: total_wealth, final_wealth: individual_final_wealth, trade_history: self.trade_history }5. 运行模拟与结果分析现在我们运行模拟并可视化结果观察多智能体博弈如何影响利润。# 文件main.py import matplotlib.pyplot as plt from simulator import TradingSimulator def main(): # 运行模拟 sim TradingSimulator(num_steps500) results sim.run() # 绘制价格走势 plt.figure(figsize(15, 10)) plt.subplot(3, 1, 1) plt.plot(results[mid_prices], labelMid Price, linewidth1) plt.title(Market Mid Price Evolution) plt.xlabel(Time Step) plt.ylabel(Price) plt.legend() plt.grid(True, alpha0.3) # 绘制各智能体财富变化 plt.subplot(3, 1, 2) for i in range(results[wealth_history].shape[1]): plt.plot(results[wealth_history][:, i], labelfAgent {i1}, alpha0.7) plt.title(Individual Agent Wealth Over Time) plt.xlabel(Time Step) plt.ylabel(Wealth) plt.legend() plt.grid(True, alpha0.3) # 绘制市场总财富变化关键 plt.subplot(3, 1, 3) plt.plot(results[total_wealth_history], labelTotal Market Wealth, colorblack, linewidth2) plt.axhline(y40000, colorr, linestyle--, labelInitial Total Wealth) # 4个智能体 * 10000初始资金 plt.title(Total Wealth of All Agents (Alpha Decay Indicator)) plt.xlabel(Time Step) plt.ylabel(Total Wealth) plt.legend() plt.grid(True, alpha0.3) plt.tight_layout() plt.show() # 打印最终统计信息 print( Simulation Results ) print(fFinal Mid Price: {results[mid_prices][-1]:.2f}) print(fNumber of Trades: {len(results[trade_history])}) print(\nFinal Wealth of Each Agent:) for i, wealth in enumerate(results[final_wealth]): pnl wealth - 10000 print(f Agent {i1}: {wealth:.2f} (PnL: {pnl:.2f})) total_final_wealth results[final_wealth].sum() total_initial_wealth 40000 print(f\nTotal Market Wealth: {total_final_wealth:.2f} (Change: {total_final_wealth - total_initial_wealth:.2f})) print(fAverage PnL per Agent: {(total_final_wealth - total_initial_wealth) / 4:.2f}) if __name__ __main__: main()6. 运行结果与博弈分析运行上述main.py脚本你会得到类似下图的输出具体数值因随机性而异注此处为描述实际运行会生成图表关键观察与解释价格走势图1由于智能体之间的相互作用和随机冲击价格呈现出自相关的波动既非完全随机游走也非稳定趋势。这正是多智能体博弈产生的复杂动力学。个体财富变化图2不同智能体的财富曲线相互交织有赢家有输家。趋势跟踪者可能在趋势段获利但在反转时亏损均值回归者则相反。没有一种策略能持续稳定盈利。市场总财富变化图3- 这是最关键的图图中黑线代表所有4个智能体财富的总和。红色虚线是初始总财富40,000。你会发现总财富线在初始值附近剧烈波动但长期来看并没有显著增长的趋势甚至可能略微下降。这模拟了“利润归零”的核心过程智能体之间的交易是零和博弈暂不考虑外部冲击。一个智能体的盈利基本对应另一个智能体的亏损。频繁的交易产生了“摩擦成本”。在我们的模拟中这体现为智能体挂单价格与最终成交价的微小差异买单价略高于中间价卖单价略低于中间价。在现实中这对应着滑点、手续费和买卖价差。当所有智能体都积极交易以捕捉机会时这些摩擦成本会不断从系统中抽取价值。最终所有参与者创造的总阿尔法总财富增量被交易成本消耗殆尽市场总财富无法增长。这就是“聪明反被聪明误”的数学体现——每个人都追求最优整体却陷入次优均衡。7. 常见问题与排查思路在实际的AI量化策略开发和回测中你会遇到更具体的问题。以下表格梳理了从多智能体博弈视角看常见的“策略失效”现象及排查方向问题现象可能的多智能体博弈原因排查方向与解决方案回测表现优异实盘迅速衰减回测是单智能体环境实盘是多智能体环境。你的策略信号被市场上其他AI识别并抢先反应。1.引入对手盘模型在回测中加入简单的“反策略”智能体模拟市场对你订单的反应。2.计算策略的“拥挤度”分析全市场类似因子或策略的暴露度。交易成本远高于回测假设忽略了市场冲击成本。当你的AI发出大单或与同类策略同时行动时会对价格产生更大冲击。1.使用更精细的成本模型如Almgren-Chriss模型将冲击成本作为交易量的函数纳入优化。2.订单执行算法采用TWAP、VWAP等算法拆单减少瞬时市场冲击。策略收益周期性大幅回撤策略可能陷入了与其他主流策略的“周期性博弈陷阱”。在某种市场状态下如波动率骤升同类策略会集体平仓导致踩踏。1.压力测试与情景分析不仅看历史数据要模拟在极端博弈情景下如流动性枯竭、所有趋势策略同时反转的表现。2.引入博弈论指标计算策略收益与市场其他参与者行为的相关性寻找低相关或负相关的机会。因子IC值信息系数持续下降因子可能已被过度挖掘成为“共识因子”。大量AI使用它其预测能力因交易拥挤而消失。1.寻找另类数据与非线性关系避开传统价量数据或使用更复杂的模型挖掘深层、非显而易见的模式。2.关注因子衰减速度监控因子从被发现到失效的时间周期加快迭代速度。高频环境下订单成交率低在微观结构层面与其他高频AI进行“速度战”失败。你的订单总被更快的对手抢单。1.硬件与网络优化这属于“军备竞赛”范畴成本高昂。2.策略转型放弃纯粹的低延迟博弈转向对速度不那么敏感的中低频统计套利或基本面量化。8. 最佳实践与工程建议在AI博弈时代生存面对利润被博弈稀释的困境量化开发者和团队需要调整研发重心。8.1 策略设计层面从预测到博弈将策略开发框架从“预测价格”转变为“在与其他智能体的互动中制定最优行动”。考虑使用**多智能体强化学习MARL**进行训练让你的AI在模拟环境中与其他AI对手共同学习。寻找“非对称性”优势数据非对称获取独特、处理难度高的另类数据如卫星图像、供应链数据、特定垂直领域文本。计算非对称开发需要极高算力才能训练的复杂模型建立短期壁垒。执行非对称拥有更优的交易通道、更低的交易成本或更智能的执行算法。注重策略的“隐蔽性”与“多样性”降低市场冲击控制单策略容量分散到多个低相关性的子策略中。增加策略多样性避免整个基金依赖于单一风格的AI模型。混合不同频率高频、日内、中频、不同逻辑趋势、反转、套利、基本面的策略。8.2 系统与工程层面构建高保真模拟器这是最重要的基础设施。你的回测环境必须尽可能真实地模拟市场微观结构订单簿动态、交易成本、延迟以及其他主流策略的典型行为。只有在这个环境中表现稳健的策略才可能在实盘中生存。实施严格的“博弈压力测试”在新策略上实盘前在模拟器中增加“攻击性”对手盘观察其表现。设定明确的衰减阈值。建立持续监控与衰减预警系统实时监控策略的Sharpe比率、最大回撤、换手率、交易成本占比等关键指标。监控策略信号与市场整体波动率、流动性、因子拥挤度的相关性。一旦发现策略表现与市场状态的关系发生结构性变化立即触发审查。8.3 风险管理与认知层面接受“阿尔法衰减”是常态没有任何策略能永续有效。将策略视为有生命周期的产品建立从研发、测试、上线、监控到退役的完整 pipeline。管理预期重视风险调整后收益在博弈激烈的市场中降低收益预期更加注重控制回撤和下行风险。夏普比率比绝对收益率更重要。从“寻找圣杯”到“持续迭代”核心竞争力从拥有一个“神奇模型”转变为拥有一个能快速发现新规律、快速验证、快速部署的迭代系统。9. 总结在博弈中寻找动态平衡AI的介入没有消灭量化交易而是将其推向了一个更高维、更复杂的竞争层面——从人与市场的博弈升级为AI集群与AI集群之间的博弈。这场博弈的均衡点往往就是利润趋于零的“纳什均衡”。作为从业者破局的关键不在于建造一个更“聪明”的单一AI而在于深刻理解博弈发生的战场市场微观结构。将对手方的存在纳入策略的核心假设。通过构建高保真模拟环境来提前暴露策略在博弈中的脆弱性。在数据、模型、执行或系统层面建立暂时的、动态的非对称优势。本文提供的模拟代码是一个起点它直观展示了多智能体博弈如何导致整体利润消散。你可以在此基础上扩展例如引入更多类型的智能体、更复杂的订单簿模型、真实的tick数据甚至尝试用MARL算法来训练智能体亲自体验这场没有终点的“量化军备竞赛”。最终最稳健的策略可能不是那个预测最准的而是那个最能适应其他“聪明钱”存在、最能保护自己不被“内卷”吞噬的。这或许就是AI时代量化交易的新生存哲学。建议收藏本文在策略研发陷入瓶颈时重新从博弈的视角审视你的系统。

相关新闻

最新新闻

音游自动降准背后:从rks到动态难度的人机匹配设计

音游自动降准背后:从rks到动态难度的人机匹配设计

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

2026/9/1 11:51:51
Ubuntu源码编译安装MinkowskiEngine:稀疏卷积环境配置实战指南

Ubuntu源码编译安装MinkowskiEngine:稀疏卷积环境配置实战指南

简介:在Ubuntu 20.04环境下从源码安装MinkowskiEngine的实操型资源,适合深度学习开发者、三维点云处理及稀疏卷积相关项目使用者。内容围绕pytorch与CUDA版本一致性、openblas-devel依赖冲突、conda缓存清理以及CUDA路径与MAX_JOBS编译参数配置等关键环节…

2026/9/1 11:51:51
基于LangChain与LLM的智能体图表生成流水线实战指南

基于LangChain与LLM的智能体图表生成流水线实战指南

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

2026/9/1 11:51:51
Zotero AI插件AI-Butler:大模型驱动的文献精读与笔记生成

Zotero AI插件AI-Butler:大模型驱动的文献精读与笔记生成

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

2026/9/1 11:51:51
基于51单片机的智能台灯设计:PWM调光与超声波坐姿矫正实战

基于51单片机的智能台灯设计:PWM调光与超声波坐姿矫正实战

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

2026/9/1 11:51:51
Windows 微信 QQ 防撤回补丁怎么打:一份完整上手指南

Windows 微信 QQ 防撤回补丁怎么打:一份完整上手指南

Windows 微信 QQ 防撤回补丁怎么打:一份完整上手指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com…

2026/9/1 11:46:51