【搜索】【推荐】大 PK

引言

在当今信息爆炸的时代,如何从海量数据中精准地为用户推荐最相关的内容成为了科技领域的关键挑战。搜推技术作为推荐系统的核心组件,扮演着至关重要的角色。本文将深入探讨这两种技术背后的方法论,剖析它们各自面临的难点,并介绍常见的应对策略。


一、整体对比

在这里插入图片描述

对比维度推荐系统搜索系统
用户行为模式用户被动接收信息,系统基于历史行为主动推送内容。用户主动发起查询,明确表达需求。
信息获取方式通过分析用户的行为数据(如点击、购买记录)和内容特征进行预测性推荐。依赖于用户提供的查询词,结合索引和文档内容进行直接匹配。
核心目标提高用户参与度和满意度,增加平台粘性和消费转化率。确保返回的结果能够准确满足用户的查询意图,强调相关性和精确性。
技术侧重点强调特征工程、模型训练、在线学习,常用算法包括协同过滤、矩阵分解、深度学习等。侧重于信息检索、文本处理、语义理解等领域,涉及倒排索引、TF-IDF/BM25评分机制等。
用户体验设计提供沉浸式体验,让用户沉浸在推荐内容中,减少跳出率。界面设计简单直观,便于用户快速找到所需信息,支持多种查询方式。
数据利用大量依赖用户的行为数据,挖掘长尾商品或内容,发现小众但有价值的资源。更多依赖于文档的结构化信息进行匹配,捕捉当前热门话题或流行趋势。
挑战与难点冷启动问题、过拟合风险(过于依赖历史行为导致推荐结果狭窄)。查询解析难度(简短且模糊)、多义性处理、上下文依赖。
个性化程度高度个性化,基于用户画像提供定制化推荐。较少个性化,主要基于查询关键词返回结果,个性化调整有限。
实时性要求实时更新用户画像和推荐列表,响应用户最新行为。快速响应用户查询,对新加入的商品或信息及时更新索引。
反馈机制依赖隐式反馈(如停留时间、滚动深度)评估推荐效果。依赖显式反馈(如用户点击、停留时间)评估查询结果的相关性。
多样性与惊喜尝试探索新的兴趣点,为用户提供多样化的选择。主要关注精准匹配,较少尝试探索用户的潜在兴趣。

二、推荐

1. 方法论

在推荐系统中,完成一个完整的推荐任务通常涉及一系列的技术和方法论,这些技术和方法共同构成了一个复杂但高效的推荐技术pipeline:

1.1 数据收集与预处理

技术:
  • 日志记录:捕捉用户行为(点击、浏览、购买等)。
  • 特征提取:从文本、图像、视频等多种形式的数据中提取有用信息。
  • 数据清洗:去除噪声数据,处理缺失值。
  • 分词与去停用词:对于文本数据进行分词,并移除无意义词汇。
  • 归一化与标准化:将不同尺度的数据转换到同一尺度。
方法论:
  • ETL流程:提取(Extract)、转换(Transform)、加载(Load)以准备数据供后续使用。
  • 数据仓库构建:建立高效存储和查询结构,如Hadoop、Hive等。

1.2 用户画像与物品画像构建

技术:
  • 用户聚类:基于用户行为数据进行聚类分析,识别不同的用户群体。
  • 物品分类:根据物品属性进行分类,便于后续匹配。
  • 标签系统:为用户和物品打上描述性标签,方便快速检索。
方法论:
  • 协同过滤:通过用户之间的相似度或物品之间的相似度构建画像。
  • 内容分析:利用物品的内容特征(如标签、描述)进行画像构建。

1.3 召回候选集生成

技术:
  • 基于内容的推荐:根据用户历史偏好和物品特征匹配类似物品。
  • 协同过滤:基于用户行为相似性和物品共现模式推荐相关物品。
  • 关联规则挖掘:发现物品之间的关联关系,推荐经常一起出现的商品。
  • 矩阵分解:如SVD、ALS,用于低维表示用户和物品间的潜在关系。
  • 深度学习模型:如神经协同过滤(NCF)、Wide & Deep模型等。
方法论:
  • 多路召回:结合多种召回策略,提高覆盖范围。
  • 冷启动解决方案:针对新用户或新物品设计特殊召回机制。

1.4 重排优化

技术:
  • 排序模型:如LR、GBDT、XGBoost、LightGBM等机器学习模型。
  • 深度学习排序:如DIN、DIEN等专门设计的深度推荐模型。
  • 点击率预测(CTR):估计用户点击某个推荐项的概率。
  • 多样性与新颖性:引入额外指标确保推荐结果多样化且具有新鲜感。
方法论:
  • 多目标优化:平衡多个目标(如CTR、转化率、多样性),找到最佳排序方案。
  • 探索与利用:既提供符合用户当前兴趣的内容,也尝试探索新的兴趣点。

1.5 个性化调整

技术:
  • 用户上下文感知:考虑时间、地点等因素影响用户的即时需求。
  • 实时反馈:根据用户的即时行为动态调整推荐列表。
  • 强化学习:训练智能体在与环境互动中不断优化推荐策略。
方法论:
  • A/B测试:通过实验验证不同推荐策略的效果。
  • 用户调查与反馈收集:定期了解用户的需求和满意度。

1.6 评估与迭代

技术:
  • 离线评估:使用历史数据评估模型性能,如AUC、Precision@k等。
  • 在线评估:部署后通过实际用户行为数据评估效果。
  • 日志分析:持续监控系统运行情况,发现问题并及时改进。
方法论:
  • 持续集成与部署(CI/CD):自动化测试和部署流程,快速迭代和发布新功能。
  • 模型更新机制:定期重新训练模型,保持其最新状态。

2. 难点及其应对策略

推荐技术的主要难点涉及多个方面,从数据稀疏性到冷启动问题,再到如何平衡推荐的多样性和准确性。以下是推荐技术中常见的主要难点及其应对策略:

2.1 数据稀疏性

难点:
  • 用户与商品之间的交互数据非常稀疏,导致基于关联分析的算法效果不佳。
  • 稀疏的数据使得特征提取和模型训练变得更加困难。
应对策略:
  • 扩散算法:从一阶关联扩展到二阶或更高阶关联,提高相似性的分辨率。
  • 默认打分:添加一些默认的打分来填补数据空缺。
  • 矩阵分解:使用低秩矩阵分解(如SVD)处理稀疏矩阵,捕捉潜在特征。
  • 多模态融合:结合文本、图像、视频等多种类型的数据,增加信息维度。

2.2 冷启动问题

难点:
  • 新用户或新物品缺乏足够的历史数据,难以进行有效的推荐。
  • 对于完全新的用户或物品,没有任何行为记录可利用。
应对策略:
  • 内容特征分析:利用物品的内容特征(如标签、描述)进行初步推荐。
  • 基于规则的推荐:为新用户提供一些通用的热门或趋势商品。
  • 协同过滤:利用其他用户的行为数据推断新用户的潜在兴趣。
  • 标签系统:通过标签系统获取用户或物品的额外信息,辅助推荐。

2.3 长尾内容推荐

难点:
  • 不太热门但具有特定用户群体需求的物品难以被发现和推荐。
  • 长尾内容的用户行为数据较少,特征提取和兴趣匹配更加困难。
应对策略:
  • 探索与利用平衡:既提供符合用户当前兴趣的内容,也尝试探索新的兴趣点。
  • 多样性与惊喜:确保推荐结果不仅满足用户的预期,还能带来意外的惊喜。
  • 混合推荐算法:结合多种推荐算法,综合考虑热门和小众内容。

2.4 推荐结果的多样性

难点:
  • 基于内容的推荐方法倾向于推荐与用户历史行为相似的物品,可能导致推荐结果的多样性不足。
  • 过度关注精确性可能导致推荐过于狭窄,忽略了用户的潜在兴趣。
应对策略:
  • 多样化排序:在排序阶段引入多样性指标,避免过度集中于某些类型的物品。
  • 个性化调整:根据用户的偏好动态调整推荐列表,确保既有熟悉的内容也有新颖的选择。
  • 多目标优化:同时优化推荐的准确性和多样性,寻找两者之间的最佳平衡点。

2.5 算法的可解释性

难点:
  • 推荐系统的复杂性和数据多样性使得实现可解释的推荐结果具有挑战性。
  • 用户需要理解并信任推荐系统的决策过程。
应对策略:
  • 透明化推荐机制:向用户展示推荐的原因和依据,例如“因为您喜欢过类似的物品”。
  • 简化模型结构:采用更易于解释的模型(如决策树、线性模型),并在必要时牺牲部分性能。
  • 后处理解释:使用事后解释工具(如LIME、SHAP)帮助解释黑盒模型的预测结果。

2.6 大数据处理与增量计算

难点:
  • 数据规模庞大,处理速度慢且资源消耗大。
  • 模型训练时间长,难以实现实时更新。
应对策略:
  • 分布式计算框架:使用Spark、Hadoop等分布式计算框架加速大规模数据处理。
  • 增量学习:设计能够快速适应新增数据的算法,减少全局重新训练的需求。
  • 自适应算法:开发不随时间累积误差的自适应算法,保证长期稳定运行。

2.7 用户行为模式挖掘

难点:
  • 深入挖掘用户的行为模式以提高推荐效果。
  • 不同用户的行为模式差异显著,难以统一建模。
应对策略:
  • 行为序列分析:分析用户的行为序列,识别出不同阶段的兴趣变化。
  • 时空统计特性:考虑用户行为的时间和空间因素,设计针对性的应用场景。
  • 混合算法:通过参数调节推荐结果的多样性和热门程度,适应不同类型用户的需求。

2.8 推荐系统的脆弱性

难点:
  • 推荐系统可能受到恶意攻击的影响,导致推荐结果失真或偏向特定商品。
  • 系统需要具备一定的鲁棒性,防止被操纵。
应对策略:
  • 异常检测:通过分析用户行为模式提前判断并阻止恶意行为进入系统。
  • 多源验证:结合来自不同来源的数据进行交叉验证,降低单一数据源的影响。
  • 强化学习:应用强化学习方法使系统能够自我调整,抵御攻击。

三、搜索

1. 方法论

在搜索技术中,完成一个完整的搜索任务通常涉及一系列的技术和方法论,这些技术和方法共同构成了一个复杂但高效的搜索技术pipeline。以下是全面列举的搜索技术及方法论:

1.1 数据预处理与索引构建

技术:
  • 文本清理:去除HTML标签、特殊字符等。
  • 分词:将文本分割成有意义的词汇单元(如中文分词)。
  • 去停用词:移除常见的无意义词汇(如“的”、“是”)。
  • 词干提取/词形还原:将词汇归一化到其基本形式(如复数变单数)。
  • 实体识别:识别并标注文本中的特定实体(如人名、地名)。
  • 倒排索引:为每个词汇创建包含该词汇的所有文档列表。
方法论:
  • 信息检索模型:基于布尔逻辑或向量空间模型构建索引结构。
  • 分布式索引:使用分布式文件系统(如HDFS)和索引引擎(如Elasticsearch、Solr)进行大规模数据索引。

1.2 查询解析与扩展

技术:
  • 自然语言处理(NLP):分词、词性标注、命名实体识别(NER)、语义角色标注(SRL)等。
  • 深度学习模型:预训练的语言模型(如BERT、RoBERTa)用于捕捉深层次语义信息。
  • 同义词扩展:通过同义词库或词嵌入模型(如Word2Vec、GloVe)扩展查询关键词。
  • 查询意图分类:使用机器学习模型对查询进行分类,理解用户意图(如导航型、信息型、事务型)。
方法论:
  • 查询改写:优化用户的原始查询以提高召回率和精确度。
  • 上下文感知:结合用户的历史行为和其他上下文信息推测用户的实际需求。

1.3 相关性评估与排序

技术:
  • TF-IDF/BM25评分机制:计算每个关键词在文档中的重要性。
  • 向量相似度:使用余弦相似度或其他距离度量方法比较查询向量与文档向量之间的相似度。
  • 点击模型:基于用户点击行为预测文档的相关性。
  • 个性化调整:利用用户画像和协同过滤算法进一步调整结果顺序。
方法论:
  • 多级排序:先粗略筛选大量候选文档,再通过更精细的模型进行二次排序。
  • 特征工程:从文档内容、用户行为等多个角度提取有用特征,作为排序模型的输入。

1.4 实时更新与性能优化

技术:
  • 增量更新:每当有新的商品加入或现有商品信息变化时,及时更新索引。
  • 缓存机制:对于热门查询设置缓存机制,减少重复计算;提前加载可能需要的数据。
  • 异步更新:通过异步任务队列实现索引的增量更新,不影响在线服务的性能。
方法论:
  • 分布式架构:将索引分布在多个节点上,确保系统的可扩展性和容错性。
  • 负载均衡:使用负载均衡器分配流量,保证高并发访问下的稳定响应。

1.5 用户体验与反馈循环

技术:
  • A/B测试:通过实验对比不同版本的效果,选择最优方案。
  • 用户调查与反馈收集:定期收集用户的意见和建议,了解他们的需求和痛点。
  • 日志分析:分析用户的搜索日志,发现常见的问题和改进方向。
方法论:
  • 持续集成与部署(CI/CD):自动化测试和部署流程,快速迭代和发布新功能。
  • 用户行为分析:基于用户的行为数据不断优化搜索结果,提升用户体验。

1.6 冷启动与长尾效应处理

技术:
  • 内容特征分析:利用物品的内容特征(如标签、描述)进行初步推荐。
  • 基于规则的推荐:为新用户提供一些通用的热门或趋势商品。
  • 协同过滤:利用其他用户的行为数据推断新用户的潜在兴趣。
方法论:
  • 探索与利用平衡:既提供符合用户当前兴趣的内容,也尝试探索新的兴趣点。
  • 多样性与惊喜:确保推荐结果不仅满足用户的预期,还能带来意外的惊喜。

2. 难点及其应对策略

搜索技术面临的难点多种多样,涵盖了从用户查询理解到结果排序等多个方面。以下是搜索技术的主要难点及其应对策略:

2.1 用户查询解析的挑战

难点:
  • 查询简短且模糊:用户的查询往往是简短的几个词,难以准确捕捉其意图。
  • 多义性问题:同一个词汇可能有多种含义(如“苹果”可以指水果或品牌)。
  • 语境依赖:某些查询需要上下文信息才能正确理解。
应对策略:
  • 自然语言处理(NLP):利用分词、词性标注、命名实体识别(NER)、语义角色标注(SRL)等技术深入理解查询。
  • 深度学习模型:使用预训练的语言模型(如BERT、RoBERTa)捕捉查询背后的深层次语义信息。
  • 上下文感知:结合用户的历史行为数据和其他上下文信息(如地理位置、时间戳),推测用户的实际需求。
from transformers import BertTokenizer, BertModel# 加载预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')def get_embedding(text):inputs = tokenizer(text, return_tensors="pt")outputs = model(**inputs)# 取出最后一层的平均池化作为句子嵌入sentence_embedding = outputs.last_hidden_state.mean(dim=1).squeeze()return sentence_embedding.detach().numpy()query_vector = get_embedding("无线耳机")

2.2 相关性评估与排序

难点:
  • 精确匹配与语义相似性的权衡:既要考虑关键词的直接匹配,又要考虑语义上的相似性。
  • 长尾效应:热门商品容易被过度曝光,而小众但有价值的资源可能被忽略。
应对策略:
  • TF-IDF/BM25评分机制:计算每个关键词在文档中的重要性,给权重较高的文档更高的分数。
  • 向量相似度搜索:使用近似最近邻算法(如Faiss、Annoy)快速找到最接近查询向量的商品。
  • 个性化调整:基于用户的浏览历史、购买行为等信息,进一步调整召回结果的顺序,使推荐更加个性化。
import mathdef bm25_score(query_terms, document_term_frequencies, avg_doc_len, k1=1.2, b=0.75):scores = {}for doc_id, term_freqs in document_term_frequencies.items():score = 0doc_len = sum(term_freqs.values())for term in query_terms:if term in term_freqs:idf = math.log((len(document_term_frequencies) + 1) / (1 + len([doc for doc in document_term_frequencies if term in doc])))tf = term_freqs[term]score += idf * ((tf * (k1 + 1)) / (tf + k1 * (1 - b + b * (doc_len / avg_doc_len))))scores[doc_id] = scorereturn scoresdocument_term_frequencies = {001: {"真无线": 1, "耳机": 1, "苹果": 1},002: {"真无线": 1, "耳机": 1, "索尼": 1},003: {"真无线": 1, "耳机": 1, "捷波朗": 1}
}avg_doc_len = sum(len(freqs) for freqs in document_term_frequencies.values()) / len(document_term_frequencies)
scores = bm25_score(query_terms, document_term_frequencies, avg_doc_len)
sorted_scores = sorted(scores.items(), key=lambda item: item[1], reverse=True)
print(sorted_scores)  # 输出按分数排序的文档ID及得分

2.3 实时更新与性能优化

难点:
  • 增量更新:每当有新的商品加入或现有商品信息变化时,及时更新索引。
  • 高并发访问:在高峰期支持大量用户的并发查询请求。
应对策略:
  • 分布式索引:将索引分布在多个节点上,确保系统的可扩展性和容错性。
  • 缓存机制:对于热门查询,设置缓存机制,减少重复计算;同时可以根据预测提前加载可能需要的数据,提高响应速度。
  • 异步更新:通过异步任务队列实现索引的增量更新,不影响在线服务的性能。

2.4 冷启动问题

难点:
  • 新用户或新物品缺乏足够的历史数据,导致推荐或搜索结果不准确。
应对策略:
  • 内容特征分析:利用物品的内容特征(如标签、描述)进行初步推荐。
  • 基于规则的推荐:为新用户提供一些通用的热门或趋势商品。
  • 协同过滤:利用其他用户的行为数据来推断新用户的潜在兴趣。

2.5 用户体验与反馈循环

难点:
  • 提供直观且有效的搜索界面,让用户能够快速找到所需信息。
  • 持续改进系统性能:根据用户的点击行为、停留时间等反馈不断优化搜索结果。
应对策略:
  • A/B测试:通过实验对比不同版本的效果,选择最优方案。
  • 用户调查与反馈收集:定期收集用户的意见和建议,了解他们的需求和痛点。
  • 日志分析:分析用户的搜索日志,发现常见的问题和改进方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503978.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态大模型初探索:通过ollama部署多模态大模型

文章目录 前言模型下载 前言 今天和同事聊天,聊到多模态大模型,感觉可以作为2025年的一个新的探索方向。希望和大家一起学习,一起进步。 今天也是尝试了我能想到的最基本最快速地本地部署多模态大模型的方式,那便是使用ollama。…

maven如何从外部导包

1.找到你项目的文件位置,将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮

流媒体内网穿透/组网/网络映射EasyNTS上云网关启动失败如何解决?

在当今的网络视频监控和远程通信领域,设备的远程访问和数据共享需求日益增长。通过EasyNTS平台,用户无需开放内网端口,即可实现内网应用的外网访问,极大地简化了网络配置和维护工作。 EasyNTS上云网关的主要作用是解决异地视频共…

力扣刷题:数组OJ篇(下)

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 1.轮转数组(1)题目描述…

flink cdc oceanbase(binlog模式)

接上文:一文说清flink从编码到部署上线 环境:①操作系统:阿里龙蜥 7.9(平替CentOS7.9);②CPU:x86;③用户:root。 预研初衷:现在很多项目有国产化的要求&#…

【Web】0基础学Web—事件对象、事件委托(事件代理)——星级评论案例

0基础学Web—事件对象、事件委托(事件代理)——星级评论案例 事件对象关闭鼠标右键的点击事件关闭鼠标滚轮的事件点击的目标对象点击鼠标的左键0 滚轮1 右键2获得被点击的节点的名称或取相对于浏览器左上角的距离(会受页面滚动条的影响&#…

el-table 多级表头

1.结构 <el-table:data"tableData"border:height"700"style"width: 100% !important; overflow: auto":header-cell-style"{ background: #becee1, color: #333 }":cell-style"{ padding: 5px }"><template v-for…

计算机网络基础——网络协议

""" 资料的搬运工 """ 网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。 1、网络层次划分 OSI七层网络模型 1&#xff09;物理层 确保原始的数据可在各种物理媒体上传输 中继器&#xff08;放大器&#xff09;和集…

源代码编译安装X11及相关库、vim,配置vim(2)

一、编译安装vim 编译时的cofigure选项如下.只有上一步的X11的包安装全了&#xff08;具体哪些是必须的&#xff0c;哪些是多余的没验证&#xff09;&#xff0c;configure才能认为X的库文件和头文件是可以用的。打开多个编程语言的支持特性。 ./configure --prefixpwd/mybui…

Numpy数组的属性

NumPy中最重要的一个特点就是其n维数组对象&#xff0c;即ndarray(别名array)对象&#xff0c;该对象具有矢量算术能力和复杂的广播能力&#xff0c;可以执行一些科学计算。不同于Python内置的数组类型&#xff0c; array对象拥有对高维数组的处理能力&#xff0c;这也是数值计…

如何隐藏 Nginx 版本号 并自定义服务器信息,提升安全性

&#x1f3e1;作者主页&#xff1a;点击&#xff01; Nginx-从零开始的服务器之旅专栏&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01;点击&#xff01;点击&#xff01; ⏰️创作时间&#xff1a;2025年1月8日8点14分…

ProtonBase 荣获 Datafun “数智技术最佳探索奖”

2024年&#xff0c;数智领域迎来技术创新的高峰&#xff0c;尖端技术和用户案例呈现井喷式增长&#xff0c;成为引领时代潮流的关键词。DataFun 社区作为数智前沿阵地&#xff0c;汇聚全球数智精英&#xff0c;推动技术革新和知识共享&#xff0c;助力技术加速发展。 由 DataFu…

用豆包MarsCode IDE打造精美数据大屏:从零开始的指南

原标题&#xff1a;用豆包MarsCode IDE&#xff0c;从0到1画出精美数据大屏&#xff01; 豆包MarsCode IDE 是一个云端 AI IDE 平台&#xff0c;通过内置的 AI 编程助手&#xff0c;开箱即用的开发环境&#xff0c;可以帮助开发者更专注于各类项目的开发。 作为一名前端开发工…

/src/utils/request.ts:axios 请求封装,适用于需要统一处理请求和响应的场景

文章目录 数据结构解释1. 核心功能2. 代码结构分析请求拦截器响应拦截器 3. 改进建议4. 总结 console.log(Intercepted Response:, JSON.stringify(response));{"data": {"code": 0,"msg": "成功","data": {"id":…

LabVIEW调用不定长数组 DLL数组

在使用 LabVIEW 调用 DLL 库函数时&#xff0c;如果函数中的结构体包含不定长数组&#xff0c;直接通过 调用库函数节点&#xff08;Call Library Function Node&#xff09; 调用通常会遇到问题。这是因为 LabVIEW 需要与 DLL 中的数据结构完全匹配&#xff0c;而包含不定长数…

课题推荐——基于GPS的无人机自主着陆系统设计

关于“基于GPS的无人机自主着陆系统设计”的详细展开&#xff0c;包括项目背景、具体内容、实施步骤和创新点。如需帮助&#xff0c;或有导航、定位滤波相关的代码定制需求&#xff0c;请点击文末卡片联系作者 文章目录 项目背景具体内容实施步骤相关例程MATLAB例程python例程 …

深入Android架构(从线程到AIDL)_18 SurfaceView的UI多线程02

目录 2、 使用SurfaceView画2D图 范例一 设计GameLoop(把小线程移出来) 范例二 2、 使用SurfaceView画2D图 范例一 以SurfaceView绘出Bitmap图像设计SpriteView类别来实作SurfaceHolder.Callback接口首先来看个简单的程序&#xff0c;显示出一个Bitmap图像。这个图像就构…

Redis Java 集成到 Spring Boot

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;Redis &#x1f4da;本系列文章为个人学习笔…

鸿蒙开发(29)弹性布局 (Flex)

概述 弹性布局&#xff08;Flex&#xff09;提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等。 容器默认存在主轴与交叉轴&#xff0c;子元素默认沿主轴排列&#xff0c;子元素在主轴方…

LangChain速成课程_构建基于OpenAI_LLM的应用

思维导图 什么是LangChain 特点描述基于语言模型LangChain 是一个专为语言模型&#xff08;如 GPT-4&#xff09;设计的开发框架。模型输入/输出支持灵活的模型输入和输出处理&#xff0c;可以适应各种不同的应用需求。数据感知能够将语言模型与其他数据源&#xff08;如维基百…