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

作者:來自 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;首…