将 Ollama 与推理应用程序接口结合使用

了解如何使用 Inference API 将 Ollama 与 Elasticsearch 集成。

Elasticsearch 与行业领先的生成式 AI 工具和提供商实现了原生集成。请观看我们的网络研讨会,了解如何超越 RAG 基础功能,或使用 Elastic 向量数据库构建生产就绪型应用

要为您的用例构建最佳搜索解决方案,请开始免费云试用,或立即在本地计算机上试用 Elastic。

在本文中,我们将学习如何使用 Ollama 将本地模型连接到 Elasticsearch 推理模型,然后使用 Playground 提出文档问题。

Elasticsearch 允许用户使用开放推理 API 连接到 LLM,并支持 Amazon Bedrock、Cohere、Google AI、Azure AI Studio、HuggingFace - as a service 等提供商。

Ollama是一款允许您使用自己的基础设施(本地机器/服务器)下载和执行 LLM 模型的工具。在这里,您可以找到与 Ollama 兼容的可用型号列表。

如果你想托管和测试不同的开源模型,Ollama 是一个不错的选择,因为 Ollama 会处理好一切,让你不必担心每个模型的不同设置方式,也不必担心如何创建 API 来访问模型功能。

由于 Ollama API 与 OpenAI API 兼容,我们可以轻松集成推理模型,并使用 Playground 创建 RAG 应用程序。

准备工作

  1. Elasticsearch 8.17
  2. Kibana 8.17
  3. Python

步长

  1. 设置 Ollama LLM 服务器
  2. 创建映射
  3. 索引数据
  4. 使用 Playground 提问

设置 Ollama LLM 服务器

我们将设置一个 LLM 服务器,使用 Ollama 将其连接到 Playground 实例。我们需要

  • 下载并运行 Ollama。
  • 使用 ngrok 通过互联网访问托管 Ollama 的本地网络服务器

下载并运行 Ollama

要使用 Ollama,我们首先需要下载它。Ollama 支持 Linux、Windows 和 macOS,因此只需 在这里 下载与你的操作系统兼容的 Ollama 版本即可 。安装好 Ollama 后,我们可以从支持的 LLM列表中选择一个模型。在本例中,我们将使用llama3.2 模型,这是一个通用的多语言模型。在设置过程中,您将启用 Ollama 的命令行工具。下载完成后,您就可以运行下面一行:

将输出

安装完成后,可以使用此命令进行测试:

我们来提个问题:

模型运行后,Ollama 会启用一个默认在"11434" 端口运行的 API。让我们按照官方文档,向该应用程序接口提出请求:

这就是我们得到的答复:

请注意,该端点的特定响应是流式响应。

使用 ngrok 将终端接入互联网

由于我们的端点在本地环境中运行,因此无法通过互联网从另一个点(如我们的弹性云实例)进行访问。ngrok允许我们公开提供公共 IP 的端口。在 ngrok 中创建账户,并按照官方设置指南进行操作。

安装并配置好 ngrok 代理后,我们就可以公开 Ollama 正在使用的端口:

注意: --host-header="localhost:11434" 保证请求中的"Host" 头与"localhost:11434 匹配。"

执行该命令将返回一个公共链接,只要 ngrok 和 Ollama 服务器在本地运行,该链接就能正常工作。

在"Forwarding" 中,我们可以看到 ngrok 生成了一个 URL。留着以后用吧。

让我们再次尝试使用 ngrok 生成的 URL 向端点发出 HTTP 请求:

答复应与前一个答复类似。

创建映射

ELSER 端点

在本示例中,我们将使用 Elasticsearch 推理 API 创建一个推理端点。此外,我们还将使用ELSER生成嵌入。

在这个例子中,我们假设有一家药店出售两种药物:

  • 需要处方的药物。
  • 无需处方的药物。

这些信息将包含在每种药物的描述字段中。

LLM 必须对该字段进行解释,因此这就是我们要使用的数据映射:

字段text_description 将存储描述的纯文本,而作为语义_文本字段类型的semantic_field 将存储由 ELSER 生成的嵌入。

属性copy_to将把字段名和text_description 中的内容复制到语义字段中,以便为这些字段生成嵌入内容。

索引数据

现在,让我们使用_bulk API 为数据建立索引。

响应:

使用 Playground 提问

Playground是一款 Kibana 工具,可让您使用 Elasticsearch 索引和 LLM 提供商快速创建 RAG 系统。您可以阅读本文了解更多信息。

将当地的法律硕士与游乐场连接起来

我们首先需要创建一个连接器,使用我们刚刚创建的公共 URL。在 Kibana 中,转到搜索>Playground,然后点击"连接到 LLM" 。

此操作将显示 Kibana 界面左侧的菜单。在那里,点击"OpenAI" 。

现在我们可以开始配置 OpenAI 连接器了。

访问"Connector settings" ,并为 OpenAI 提供商选择"Other (OpenAI Compatible Service)" :

现在,让我们配置其他字段。在本例中,我们将模型命名为"medicines-llm" 。在 URL 字段中,使用 ngrok 生成的 URL (/v1/chat/completions)。在"Default model" 字段中,选择"llama3.2" 。我们不会使用 API 密钥,因此只需输入任意文本即可:

点击"保存" 并点击"添加数据源" 添加索引药物:

好极了现在,我们可以使用本地运行的 LLM 作为 RAG 引擎访问 Playground。

在测试之前,让我们给代理添加更具体的指令,并将发送给模型的文件数量增加到 10 份,以便答案有尽可能多的可用文件。由于使用了 copy_to 属性,上下文字段将是semantic_field ,其中包括药品的名称和描述。

现在我们来问一个问题:没有处方可以购买氯硝西泮吗?看看会发生什么:

不出所料,我们得到了正确答案。

后续步骤

下一步是创建自己的应用程序!Playground 提供了一个 Python 代码脚本,你可以在自己的机器上运行,并根据自己的需要进行定制。例如,将其置于FastAPI服务器之后,创建一个由用户界面使用的 QA 药品聊天机器人。

点击 Playground 右上方的 "查看代码"按钮即可找到该代码:

然后使用Endpoints& API 密钥生成代码中所需的ES_API_KEY 环境变量。

本例的代码如下:

要使其与 Ollama 兼容,必须更改 OpenAI 客户端,使其连接到 Ollama 服务器,而不是 OpenAI 服务器。您可以在这里找到 OpenAI 示例和兼容端点的完整列表。

在调用完成方法时,将模型更改为 llama3.2:

让我们补充一个问题:我可以在没有处方的情况下购买氯硝西泮吗? 至 Elasticsearch 查询:

此外,我们还在完成调用中打印了一些内容,以便确认我们将 Elasticsearch 结果作为问题上下文的一部分发送:

现在运行命令

pip install -qU elasticsearch openai

python main.py

你应该看到这样的内容:

结论

在本文中,当我们将 Ollama 等工具与 Elasticsearch 推论 API 和 Playground 结合使用时,我们可以看到它们的强大功能和多功能性。

经过几个简单的步骤后,我们就拥有了一个可运行的 RAG 应用程序,它可以聊天,使用 LLM 在我们自己的基础设施中运行,成本为零。这也使我们能够对资源和敏感信息有更多的控制权,此外,我们还可以使用各种模型来完成不同的任务。

常见问题

奥拉玛是什么?

Ollama 是一款允许您使用自己的基础设施(本地机器/服务器)下载和执行 LLM 模型的工具。

相关内容

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用