作者:来自 Elastic Jan Kazlouski

使用一个 API 密钥和一个模型 ID 在 Elasticsearch 中设置 NVIDIA 托管模型。无需自定义集成代码。
Elasticsearch 具有与行业领先的生成式人工智能工具和提供商的原生集成。查看我们关于超越 RAG 基础知识的网络研讨会,或使用 Elastic 向量数据库构建可投入生产的应用程序。
要为你的使用场景构建最佳搜索解决方案,请开始免费云试用,或立即在你的本地机器上尝试 Elastic。
Elasticsearch 的推理 API ( inference API)现在可以直接连接到 NVIDIA 托管模型。你可以获得文本嵌入、completions、聊天 completions 和重排序功能,还可以访问 NVIDIA 目录中的 NVIDIA 推理微服务优化(NIM 优化)的检索和生成模型,而无需编写任何自定义集成代码。
实际上,这意味着基于 NVIDIA 托管嵌入构建的向量搜索和检索增强生成(RAG)应用程序。它还包括通过聊天 completions API 实现的多轮对话,以及使用 NVIDIA 的交叉编码器模型进行重排序,将相关性提升到超越关键词匹配的水平。所有四种任务类型都可以通过推理 API 原生运行,同时支持流式和非流式响应。如何获取 NVIDIA API 密钥?
NVIDIA 提供了广泛的模型目录,旨在满足各种使用场景,所有模型都可以在 NVIDIA 构建模型目录中探索。在本文中,我们提供了针对每种推理任务类型优化的高性能模型的具体示例。在确定最符合你的应用需求的模型后,选择适合你的基础设施和运营需求的部署方式。这可能意味着在本地部署以获得更强的控制能力,或者使用无服务器(serverless)选项以进行更快速的实验和更简单的扩展。
要快速开始,你首先需要访问 NVIDIA 的模型目录和 API。在 Try NVIDIA NIM APIs 创建账户或登录,以探索可用模型、评估它们的能力,并比较哪些模型最适合你的使用场景,然后再进行全面部署。该网站提供了一个用于测试模型的基于网页的界面,在评估和实验阶段非常有用。对于生产级需求,你可以使用 NVIDIA NIM 在自己的基础设施上部署端点。
要访问 NVIDIA 模型,你需要生成一个 API 密钥。该密钥将在调用 NVIDIA 端点时作为授权机制。你可以在 API 密钥页面创建、访问和管理你的 API 密钥。要创建新的密钥,点击右上角的生成 API 密钥链接,然后为密钥指定名称和过期时间。生成 API 密钥后,选择适合你任务的模型,并设置相应的 Elasticsearch 推理端点。

设置 Elasticsearch 推理端点
设置好你的 NVIDIA 账户并获取所需的 API 密钥后,你可以创建一个 Elasticsearch 推理端点。
端点设置可以直接在 Kibana 中使用控制台完成,这允许你将所需步骤输入 Elasticsearch,即使不使用 API 也可以完成。以下部分提供了如何创建和使用文本嵌入、completions、聊天 completions和重排序端点的示例和详细信息。有关更多示例和详细信息,请查阅 Elasticsearch API 参考文档。
创建和使用文本嵌入推理端点
要创建文本嵌入 推理端点,你首先需要选择一个可以执行嵌入操作的合适模型。NVIDIA 在 NVIDIA 构建模型目录中列出了其模型。你可以在左侧选择文本到嵌入 或检索增强生成 使用场景,以筛选合适的模型。你也可以在 NVIDIA 文档中找到 NVIDIA 的文本嵌入模型。NVIDIA 的检索 API 包括文本嵌入 和重排序模型。选择模型时,请确保它明确支持文本嵌入推理。文本嵌入模型通常会包含类似"从输入文本创建嵌入向量"的 API 描述。
一个很好的嵌入模型 示例是 nvidia/llama-nemotron-embed-1b-v2 模型。你可以访问 该模型的部署页面,该页面允许你在本地部署此模型。
选择合适的模型后,打开它的 API 参考页面,你将在其中找到创建 Elasticsearch 推理端点所需的参数。

有两个参数相关:
-
model_id(必需):指定用于嵌入推理的 NVIDIA 模型。该参数在 NVIDIA 端称为model。 -
url(可选):用于向 NVIDIA 模型发送请求的端点 URL(可以是在本地部署环境中或无服务器环境中部署的模型)。它必须可以从你的 Elasticsearch 实例访问。
对于大多数文本嵌入模型,URL 是固定的,NVIDIA 仅通过 model 参数区分模型。如果在创建端点时未提供 url 参数,则会使用默认的特定于文本嵌入任务的值 integrate.api.nvidia.com/v1/embeddin...。
要生成文本嵌入,请在服务设置映射中配置所需 NVIDIA 模型值的端点:
arduino
`
1. PUT _inference/text_embedding/nvidia-text-embedding
2. {
3. "service": "nvidia",
4. "service_settings": {
5. "url": "https://integrate.api.nvidia.com/v1/embeddings", // optional
6. "api_key": "<api_key>",
7. "model_id": "nvidia/llama-nemotron-embed-1b-v2"
8. }
9. }
`AI写代码
发送此请求后,你应该会收到成功的 200 OK 响应。此响应确认端点运行正常,并且设置已准确指定,同时会详细说明你为文本嵌入任务类型新创建的 Elasticsearch 端点。
bash
`
1. {
2. "inference_id": "nvidia-text-embedding",
3. "task_type": "text_embedding",
4. "service": "nvidia",
5. "service_settings": {
6. "model_id": "nvidia/llama-nemotron-embed-1b-v2",
7. "url": "https://integrate.api.nvidia.com/v1/embeddings",
8. "rate_limit": {
9. "requests_per_minute": 3000
10. },
11. "dimensions": 2048,
12. "similarity": "dot_product"
13. },
14. "chunking_settings": {
15. "strategy": "sentence",
16. "max_chunk_size": 250,
17. "sentence_overlap": 1
18. }
19. }
`AI写代码
你现在可以使用新创建的端点来生成嵌入。此操作的请求类似于下面所示的示例:
arduino
`
1. POST _inference/nvidia-text-embedding
2. {
3. "input": [
4. "First input.",
5. "Second input."
6. ]
7. }
`AI写代码
文本嵌入将被返回,并伴随成功的 HTTP 200 OK 状态。
bash
`
1. {
2. "text_embedding": [
3. {
4. "embedding": [
5. -0.016174316,
6. 0.018432617,
7. ...,
8. -0.016723631
9. ]
10. },
11. {
12. "embedding": [
13. -0.008995056,
14. 0.014381409,
15. ...,
16. -0.025314331
17. ]
18. }
19. ]
20. }
`AI写代码
此集成允许用户直接在 Elasticsearch 中使用 NVIDIA 模型,使构建高级搜索和 RAG 应用程序变得更加容易。这些可投入生产的模型为企业级部署提供了可靠且稳健的基础。
创建和使用 completion 推理端点
要创建completions 推理端点,你首先需要选择一个合适的模型。
NVIDIA 在 NVIDIA 构建模型目录中列出了其模型。你可以在那里搜索模型,也可以在此大型语言模型(LLM)API 文档左侧导航中找到 NVIDIA 的 completion 模型。列表中的每个条目都会链接到模型的一般描述页面。从那里,你可以导航到一个嵌套链接,该链接会打开所选模型专属的 API 参考页面。一个很好的 completion 模型示例是 nvidia/nemotron-3-super-120b-a12b 模型。你可以访问该模型的部署页面,该页面允许你在本地部署此模型。
选择合适的模型后,打开它的 API 参考页面,你将在其中找到成功创建 Elasticsearch 推理端点所需的参数。

有两个参数相关:
-
model_id(必需):指定用于 completions 推理的 NVIDIA 模型。该参数在 NVIDIA 端称为model。 -
url(可选):用于向 NVIDIA 模型发送请求的端点 URL(可以是在本地部署环境中或无服务器环境中部署的模型)。它必须可以从你的 Elasticsearch 实例访问。
对于大多数 completions 模型,URL 是固定的,NVIDIA 仅使用 model 参数来区分模型。如果在创建端点时未指定 url 参数,则会使用默认值 integrate.api.nvidia.com/v1/chat/com...。
要在 Elasticsearch 推理 completions 任务中使用生成模型,你需要配置一个支持 completions 操作的端点。服务设置映射必须包含所选 NVIDIA 模型所需的配置。
json
`
1. PUT _inference/completion/nvidia-completion
2. {
3. "service": "nvidia",
4. "service_settings": {
5. "url": "https://integrate.api.nvidia.com/v1/chat/completions", // optional
6. "api_key": "<api_key>",
7. "model_id": "nvidia/nemotron-3-super-120b-a12b"
8. }
9. }
`AI写代码
成功后,你将收到一个 200 OK 响应。此响应会提供你的新 Elasticsearch 端点的详细信息,该端点已配置用于 completions 任务。
bash
`
1. {
2. "inference_id": "nvidia-completion",
3. "task_type": "completion",
4. "service": "nvidia",
5. "service_settings": {
6. "model_id": "nvidia/nemotron-3-super-120b-a12b",
7. "url": "https://integrate.api.nvidia.com/v1/chat/completions",
8. "rate_limit": {
9. "requests_per_minute": 3000
10. }
11. }
12. }
`AI写代码
创建的端点允许你生成流式和非流式 completions。这两者指的是端点传递输出的方式。非流式 completions 会等待整个响应生成完成后,再以单个整体返回,从而产生一次性但响应时间更慢的结果。相比之下,流式 completions 会在生成文本时以连续的小块形式返回生成的文本,这使你可以立即开始读取响应。这种持续传递方式带来了更快交互的感知体验,并且对于实时对话界面至关重要。
生成非流式 completions
要生成非流式 completions,你需要使用类似以下请求调用新创建的端点:
bash
`
1. POST _inference/completion/nvidia-completion
2. {
3. "input": "The sky above the port was the color of television tuned to a dead channel."
4. }
`AI写代码
你将收到一个成功的 200 OK 响应,其中包含 completion 结果:
markdown
`
1. {
2. "completion": [
3. {
4. "result": "This line uses a simile to describe the sky over a seaport."
5. }
6. ]
7. }
`AI写代码
生成流式 completions
要为 completion 任务类型使用流式功能,你需要发送与非流式 completion 相同的请求,但需要在 URL 路径中包含 _stream:
markdown
`
1. POST _inference/completion/nvidia-completion/_stream
2. {
3. "input": "The sky above the port was the color of television tuned to a dead channel."
4. }
`AI写代码
此命令将启动持续的事件流,传递一系列类似于下面示例的输出:
csharp
`
1. event: message
2. data: {"completion":[{"delta":"First"},{"delta":" Second"}]}
4. event: message
5. data: {"completion":[{"delta":" Third"},{"delta":" Fourth"}]}
7. event: message
8. data: [DONE]
`AI写代码
此功能使用户能够轻松地将 NVIDIA 生成模型直接集成到他们的 Elastic 应用程序中,同时支持单响应和具有交互性的流式体验,用于动态内容生成。
创建和使用聊天 completion 推理端点
为了支持比标准 completion 推理端点更动态和灵活的交互,你需要配置一个聊天 completion 推理端点,该端点专门用于处理基于聊天的 completion 任务。
要确定构建服务设置映射所需的参数,请参考本文中 completion 推理端点部分。相同的配置原则适用于聊天 completion 推理端点。
服务设置映射必须包含所选 NVIDIA 模型所需的配置设置。
json
`
1. PUT _inference/chat_completion/nvidia-chat-completion
2. {
3. "service": "nvidia",
4. "service_settings": {
5. "url": "https://integrate.api.nvidia.com/v1/chat/completions", // optional
6. "api_key": "<api_key>",
7. "model_id": "nvidia/nemotron-3-super-120b-a12b"
8. }
9. }
`AI写代码
成功后,你将收到一个 200 OK 响应,其中包含专门用于聊天 completion 任务类型的新 Elasticsearch 端点的详细信息。
bash
`
1. {
2. "inference_id": "nvidia-chat-completion",
3. "task_type": "chat_completion",
4. "service": "nvidia",
5. "service_settings": {
6. "model_id": "nvidia/nemotron-3-super-120b-a12b",
7. "url": "https://integrate.api.nvidia.com/v1/chat/completions",
8. "rate_limit": {
9. "requests_per_minute": 3000
10. }
11. }
12. }
`AI写代码
你现在可以使用新端点来流式传输生成的 completions。你的请求应类似于以下示例:
bash
`
1. POST _inference/chat_completion/nvidia-chat-completion/_stream
2. {
3. "messages": [
4. {
5. "role": "user",
6. "content": "What is deep learning?"
7. }
8. ]
9. }
`AI写代码
聊天 completion 结果将以连续事件流的形式传递给你,格式如下:
csharp
`
1. event: message
2. data: {
3. "id": "cmpl-92346cfa1d004f65991eedf0765b622a",
4. "choices": [
5. {
6. "delta": {
7. "content": " first chunk"
8. },
9. "index": 0
10. }
11. ],
12. "model": "nvidia/nemotron-3-super-120b-a12b",
13. "object": "chat.completion.chunk"
14. }
15. event: message
16. data: {
17. "id": "cmpl-92346cfa1d004f65991eedf0765b622a",
18. "choices": [
19. {
20. "delta": {
21. "content": " second chunk"
22. },
23. "finish_reason": "length",
24. "index": 0
25. }
26. ],
27. "model": "nvidia/nemotron-3-super-120b-a12b",
28. "object": "chat.completion.chunk",
29. "usage": {
30. "completion_tokens": 10,
31. "prompt_tokens": 8,
32. "total_tokens": 18
33. }
34. }
36. event: message
37. data: [DONE]
`AI写代码
聊天 completion 能力不同于更简单的 completion API,它允许用户直接在 Elastic Stack 中构建有状态的多轮对话式人工智能应用程序,利用 NVIDIA 模型的完整灵活性,根据 Elasticsearch 推理聊天 completion API 实现动态用户交互。
创建和使用重排序推理端点
_重排序_是重新排列初始搜索查询 结果的过程,以提高它们与你意图的相关性。重排序是一个第二阶段的相关性步骤,它会重新排列初始检索器返回的结果。在许多情况下,它使用与检索器本身不同的模型,通常是交叉编码器 模型,该模型会同时评估查询和每个候选文档 ,以生成更准确的相关性分数。输出是根据相关性排序后的结果列表,从而显著提升搜索结果的质量和上下文准确性。
要创建重排序推理端点,你首先需要选择一个可以执行重排序操作的合适模型。NVIDIA 在 NVIDIA 构建模型目录中列出了其模型。你可以使用 reranking 标签选择合适的模型。你也可以在此检索 API 文档左侧导航中找到 NVIDIA 的重排序模型。NVIDIA 在其 API 文档的检索 API 部分包含重排序和文本嵌入模型。选择模型时,请确保它明确支持 rerank 推理请求。重排序模型通常会包含类似"根据段落与查询之间的关系对段落进行排序"的 API 描述。此描述表明该模型支持 rerank 任务类型。
一个很好的重排序模型示例是 nvidia/llama-nemotron-rerank-vl-1b-v2。你可以访问该模型的部署页面,该页面允许你在本地部署此模型。

选择合适的模型后,打开它的 API 参考页面,你将在其中找到创建 Elasticsearch 推理端点所需的参数。有两个参数相关:
-
model_id(必需):指定用于 rerank 推理的 NVIDIA 模型。 -
url(可选):推理端点用于向 NVIDIA 服务发送请求的端点 URL。
对于大多数模型,URL 是固定的,NVIDIA 仅使用 model 参数来区分模型。如果在创建端点时未指定 url 参数,则会使用默认值
ai.api.nvidia.com/v1/retrieva...。
nvidia/llama-nemotron-rerank-vl-1b-v2 模型需要指定自定义 URL,并将在下面的示例中使用。
要执行重排序任务,你需要配置一个执行重排序操作的推理端点。服务设置映射必须包含所选 NVIDIA 模型所需的配置。
json
`
1. PUT _inference/rerank/nvidia-rerank
2. {
3. "service": "nvidia",
4. "service_settings": {
5. "url": "https://ai.api.nvidia.com/v1/retrieval/nvidia/llama-nemotron-rerank-vl-1b-v2/reranking", // optional
6. "api_key": "<api_key>",
7. "model_id": "nvidia/llama-nemotron-rerank-vl-1b-v2"
8. }
9. }
`AI写代码
你的新 Elasticsearch 端点创建成功后,将通过一个 200 OK 响应进行确认,该响应还会提供该 rerank 任务类型端点的具体详细信息。
bash
`
1. {
2. "inference_id": "nvidia-rerank",
3. "task_type": "rerank",
4. "service": "nvidia",
5. "service_settings": {
6. "model_id": "nvidia/llama-nemotron-rerank-vl-1b-v2",
7. "url": "https://ai.api.nvidia.com/v1/retrieval/nvidia/llama-nemotron-rerank-vl-1b-v2/reranking",
8. "rate_limit": {
9. "requests_per_minute": 3000
10. }
11. }
12. }
`AI写代码
然后你可以开始使用新端点,通过类似下面所示的请求执行 rerank 操作:
bash
`
1. POST _inference/rerank/nvidia-rerank
2. {
3. "input": [
4. "mercury",
5. "venus",
6. "earth",
7. "mars",
8. "jupiter",
9. "saturn"
10. ],
11. "query": "which planet is third from the sun"
12. }
`AI写代码
将返回成功的 HTTP 200 OK 状态,并且排序后的条目将包含在响应中。由于模型不是确定性的,你收到的结果可能会有所不同,并且在不同调用之间可能会以不同顺序排列,因为无法保证每次都会得到相同的结果。
markdown
`
1. {
2. "rerank": [
3. {
4. "index": 2,
5. "relevance_score": -8.5
6. },
7. {
8. "index": 1,
9. "relevance_score": -8.9453125
10. },
11. {
12. "index": 4,
13. "relevance_score": -8.984375
14. },
15. {
16. "index": 3,
17. "relevance_score": -9.0078125
18. },
19. {
20. "index": 0,
21. "relevance_score": -9.5546875
22. },
23. {
24. "index": 5,
25. "relevance_score": -10.53125
26. }
27. ]
28. }
`AI写代码
将 rerank 能力与 Elasticsearch 和 NVIDIA 集成,可以提升搜索应用程序,以提供最准确且具有上下文相关性的结果。通过在 Elasticsearch 的搜索基础设施中使用 NVIDIA 重排序模型,系统可以超越简单的关键词匹配。此能力会在初始搜索后优先展示最相关的文档,大幅提升用户体验和数据的实用性。
NVIDIA 和 Elasticsearch:下一步是什么
Elasticsearch 的推理 API 与 NVIDIA 的集成对于用户来说是一个重要的进步。通过提供一种标准化且更简单的方式来访问 NVIDIA 的高性能优化模型,此集成显著扩展了 Elastic 的能力。用户现在可以使用这些模型执行关键人工智能任务,包括为向量搜索生成文本嵌入、使用 completion 模型生成和流式传输内容、通过聊天 completion 构建有状态的对话式人工智能应用程序,以及通过重排序大幅提升搜索结果准确性。这种简化加速了复杂人工智能应用程序的开发,从高级 RAG 系统到动态对话界面,让强大的人工智能能力更容易被 Elastic 用户使用。
准备开始了吗?
-
探索Elasticsearch API 参考文档,深入了解设置过程。
-
浏览NVIDIA 模型目录,查看所有可用模型。
-
查看NVIDIA API 文档中心,获取集成指南和 API 参考。
-
通过创建NVIDIA 账户和 API 密钥开始你的体验,立即开始集成这些模型。
常见问题
如何将 Elasticsearch 连接到 NVIDIA 托管模型?
在 build.nvidia.com 创建 NVIDIA API 密钥,然后使用你的 API 密钥和 model_id,通过 nvidia 服务创建一个 Elasticsearch 推理端点。Elasticsearch 推理 API 支持四种 NVIDIA 任务类型:文本嵌入、completion、聊天 completion 和重排序。
Elasticsearch 中 NVIDIA 文本嵌入模型的默认端点 URL 是什么?
如果在创建端点时没有指定 url,Elasticsearch 会将文本嵌入任务默认设置为 https://integrate.api.nvidia.com/v1/embeddings。而 completion 和聊天 completion 任务则默认使用 https://integrate.api.nvidia.com/v1/chat/completions。
我可以在自己的基础设施上使用部署的 NVIDIA NIM 模型与 Elasticsearch 集成吗?
可以。NVIDIA NIM 支持本地部署,而 Elasticsearch 推理端点接受自定义 url 参数,该参数可以指向你自己托管的 NIM 端点,而不是 NVIDIA 的无服务器 API。
如何在 Elasticsearch 中从 NVIDIA 模型流式传输聊天 completion 响应?
将 _stream 添加到聊天 completion 端点的 URL 路径中(POST _inference/chat_completion/{id}/_stream)。Elasticsearch 会返回连续的事件流,而不是单个阻塞响应,并以 [DONE] 事件结束。
Elasticsearch 的 NVIDIA 集成中 completion 和 rerank 任务类型有什么区别?
completion 和聊天 completion 会根据提示词生成新的文本。rerank 接收现有的文档列表和查询,然后使用交叉编码器模型根据相关性分数重新排序;它不会生成文本,而是重新评估你已经检索到的内容。
NVIDIA 的重排序模型如何改善 Elasticsearch 搜索结果?
NVIDIA 的重排序模型会同时评估查询和每个候选文档,生成用于重新排序的相关性分数,从而超越关键词匹配。Elasticsearch 的 rerank 端点会返回每个文档的索引和相关性分数,因此得分最高的段落会优先显示。
我需要付费 NVIDIA 账户才能将托管模型与 Elasticsearch 一起使用吗?
你需要一个 NVIDIA 账户,并在build.nvidia.com生成 API 密钥;NVIDIA 的构建平台根据使用情况提供免费评估访问和付费生产级别。除了你现有的 NVIDIA 账户条款外,Elasticsearch 本身不会针对 NVIDIA 服务增加额外许可费用。
此内容有多大帮助?
原文:NVIDIA models in Elasticsearch: Text embedding to rerank - Elasticsearch Labs