跳至内容

开始使用OpenAI兼容端点(例如Ollama)

本指南展示如何设置一个最小化部署,以便将TensorZero网关与Ollama等OpenAI兼容端点配合使用。

设置

本指南假设您已在本地运行Ollama服务(使用ollama serve命令),并已提前拉取llama3.1模型(例如执行ollama pull llama3.1)。 请确保更新下方配置中的api_basemodel_name参数,使其与您的OpenAI兼容终端及模型相匹配。

对于这个最小化配置,您的项目目录中只需要两个文件:

  • Directoryconfig/
    • tensorzero.toml
  • docker-compose.yml

关于生产环境部署,请参阅我们的部署指南

配置

创建一个最小化的配置文件,定义模型和一个简单的聊天功能:

config/tensorzero.toml
[models.llama3_1_8b_instruct]
routing = ["ollama"]
[models.llama3_1_8b_instruct.providers.ollama]
type = "openai"
api_base = "http://host.docker.internal:11434/v1" # for Ollama running locally on the host
model_name = "llama3.1"
api_key_location = "none" # by default, Ollama requires no API key
[functions.my_function_name]
type = "chat"
[functions.my_function_name.variants.my_variant_name]
type = "chat_completion"
model = "llama3_1_8b_instruct"

Credentials

模型提供商配置中的api_key_location字段用于指定如何处理API密钥认证:

  • 如果您的终端节点不需要API密钥(例如默认的Ollama):

    api_key_location = "none"
  • 如果您的终端节点需要API密钥,您有两种选择:

    1. 通过环境变量预先配置:

      api_key_location = "env::ENVIRONMENT_VARIABLE_NAME"

      在启动网关前需要先设置好环境变量。

    2. 在推理时提供:

      api_key_location = "dynamic::ARGUMENT_NAME"

      然后可以在推理请求中传递API密钥。

更多详情请参阅凭证管理指南、配置参考API参考

在这个示例中,Ollama在本地运行且无需身份验证,因此我们使用api_key_location = "none"

部署 (Docker Compose)

创建一个最小化的Docker Compose配置:

docker-compose.yml
# This is a simplified example for learning purposes. Do not use this in production.
# For production-ready deployments, see: https://www.tensorzero.com/docs/gateway/deployment
services:
gateway:
image: tensorzero/gateway
volumes:
- ./config:/app/config:ro
command: --config-file /app/config/tensorzero.toml
# environment:
# - OLLAMA_API_KEY=${OLLAMA_API_KEY:?Environment variable OLLAMA_API_KEY must be set.} // not necessary for this example
ports:
- "3000:3000"
extra_hosts:
- "host.docker.internal:host-gateway"

您可以通过docker compose up命令启动网关。

推理

向网关发起推理请求:

终端窗口
curl -X POST http://localhost:3000/inference \
-H "Content-Type: application/json" \
-d '{
"function_name": "my_function_name",
"input": {
"messages": [
{
"role": "user",
"content": "What is the capital of Japan?"
}
]
}
}'