将 OpenAI 兼容模型与 Inference API 结合使用
Elastic Stack Serverless
Elasticsearch 使您能够通过 Inference API 使用 LLM,支持 Amazon Bedrock、Cohere、Google AI、HuggingFace、OpenAI 等提供商作为服务。 它还允许您使用部署在本地环境中的具有 OpenAI 兼容 API 的模型。
本页向您展示如何使用 Ollama 将本地模型连接到 Elasticsearch。
Ollama 使您能够在您自己的基础设施上下载和运行 LLM 模型。 有关与 Ollama 兼容的可用模型列表,请参阅此页面。
使用 Ollama 可确保您的交互保持私密,因为模型在您的基础设施上运行。
在本教程中,您将学习如何
- 下载并运行 Ollama,
- 使用 ngrok 通过互联网暴露您托管 Ollama 的本地 Web 服务器
- 将您的本地 LLM 连接到 Playground
- 下载 Ollama.
- 使用下载的文件安装 Ollama。 在安装过程中启用 Ollama 的命令行工具。
- 从受支持的 LLM 列表中选择一个模型。 本教程使用
llama 3.2
。 - 运行以下命令
ollama pull llama3.2
安装后,测试模型。
运行
ollama run llama3.2
并提出一个问题,例如“你在工作吗?”如果模型安装成功,您将收到有效的响应。当模型运行时,默认情况下会在端口
11434
上启用 API 端点。 要测试它,请使用以下命令向 API 发出请求curl http://localhost:11434/api/generate -d '{ "model": "llama3.2", "prompt": "What is the capital of France?" }'
请参阅 API 文档以了解更多信息。 API 返回类似于此的响应
{"model":"llama3.2","created_at":"2025-03-26T10:07:05.500614Z","response":"The","done":false} {"model":"llama3.2","created_at":"2025-03-26T10:07:05.519131Z","response":" capital","done":false} {"model":"llama3.2","created_at":"2025-03-26T10:07:05.537432Z","response":" of","done":false} {"model":"llama3.2","created_at":"2025-03-26T10:07:05.556016Z","response":" France","done":false} {"model":"llama3.2","created_at":"2025-03-26T10:07:05.574815Z","response":" is","done":false} {"model":"llama3.2","created_at":"2025-03-26T10:07:05.592967Z","response":" Paris","done":false} {"model":"llama3.2","created_at":"2025-03-26T10:07:05.611558Z","response":".","done":false} {"model":"llama3.2","created_at":"2025-03-26T10:07:05.630715Z","response":"","done":true,"done_reason":"stop","context":[128006,9125,128007,271,38766,1303,33025,2696,25,6790,220,2366,18,271,128009,128006,882,128007,271,3923,374,279,6864,315,9822,30,128009,128006,78191,128007,271,791,6864,315,9822,374,12366,13],"total_duration":2232589542,"load_duration":1052276792,"prompt_eval_count":32,"prompt_eval_duration":1048833625,"eval_count":8,"eval_duration":130808916}
由于创建的端点仅在本地有效,因此无法从外部服务(例如,您的 Elastic Cloud 实例)访问它。ngrok 使您能够使用公共 URL 暴露本地端口。
将本地端点暴露给互联网可能会带来安全风险。 任何拥有公共 URL 的人都可能能够向您的服务发送请求。 避免暴露敏感数据或功能,并考虑使用身份验证或访问限制来限制可以与端点交互的人员。
创建一个 ngrok 帐户并按照官方设置指南进行操作。
安装和配置 ngrok 代理后,通过运行以下命令暴露 Ollama 端口
ngrok http 11434 --host-header="localhost:11434"
该命令返回一个公共链接,只要 ngrok 和 Ollama 服务器在本地运行,该链接就有效
Session Status online Account xxxx@yourEmailProvider.com (Plan: Free) Version 3.18.4 Region United States (us) Latency 561ms Web Interface http://127.0.0.1:4040 Forwarding https://your-ngrok-endpoint.ngrok-free.app -> http://localhost:11434 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
从
Forwarding
行复制 ngrok 生成的 URL。使用新 URL 再次测试端点
curl https://your-ngrok-endpoint.ngrok-free.app/api/generate -d '{ "model": "llama3.2", "prompt": "What is the capital of France?" }'
响应应与前一个类似。
使用 ngrok 中的公共 URL 创建连接器。
- 在 Kibana 中,转到 搜索 > Playground,然后单击 连接到 LLM。
- 在弹出窗口中选择 OpenAI。
- 为连接器提供一个名称。
- 在 连接器设置 下,选择 其他(OpenAI 兼容服务) 作为 OpenAI 提供商。
- 将 ngrok 生成的 URL 粘贴到 URL 字段中,并添加
v1/chat/completions
端点。 例如:https://your-ngrok-endpoint.ngrok-free.app/v1/chat/completions - 指定默认模型,例如
llama3.2
。 - 为 API 密钥提供任何随机字符串(它不会用于请求)。
- 保存。
- 单击 添加数据源 并连接您的索引。
您现在可以使用 Playground 与本地运行的 LLM。
您可以将本地安装的 LLM 与 Inference API 结合使用。
使用以下请求为 chat_completion
任务类型创建一个带有 openai
服务的推理端点
PUT _inference/chat_completion/llama-completion
{
"service": "openai",
"service_settings": {
"api_key": "ignored",
"model_id": "llama3.2",
"url": "https://your-ngrok-endpoint.ngrok-free.app/v1/chat/completions"
}
}
api_key
参数是openai
服务所必需的,并且必须设置,但特定值对于本地 AI 服务并不重要。- 模型名称。
- 带有聊天完成端点(
v1/chat/completions
)的 ngrok 生成的 URL。
验证推理端点是否正常工作
POST _inference/chat_completion/llama-completion/_stream
{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
],
"temperature": 0.7,
"max_completion_tokens": 300
}
该请求会产生类似于此的响应
event: message
data: {
"id" : "chatcmpl-416",
"choices" : [
{
"delta" : {
"content" : "The",
"role" : "assistant"
},
"index" : 0
}
],
"model" : "llama3.2",
"object" : "chat.completion.chunk"
}
(...)
- 将 Ollama 与 Inference API 结合使用:一个更全面、端到端的指南,介绍如何将 Ollama 与 Elasticsearch 结合使用。