Elasticsearch 与行业领先的生成式 AI 工具和提供商实现了原生集成。请观看我们的网络研讨会,了解如何超越 RAG 基础功能,或使用 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 应用程序。
准备工作
- Elasticsearch 8.17
- Kibana 8.17
- Python
步长
设置 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 模型的工具。




