谷歌推出探索型推荐新范式:双LLM架构重塑用户兴趣挖掘
文章目录
- 1. 背景
- 1.1 闭环困境
- 1.2 谷歌的两次失败尝试
- 1.2.1 尝试一:轻量微调
- 1.2.2 尝试二:RLHF 强化学习微调
- 1.3 双LLM范式的提出
- 1.3.1 模型1:Novelty LLM — 负责生成“探索方向”
- 1.3.2 模型2:Alignment LLM — 负责评估“相关性”
- 1.4 离线决策 × 在线查表
- 2. 方法
- 2.1 用户反馈驱动的兴趣对齐
- 2.2 Best-of-N采样 + 用户对齐评分筛选
- 3. 总结
这里介绍一下谷歌四月发的这篇文章:User Feedback Alignment for LLM-powered Exploration in Large-scale Recommendation Systems。文章中的探索感觉还是挺有意义的,主要在解决一个闭环困境问题。
论文地址:https://arxiv.org/pdf/2504.05522
1. 背景
1.1 闭环困境
在推荐系统的语境中,探索(exploration)指的是帮助用户发现他们从未接触过的新兴趣,拓宽他们的内容边界。然而,这个目标在大规模实际系统中却异常困难,而其中一个核心障碍就是所谓的“推荐闭环问题”。
传统的推荐算法,比如协同过滤和内容相似度推荐,依赖于用户过往的行为来进行推荐。比如,如果一个用户最近频繁观看短视频中的“猫猫”“烹饪”内容,系统就更倾向于继续推送这类内容。这样确实提升了短期的点击率和留存率,但问题是,系统越来越“了解”你的兴趣后,反而越来越不敢冒险推荐新的东西。用户越看什么,就越被推送什么,久而久之,这种模式构成了一个封闭的兴趣循环,导致推荐结果趋于保守、缺乏多样性。
这种“闭环效应”看起来像是推荐系统变得更“精准”了,实际上却限制了用户兴趣的增长空间。它让用户陷入所谓的“兴趣茧房”,在熟悉的内容中反复循环,难以接触新的内容类别。对于平台来说,这也意味着用户活跃度的天花板可能更早到来,长期的用户留存和内容生态的多样性都会受限。
这个问题之所以难以解决,是因为我们很难准确判断用户是否喜欢一个他们“从未接触过的内容”。系统只能从一些间接信号(比如点击、停留时间)中猜测偏好,这些反馈本身就很嘈杂,而且天然更倾向于强化已有的兴趣。更严重的是,这种闭环还会反过来影响模型训练数据,使得整个系统越来越保守,失去了对未来偏好的“想象力”。
谷歌在这篇论文中明确指出,推荐系统要真正实现用户体验的进化,就必须突破这种反馈循环的封闭逻辑。而大语言模型(LLMs)因其具备世界知识和推理能力,被认为是一种有望打破闭环的“上层指挥官”:它们可以基于语义、概念和世界知识去“想象”一个用户可能感兴趣但从未触达的内容方向。只是,想象归想象,如何在不脱离用户兴趣的前提下做出这种推断,是另一个更复杂的挑战 —— 这就引出了后续谷歌对双LLM架构的探索。
1.2 谷歌的两次失败尝试
为了打破推荐系统的闭环困境,谷歌的研究团队曾尝试用大语言模型(LLM)进行用户兴趣探索。这看上去是一种很自然的思路:既然 LLM 拥有世界知识和强大的生成能力,能不能用它来“想出”用户从未见过、但可能感兴趣的内容方向?
于是他们首先尝试了两个看似合理的路径,但结果都以失败告终。这两种方式,分别是轻量微调(lightweight fine-tuning)和基于奖励的强化学习微调(RLHF)。下面我们来看看,这两个方法分别是怎么做的,以及为什么没有成功。
1.2.1 尝试一:轻量微调
第一个方法是最简单直接的:拿一个预训练好的 LLM,使用平台上的部分用户兴趣转移数据(大约 8000 条样本)进行微调。目标是让模型学会“用户看完 A 类内容后,有可能对 B 类感兴趣”。
这个方法在实验中虽然初期效果还可以,但很快暴露出两个关键问题:
-
数据太少,不具代表性。
8000 条样本远远不能覆盖平台上庞大而多样的用户兴趣,导致模型泛化能力弱。
-
模型信心不足,生成不靠谱。
当遇到复杂或罕见的兴趣组合时,LLM 往往给不出有逻辑的预测,推荐出来的内容与用户的历史兴趣脱节,相关性差,用户满意度反而下降。
更糟的是,当尝试加入更多数据时,他们发现模型容易陷入“重复训练数据”的模式(40% 的生成内容是训练集中出现过的),不仅降低了新颖性,还可能反向强化推荐闭环。这个“复读机”问题使得微调方法最终被放弃。
1.2.2 尝试二:RLHF 强化学习微调
第二个方法是借鉴 ChatGPT 等成功经验:用 RLHF(Reinforcement Learning with Human Feedback)来优化 LLM。
他们的思路是:
先训练一个奖励模型,用真实用户的点击、停留、点赞等行为反馈来打分,然后用这个奖励模型来引导 LLM 生成更贴合用户兴趣的推荐。
听起来很合理,但实践中却出现了严重的问题:
-
模型“崩溃”:生成控制能力丧失。
只训练了 5000 步,LLM 原本 99% 正确输出格式的能力直接掉到 2%,完全不能稳定输出预期格式的推荐主题。
-
奖励作弊(Reward Hacking):
模型学会了投机取巧,只生成奖励分数高的关键词,比如“cat”“BTS”“toy”等等,不管用户兴趣是什么,全部一股脑推热门词。这种“作弊”行为严重破坏了推荐的多样性与准确性。
总之,这个方法虽然在开放文本生成中(如对话系统)表现不错,但在“结构化输出 + 用户偏好控制”这类任务中,奖励模型不够细腻、难以约束生成格式,结果反而拉低了整体表现。
💡 两次失败,换来一个关键认知:
想让一个 LLM 同时做到“新颖内容生成”和“用户偏好判断”,本身就是个不现实的任务。两个目标本质上相互矛盾 —— 一个要求模型跳出旧模式,另一个要求它理解和保持用户原有兴趣。强行让一个模型身兼两职,结果只能是左右手互搏,谁也没干好。
这个教训最终促使谷歌转向了“解耦式建模”的方向,也就是我们接下来要介绍的“双LLM架构”。
1.3 双LLM范式的提出
在接连两次失败的尝试之后,谷歌团队意识到一个关键问题:
“让一个大模型同时完成‘探索新方向’和‘用户兴趣对齐’,本身就是一个结构性矛盾。”
前者要求模型具备创造力,跳脱出用户的既有兴趣;后者则要求模型小心翼翼地控制推荐不偏离用户偏好太远。这两个目标彼此拉扯,一个要突破边界,一个要守住相关性。
于是他们提出了一个非常直观但极其有效的解决思路 ——
“把两个冲突的目标交给两个专职模型去做。”
这个思路就是所谓的 双LLM范式(Dual-Language-Model Paradigm),它把整个推荐任务一分为二,交由两个大语言模型分工协作:
1.3.1 模型1:Novelty LLM — 负责生成“探索方向”
- 它的目标是尽可能提出新颖的推荐主题(即新的“兴趣簇”);
- 不强调是否相关,而是关注“哪些方向用户可能还没看过、但潜在有兴趣”;
- 使用高温采样(high temperature sampling)来增加生成的多样性。
1.3.2 模型2:Alignment LLM — 负责评估“相关性”
- 它的任务是接收前者生成的一批候选推荐主题,并判断哪些最可能被用户喜欢;
- 训练目标是最大程度模拟用户行为反馈(如点击率、播放率);
- 本质上充当了“用户代理人”或“质量把关员”的角色。
这个架构非常像一个“创意+决策”的协作流程:
- Novelty 模型像是创意总监,它生成多个可能的新推荐方向;
- Alignment 模型像是市场评估团队,它对这些建议逐一评分;
- 最后系统从中选择出 Top-K 个推荐主题,进入实际推荐链路。
这个架构的核心优势是:“分而治之”。
- 每个模型只需要专注做一件事;
- 避免一个模型“左右手互搏”的情况;
- 训练和推理也可以分别优化,互不干扰。
💡 三个关键设计点值得一提:
- 解耦建模:新颖性与用户对齐分别建模,训练目标更纯粹;
- 推理时多采样 + 精选(Best-of-N):提升推荐多样性的同时保留控制力;
- 集体用户反馈训练对齐模型:使用大规模点击、播放等行为作为反馈,避免个体偏差和冷启动问题。
最终结果令人惊喜。通过这种架构,谷歌不仅成功提升了推荐内容的新颖性,同时在用户满意度上也实现了显著提升——这在推荐系统中是极其罕见的“双赢局面”。
1.4 离线决策 × 在线查表
尽管大语言模型(LLM)近年来在推荐系统中的应用引发了大量研究热情,但它们真正走进线上系统仍然面临一个非常现实的难题——**“太慢了”。**推荐系统的在线服务场景对延迟极为敏感,通常需要在几十毫秒内完成用户响应。像短视频平台这样的高吞吐系统甚至要求每秒处理成千上万个请求。这种严苛的响应时间要求,让当今主流 LLM 的推理速度成为了致命瓶颈。
尽管 LLM 在内容理解和语义生成上拥有强大能力,但一旦被用于“实时生成推荐内容”,其推理开销立即失控,根本无法支撑线上请求压力。这也是为什么大多数生产级推荐系统依然采用经过高度优化的传统模型,例如双塔模型、Transformer 召回塔,甚至基于向量索引的高效检索方案。
✨ 作者的设计:LLM 做规划,推荐系统做执行
谷歌在本篇论文中给出了一个优雅的折中方案:
“LLM 不上前线,只当军师;前线仍然是传统模型。”
这就是所谓的分层推荐范式(Hierarchical Planning Paradigm):
🔹 高层规划(离线 LLM)
- 使用 LLM 离线分析用户最近的兴趣轨迹;
- 预测出用户下一个可能感兴趣的“兴趣簇”(cluster);
- 这个预测不针对具体内容,而是“方向性”推荐,比如“从猫视频转向野生动物”。
🔹 低层执行(在线传统模型)
- 在线阶段不再调用 LLM;
- 而是查表匹配出之前 LLM 预生成的兴趣簇预测结果;
- 然后在这个兴趣簇中,由传统推荐系统(如 transformer-based 推荐模型)从具体内容池中选择视频推送给用户。
⚙️ 怎么做到“查表式推理”?
由于线上无法实时调用 LLM,作者做了一件非常聪明的事情:
他们提前枚举所有可能的兴趣组合,并用 LLM 离线计算出这些组合对应的推荐方向。
例如,如果系统中存在 N 个兴趣簇,用户最近看过的兴趣序列长度为 K,那么所有可能的组合就是 ( N K ) \binom{N}{K} (KN)。作者将这些组合提前输入给 LLM,并缓存对应的预测结果,形成一个超大的“兴趣转移查找表”。
在用户实际请求到来时,系统只需要:
- 读取用户最近兴趣簇序列;
- 查表找到 LLM 预生成的“下一跳兴趣簇”;
- 然后只在这个小范围内进行推荐内容选取。
整个过程完全不需要在线调用 LLM,延迟和吞吐量都与传统系统持平,但推荐逻辑却显著“更聪明”。
✅ 效果显著:兼得新颖与效率
这种设计思路最终实现了一个极具价值的结果:
- 推荐内容的新颖性显著提升;
- 用户满意度也大幅提高;
- 系统在生产环境中无感落地,对延迟毫无影响。
更重要的是,作者只用了不到 8000 条数据进行轻量微调,就让 LLM 在保留知识推理能力的同时,具备了一定的“用户理解力”,大大降低了部署门槛。
作者通过“离线规划 + 在线查表”的方式,将 LLM 的能力嵌入推荐系统之中,不仅绕过了推理性能瓶颈,也保留了大模型在“想象力”上的优势。推荐系统终于可以“大胆想象,小心推荐”了。
图1展示了谷歌在这篇论文中提出的**分层推荐范式(Hierarchical Planning Paradigm)**的完整工作流程,核心思想是将推荐任务拆解为高层规划与低层执行两部分,并分别由大语言模型和传统推荐模型协同完成。
从上往下看,推荐过程分为以下几个步骤:
🔹 用户行为建模(Per Query)
用户的推荐请求从其历史行为开始,比如最近观看过的几个短视频(记为 i t − N , … , i t − 1 i_{t-N}, …, i_{t-1} it−N,…,it−1)。这些历史行为被映射成对应的“兴趣簇”(Interest Clusters),例如“摄影”、“宠物”、“搞笑”等等,作为模型输入的语义抽象表示。
🔹 高层规划(High-level Planning)
在这一阶段,系统会将用户历史兴趣簇序列 { C t − K , … , C t − 1 C_{t-K}, …, C_{t-1} Ct−K,…,Ct−1} 输入到缓存系统中查找(Lookup in the cached),该缓存事先由 LLM 离线生成并存储了所有可能的兴趣迁移路径(Seed → Next)。比如:
看到过 “猫”、“摄影” 的用户,LLM 判断他们可能对 “野生动物” 感兴趣。
预测出的结果可能是多个候选兴趣簇 { C n , C n + 1 , … , C n + 5 C_n, C_{n+1}, …, C_{n+5} Cn,Cn+1,…,Cn+5},代表用户接下来可能会想要探索的新方向。
🔹 低层限制(Low-level Restriction)
一旦系统得到了高层的“规划方向”,它会将推荐任务交由传统的推荐模型(如 transformer-based 系统)去执行。但注意,传统推荐模型的召回范围被限制在高层 LLM 选定的主题范围内,即只推荐那些属于预测兴趣簇的新内容。这种限制让系统既保持了精准的内容匹配能力,又兼具探索性和多样性。
🔹 用户反馈用于对齐(Collective User Feedback)
下方模块展示了对齐模型的训练方式。系统将用户的集体行为(比如点击率、播放完成率等)映射为兴趣簇的评分序列,如:
C_1: 0.8 > C_2: 0.7 > C_3: 0.5 \dots
这类排序信息可用于训练“对齐模型”(Alignment LLM)以判断哪些推荐更可能被用户接受。
系统支持两种训练样本格式:
- Pointwise:单个兴趣簇的得分;(实验中更优)
- Pairwise:两个兴趣簇之间的偏好强度比较;
这种设计能够帮助模型学习到更稳定的用户偏好信号,进一步提升推荐的“贴合度”。
2. 方法
在前文中我们已经介绍了谷歌提出的“双LLM范式”架构思想,即将“生成新颖兴趣”和“对齐用户偏好”的任务分别交由两个独立的大语言模型完成。这样的解耦设计虽然在理念上清晰,但要真正将其应用到一个高性能的推荐系统中,还面临诸多工程挑战。
特别是前文提到的两种失败尝试(微调 LLM、强化学习优化)均未能在实践中奏效。这就意味着,作者需要另辟蹊径:既不能直接微调大模型,又要让系统在不损害响应速度的前提下,做到同时优化新颖性与相关性。
为此,本文提出了一种极具实用性的实现路径,主要包括两个关键组成部分:
- 推理阶段的规模化采样与筛选机制(Inference-time scaling);
- 对齐模型的反馈信号采集与训练方法(Feedback-aligned scoring)。
这两部分共同构建了一个可落地的端到端流程,能够将 LLM 的“世界知识”和平台用户的“行为反馈”有机融合,实现真正可部署的智能推荐。
下面我们就来详细介绍这两部分的具体做法。
2.1 用户反馈驱动的兴趣对齐
为了让推荐内容更贴合用户偏好,作者提出了一套基于用户集体行为反馈训练对齐模型(Alignment Model)的方法。核心思路是利用线上系统中大规模用户对推荐内容的隐式反馈(如播放完成、点赞、分享、跳过等行为)来训练一个奖励模型,用以评估推荐内容是否“对用户胃口”。
具体来说,系统会记录每一次 LLM 生成兴趣簇 C n C_n Cn 后,用户的实际行为反馈。同时,也保留该用户当时的兴趣历史序列 { C 1 , C 2 , … , C K } \{C_1, C_2, …, C_K\} {C1,C2,…,CK},表示用户之前看过的内容类型。我们将这对组合视为一个“兴趣转移路径”,并用多个用户的行为反馈进行聚合,得到该路径下用户对 C n C_n Cn 的总体接受程度,记为一个反馈得分 L ( 1 , … , k ) , n L_{(1,…,k),n} L(1,…,k),n。最终形成训练样本: ( { C 1 , … , C K } , C n , L ( 1 , … , k ) , n ) \big(\{C_1, …, C_K\}, C_n, L_{(1,…,k),n}\big) ({C1,…,CK},Cn,L(1,…,k),n)。
这些反馈数据经过三个步骤进行预处理:首先是对反馈得分归一化,避免不同兴趣簇之间因数据量不一致导致偏差;其次是剔除样本数量过少的兴趣转移路径;最后将反馈得分离散化成固定的区间,以增强鲁棒性。
为了丰富训练方式,作者还引入了 pairwise ranking 策略。除了 pointwise 的方式直接预测兴趣簇的评分外,pairwise 方法将两个候选簇 C n C_n Cn 和 C m C_m Cm 的得分进行排序,形成 C n > C m C_n > C_m Cn>Cm 的偏好训练信号。这个方式省去了阈值设置和归一化操作,使训练更稳定。通过 K K K 个历史兴趣簇序列,可生成多组“ K K K 选 2” 的 pairwise 训练样本,进一步增强数据利用效率。
训练目标是构建一个“对齐模型”(Alignment Reward Model),本质上是一个 LLM,在末尾加上一个线性投影层,输出每个候选兴趣簇的评分分布。训练过程中使用 cross-entropy 损失,最小化预测值与用户反馈分布之间的差异。这个模型就像是用户的“数字分身”,能够在推理时准确判断哪个候选簇更符合用户的兴趣。
图2通过一个具体的案例直观展示了对齐模型(Alignment Model)如何基于用户集体反馈来预测用户对全新推荐主题的偏好。这个例子模拟了真实推荐系统中的应用场景:用户最近观看的短视频被归入两个兴趣簇(Cluster 1 和 Cluster 2),分别代表了“摄影/视觉特效类”和“狗狗/宠物类”的内容。例如 Cluster 1 包括关键词如 Photography, Trampoline, Wedding photography,而 Cluster 2 包含 Pit Bull, Puppy, Pet 等等。这些关键词被用来描述用户的观看兴趣图谱。
基于这个兴趣历史,系统生成了多个可能的“新视频主题”(即下一跳兴趣簇),并通过两个方式来判断这些候选主题是否受到用户喜爱:
- 上半部分展示了用户在实际平台中对这些“新主题”的反馈结果。比如,“Wildlife(野生动物)”这组主题得到了集体反馈分数 0.57,明显高于“Boat/Ship(船类)”主题的 0.36,说明用户更偏爱前者。
- 下半部分展示的是对齐模型在没有见过这两个主题的前提下,对它们的偏好预测结果。结果显示,模型成功为“野生动物”预测了一个较高的分数(0.6),并为“船类”预测了一个较低的分数(-0.6),基本保持了用户行为的偏好趋势。这表明对齐模型不仅能复现已知反馈,而且具备一定的泛化能力。
此外,图中还展示了两个未出现在训练标签中的新主题预测:一个是与原兴趣簇(猫/宠物类)有语义联系的“Video game culture, Cat, Meme”等,获得了较高的偏好评分;另一个是风格上差异较大的“Soap opera, CNCO, Reality TV”等被赋予了负值评分。这进一步说明,对齐模型不仅能够根据训练数据学到用户群体的普遍偏好,还可以对未见过的标签做出合理的偏好判断。
2.2 Best-of-N采样 + 用户对齐评分筛选
在双LLM架构中,如何让“新颖性模型(Novelty LLM)”生成既大胆又不离谱的推荐候选,是系统效果好坏的关键一环。为了解决这个问题,作者提出了一种非常实用的推理阶段优化策略:Best-of-N采样 + 用户对齐评分筛选(Inference Scaling)。具体来说,作者使用对齐模型(即用户偏好代理人)作为“筛选器”,在推理阶段对新颖性模型生成的内容进行打分,然后从中选出最有可能被用户喜欢的推荐结果。
这一过程是这样的:对于每个推荐请求,系统会从 Novelty LLM 中以较高“温度参数”进行多次独立采样,生成 5 倍于实际需要数量的兴趣簇候选(例如需要推荐 k k k 个兴趣簇,就生成 5 k 5k 5k 个)。这些高温采样结果更具多样性,覆盖了更广的兴趣空间。接下来,作者利用训练好的对齐模型,对这 5 k 5k 5k 个候选进行打分,并选出得分最高的前 k k k 个兴趣簇用于实际推荐。这个过程等价于“让 LLM 自由想象,然后请用户数字分身来精挑细选”。
更巧妙的是,这一筛选和打分过程全部在离线完成,线上系统只需从缓存中读取“规划结果”,无需实时调用 LLM,因此对延迟没有任何影响。这种推理阶段的“采样-精选”策略,在保持预测新颖性的同时,引入了用户偏好作为过滤机制,从而有效避免了那些“看似有趣但用户并不喜欢”的推荐方向。这种方式不仅提升了推荐的个性化质量,也让探索行为更加安全和可靠。
此外,该策略还解决了一个根本性的建模矛盾:新颖性与相关性本质上是两个对立目标,若强行用一个模型同时学这两件事,容易陷入“遗忘”或“妥协”,反而达不到预期效果。而通过双模型分工合作,Novelty LLM 保持了探索能力,对齐模型则帮助决策“哪些探索值得执行”,最终实现推荐系统中少见的“敢推也懂你”的双赢局面。
3. 总结
这篇来自谷歌的研究工作聚焦于一个推荐系统中长久未解的难题:**如何在不破坏用户体验的前提下,引导用户走出兴趣“信息茧房”,实现有效探索。面对传统系统的闭环困境和强化学习在推荐场景下的失败尝试,作者提出了一种“双LLM+离线规划”**的新范式,将“生成”和“控制”两个目标彻底解耦。通过引入新颖性模型与对齐模型的协作机制,并辅以离线生成、在线查表的系统优化策略,他们最终在一个真实的短视频平台上实现了“新颖性”与“满意度”同步提升的稀有结果。本文不仅展示了大模型在推荐系统中的新思路,也提供了一种切实可行的落地方案,具有较强的工程与研究价值。
相关文章:
谷歌推出探索型推荐新范式:双LLM架构重塑用户兴趣挖掘
文章目录 1. 背景1.1 闭环困境1.2 谷歌的两次失败尝试1.2.1 尝试一:轻量微调1.2.2 尝试二:RLHF 强化学习微调 1.3 双LLM范式的提出1.3.1 模型1:Novelty LLM — 负责生成“探索方向”1.3.2 模型2:Alignment LLM — 负责评估“相关性…...
Linux kernel signal原理(下)- aarch64架构sigreturn流程
一、前言 在上篇中写到了linux中signal的处理流程,在do_signal信号处理的流程最后,会通过sigreturn再次回到线程现场,上篇文章中介绍了在X86_64架构下的实现,本篇中介绍下在aarch64架构下的实现原理。 二、sigaction系统调用 #i…...
使用 LangChain + Higress + Elasticsearch 构建 RAG 应用
RAG(Retrieval Augmented Generation,检索增强生成) 是一种结合了信息检索与生成式大语言模型(LLM)的技术。它的核心思想是:在生成模型输出内容之前,先从外部知识库或数据源中检索相关信息&…...
【Linux】46.网络基础(3.3)
文章目录 5. 其他重要协议或技术5.1 DNS(Domain Name System)5.1.1 DNS背景5.1.2 域名简介 5.2 ICMP协议5.2.1 ICMP功能5.2.2 ICMP的报文格式5.2.3 ping命令5.2.4 一个值得注意的坑5.2.5 traceroute命令 5.3 NAT技术5.3.1 NAT技术背景5.3.2 NAT IP转换过程5.3.3 NAPT5.3.4 NAT技…...
【Unity笔记】Unity + OpenXR项目无法启动SteamVR的排查与解决全指南
图片为AI生成 一、前言 随着Unity在XR领域全面转向OpenXR标准,越来越多的开发者选择使用OpenXR来构建跨平台的VR应用。但在项目实际部署中发现:打包成的EXE程序无法正常启动SteamVR,或者SteamVR未能识别到该应用。本文将以“Unity OpenXR …...
【sylar-webserver】重构 增加内存池
文章目录 内存池设定结构ThreadCacheCentralCachePageCache allocatedeallocate测试 参考 https://github.com/youngyangyang04/memory-pool 我的代码实现见 https://github.com/star-cs/webserver 内存池 ThreadCache(线程本地缓存) 每个线程独立的内存…...
云账号安全事件分析:黑客利用RAM子账户发起ECS命令执行攻击
事件背景 某企业云监控系统触发高危告警,提示API请求中包含黑客工具特征(cf_framework),攻击者试图通过泄露的RAM子账户凭据调用ECS高危API。以下是攻击关键信息整理: 字段详情告警原因API请求包含黑客工具特征(cf_framework)攻击实体RAM子账户 mq泄露凭证AccessKey ID…...
Node.js 模块导入的基本流程
Node.js 模块导入的基本流程,主要是 CommonJS 模块加载机制(即使用 require())的内部执行步骤。下面我用清晰的结构给你梳理一下这个过程: ✅ Node.js 模块导入的基本流程(使用 require()) const someModu…...
Unitest和pytest使用方法
unittest 是 Python 自带的单元测试框架,用于编写和运行可重复的测试用例。它的核心思想是通过断言(assertions)验证代码的行为是否符合预期。以下是 unittest 的基本使用方法: 1. 基本结构 1.1 创建测试类 继承 unittest.TestC…...
wps批量修改字体
选择这个小箭头 找到需要修改的字体如正文,右击修改选择合适的字体确定即可...
【Linux网络】各版本TCP服务器构建 - 从理解到实现
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
航电系统多模态融合技术要点
一、技术要点 1. 多模态数据特性分析 异构数据对齐:需处理不同传感器(如雷达、摄像头、IMU、ADS-B等)在时间、空间、精度和采样率上的差异,需设计同步机制(如硬件时钟同步、软件插值对齐)。 数据预处…...
【Git】branch合并分支
在 Git 中,将分支合并到 main 分支是一个常见的操作。以下是详细的步骤和说明,帮助你完成这个过程。 1. 确保你在正确的分支上 首先,你需要确保当前所在的分支是 main 分支(或者你要合并到的目标分支)。 检查当前分支…...
uniapp-商城-33-shop 布局搜索页面以及u-search
shop页面上有一个搜索,可以进行商品搜索,这里我们先做一个页面布局,后面再来进行数据i联动。 1、shop页面的搜索 2、搜索的页面代码 <navigator class"searchView" url"/pagesub/pageshop/search/search"> …...
蓝桥杯常考的找规律题
目录 灵感来源: B站视频链接: 找规律题具有什么样的特点: 报数游戏(Java组): 题目描述: 题目链接: 思路详解: 代码详解: 阶乘求和(Java组…...
全球化2.0 | 云轴科技ZStack亮相2025香港国际创科展
4月13-16日,由香港特别行政区政府、香港贸发局主办的2025香港国际创科展(InnoEX)在香港会议展览中心举办,作为亚洲最具影响力的科技盛会之一,本届展会吸引了来自17个国家和地区的500余家顶尖科技企业、科研机构及行业先…...
【Python进阶】数据可视化:Matplotlib从入门到实战
Python数据可视化:Matplotlib完全指南 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:折线图(股票趋势&#…...
操作系统——堆与栈详解:内存结构全面科普
文章目录 堆与栈详解:内存结构全面科普一、程序内存结构总览二、各段介绍及特点1. 代码段 .text2. 数据段 .data3. BSS段 .bss4. 堆区 Heap5. 栈区 Stack 三、C语言实例分析四、深入理解:为什么堆空间可能不连续?1. 堆内部结构:链…...
Mysql面试知识点详解
Mysql面试知识点详解 Mysql 是 Java 开发领域中常用的持久层框架,在面试和实际开发中都占据重要地位。本文将深入剖析 Mysql的核心知识点,并结合实战案例,帮助读者全面掌握相关技能。 一、慢查询定位与分析 (一)定位…...
数智读书笔记系列030《曲折的职业道路:在终身工作时代找准定位》与《做自己的教练:战胜工作挑战掌控职业生涯》
书籍简介 《曲折的职业道路:在终身工作时代找准定位》由英国职业发展专家海伦塔珀(Helen Tupper)和莎拉埃利斯(Sarah Ellis)合著,旨在帮助读者应对现代职场中日益普遍的“非直线型”职业路径。两位作者是“神奇的如果”(Amazing If)公司的联合创始人,曾为李维斯、沃达…...
Linux内核之文件驱动随笔
前言 近期需要实现linux系统文件防护功能,故此调研了些许知识,如何实现文件防护功能从而实现针对文件目录防护功能。当被保护的目录,禁止增删改操作。通过内核层面实现相关功能,另外在通过跟应用层面交互从而实现具体的业务功能。…...
【python】如何将文件夹及其子文件夹下的所有word文件汇总导出到一个excel文件里?
根据你的需求,这里提供一套完整的Python解决方案,支持递归遍历子文件夹、提取Word文档内容(段落+表格),并整合到Excel中。以下是代码实现及详细说明: 一个单元格一个word的全部内容 完整代码 # -*- coding: utf-8 -*- import os from docx import Document import pand…...
IDEA中如何统一项目名称/复制的项目如何修改根目录名称
1、问题概述? 在开发中,有时候为了方便,我们会复制一个新的项目,结果出现如下提示: 会在工程的后面提示工程原来的名字。 这种情况就是复制之后名字修改不彻底造成的。 2、彻底的修改工程的名字 2.1、修改pom.xml中…...
Ubuntu-Linux中vi / vim编辑文件,保存并退出
1.打开文件 vi / vim 文件名(例: vim word.txt )。 若权限不够,则在前方添加 sudo (例:sudo vim word.txt )来增加权限; 2.进入文件,按 i 键进入编辑模式。 3.编辑结…...
如何在idea里创建注释模版
✅ 步骤:创建一个类注释的 Live Template(缩写为 cls) ① 打开设置 IDEA 菜单栏点击:File > Settings(或按快捷键 Ctrl Alt S) ② 进入 Live Templates 设置 在左侧菜单找到:Editor > …...
IntelliJ IDEA 新版本中 Maven 子模块不显示的解决方案
一、问题现象与背景 在使用 IntelliJ IDEA 2024 版本开发 Maven 多模块项目时,我发现一个令人困惑的现象:父模块的子模块未在右侧 Maven 工具窗口中显示,仅显示父模块名称(且无 (root) 标识)。而此前在 IntelliJ IDEA…...
day48—双指针-通过删除字母匹配到字典最长单词(LeetCode-524)
题目描述 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字…...
美乐迪电玩大厅加载机制与 RoomList 配置结构分析
本篇为《美乐迪电玩全套系统搭建》系列的第三篇,聚焦大厅与子游戏的动态加载机制,深入解析 roomlist.json 的数据结构、解析流程、入口配置方式与自定义接入扩展技巧。通过本篇内容,开发者可实现自由控制子游戏接入与分发策略。 一、RoomList…...
局域网内,将linux(Ubuntu)的硬盘映射成Windows上,像本地磁盘一样使用
如何把同处一个局域网内的Ubuntu硬盘,映射到Windows上,使得Windows就像使用本地磁盘一样使用Ubuntu的磁盘? 要在同一局域网内的Windows上像本地磁盘一样使用Ubuntu硬盘,可以按照以下步骤操作: 1. 在Ubuntu上设置Samba…...
界面控件DevExpress WPF v25.1预览 - 支持Windows 11系统强调色
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...
【Hive入门】Hive架构与组件深度解析:从核心组件到生态协同
目录 1 Hive架构全景图 2 核心组件运维职责详解 2.1 Metastore元数据中心 2.2 Driver驱动组件 2.3 Executor执行引擎 3 与HDFS/YARN的协同关系 3.1 HDFS协同架构 3.2 YARN资源调度 4 运维实战案例 4.1 Metastore连接泄露 4.2 小文件合并 5 最佳实践总结 5.1 性能优…...
【图像识别改名】如何批量识别多个图片的区域内容给图片改名,批量图片区域文字识别改名,基于WPF和腾讯OCR的实现方案和步骤
基于WPF和腾讯OCR的批量图像区域文字识别改名方案 本方案适用于以下场景: 大量扫描文档需要根据文档中的特定区域内容(如编号、标题等)进行重命名证件照片需要根据证件号码或姓名进行整理归档企业档案管理需要根据文件上的编号自动分类教育机构需要根据学生试卷上的学号自动…...
从ChatGPT到GPT-4:大模型如何重塑人类认知边界?
从ChatGPT到GPT-4:大模型如何重塑人类认知边界? 在人工智能(AI)领域,近年来最引人注目的进展之一是大型语言模型的发展。从最初的GPT-1到现在的GPT-4,这些模型不仅在技术上取得了显著的进步,而…...
QEMU源码全解析 —— 块设备虚拟化(21)
接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(20) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回开始解析blockdev_init函数,讲到了其中调用的blk_new_open函数,该函数的作用…...
vue2练习项目 家乡特色网站—前端静态网站模板
最近一直在学习前端 vue2 开发,基础知识已经学习的差不多了,那肯定需要写几个项目来练习一下自己学习到的知识点。今天就分享一个使用 vue2 开发的一个前端静态网站,【家乡特色网站】 先给大家看一下网站的样式: 这里就只简单的…...
CFIS-YOLO:面向边缘设备的木材缺陷检测轻量级网络解析
论文地址:https://arxiv.org/pdf/2504.11305 目录 一、论文核心贡献 二、创新点详解 2.1 CARAFE动态上采样 工作原理 优势对比 2.2 C2f_FNB轻量模块 计算效率 2.3 Inner-SIoU损失函数 三、实验验证 3.1 消融实验 3.2 对比实验 四、应用部署 4.1 边缘设备部署流程…...
vue3 + element-plus中el-dialog对话框滚动条回到顶部
对话框滚动条回到顶部 1、需要对话框显示后 2、使用 nextTick 等待 Dom 更新完毕 3、通过开发者工具追查到滚动条对应的标签及class“el-overlay-dialog”。追查方法: 4、设置属性 scrollTop 0 或者 执行方法 scrollTo(0, 0) // 对话框显示标识 const dialogVi…...
赛灵思Xilinx FPGa XCKU15P‑2FFVA1156I AMD Kintex UltraScale+
XCKU15P‑2FFVA1156I 是 AMD Kintex UltraScale 系列中的高性能 FPGA,基于 16 nm FinFET UltraScale 架构 制造,兼顾卓越的性能与功耗比,该器件集成 1,143,450 个逻辑单元和 82,329,600 位片上 RAM,配备 1,968 个 DSP 切片&#…...
力扣2492:并查集/dfs
方法一:并查集。如果不仔细读题,可能会想着把每一个一维数组下标为2的位置进行排序即可。但这是不行的。因为有可能有一些节点在其它集合当中。如果这些节点之间存在一个边权值比节点1所在集合的最小边权值还要小,那么求出来的答案就是错的。…...
宝塔面板引发的血案:onlyoffice协作空间无法正常安装的案例分享
今天和客户一起解决:onlyoffice协作空间的安装问题,本来已经发现由于客户用的机械硬盘,某些安装步骤等待的时间不够,已经加了处理。但是安装成功后,登录系统一直提示报错如下 检查docker容器都是正常的,并且health也是正确的,登录就一直报错。后面发现用免费版的安装程序可以正…...
【阿里云大模型高级工程师ACP习题集】2.1 用大模型构建新人答疑机器人
练习题 【单选题】1. 在调用通义千问大模型时,将API Key存储在环境变量中的主要目的是? A. 方便在代码中引用 B. 提高API调用的速度 C. 增强API Key的安全性 D. 符合阿里云的规定 【多选题】2. 以下哪些属于大模型在问答场景中的工作阶段?( ) A. 输入文本分词化 B. Toke…...
C++中的算术转换、其他隐式类型转换和显示转换详解
C中的类型转换(Type Conversion)是指将一个数据类型的值转换为另一个数据类型的过程,主要包括: 一、算术类型转换(Arithmetic Conversions) 算术类型转换通常发生在算术运算或比较中,称为**“标…...
Python自动化selenium-一直卡着不打开浏览器怎么办?
Python自动化selenium 如果出现卡住不打开,就把驱动放当前目录并指定 from selenium import webdriver from selenium.webdriver.chrome.service import Service import time import osdef open_baidu():# 获取当前目录中的chromedriver.exe的绝对路径current_di…...
AI Agent开发第35课-揭秘RAG系统的致命漏洞与防御策略
第一章 智能客服系统的安全悖论 1.1 系统角色暴露的致命弱点 当用户以"你好"开启对话后追问"你之前说了什么",看似无害的互动实则暗藏杀机。2024年数据显示,93%的开源RAG系统在该场景下会完整复述初始化指令,导致系统角色定义(如电商导购)被完全暴露…...
【MySQL】数据库安装
数据库安装 一. Ubantu下安装 MySQL 数据库1. 查看Linux系统版本2. 添加 MySQL APT 源1. Windows 下载发布包2. 上传发布包到 Linux3. 安装发布包 3. 安装 MySQL4. 查看 MySQL 状态5. 开启自启动6. 登录 MySQL 一. Ubantu下安装 MySQL 数据库 1. 查看Linux系统版本 操作系统版…...
OpenGL shader开发实战学习笔记:第十二章 深入光照
1. 深入光照 1.1. 平行光 我们在前面的章节中,已经介绍了平行光的基本原理和实现步骤 平行光的基本原理是,所有的光都从同一个方向照射到物体上,这个方向就是平行光的方向。 1.2. 点光源 点光源的基本原理是,所有的光都从一个…...
1-1 什么是数据结构
1.0 数据结构的基本概念 数据结构是计算机科学中一个非常重要的概念,它是指在计算机中组织、管理和存储数据的方式,以便能够高效地访问和修改数据。简而言之,数据结构是用来处理数据的格式,使得数据可以被更有效地使用。 数据结构…...
【MySQL】:数据库事务管理
一:学习路径 (1)下载安装mysql (2)学习语言:SQL(操作数据库) (3)mysql集群(提升数据库存储效率) (4)SQL使用,M…...
leetcode 647. Palindromic Substrings
题目描述 代码: class Solution { public:int countSubstrings(string s) {int n s.size();//i<j,dp[i][j]表示子字符串s[i,j]是否是回文子串,i>j的dp[i][j]不定义vector<vector<int>> dp(n,vector<int>(n,false));int res 0;for(int i …...
Linux-scp命令
scp(Secure Copy Protocol)是基于 SSH 的安全文件传输命令,用于在本地和远程主机之间加密传输文件或目录。以下是详细用法和示例: 基本语法 scp [选项] 源文件 目标路径常用选项 选项描述-P 端口号指定 SSH 端口(默认…...