作者:来自 Elastic Serena Chou 及 Max Hniebergall

了解 Cohere reranking,如何将 Cohere 的 Rerank 3 模型与 Elasticsearch 的 open inference API 一起使用,以及 Elastic 在语义 reranking 方面的路线图。

:原文在 2024 年 4 月发布。在文中提到的 retrievers 检索器早已经在后续的版本中发布。

Elasticsearch 原生集成了业界领先的生成式 AI 工具和服务提供商。你可以查看我们的网络研讨会,了解如何超越 RAG 基础知识,或如何构建可用于生产的 Elastic 向量数据库应用。

要为你的使用场景构建最佳搜索解决方案,现在就开始免费云试用,或者在本地机器上尝试 Elastic。

Elasticsearch Open Inference API 新增对 Cohere 的 Rerank 3 模型支持

Cohere 的 Rerank 3 模型(rerank-english-v3.0)现已通过其 Rerank 端点提供,而 Elasticsearch 是唯一在 Cohere Rerank 3 发布中集成支持的向量数据库,已通过其开放 Inference API 无缝支持该模型。

简而言之,什么是 reranking(重排序)?
Reranker 会对现有向量搜索或关键词搜索系统返回的 “前 n 个结果” 进行语义增强,不需要更换模型或更改数据索引,就能显著提升这些结果的相关性,使其更适合作为上下文传递给大语言模型(LLMs)。

Elastic 最近与 Cohere 合作,使 Elasticsearch 开发者能轻松使用 Cohere 的 embeddings(在 Elasticsearch 8.13 和 Serverless 中支持)。将 Cohere 的 rerank 能力引入其中,是对结果精细优化的自然演进。

Cohere Rerank 3 优势:

  • 可直接集成到现有 Elasticsearch 检索流程中,无需大改代码。

  • 支持将来自任何第三方模型的向量 embedding 与 Elastic 一起使用。

  • 在 Elastic 强大的向量数据库和混合搜索能力(hybrid search)支持下,Rerank 3 能进一步提升检索结果质量。

Elastic 的混合搜索方法

在实施 RAG( Retrieval Augmented Generation )时,检索和重排序的策略是客户用来支撑 LLMs 并获得准确结果的关键优化。多年来,客户一直信任 Elastic 来处理他们的私有数据,并能够利用多种第一阶段的检索算法(例如 BM25 /关键词、稠密和稀疏向量检索)。更重要的是,大多数真实世界的搜索用例都受益于混合搜索,而我们从 Elasticsearch 8.9 起就已支持这一功能。

对于中间阶段的重排序,我们也提供对 Learning To Rank 和查询重评分的原生支持。在本次演示中,我们将重点介绍 Cohere 的最后阶段重排序功能,并将在后续的博客中介绍 Elastic 的中间阶段重排序能力。

Cohere 的重排序方法

Cohere 的新 Rerank 模型在测试中表现出色。Cohere 报告指出,重排序模型在处理较长上下文时尤其有效。在为密集向量检索准备文档时,由于模型的 token 限制,进行分块是必须的。然而,使用 Cohere 的重排序方法时,基于整个文档上下文而非某一具体分块内容,可以获得显著的效果提升。Rerank 支持 4k token 限制,从而能输入更多上下文,充分发挥该模型在 Elasticsearch 搜索系统中带来的相关性优势。

(i) 基于 BEIR 基准的通用检索;准确率以 nDCG@10 衡量

(ii) 基于 6 个常见代码基准的代码检索;准确率以 nDCG@10 衡量

(iii) 基于 7 个常见基准的长上下文检索;准确率以 nDCG@10 衡量

(iv) 基于 4 个常见基准的半结构化(JSON)检索;准确率以 nDCG@10 衡量

如果你对如何使用 LangChain 和 LlamaIndex 进行分块感兴趣,我们在 Search Labs 和开源仓库中提供了聊天应用参考代码、集成等内容。或者,你也可以利用 Elastic 的段落检索功能,并通过 ingest pipelines 进行分块。

用 Elasticsearch 和 Cohere 构建 RAG 实现

现在你已经大致了解了这些功能的使用方法,接下来我们进入一个用 Elasticsearch 和 Cohere 构建 RAG 实现的示例。

你需要一个 Cohere 账号,并对 Cohere Rerank 端点有一定了解。如果你打算使用 Cohere 最新的生成模型 Command R+,请熟悉 Chat 端点。

在 Kibana 中,你可以使用控制台输入这些 Elasticsearch 的操作步骤,即使没有设置 IDE 也没问题。如果你更喜欢使用语言客户端,可以参考提供的指南。

Elasticsearch 向量数据库

在之前的公告中,我们提供了一些入门步骤,帮你开始使用 Elasticsearch 向量数据库。你可以查看如何导入示例 books 目录,并使用 Cohere 的 Embed 功能生成向量,详情请阅读公告。或者,如果你愿意,我们也提供了教程和 Jupyter 笔记本,帮助你开始这一过程。

Cohere 重新排序

以下部分假设你已经导入了数据并执行了第一次搜索。这将让你了解第一次密集向量检索的结果排序情况。

上一次公告结束时,针对示例 books 目录执行了一个查询,查询字符串为 “Snow”,返回了以下按相关度降序排列的结果。

    {"took": 201,"timed_out": false,"_shards": {"total": 3,"successful": 3,"skipped": 0,"failed": 0},"hits": {"total": {"value": 6,"relation": "eq"},"max_score": 0.80008936,"hits": [{"_index": "cohere-embeddings","_id": "3VAixI4Bi8x57NL3O03c","_score": 0.80008936,"_source": {"name": "Snow Crash","author": "Neal Stephenson"}},{"_index": "cohere-embeddings","_id": "4FAixI4Bi8x57NL3O03c","_score": 0.6495671,"_source": {"name": "Fahrenheit 451","author": "Ray Bradbury"}},{"_index": "cohere-embeddings","_id": "31AixI4Bi8x57NL3O03c","_score": 0.62768984,"_source": {"name": "1984","author": "George Orwell"}},{"_index": "cohere-embeddings","_id": "4VAixI4Bi8x57NL3O03c","_score": 0.6197722,"_source": {"name": "Brave New World","author": "Aldous Huxley"}},{"_index": "cohere-embeddings","_id": "3lAixI4Bi8x57NL3O03c","_score": 0.61449933,"_source": {"name": "Revelation Space","author": "Alastair Reynolds"}},{"_index": "cohere-embeddings","_id": "4lAixI4Bi8x57NL3O03c","_score": 0.59593034,"_source": {"name": "The Handmaid's Tale","author": "Margaret Atwood"}}]}}

接下来,你需要通过指定 Rerank 3 模型和 API key 来配置 Cohere Rerank 的推理端点。

    PUT _inference/rerank/cohere_rerank {"service": "cohere","service_settings": {"api_key": <API-KEY>, "model_id": "rerank-english-v3.0"},"task_settings": {"top_n": 10,"return_documents": true}}

一旦指定了这个推理端点,你就可以通过传入用于检索的原始查询 “Snow” 和我们刚用 kNN 搜索检索到的文档来重新排序结果。记住,你也可以对任何混合搜索查询重复这个过程!

为了演示这一点,同时仍然使用开发控制台,我们会对上面的 JSON 响应做一些清理。

从 JSON 响应中取出 hits,构造如下的 JSON 作为输入,然后 POST 到我们刚配置的 cohere_rerank 端点。

    POST _inference/rerank/cohere_rerank{"input": ["Snow Crash", "Fahrenheit 451", "1984", "Brave New World","Revelation Space", "The Handmaid's Tale"], "query": "Snow" }

就是这样,你的结果已经使用 Cohere 的 Rerank 3 模型完成了重新排序。

我们用来演示这些功能的 books 语料库没有包含大量的段落,且是一个相对简单的示例。在为你自己的搜索体验实现这些功能时,建议你遵循 Cohere 的方法,用第一批检索结果中完整文档的上下文来填充输入,而不仅仅是文档中的某个检索块。

Elasticsearch 加速语义重排序和检索器的路线图

在 Elasticsearch 即将发布的版本中,我们将继续构建对中间和最终阶段重排序器的无缝支持。我们的最终目标是让开发者能够使用语义重排序来提升任何搜索的结果,无论是 BM25、密集向量检索、稀疏向量检索,还是与混合检索的组合。为实现这一体验,我们正在查询 DSL 中构建一个称为检索器(retrievers)的概念。检索器将提供一种直观的方式来执行语义重排序,并且能让你直接在 Elasticsearch 堆栈中执行通过开放推理 API 配置的内容,而无需在应用逻辑中执行。

将检索器应用到之前的密集向量示例中,重排序体验会有如下不同:

(i) Elastic 的路线图:通过增加未来自动对索引数据进行分块的功能,简化了索引步骤。

(ii) Elastic 的路线图:kNN 检索器指定了作为推理端点配置的模型(此处为 Cohere 的 Rerank 3)。

(iii) Cohere 的路线图:将结果数据发送到 Cohere 的 Command R+ 之间的步骤,将受益于一个名为 extractive snippets 的计划功能,该功能将允许用户向 Command R+ 模型返回重排序文档中的相关片段。

这是我们在 books 语料库上执行的原始 kNN 密集向量搜索,用于返回查询 “Snow” 的第一批结果。

    GET cohere-embeddings/_search{"knn": {"field": "name_embedding","query_vector_builder": {"text_embedding": {"model_id": "cohere_embeddings","model_text": "Snow"}},"k": 10,"num_candidates": 100},"_source": ["name","author"]}

正如这篇博客所解释的,检索文档并将正确的响应传递给推理端点需要几个步骤。在本文发布时,这些逻辑应由你的应用代码处理。

未来,retrievers 可以配置为在单次 API 调用中直接使用 Cohere rerank 推理端点。

    {"retriever": {"text_similarity_rank": {"retriever": {"knn": {"field": "name_embedding","query_vector_builder": {"text_embedding": {"model_id": "cohere_embeddings","model_text": "Snow"}},"k": 10,"num_candidates": 100}},"field": "name","window_size": 10,"inference_id": "cohere_rerank","inference_text": "Snow"}},"_source": ["name","author"]}

在这种情况下,kNN 查询与我原始的完全相同,但在传入 rerank 端点之前清理响应将不再是必要步骤。retriever 会知道已执行 kNN 查询,并能无缝地使用配置中指定的 Cohere rerank 推理端点进行重新排序。这个原则同样适用于任何搜索,包括 BM25、dense、sparse 和 hybrid。

retrievers 作为实现优秀语义重排序的关键,将成为我们当前和近期的产品路线图重点。

Cohere 的生成模型能力

现在你已经有了一组经过语义重排序的文档,可以用来为你选择的大型语言模型提供基础!我们推荐 Cohere 最新的生成模型 Command R+。在构建完整的 RAG 流程时,你可以在应用程序代码中轻松向 Cohere 的 Chat API 发送用户查询和重排序后的文档。

下面是一个如何在你的 Python 应用代码中实现的示例:

    response = co.chat(message=query, documents=documents, model='command-r-plus')source_documents = []for citation in response.citations:for document_id in citation.document_ids:if document_id not in source_documents:source_documents.append(document_id)print(f"Query: {query}")print(f"Response: {response.text}")print("Sources:")for document in response.documents:if document['id'] in source_documents:print(f"{document['title']}: {document['text']}")

与 Cohere 的集成已在 Serverless 提供,并且很快将在 Elastic Cloud 或你的笔记本电脑或自管理环境中的版本化 Elasticsearch 版本中可用。我们建议你使用 Elastic Python 客户端 v0.2.0 来连接你的 Serverless 项目开始使用!

祝你重排序顺利!

原文:https://www.elastic.co/search-labs/blog/elasticsearch-cohere-rerank

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

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

相关文章

九日集训第六天

目录 两个数对之间最大的乘积差 三角形的最大周长 数组拆分 救生艇 摆动排序|| 分发饼干 最少操作使数组递增 使数组唯一的最小增量 有效三角形的个数 两个数对之间最大的乘积差 class Solution { public:int maxProductDifference(vector<int>& nums) {so…

【软件工程】Waitress + Nginx 部署 Python Web 服务

下面是完整的 Windows 系统部署方案,使用 Waitress 作为 WSGI 服务器运行 Python 后端,Nginx 作为反向代理同时提供前端服务: 项目结构 text 复制 下载 myapp/ ├── backend/ # Python后端 │ ├── app.py # Flask应用入口 │ ├──…

JS数据类型检测方法总结

在 JavaScript 中&#xff0c;数据类型检测是开发中的常见需求。以下是主要检测方法及其优缺点&#xff1a; 1. typeof 操作符 最基础的检测方式&#xff0c;返回类型字符串&#xff1a; typeof 42; // "number" typeof "hello"; // &qu…

AEO:从搜索引擎到答案引擎,AI时代搜索优化的新战场

在 ChatGPT、DeepSeek、Google SGE 等生成式AI崛起的时代&#xff0c;搜索正在经历一场根本性变革&#xff1a; 过去&#xff1a;搜索引擎优化&#xff08;SEO&#xff09; 现在&#xff1a;答案引擎优化&#xff08;AEO&#xff09; 当搜索结果开始由AI直接生成“答案”而非…

搭建Node.js服务器

1.基础HTTP服务器: 添加了路由处理添加了404错误处理添加了服务器错误监听 2.静态资源服务器: 使用异步文件操作支持目录自动索引(默认加载 index.html)自动检测文件类型并设置正确Content-Type更完善的错误处理 3.处理GET请求参数 提供了一个HTML表单用于测试使用url模块…

Linux grep 命令

grep 是 Linux/Unix 系统中用于文本搜索的强大工具&#xff0c;支持基于正则表达式的模式匹配。以下是其详细用法及实际应用示例&#xff1a; 基本语法 grep [选项] 模式 [文件...]模式&#xff1a;要搜索的字符串或正则表达式。文件&#xff1a;可以是单个文件或多个文件&…

oracle 11g通过rman做备份和还原

ORACLE RMAN增量备份完整恢复测试 1.创建测试环境: 1.1.创建测试表空间 SQL> create tablespace tablespace1 datafile ‘/data/u01/app/oracle/oradata/orcl/tablespace1.dbf’ size 10m; SQL> 1.2.创建测试用户并指定为默认表空间: SQL> create user user1 iden…

为什么TCP有粘包问题,而UDP没有

TCP粘包问题源于其面向字节流的设计&#xff0c;而UDP无此问题因其基于数据报的传输机制。 &#x1f50d; 一、TCP粘包问题的原因 字节流传输特性 TCP将数据视为连续的字节流&#xff0c;而非独立的消息包。发送端多次写入的小数据可能被合并为一个TCP段发送&#xff1b;接收端…

ELM:Embodied Understanding of Driving Scenarios

1. ELM 的创新点与核心思路 ELM 的核心在于 “具身理解”(Embodied Understanding),即通过常识与环境交互并进行推理,这一理念适用于自动驾驶车辆、机器人和无人机等多种应用场景。具身智能体(Embodied Agent)需具备四大核心能力:首先,它能够描述周围环境,对交通物体的…

实景VR知识科普

实景VR的定义与技术特点 实景VR&#xff0c;即基于真实场景的虚拟现实技术&#xff0c;是通过计算机生成的三维环境&#xff0c;旨在模拟并再现真实世界场景。用户佩戴VR设备&#xff08;如VR头盔、手柄等&#xff09;后&#xff0c;能够沉浸在一个高度仿真的虚拟环境中&#…

CppCon 2016 学习:ITERATOR HAIKU

这组幻灯片讲解了 C 中**范围&#xff08;Ranges&#xff09;和迭代器&#xff08;Iterators&#xff09;**的核心概念&#xff0c;特别是 C14 标准定义的五种迭代器类别&#xff0c;以及范围的基本使用方式。我帮你理个思路&#xff1a; 1. RANGE-SEQUENCE: 元素范围&#xf…

开源飞控fmt软件在环仿真环境搭建

tags: 飞控 fmt开发环境搭建 fmt是国产开源飞控&#xff0c;特点是支持基于模型设计&#xff08;基于simulink仿真&#xff09;&#xff0c;源码结构目录较清晰&#xff0c;项目体积较小。 此项目操作系统选择的是国产实时操作系统rt-thread&#xff0c;也是开源项目。&#…

如何通过AI测试平台实现自动化缺陷检测和优化

在数字化转型加速的今天&#xff0c;软件质量保证已成为企业竞争力的关键要素之一。传统的手工测试方法面临着效率低下、成本高昂和覆盖面有限等挑战&#xff0c;而AI技术的融入为软件测试领域带来了革命性的变化。本文将深入探讨如何构建一个完整的AI测试平台&#xff0c;实现…

使用JeecgBoot配置

Jeecg 使用方法 本文以在环境配置好的前提下进行讲解 如果不会配置环境 可在billbill网站的Jeecg官网搜索环境配置 第一步 打开redis&#xff0c;redis是一个服务&#xff0c;需要用命令行打开 且命令行不能关 不能实现一劳永逸效果 每次关闭都得重新打开一次。 第二步 启动j…

NodeJS:版本及对应时间并对应的npm版本

versionltsrelease dateenginenpmnode下载更新日志文档Node.js 24.0.1✅2025-05-0813.61--下载更新日志文档Node.js 22.12.0✅2024-12-03---下载更新日志文档Node.js 21.2.0 2023-11-1411.8.172.1710.2.3120下载更新日志文档Node.js 20.10.0✅2023-11-2211.3.244.810.2.3115下载…

UI前端大数据处理:应对海量数据的挑战与策略

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;全球每日产生的数据量已突破 500EB&#xff0c;相当于 10 亿…

对微服务的了解

微服务是一种架构风格&#xff0c;我们可以把应用程序划分为一组小型的、松散耦合的服务&#xff0c; 每个服务都运行在自己的进程中&#xff0c;并通过轻量级的通信机制进行通信&#xff0c; 每个服务都是独立部署、独立扩展、独立更新的&#xff0c;从而提高了应用程序的可伸…

计算机视觉生物启发视觉算法:如何模拟人眼与大脑?

计算机视觉生物启发视觉算法:如何模拟人眼与大脑? 一、前言二、人眼与大脑视觉系统基础概念​2.1 人眼的生理结构与功能​2.2 大脑视觉皮层的信息处理机制​三、生物启发视觉算法的核心技术​3.1 视网膜启发的特征提取算法​3.2 视觉皮层启发的分层特征学习算法​3.3 注意力机…

stm32使用定时器功能之高精度定时(微秒级)、输入捕获以及超声波测距

一、定时器功能之高精度定时&#xff08;微秒级&#xff09; 我们常用的延时函数中无论是HAL_Delay还是vTaskDelay()函数都是毫秒级的定时&#xff0c;我们可以借助定时器实现一个微秒级更高精度的延时函数。这个定时器不会影响FreeRtos的任务切换 这里就是用定时器的计数功能…

Git常用命令摘要

写这篇博文的目的只是简单的给自己及团队的日常工作中需要用到的git命令作个汇总&#xff0c;这样平时只需要查阅这篇文章就够了&#xff0c;不用到处查找。如果能给有需要的朋友一点点的帮助&#xff0c;那也算是意外之喜吧。 一、基础配置 # 设置用户名和邮箱&#xff08;首…