LlamaIndex 和 Elasticsearch Rerankers:无与伦比的简洁

作者:来自 Elastic Jeffrey Rengifo

了解如何从 LlamaIndex RankGPT reranker 迁移到 Elastic 内置的 semantic reranker。

Elasticsearch 拥有与行业领先的 Gen AI 工具和服务商的原生集成。查看我们的网络研讨会,了解如何突破 RAG 基础,或使用 Elastic Vector Database 构建可投入生产的应用。

为了为你的使用场景构建最佳搜索方案,可以立即开始免费云试用,或在本地机器上尝试 Elastic。


在本文中,我们将探讨如何使用 Llamaindex RankGPT Reranker 和 Elasticsearch 内置的 semantic reranker。Elastic 提供开箱即用的体验,在 retrievers pipeline 中部署和使用 reranker,无需额外操作,且具备可扩展性。

最初,在 Elasticsearch 中进行 rerank 需要多个步骤,但现在它已经直接集成进 retrievers pipeline:第一阶段运行搜索查询,第二阶段对结果进行 rerank,如下图所示:

什么是 rerank?

Rerank 是一种在检索出一组与用户查询相关的文档后,使用较昂贵的机制将最相关的文档推到结果顶部的过程。

有许多策略可以使用专门的 cross-encoder 模型对文档进行 rerank,比如 Elastic Rerank 模型,或 MS Marco 的 Cross encoder( cross-encoder/ms-marco-MiniLM-L6-v2)。另一种方法是使用 LLM 进行 rerank。Elastic Rerank 模型的一个优点是,它既可以作为 semantic search pipeline 的一部分使用,也可以作为独立工具改进现有的 BM25 打分系统。

一个 reranker 需要一组候选文档和用户查询,根据用户查询重新排序这些候选文档,从最相关到最不相关。

在本文中,我们将探索 Llamaindex RankGPT Reranker(即 RankGPT reranker 实现)和 Elastic Semantic Reranker,后者使用 Elastic Rerank 模型。

完整示例可在此 notebook 中查看。

步骤

  • Products 索引
  • 用户问题
  • LlamaIndex rerank
  • Elasticsearch semantic rerank

Products 索引

让我们基于用户的问题为笔记本电脑创建一个 reranker。如果用户是重度玩家,他们应该获得性能最强的机器。如果他们是学生,轻便的机器可能就可以了。

让我们从在 Notebook 中创建一些文档开始:

products = [{"name": "ASUS ROG Strix G16","description": "Powerful gaming laptop with Intel Core i9 and RTX 4070.","price": 1899.99,"reviews": 4.7,"sales": 320,"features": ["Intel Core i9","RTX 4070","16GB RAM","512GB SSD","165Hz Display",],},{"name": "Razer Blade 15","description": "Premium gaming laptop with an ultra-slim design and high refresh rate." ,"price": 2499.99,"reviews": 4.6,"sales": 290,"features": ["Intel Core i7","RTX 4060","16GB RAM","1TB SSD","240Hz Display",],},{"name": "Acer Predator Helios 300","description": "Affordable yet powerful gaming laptop with RTX graphics.","price": 1399.99,"reviews": 4.5,"sales": 500,"features": ["Intel Core i7","RTX 3060","16GB RAM","512GB SSD","144Hz Display",],},{"name": "MSI Stealth 17","description": "High-performance gaming laptop with a 17-inch display.","price": 2799.99,"reviews": 4.8,"sales": 200,"features": ["Intel Core i9", "RTX 4080", "32GB RAM", "1TB SSD", "4K Display"],},{"name": "Dell XPS 15","description": "Sleek and powerful ultrabook with a high-resolution display.","price": 2199.99,"reviews": 4.7,"sales": 350,"features": ["Intel Core i7","RTX 3050 Ti","16GB RAM","1TB SSD","OLED Display",],},{"name": "HP Omen 16","description": "Gaming laptop with a balanced price-to-performance ratio.","price": 1599.99,"reviews": 4.4,"sales": 280,"features": ["AMD Ryzen 7","RTX 3060","16GB RAM","512GB SSD","165Hz Display",],},{"name": "Lenovo Legion 5 Pro","description": "Powerful Ryzen-powered gaming laptop with high refresh rate.","price": 1799.99,"reviews": 4.6,"sales": 400,"features": ["AMD Ryzen 9","RTX 3070 Ti","16GB RAM","1TB SSD","165Hz Display",],},{"name": "MacBook Pro 16","description": "Apple's most powerful laptop with M3 Max chip.","price": 3499.99,"reviews": 4.9,"sales": 500,"features": ["Apple M3 Max","32GB RAM","1TB SSD","Liquid Retina XDR Display",],},{"name": "Alienware m18","description": "High-end gaming laptop with extreme performance.","price": 2999.99,"reviews": 4.8,"sales": 150,"features": ["Intel Core i9","RTX 4090","32GB RAM","2TB SSD","480Hz Display",],},{"name": "Samsung Galaxy Book3 Ultra","description": "Ultra-lightweight yet powerful laptop with AMOLED display.","price": 2099.99,"reviews": 4.5,"sales": 180,"features": ["Intel Core i7","RTX 4070","16GB RAM","512GB SSD","AMOLED Display",],},{"name": "Microsoft Surface Laptop 5","description": "Sleek productivity laptop with great battery life.","price": 1699.99,"reviews": 4.3,"sales": 220,"features": ["Intel Core i7", "16GB RAM", "512GB SSD", "Touchscreen"],},{"name": "Gigabyte AORUS 17","description": "Performance-focused gaming laptop with powerful cooling.","price": 1999.99,"reviews": 4.6,"sales": 250,"features": ["Intel Core i9","RTX 4070","16GB RAM","1TB SSD","360Hz Display",],},
]

用户问题

让我们定义一个将用于 rerank 结果的问题。

user_query = "Best laptops for gaming"

LlamaIndex rerank

安装依赖并导入包

我们安装执行 LlamaIndex 的 RankGPT reranker 和 Elasticsearch 文档检索所需的所有依赖。然后,我们将笔记本电脑数据加载到 ElasticsearchStore 中,ElasticsearchStore 是 LlamaIndex 对 Elasticsearch 向量数据库的抽象,并使用 VectorStoreIndex 类进行检索。

pip install llama-index-core llama-index-llms-openai rank-llm llama-index-postprocessor-rankgpt-rerank llama-index-vector-stores-elasticsearch elasticsearch -qimport os
import nest_asyncio
from getpass import getpassfrom llama_index.vector_stores.elasticsearch import ElasticsearchStore
from llama_index.core import (Document,VectorStoreIndex,QueryBundle,Settings,StorageContext,
)
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.postprocessor.rankgpt_rerank import RankGPTRerank
from llama_index.llms.openai import OpenAIfrom elasticsearch import Elasticsearchnest_asyncio.apply()

设置密钥:

os.environ["OPENAI_API_KEY"] = "OPENAI_API_KEY"
os.environ["ELASTICSEARCH_ENDPOINT"] = "ELASTIC_ENDPOINT"
os.environ["ELASTICSEARCH_API_KEY"] = "ELASTIC_API_KEY"INDEX_NAME = "products-laptops"

Elasticsearch 客户端

我们实例化 Elasticsearch 客户端,用于索引文档并针对我们的集群运行查询。

_client = Elasticsearch(os.environ["ELASTICSEARCH_ENDPOINT"],api_key=os.environ["ELASTICSEARCH_API_KEY"],
)

Mappings

我们将使用普通文本字段进行全文搜索,并创建一个 semantic_field,复制所有内容,以便运行 semantic 和 hybrid 查询。在 Elasticsearch 8.18+ 中,推理端点将自动部署。

# Creating mapping for the index
try:_client.indices.create(index=INDEX_NAME,body={"mappings": {"properties": {"metadata": {"properties": {"name": {"type": "text", "copy_to": "semantic_field"},"description": {"type": "text","copy_to": "semantic_field",},"price": {"type": "float",},"reviews": {"type": "float",},"sales": {"type": "integer"},"features": {"type": "keyword","copy_to": "semantic_field",},}},"semantic_field": {"type": "semantic_text"},"text": {"type": "text"},  # Field to store the text content for LlamaIndex"embeddings": {"type": "dense_vector", "dims": 512},}}},)print("index created successfully")
except Exception as e:print(f"Error creating inference endpoint: {e.info['error']['root_cause'][0]['reason'] }")

向 LlamaIndex 索引数据

从我们定义的产品数组创建 ElasticsearchStore。这将创建一个 Elasticsearch 向量存储,后续可以使用 VectorStoreIndex 进行访问。

document_objects = []es_store = ElasticsearchStore(es_url=os.environ["ELASTICSEARCH_ENDPOINT"],es_api_key=os.environ["ELASTICSEARCH_API_KEY"],index_name=INDEX_NAME,embedding_field="embeddings",text_field="text",
)storage_context = StorageContext.from_defaults(vector_store=es_store)for doc in products:text_content = f"""Product Name: {doc["name"]}Description: {doc["description"]}Price: ${doc["price"]}Reviews: {doc["reviews"]} starsSales: {doc["sales"]} units soldFeatures: {', '.join(doc["features"])}"""metadata = {"name": doc["name"],"description": doc["description"],"price": doc["price"],"reviews": doc["reviews"],"sales": doc["sales"],"features": doc["features"],}document_objects.append(Document(text=text_content, metadata=metadata))index = VectorStoreIndex([], storage_context=storage_context)for doc in document_objects:index.insert(doc)

LLM 设置

定义将作为 reranker 的 LLM:

Settings.llm = OpenAI(temperature=0, model="gpt-4.1-mini")
Settings.chunk_size = 512

Rerank 功能

我们现在创建一个函数,该函数先执行 retriever 从向量索引中获取与用户问题最相似的文档,然后在此基础上应用 RankGPTRerank 进行 rerank,最后返回重新排序后的文档。

def get_retrieved_nodes(query_str, vector_top_k=10, reranker_top_n=5, with_reranker=False
):query_bundle = QueryBundle(query_str)# configure retrieverretriever = VectorIndexRetriever(index=index,similarity_top_k=vector_top_k,)retrieved_nodes = retriever.retrieve(query_bundle)if with_reranker:# configure rerankerreranker = RankGPTRerank(llm=OpenAI(model="gpt-4.1-mini",temperature=0.0,api_key=os.environ["OPENAI_API_KEY"],),top_n=reranker_top_n,verbose=True,)retrieved_nodes = reranker.postprocess_nodes(retrieved_nodes, query_bundle)return retrieved_nodes

我们还创建了一个函数来格式化结果文档。

def visualize_retrieved_nodes(nodes):formatted_results = []for node in nodes:text = node.node.get_text()product_name = text.split("Product Name:")[1].split("\n")[0].strip()price = text.split("Price:")[1].split("\n")[0].strip()reviews = text.split("Reviews:")[1].split("\n")[0].strip()features = text.split("Features:")[1].strip()formatted_result = f"{price} - {product_name} ({reviews}) {features}"formatted_results.append(formatted_result)return formatted_results

不使用 rerank

我们先运行不带 rerank 的请求。

new_nodes = get_retrieved_nodes(query_str=user_query,vector_top_k=5,with_reranker=False,
)results = visualize_retrieved_nodes(new_nodes)print("\nTop 5 results without rerank:")
for idx, result in enumerate(results, start=1):print(f"{idx}. {result}")

答案:

Top 5 results without rerank:
1. $2499.99 - Razer Blade 15 (4.6 stars) Intel Core i7, RTX 4060, 16GB RAM, 1TB SSD, 240Hz Display
2. $1899.99 - ASUS ROG Strix G16 (4.7 stars) Intel Core i9, RTX 4070, 16GB RAM, 512GB SSD, 165Hz Display
3. $1999.99 - Gigabyte AORUS 17 (4.6 stars) Intel Core i9, RTX 4070, 16GB RAM, 1TB SSD, 360Hz Display
4. $2799.99 - MSI Stealth 17 (4.8 stars) Intel Core i9, RTX 4080, 32GB RAM, 1TB SSD, 4K Display
5. $2999.99 - Alienware m18 (4.8 stars) Intel Core i9, RTX 4090, 32GB RAM, 2TB SSD, 480Hz Display

使用 rerank

现在我们启用 rerank,它将执行相同的向量搜索,然后使用 LLM 对结果进行 rerank,应用 “Best laptops for gaming” 标准对前 5 个结果进行排序。我们可以看到细微差别,比如 Intel Core i7 处理器被排到最后,而 Alienware m18 升到了第 2 位。

new_nodes = get_retrieved_nodes(user_query,vector_top_k=5,reranker_top_n=5,with_reranker=True,
)results = visualize_retrieved_nodes(new_nodes)print("\nTop 5 results with reranking:")
for idx, result in enumerate(results, start=1):print(f"{idx}. {result}")

答案:

Top 5 results with reranking:
1. $1899.99 - ASUS ROG Strix G16 (4.7 stars) Intel Core i9, RTX 4070, 16GB RAM, 512GB SSD, 165Hz Display
2. $2999.99 - Alienware m18 (4.8 stars) Intel Core i9, RTX 4090, 32GB RAM, 2TB SSD, 480Hz Display
3. $2799.99 - MSI Stealth 17 (4.8 stars) Intel Core i9, RTX 4080, 32GB RAM, 1TB SSD, 4K Display
4. $1999.99 - Gigabyte AORUS 17 (4.6 stars) Intel Core i9, RTX 4070, 16GB RAM, 1TB SSD, 360Hz Display
5. $2499.99 - Razer Blade 15 (4.6 stars) Intel Core i7, RTX 4060, 16GB RAM, 1TB SSD, 240Hz Display

Elasticsearch 语义 rerank

推理 rerank 端点

创建一个推理端点,可以独立调用它来根据查询对候选列表进行 rerank,或作为 retriever 的一部分使用:

INFERENCE_RERANK_NAME = "my-elastic-rerank"try:_client.options(request_timeout=60, max_retries=3, retry_on_timeout=True).inference.put(task_type="rerank",inference_id=INFERENCE_RERANK_NAME,body={"service": "elasticsearch","service_settings": {"model_id": ".rerank-v1","num_threads": 1,"adaptive_allocations": {"enabled": True,"min_number_of_allocations": 1,"max_number_of_allocations": 4,},},},)print("Inference endpoint created successfully.")except Exception as e:print(f"Error creating inference endpoint: {e.info['error']['root_cause'][0]['reason'] }")

我们定义一个函数来执行搜索查询,然后解析返回的命中结果。

async def es_search(query):response = _client.search(index=INDEX_NAME, body=query)hits = response["hits"]["hits"]if not hits:return ""return hits

与 LlamaIndex 一样,我们创建一个函数来格式化结果文档。

def format_es_results(hits):formatted_results = []for hit in hits:metadata = hit["_source"]["metadata"]name = metadata.get("name")price = metadata.get("price")reviews = metadata.get("reviews")features = metadata.get("features")formatted_result = f"{price} - {name} ({reviews}) {features}"formatted_results.append(formatted_result)return formatted_results

语义查询

我们将从语义查询开始,返回与用户问题最相似的结果。

semantic_results = await es_search({"size": 5,"query": {"semantic": {"field": "semantic_field","query": user_query,}},"_source": {"includes": ["metadata",]},}
)semantic_formatted_results = format_es_results(semantic_results)print("Query results:")
for idx, result in enumerate(semantic_formatted_results, start=1):print(f"{idx}. {result}")

查询结果:

1. 2999.99 - Alienware m18 (4.8) ['Intel Core i9', 'RTX 4090', '32GB RAM', '2TB SSD', '480Hz Display']
2. 2799.99 - MSI Stealth 17 (4.8) ['Intel Core i9', 'RTX 4080', '32GB RAM', '1TB SSD', '4K Display']
3. 1599.99 - HP Omen 16 (4.4) ['AMD Ryzen 7', 'RTX 3060', '16GB RAM', '512GB SSD', '165Hz Display']
4. 1399.99 - Acer Predator Helios 300 (4.5) ['Intel Core i7', 'RTX 3060', '16GB RAM', '512GB SSD', '144Hz Display']
5. 1999.99 - Gigabyte AORUS 17 (4.6) ['Intel Core i9', 'RTX 4070', '16GB RAM', '1TB SSD', '360Hz Display']
rerank_results = await es_search({"size": 5,"_source": {"includes": ["metadata",]},"retriever": {"text_similarity_reranker": {"retriever": {"standard": {"query": {"semantic": {"field": "semantic_field","query": user_query,}}}},"field": "semantic_field","inference_id": INFERENCE_RERANK_NAME,"inference_text": "reorder by quality-price ratio","rank_window_size": 5,}},}
)rerank_formatted_results = format_es_results(rerank_results)print("Query results:")
for idx, result in enumerate(rerank_formatted_results, start=1):print(f"{idx}. {result}")

查询结果:

1. 1399.99 - Acer Predator Helios 300 (4.5) ['Intel Core i7', 'RTX 3060', '16GB RAM', '512GB SSD', '144Hz Display']2. 2999.99 - Alienware m18 (4.8) ['Intel Core i9', 'RTX 4090', '32GB RAM', '2TB SSD', '480Hz Display']3. 2799.99 - MSI Stealth 17 (4.8) ['Intel Core i9', 'RTX 4080', '32GB RAM', '1TB SSD', '4K Display']4. 1999.99 - Gigabyte AORUS 17 (4.6) ['Intel Core i9', 'RTX 4070', '16GB RAM', '1TB SSD', '360Hz Display']5. 1599.99 - HP Omen 16 (4.4) ['AMD Ryzen 7', 'RTX 3060', '16GB RAM', '512GB SSD', '165Hz Display']

在下表中,我们可以看到不同测试中的排名对比:

Laptop modelLlama (no rerank)Llama (with rerank)Elastic (no rerank)Elastic (with rerank)
Razer Blade 1515--
ASUS ROG Strix G1621--
Gigabyte AORUS 173454
MSI Stealth 174323
Alienware m185212
HP Omen 16--35
Acer Predator Helios 300--41

图例:破折号(-)表示该方法的前五名中未出现该项。

它保持了一致性,将高端笔记本如 Alienware m18 和 MSI Stealth 17 保持在前列 —— 就像 LlamaIndex rerank 一样 —— 同时实现了更好的性价比。

结论

Reranker 是提升搜索系统质量的强大工具,确保我们总能检索到每个用户问题中最重要的信息。

LlamaIndex 提供多种 reranker 策略,使用专门模型或 LLM。在最简单的实现中,你可以创建内存中的向量存储并本地保存文档,然后进行检索和 rerank,或者使用 Elasticsearch 作为持久化的向量存储。

另一方面,Elasticsearch 提供开箱即用的推理端点框架,可以将 reranker 作为检索管道的一部分或独立端点使用。你还可以选择 Elastic 自身、Cohere、Jina 或阿里巴巴等多种服务商,或部署任何兼容的第三方模型。在 Elasticsearch 的最简单实现中,你的文档和 rerank 模型都存储在 Elasticsearch 集群中,便于扩展。

原文:LlamaIndex and Elasticsearch Rerankers: Unbeatable simplicity - Elasticsearch Labs

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

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

相关文章

服务器分布式的作用都有什么?

服务器分布式是通过网络互联的架构方式,将一个系统中的多台服务器进行连接并协同工作,把一个服务器中的任务分发到不同的服务器节点上,以此来提高系统的性能、可靠性和可扩展性,下面,我们就来具体了解一下服务器分布式…

cocos打包web - ios设备息屏及前后台切换音频播放问题

切换前台时,延迟暂停与恢复能解决大部分ios平台前后台切换后音频无法恢复的问题; if (cc.sys.isBrowser && cc.sys.os cc.sys.OS_IOS && cc.sys.isMobile) {cc.game.on(cc.game.EVENT_GAME_INITED, () > {cc.game.on(cc.game.EVENT_…

期货Level2五档委托簿0.25秒高频分钟与日级历史行情数据解析

在金融数据分析领域,本地CSV格式的期货数据为研究人员和交易者提供了丰富的原始信息。本文将介绍如何有效利用不同类型的期货数据,包括分钟数据、高频Tick、五档Level2等,并阐述数据处理与分析方法。一、数据概述期货分钟数据通常包含时间戳、…

原生html+js+jq+less 实现时间区间下拉弹窗选择器

html弹窗<div class"popupForm" id"popupForm10"><div class"pop-box"><i class"iconfont icon-quxiao cancel" onclick"toggleForm(10)"></i><div class"title">选择时间</div…

基于逻辑回归、随机森林、梯度提升树、XGBoost的广告点击预测模型的研究实现

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主一、项目背景与目标二、数据概览与预处理2.1 数据导入与初步分析2.2 缺失值与重复值处理2.3 目标变量分布三、探索性数据分析&#xff08;EDA&#xff09;3.1 数值变量分布3.2 类别变量分布3…

Docker学习相关视频笔记(三)

参考视频地址&#xff1a;40分钟的Docker实战攻略&#xff0c;一期视频精通Docker。感谢作者的辛苦付出。 本文是Docker学习相关视频笔记&#xff08;一&#xff09;与Docker学习相关视频笔记&#xff08;二&#xff09;的后续 4、Docker命令 4.8 Docker 网络 4.8.1 桥接模式…

RK3568笔记九十五:基于FFmpeg和Qt实现简易视频播放器

若该文为原创文章,转载请注明原文出处。 一、开发环境 1、硬件:正点原子ATK-DLRK3568 2、QT: 5.14.2 3、系统: buildroot 二、实现功能 使用ffmpeg音视频库软解码实现视频播放器 支持打开多种本地视频文件(如mp4,mov,avi等) 视频播放支持实时开始,暂停,继续播放 采…

【LLM】Kimi-K2模型架构(MuonClip 优化器等)

note Kimi K2 的预训练阶段使用 MuonClip 优化器实现万亿参数模型的稳定高效训练&#xff0c;在人类高质量数据成为瓶颈的背景下&#xff0c;有效提高 Token 利用效率。MuonClip Optimizer优化器&#xff0c;解决随着scaling up时的不稳定性。Kimi-K2 与 DeepSeek-R1 架构对比…

Vue基础(25)_组件与Vue的内置关系(原型链)

了解组件与Vue的内置关系前&#xff0c;我们需要回顾js原型链基础知识&#xff1a;1、构造函数构造函数是一种特殊的方法&#xff0c;用于创建和初始化一个新的对象。它们是使用 new 关键字和函数调用来创建对象的。构造函数实际上只是一个普通的函数&#xff0c;通常以大写字母…

kafka中生产者的数据分发策略

在 Kafka 中&#xff0c;生产者的数据分发策略决定了消息如何分配到主题的不同分区。在 Python 中&#xff0c;我们通常使用 kafka-python 库来操作 Kafka&#xff0c;下面详细讲解其数据分发策略及实现代码。一、Kafka 生产者数据分发核心概念分区&#xff08;Partition&#…

【动态规划算法】斐波那契数列模型

一. (1137.)第N个泰波那契数(力扣)1.1动态规划的算法流程 对于初学者来讲学术上的概念晦涩难懂,将用通俗易懂的方式带来感性的理解. 1.状态表示dp表(一维或二维数组)里面的值所表示的含义 从哪获取? 1.题目要求,如本题 2.题目没有明确说明的情况下做题经验的累积 3.分析问题的…

Odoo 18 PWA 全面掌握:从架构、实现到高级定制

本文旨在对 Odoo 18 中的渐进式网络应用&#xff08;Progressive Web App, PWA&#xff09;技术进行一次全面而深入的剖析。本文的目标读者为 Odoo 技术顾问、高级开发人员及解决方案架构师&#xff0c;旨在提供一份权威的技术参考&#xff0c;以指导 PWA 相关的实施项目与战略…

Binary Classifier Optimization for Large Language Model Alignment

2025.acl-long.93.pdfhttps://aclanthology.org/2025.acl-long.93.pdf 1. 概述 在生产环境中部署大型语言模型(LLMs)时,对齐LLMs一直是一个关键因素,因为预训练的LLMs容易产生不良输出。Ouyang等人(2022)引入了基于人类反馈的强化学习(RLHF),该方法涉及基于单个提示的…

在CentOS上以源码编译的方式安装PostgreSQL

下载目录&#xff1a;PostgreSQL: File Browser&#xff0c;我使用的PostgreSQLv17.5。Linux系统&#xff1a;CentOS Linux release 7.9.2009 (Core) 安装依赖包和工具链&#xff08;必须且重要&#xff01;&#xff09; yum groupinstall "Development Tools" -y yu…

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现沙滩小人检测识别(C#代码UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现沙滩小人检测识别&#xff08;C#代码UI界面版&#xff09;工业相机使用YoloV8模型实现沙滩小人检测识别工业相机通过YoloV8模型实现沙滩小人检测识别的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换…

Ubuntu服务器安装与运维手册——操作纯享版

本手册汇总了从硬件预配置、Ubuntu 安装、网络与服务配置&#xff0c;到 Windows/macOS 访问共享、MySQL 初始化的完整流程&#xff0c;便于今后运维参考。 目录 环境与硬件概览BIOS/UEFI 设置制作与启动安装介质Ubuntu 24.04 LTS 安装流程静态 IP 配置&#xff08;netplan&am…

【Nginx】Nginx进阶指南:解锁代理与负载均衡的多样玩法

在Web服务的世界里&#xff0c;Nginx就像是一位多面手&#xff0c;它不仅能作为高性能的Web服务器&#xff0c;还能轻松胜任代理服务器、负载均衡器等多种角色。今天&#xff0c;我们就来深入探索Nginx的几个常见应用场景&#xff0c;通过实际案例和关键配置解析&#xff0c;带…

原创-锐能微82xx系列电能计量芯片软件驱动开发与精度校准流程完全指南

引言 电能计量芯片的软件驱动开发是整个计量系统的核心&#xff0c;它直接决定了计量精度、系统稳定性和功能完整性。锐能微82xx系列电能计量芯片凭借其强大的数字信号处理能力和丰富的功能特性&#xff0c;为开发者提供了灵活的软件开发平台。本文将详细介绍82xx系列芯片的软…

如何使用 Apache Ignite 作为 Spring 框架的缓存(Spring Cache)后端

这份文档是关于 如何使用 Apache Ignite 作为 Spring 框架的缓存&#xff08;Spring Cache&#xff09;后端&#xff0c;实现方法级别的缓存功能。 这和前面我们讲的 Spring Data Ignite 是两个不同的概念。我们先明确区别&#xff0c;再深入理解。&#x1f501; 一、核心区别…

Android 超大图片、长图分割加载

在Android开发中&#xff0c;处理大图片的加载是一个常见且重要的问题&#xff0c;尤其是在需要显示高分辨率图片时。大图片如果不正确处理&#xff0c;可能会导致内存溢出或应用性能下降。下面是一些常用的策略和技术来优化大图片的加载&#xff1a;1. 使用图片压缩库a. Glide…