跳至内容

配置参考

配置文件是TensorZero的核心支柱。 它定义了网关的行为,包括模型及其供应商、函数及其变体、工具、指标等。 开发者通过在此配置文件中定义相关的提示模板、模式和其他参数,来表达LLM调用的行为。

你可以查看示例配置文件这里

配置文件是一个TOML格式的文件,包含几个主要部分(TOML表):gatewayclickhousemodelsmodel_providersfunctionsvariantstoolsmetrics

[gateway]

[gateway] 部分定义了 TensorZero 网关的行为。

bind_address

  • 类型: string
  • 必填: 否(默认值:0.0.0.0:3000

定义TensorZero网关绑定的套接字地址。

tensorzero.toml
[gateway]
# ...
bind_address = "0.0.0.0:3000"
# ...

debug

  • 类型: boolean
  • 必填: 否(默认值:false

通常情况下,TensorZero不会在日志或错误中包含输入和输出信息,以避免泄露敏感数据。在开发过程中,查看有关请求和响应的更多信息可能会有所帮助。当此字段设置为true时,网关将记录更详细的错误信息以协助调试。

enable_template_filesystem_access

  • 类型: boolean
  • 必填: 否(默认值:false

启用此设置将允许MiniJinja模板从文件系统加载子模板(使用include指令)。 路径必须相对于tensorzero.toml文件,并且只能访问该目录或其子目录中的文件。

observability.async_writes

  • 类型: boolean
  • 必填项: 否(默认值:true

启用此设置将通过将写入ClickHouse的推理响应任务卸载到后台任务来降低网关延迟,而无需等待ClickHouse返回推理响应。

observability.enabled

  • 类型: boolean
  • 必填: 否(默认值:null

启用TensorZero网关的可观测性功能。 如果设为true,当网关启动时验证ClickHouse连接失败会抛出错误。 如果设为null,当ClickHouse不可用时网关会记录警告但继续运行,若ClickHouse可用则会使用它。 如果设为false,网关将不会使用ClickHouse。

tensorzero.toml
[gateway]
# ...
observability.enabled = true
# ...

disable_observability (已弃用)

  • 类型: boolean
  • 必填: 否(默认值:false

禁用TensorZero网关的可观测性功能(不推荐)。

tensorzero.toml
[gateway]
# ...
disable_observability = true # not recommended
# ...

[models.model_name]

[models.model_name] 部分定义了模型的行为。 您可以通过包含多个 [models.model_name] 部分来定义多个模型。

模型与提供商无关,相关提供商在providers子部分中定义(见下文)。

如果您的model_name不是基本字符串,可以用引号进行转义。 例如,基本字符串中不允许使用句点,因此您可以将llama-3.1-8b-instruct定义为[models."llama-3.1-8b-instruct"]

tensorzero.toml
[models.claude-3-haiku-20240307]
# fieldA = ...
# fieldB = ...
# ...
[models."llama-3.1-8b-instruct"]
# fieldA = ...
# fieldB = ...
# ...

routing

  • 类型: 字符串数组
  • 必填项:

一个提供者名称列表,用于路由请求。 这些提供者必须在providers子章节中定义(见下文)。 TensorZero网关会尝试将请求路由到列表中的第一个提供者,如果请求不成功,将按顺序回退到后续提供者。

tensorzero.toml
[models.gpt-4o]
# ...
routing = ["openai", "azure"]
# ...
[models.gpt-4o.providers.openai]
# ...
[models.gpt-4o.providers.azure]
# ...

[models.model_name.providers.provider_name]

providers子部分定义了模型特定提供商的行为。 您可以通过包含多个[models.model_name.providers.provider_name]部分来定义多个提供商。

如果您的provider_name不是基本字符串,可以用引号进行转义。 例如,基本字符串中不允许使用句点,因此您可以将vllm.internal定义为[models.model_name.providers."vllm.internal"]

tensorzero.toml
[models.gpt-4o]
# ...
routing = ["openai", "azure"]
# ...
[models.gpt-4o.providers.openai]
# ...
[models.gpt-4o.providers.azure]
# ...

extra_body

  • 类型: 对象数组(见下方)
  • 必填:

extra_body字段允许您修改TensorZero发送给模型提供商的请求体。这个高级功能是一个"应急出口",让您可以使用TensorZero尚未实现的特定于提供商的功能。

数组中的每个对象必须包含两个字段:

  • pointer: 一个JSON Pointer字符串,用于指定修改请求体的位置
  • value: 要插入该位置的值;可以是任何类型,包括嵌套类型

示例:extra_body

如果TensorZero通常会向供应商发送此请求体…

{
"project": "tensorzero",
"safety_checks": {
"no_internet": false,
"no_agi": true
}
}

…那么接下来的 extra_body

extra_body = [
{ pointer = "/agi", value = true},
{ pointer = "/safety_checks/no_agi", value = { bypass = "on" }}
]

…覆盖请求体为:

{
"agi": true,
"project": "tensorzero",
"safety_checks": {
"no_internet": false,
"no_agi": {
"bypass": "on"
}
}
}

extra_headers

  • 类型: 对象数组(见下方)
  • 必填:

extra_headers字段允许您设置或覆盖TensorZero发送给模型提供商的请求头。这一高级功能是一个"应急出口",让您能够使用TensorZero尚未实现的特定提供商功能。

数组中的每个对象必须包含两个字段:

  • name (string): 需要修改的请求头名称 (例如 anthropic-beta)
  • value (string): 标头的值 (例如 token-efficient-tools-2025-02-19)

示例:extra_headers

如果TensorZero通常会向提供商发送以下请求头…

Safety-Checks: on

…那么以下的 extra_headers

extra_headers = [
{ name = "Safety-Checks", value = "off"},
{ name = "Intelligence-Level", value = "AGI"}
]

…覆盖请求头为:

Safety-Checks: off
Intelligence-Level: AGI

type

  • 类型: string
  • 必填项:

定义提供者的类型。详情请参阅集成 » 模型提供者

支持的提供商类型包括 anthropic, aws_bedrock, aws_sagemaker, azure, deepseek, fireworks, gcp_vertex_anthropic, gcp_vertex_gemini, google_ai_studio_gemini, hyperbolic, mistral, openai, sglang, tgi, together, vllmxai

提供者子部分中的其他字段取决于提供者类型。

tensorzero.toml
[models.gpt-4o.providers.azure]
# ...
type = "azure"
# ...
type: "anthropic"
model_name
  • 类型: string
  • 必填项:

定义与Anthropic API配合使用的模型名称。 请参阅Anthropic官方文档获取可用模型名称列表。

tensorzero.toml
[models.claude-3-haiku.providers.anthropic]
# ...
type = "anthropic"
model_name = "claude-3-haiku-20240307"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::ANTHROPIC_API_KEY

定义Anthropic提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAME(详见API参考文档获取更多信息)。

tensorzero.toml
[models.claude-3-haiku.providers.anthropic]
# ...
type = "anthropic"
api_key_location = "dynamic::anthropic_api_key"
# api_key_location = "env::ALTERNATE_ANTHROPIC_API_KEY"
# ...
type: "aws_bedrock"
allow_auto_detect_region
  • 类型: boolean
  • 必填: 否(默认值:false

定义是否自动检测与SageMaker API配合使用的AWS区域。底层实现中,网关将使用AWS SDK尝试自动检测区域。或者,您也可以通过region字段手动指定区域(推荐方式)。

model_id
  • 类型: string
  • 必填项:

定义与AWS Bedrock API配合使用的模型ID。 可查阅AWS Bedrock文档获取可用模型ID列表。

tensorzero.toml
[models.claude-3-haiku.providers.aws_bedrock]
# ...
type = "aws_bedrock"
model_id = "anthropic.claude-3-haiku-20240307-v1:0"
# ...
region
  • 类型: string
  • 必填: 否(默认值:如果设置了凭证则基于凭证,否则为 us-east-1

定义与AWS Bedrock API配合使用的AWS区域。

tensorzero.toml
[models.claude-3-haiku.providers.aws_bedrock]
# ...
type = "aws_bedrock"
region = "us-east-2"
# ...
type: "aws_sagemaker"
allow_auto_detect_region
  • 类型: boolean
  • 必填: 否(默认值:false

定义是否自动检测与SageMaker API配合使用的AWS区域。底层实现中,网关将使用AWS SDK尝试自动检测区域。或者,您也可以通过region字段手动指定区域(推荐方式)。

endpoint_name
  • 类型: string
  • 必填项:

定义与AWS SageMaker API一起使用的端点名称。

hosted_provider
  • 类型: string
  • 必填项:

定义与SageMaker API配合使用的基础模型提供商。 aws_sagemaker 提供商是对其他提供商的封装。

目前,唯一支持的hosted_provideropenai(包括任何与OpenAI兼容的服务器,例如Ollama)。

tensorzero.toml
[models.claude-3-haiku.providers.aws_sagemaker]
# ...
type = "aws_sagemaker"
hosted_provider = "openai"
# ...
model_name
  • 类型: string
  • 必填项:

定义与AWS SageMaker API一起使用的模型名称。

tensorzero.toml
[models.claude-3-haiku.providers.aws_sagemaker]
# ...
type = "aws_sagemaker"
model_name = "gemma3:1b"
# ...
region
  • 类型: string
  • 必填: 否(默认值:如果设置了凭证则基于凭证,否则为 us-east-1

定义与AWS Bedrock API配合使用的AWS区域。

tensorzero.toml
[models.claude-3-haiku.providers.aws_sagemaker]
# ...
type = "aws_sagemaker"
region = "us-east-2"
# ...
type: "azure"

TensorZero Gateway 会自动处理底层API版本(当前为2024-06-01)。 您只需设置deployment_idendpoint字段即可。

deployment_id
  • 类型: string
  • 必填项:

定义Azure OpenAI部署的部署ID。

查看Azure OpenAI的文档获取可用模型列表。

tensorzero.toml
[models.gpt-4o-mini.providers.azure]
# ...
type = "azure"
deployment_id = "gpt4o-mini-20240718"
# ...
endpoint
  • 类型: string
  • 必填项:

定义Azure OpenAI部署的端点(协议和主机名)。

tensorzero.toml
[models.gpt-4o-mini.providers.azure]
# ...
type = "azure"
endpoint = "https://<your-endpoint>.openai.azure.com"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::AZURE_OPENAI_API_KEY

定义Azure OpenAI提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAME(详见API参考文档获取更多信息)。

tensorzero.toml
[models.gpt-4o-mini.providers.azure]
# ...
type = "azure"
api_key_location = "dynamic::azure_openai_api_key"
# api_key_location = "env::ALTERNATE_AZURE_OPENAI_API_KEY"
# ...
type: "deepseek"
model_name
  • 类型: string
  • 必填项:

定义与DeepSeek API配合使用的模型名称。 当前支持的模型包括deepseek-chat (DeepSeek-v3) 和 deepseek-reasoner (R1)。

tensorzero.toml
[models.deepseek_chat.providers.deepseek]
# ...
type = "deepseek"
model_name = "deepseek-chat"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::DEEPSEEK_API_KEY

定义DeepSeek提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAME(详见API参考文档获取更多信息)。

tensorzero.toml
[models.deepseek_chat.providers.deepseek]
# ...
type = "deepseek"
api_key_location = "dynamic::deepseek_api_key"
# api_key_location = "env::ALTERNATE_DEEPSEEK_API_KEY"
# ...
type: "fireworks"
model_name
  • 类型: string
  • 必填项:

定义与Fireworks API一起使用的模型名称。

查看Fireworks的文档获取可用模型名称列表。 您也可以在Fireworks AI上部署自己的模型。

tensorzero.toml
[models."llama-3.1-8b-instruct".providers.fireworks]
# ...
type = "fireworks"
model_name = "accounts/fireworks/models/llama-v3p1-8b-instruct"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::FIREWORKS_API_KEY

定义Fireworks供应商API密钥的存储位置。支持的位置包括env::ENVIRONMENT_VARIABLE(环境变量)和dynamic::ARGUMENT_NAME(动态参数名称),更多详情请参阅API参考文档

tensorzero.toml
[models."llama-3.1-8b-instruct".providers.fireworks]
# ...
type = "fireworks"
api_key_location = "dynamic::fireworks_api_key"
# api_key_location = "env::ALTERNATE_FIREWORKS_API_KEY"
# ...
type: "gcp_vertex_anthropic"
location
  • 类型: string
  • 必填项:

定义GCP Vertex AI Anthropic模型的位置(区域)。

tensorzero.toml
[models.claude-3-haiku.providers.gcp_vertex]
# ...
type = "gcp_vertex_anthropic"
location = "us-central1"
# ...
model_id
  • 类型: string
  • 必填项:

定义GCP Vertex AI模型的模型ID。

查看Anthropic的GCP文档获取可用模型ID列表。

tensorzero.toml
[models.claude-3-haiku.providers.gcp_vertex]
# ...
type = "gcp_vertex_anthropic"
model_id = "claude-3-haiku@20240307"
# ...
project_id
  • 类型: string
  • 必填项:

定义GCP Vertex AI模型的项目ID。

tensorzero.toml
[models.claude-3-haiku-2024030.providers.gcp_vertex]
# ...
type = "gcp_vertex"
project_id = "your-project-id"
# ...
credential_location
  • 类型: string
  • 必填: 否(默认值:env::GCP_CREDENTIALS_PATH

定义GCP Vertex Anthropic提供商的凭证位置。支持的位置包括env::PATH_TO_CREDENTIALS_FILEdynamic::CREDENTIALS_ARGUMENT_NAME(详见API参考)以及file::PATH_TO_CREDENTIALS_FILE

tensorzero.toml
[models.claude-3-haiku.providers.gcp_vertex]
# ...
type = "gcp_vertex_anthropic"
credential_location = "dynamic::gcp_credentials_path"
# credential_location = "env::ALTERNATE_GCP_CREDENTIALS_PATH"
# credential_location = "file::PATH_TO_CREDENTIALS_FILE"
# ...
type: "gcp_vertex_gemini"
location
  • 类型: string
  • 必填项:

定义GCP Vertex Gemini模型的位置(区域)。

tensorzero.toml
[models."gemini-1.5-flash".providers.gcp_vertex]
# ...
type = "gcp_vertex_gemini"
location = "us-central1"
# ...
model_id
  • 类型: string
  • 必填项:

定义GCP Vertex AI模型的模型ID。

查看GCP Vertex AI文档获取可用模型ID列表。

tensorzero.toml
[models."gemini-1.5-flash".providers.gcp_vertex]
# ...
type = "gcp_vertex_gemini"
model_id = "gemini-1.5-flash-001"
# ...
project_id
  • 类型: string
  • 必填项:

定义GCP Vertex AI模型的项目ID。

tensorzero.toml
[models."gemini-1.5-flash".providers.gcp_vertex]
# ...
type = "gcp_vertex_gemini"
project_id = "your-project-id"
# ...
credential_location
  • 类型: string
  • 必填: 否(默认值:env::GCP_CREDENTIALS_PATH

定义GCP Vertex Gemini提供商的凭证位置。支持的位置包括env::PATH_TO_CREDENTIALS_FILEdynamic::CREDENTIALS_ARGUMENT_NAME(详见API参考)以及file::PATH_TO_CREDENTIALS_FILE

tensorzero.toml
[models."gemini-1.5-flash".providers.gcp_vertex]
# ...
type = "gcp_vertex_gemini"
credential_location = "dynamic::gcp_credentials_path"
# credential_location = "env::ALTERNATE_GCP_CREDENTIALS_PATH"
# credential_location = "file::PATH_TO_CREDENTIALS_FILE"
# ...
type: "google_ai_studio_gemini"
model_name
  • 类型: string
  • 必填项:

定义与Google AI Studio Gemini API配合使用的模型名称。 请参阅Google AI Studio文档获取可用模型名称列表。

tensorzero.toml
[models."gemini-1.5-flash".providers.google_ai_studio_gemini]
# ...
type = "google_ai_studio_gemini"
model_name = "gemini-1.5-flash-001"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::GOOGLE_AI_STUDIO_API_KEY

定义Google AI Studio Gemini提供商的API密钥位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAME(详见API参考获取更多信息)。

tensorzero.toml
[models."gemini-1.5-flash".providers.google_ai_studio_gemini]
# ...
type = "google_ai_studio_gemini"
api_key_location = "dynamic::google_ai_studio_api_key"
# api_key_location = "env::ALTERNATE_GOOGLE_AI_STUDIO_API_KEY"
# ...
type: "hyperbolic"
model_name
  • 类型: string
  • 必填项:

定义与Hyperbolic API一起使用的模型名称。

查看Hyperbolic文档获取可用模型名称列表。

tensorzero.toml
[models."meta-llama/Meta-Llama-3-70B-Instruct".providers.hyperbolic]
# ...
type = "hyperbolic"
model_name = "meta-llama/Meta-Llama-3-70B-Instruct"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::HYPERBOLIC_API_KEY

定义Hyperbolic供应商API密钥的存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAME(详见API参考文档获取更多信息)。

tensorzero.toml
[models."meta-llama/Meta-Llama-3-70B-Instruct".providers.hyperbolic]
# ...
type = "hyperbolic"
api_key_location = "dynamic::hyperbolic_api_key"
# api_key_location = "env::ALTERNATE_HYPERBOLIC_API_KEY"
# ...
type: "mistral"
model_name
  • 类型: string
  • 必填项:

定义与Mistral API一起使用的模型名称。

查看Mistral的文档获取可用模型名称列表。

tensorzero.toml
[models."open-mistral-nemo".providers.mistral]
# ...
type = "mistral"
model_name = "open-mistral-nemo-2407"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::MISTRAL_API_KEY

定义Mistral提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAME(详见API参考文档获取更多信息)。

tensorzero.toml
[models."open-mistral-nemo".providers.mistral]
# ...
type = "mistral"
api_key_location = "dynamic::mistral_api_key"
# api_key_location = "env::ALTERNATE_MISTRAL_API_KEY"
# ...
type: "openai"
api_base
  • 类型: string
  • 必填: 否(默认值:https://api.openai.com/v1/

定义OpenAI API的基础URL。

你可以使用api_base字段来调用与OpenAI API兼容的API服务提供商。 不过,许多提供商只是"近似兼容"OpenAI API,因此在这些情况下你可能需要使用专门的模型提供商。

tensorzero.toml
[models."gpt-4o".providers.openai]
# ...
type = "openai"
api_base = "https://api.openai.com/v1/"
# ...
model_name
  • 类型: string
  • 必填项:

定义与OpenAI API一起使用的模型名称。

查看OpenAI的文档获取可用模型名称列表。

tensorzero.toml
[models.gpt-4o-mini.providers.openai]
# ...
type = "openai"
model_name = "gpt-4o-mini-2024-07-18"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::OPENAI_API_KEY

定义OpenAI提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAMEnone(详见API参考文档获取更多信息)。

tensorzero.toml
[models.gpt-4o-mini.providers.openai]
# ...
type = "openai"
api_key_location = "dynamic::openai_api_key"
# api_key_location = "env::ALTERNATE_OPENAI_API_KEY"
# api_key_location = "none"
# ...
type: "sglang"
api_base
  • 类型: string
  • 必填项:

定义SGLang API的基础URL。

tensorzero.toml
[models.llama.providers.sglang]
# ...
type = "sglang"
api_base = "http://localhost:8080/v1/"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:none

定义SGLang提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAMEnone(详见API参考文档获取更多详情)。

tensorzero.toml
[models.llama.providers.sglang]
# ...
type = "sglang"
api_key_location = "dynamic::sglang_api_key"
# api_key_location = "env::ALTERNATE_SGLANG_API_KEY"
# api_key_location = "none" # if authentication is disabled
# ...
type: "together"
model_name
  • 类型: string
  • 必填项:

定义与Together API一起使用的模型名称。

查看Together的文档获取可用模型名称列表。 您也可以在Together AI上部署自己的模型。

tensorzero.toml
[models.llama3_1_8b_instruct_turbo.providers.together]
# ...
type = "together"
model_name = "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::TOGETHER_API_KEY

定义Together AI提供商的API密钥位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAME(详见API参考获取更多详情)。

tensorzero.toml
[models.llama3_1_8b_instruct_turbo.providers.together]
# ...
type = "together"
api_key_location = "dynamic::together_api_key"
# api_key_location = "env::ALTERNATE_TOGETHER_API_KEY"
# ...
type: "vllm"
api_base
  • 类型: string
  • 必填项: 是(默认值:http://localhost:8000/v1/

定义VLLM API的基础URL。

tensorzero.toml
[models."phi-3.5-mini-instruct".providers.vllm]
# ...
type = "vllm"
api_base = "http://localhost:8000/v1/"
# ...
model_name
  • 类型: string
  • 必填项:

定义与vLLM API一起使用的模型名称。

tensorzero.toml
[models."phi-3.5-mini-instruct".providers.vllm]
# ...
type = "vllm"
model_name = "microsoft/Phi-3.5-mini-instruct"
# ...
api_key_location
  • 类型: string
  • 必填: 否(默认值:env::VLLM_API_KEY

定义vLLM提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAMEnone(详见API参考文档获取更多信息)。

tensorzero.toml
[models."phi-3.5-mini-instruct".providers.vllm]
# ...
type = "vllm"
api_key_location = "dynamic::vllm_api_key"
# api_key_location = "env::ALTERNATE_VLLM_API_KEY"
# api_key_location = "none"
# ...
type: "xai"
model_name
  • 类型: string
  • 必填项:

定义与xAI API一起使用的模型名称。

查看xAI的文档获取可用模型名称列表。

tensorzero.toml
[models.grok_2_1212.providers.xai]
# ...
type = "xai"
model_name = "grok-2-1212"
# ...
api_key_location
  • 类型: string
  • 必填项: 否(默认值:env::XAI_API_KEY

定义xAI提供商的API密钥存储位置。 支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAME(详见API参考文档获取更多信息)。

tensorzero.toml
[models.grok_2_1212.providers.xai]
# ...
type = "xai"
api_key_location = "dynamic::xai_api_key"
# api_key_location = "env::ALTERNATE_XAI_API_KEY"
# ...
type: "tgi"
api_base
  • 类型: string
  • 必填项:

定义TGI API的基础URL。

tensorzero.toml
[models.phi_4.providers.tgi]
# ...
type = "tgi"
api_base = "http://localhost:8080/v1/"
# ...
api_key_location
  • 类型: string
  • 必填项: 否(默认值:none

定义TGI提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAMEnone(详见API参考文档获取更多信息)。

tensorzero.toml
[models.phi_4.providers.tgi]
# ...
type = "tgi"
api_key_location = "dynamic::tgi_api_key"
# api_key_location = "env::ALTERNATE_TGI_API_KEY"
# api_key_location = "none" # if authentication is disabled
# ...

[embedding_models.model_name]

[embedding_models.model_name] 部分定义了嵌入模型的行为。 您可以通过包含多个 [embedding_models.model_name] 部分来定义多个模型。

模型与提供商无关,相关提供商在providers子部分中定义(见下文)。

如果您的model_name不是基本字符串,可以用引号进行转义。 例如,基本字符串中不允许包含句点,因此您可以将embedding-0.1定义为[embedding_models."embedding-0.1"]

tensorzero.toml
[embedding_models.openai-text-embedding-3-small]
# fieldA = ...
# fieldB = ...
# ...
[embedding_models."t0-text-embedding-3.5-massive"]
# fieldA = ...
# fieldB = ...
# ...

routing

  • 类型: 字符串数组
  • 必填项:

一个提供者名称列表,用于路由请求。 这些提供者必须在providers子章节中定义(见下文)。 TensorZero网关会尝试将请求路由到列表中的第一个提供者,如果请求不成功,将按顺序回退到后续提供者。

tensorzero.toml
[embedding_models.model-name]
# ...
routing = ["openai", "alternative-provider"]
# ...
[embedding_models.model-name.providers.openai]
# ...
[embedding_models.model-name.providers.alternative-provider]
# ...

[embedding_models.model_name.providers.provider_name]

providers子部分定义了模型特定提供商的行为。 您可以通过包含多个[embedding_models.model_name.providers.provider_name]部分来定义多个提供商。

如果您的provider_name不是基本字符串,可以用引号进行转义。 例如,基本字符串中不允许使用句点,因此您可以将vllm.internal定义为[embedding_models.model_name.providers."vllm.internal"]

tensorzero.toml
[embedding_models.model-name]
# ...
routing = ["openai", "alternative-provider"]
# ...
[embedding_models.model-name.providers.openai]
# ...
[embedding_models.model-name.providers.alternative-provider]
# ...

type

  • 类型: string
  • 必填项:

定义提供者的类型。详情请参阅集成 » 模型提供者

TensorZero目前仅支持openai作为嵌入模型的提供商。 更多集成方案即将推出。

提供者子部分中的其他字段取决于提供者类型。

tensorzero.toml
[embedding_models.model-name.providers.openai]
# ...
type = "openai"
# ...
type: "openai"
api_base
  • 类型: string
  • 必填: 否(默认值:https://api.openai.com/v1/

定义OpenAI API的基础URL。

您可以使用api_base字段来调用与OpenAI API兼容的API服务提供商。 但请注意,许多提供商仅"近似兼容"OpenAI API,因此在这些情况下您可能需要使用专门的模型提供商。

tensorzero.toml
[embedding_models.openai-text-embedding-3-small.providers.openai]
# ...
type = "openai"
api_base = "https://api.openai.com/v1/"
# ...
model_name
  • 类型: string
  • 必填项:

定义与OpenAI API一起使用的模型名称。

查看OpenAI的文档获取可用模型名称列表。

tensorzero.toml
[embedding_models.openai-text-embedding-3-small.providers.openai]
# ...
type = "openai"
model_name = "text-embedding-3-small"
# ...
api_key_location
  • 类型: string
  • 必填项: 否(默认值:env::OPENAI_API_KEY

定义OpenAI提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLEdynamic::ARGUMENT_NAMEnone(详见API参考文档获取更多详情)。

tensorzero.toml
[embedding_models.openai-text-embedding-3-small.providers.openai]
# ...
type = "openai"
api_key_location = "dynamic::openai_api_key"
# api_key_location = "env::ALTERNATE_OPENAI_API_KEY"
# api_key_location = "none"
# ...

[functions.function_name]

[functions.function_name] 部分定义了函数的行为。 您可以通过包含多个 [functions.function_name] 部分来定义多个函数。

一个函数可以拥有多个变体,每个变体都在variants子章节中定义(见下文)。 函数表达了LLM调用的抽象行为(例如消息的格式模式),而其变体则表达了该LLM调用的具体实例化(例如特定的模板和模型)。

如果您的function_name不是基本字符串,可以用引号进行转义。 例如,基本字符串中不允许使用句点,因此您可以将summarize-2.0定义为[functions."summarize-2.0"]

tensorzero.toml
[functions.draft-email]
# fieldA = ...
# fieldB = ...
# ...
[functions.summarize-email]
# fieldA = ...
# fieldB = ...
# ...

assistant_schema

  • 类型: string (路径)
  • 必填:

定义助手模式文件的路径。该路径相对于配置文件。

如果提供,助手模式文件应包含助手消息的JSON Schema。 模式中的变量用于模板化助手消息。 如果提供了模式,所有功能变体也必须提供助手模板(见下文)。

tensorzero.toml
[functions.draft-email]
# ...
assistant_schema = "./functions/draft-email/assistant_schema.json"
# ...
[functions.draft-email.variants.prompt-v1]
# ...
assistant_template = "./functions/draft-email/prompt-v1/assistant_template.minijinja"
# ...

description

  • 类型: string
  • 必填:

定义函数的描述。

未来,此描述将用于指导自动化优化方案。

tensorzero.toml
[functions.extract_data]
# ...
description = "Extract the sender's name (e.g. 'John Doe'), email address (e.g. '[email protected]'), and phone number (e.g. '+1234567890') from a customer's email."
# ...

system_schema

  • 类型: string (路径)
  • 必填:

定义系统模式文件的路径。 该路径相对于配置文件。

如果提供系统模式文件,该文件应包含系统消息的JSON Schema。 模式中的变量用于系统消息的模板化。 如果提供了模式,则所有函数变体也必须提供系统模板(见下文)。

tensorzero.toml
[functions.draft-email]
# ...
system_schema = "./functions/draft-email/system_schema.json"
# ...
[functions.draft-email.variants.prompt-v1]
# ...
system_template = "./functions/draft-email/prompt-v1/system_template.minijinja"
# ...

type

  • 类型: string
  • 必填项:

定义函数的类型。

支持的功能类型包括chatjson

函数部分中的大多数其他字段取决于函数类型。

tensorzero.toml
[functions.draft-email]
# ...
type = "chat"
# ...
type: "chat"
parallel_tool_calls
  • 类型: boolean
  • 必填:

决定是否允许该函数在单次对话轮次中调用多个工具。

如果未设置,TensorZero将默认采用模型提供商的默认行为。

大多数模型提供商不支持此功能。在这些情况下,该字段将被忽略。

tensorzero.toml
[functions.draft-email]
# ...
type = "chat"
parallel_tool_calls = true
# ...
tool_choice
  • 类型: string
  • 必填: 否(默认值:auto

确定该函数的工具选择策略。

支持的工具有以下选择策略:

  • none: 该函数不应使用任何工具。
  • auto: 模型自行决定是否使用工具。如果决定使用工具,还会选择具体使用哪些工具。
  • required: 模型必须使用工具。若存在多个可用工具,则由模型决定使用哪个工具。
  • { specific = "tool_name" }: 模型应使用特定工具。该工具必须在tools字段中定义(见下文)。
tensorzero.toml
[functions.solve-math-problem]
# ...
type = "chat"
tool_choice = "auto"
tools = [
# ...
"run-python"
# ...
]
# ...
[tools.run-python]
# ...
tensorzero.toml
[functions.generate-query]
# ...
type = "chat"
tool_choice = { specific = "query-database" }
tools = [
# ...
"query-database"
# ...
]
# ...
[tools.query-database]
# ...
工具
  • 类型: 字符串数组
  • 必填: 否(默认值:[]

确定该函数可以使用的工具。

支持的工具定义在[tools.tool_name]部分(见下文)。

tensorzero.toml
[functions.draft-email]
# ...
type = "chat"
tools = [
# ...
"query-database"
# ...
]
# ...
[tools.query-database]
# ...
type: "json"
output_schema
  • 类型: string (路径)
  • 必填: 否(默认值:{},即接受任何有效JSON输出的空JSON模式)

定义输出模式文件的路径,该文件应包含函数输出的JSON Schema。该路径是相对于配置文件的。

该模式用于验证函数的输出。

tensorzero.toml
[functions.extract-customer-info]
# ...
type = "json"
output_schema = "./functions/extract-customer-info/output_schema.json"
# ...

user_schema

  • 类型: string (路径)
  • 必填:

定义用户模式文件的路径。 该路径相对于配置文件。

如果提供用户模式文件,该文件应包含用户消息的JSON模式。 模式中的变量用于用户消息模板化。 如果提供了模式,所有函数变体也必须提供用户模板(见下文)。

tensorzero.toml
[functions.draft-email]
# ...
user_schema = "./functions/draft-email/user_schema.json"
# ...
[functions.draft-email.variants.prompt-v1]
# ...
user_template = "./functions/draft-email/prompt-v1/user_template.minijinja"
# ...

[functions.function_name.variants.variant_name]

variants子部分定义了函数特定变体的行为。 您可以通过包含多个[functions.function_name.variants.variant_name]部分来定义多个变体。

如果您的variant_name不是基本字符串,可以用引号进行转义。 例如,基本字符串中不允许使用句点,因此您可以将llama-3.1-8b-instruct定义为[functions.function_name.variants."llama-3.1-8b-instruct"]

tensorzero.toml
[functions.draft-email]
# ...
[functions.draft-email.variants."llama-3.1-8b-instruct"]
# ...
[functions.draft-email.variants.claude-3-haiku]
# ...

type

  • 类型: string
  • 必填项:

定义变体的类型。

TensorZero 目前支持以下变体类型:

类型描述
chat_completionUses a chat completion model to generate responses by processing a series of messages in a conversational format. This is typically what you use out of the box with most LLMs.
experimental_best_of_nGenerates multiple response candidates with other variants, and selects the best one using an evaluator model.
experimental_chain_of_thoughtEncourages the model to reason step by step using a chain-of-thought prompting strategy, which is particularly useful for tasks requiring logical reasoning or multi-step problem-solving. Only available for non-streaming requests to JSON functions.
experimental_dynamic_in_context_learningSelects similar high-quality examples using an embedding of the input, and incorporates them into the prompt to enhance context and improve response quality.
experimental_mixture_of_nGenerates multiple response candidates with other variants, and combines the responses using a fuser model.
tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
type = "chat_completion"
# ...
type: "chat_completion"
assistant_template
  • 类型: string (路径)
  • 必填:

定义助手模板文件的路径。 该路径相对于配置文件。

该文件应包含用于助手消息的MiniJinja模板。 如果模板使用了任何变量,这些变量应在函数的assistant_schema字段中定义。

tensorzero.toml
[functions.draft-email]
# ...
assistant_schema = "./functions/draft-email/assistant_schema.json"
# ...
[functions.draft-email.variants.prompt-v1]
# ...
assistant_template = "./functions/draft-email/prompt-v1/assistant_template.minijinja"
# ...
extra_body
  • 类型: 对象数组(见下方)
  • 必填:

extra_body字段允许您修改TensorZero发送给变体模型提供商的请求体。这一高级功能是一个"应急出口",让您能够使用TensorZero尚未实现的提供商特定功能。

数组中的每个对象必须包含两个字段:

  • pointer: 一个JSON Pointer字符串,用于指定修改请求体的位置
  • value: 要插入该位置的值;可以是任何类型,包括嵌套类型

示例:extra_body

如果TensorZero通常会向供应商发送此请求体…

{
"project": "tensorzero",
"safety_checks": {
"no_internet": false,
"no_agi": true
}
}

…那么接下来的 extra_body

extra_body = [
{ pointer = "/agi", value = true},
{ pointer = "/safety_checks/no_agi", value = { bypass = "on" }}
]

…覆盖请求体为:

{
"agi": true,
"project": "tensorzero",
"safety_checks": {
"no_internet": false,
"no_agi": {
"bypass": "on"
}
}
}
extra_headers
  • 类型: 对象数组(见下方)
  • 必填:

extra_headers字段允许您设置或覆盖TensorZero发送给模型提供商的请求头。这一高级功能是一个"应急出口",让您能够使用TensorZero尚未实现的特定提供商功能。

数组中的每个对象必须包含两个字段:

  • name (string): 需要修改的请求头名称 (例如 anthropic-beta)
  • value (string): 标头的值 (例如 token-efficient-tools-2025-02-19)

示例:extra_headers

如果TensorZero通常会向提供商发送以下请求头…

Safety-Checks: on

…那么以下的 extra_headers

extra_headers = [
{ name = "Safety-Checks", value = "off"},
{ name = "Intelligence-Level", value = "AGI"}
]

…覆盖请求头为:

Safety-Checks: off
Intelligence-Level: AGI
frequency_penalty
  • 类型: float
  • 必填: 否(默认值:null

如果值为正,则根据新词元在当前文本中的出现频率进行惩罚;如果为负,则鼓励使用。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
frequency_penalty = 0.2
# ...
json_mode
  • 类型: string
  • 必填: 否(默认值:strict

定义生成JSON输出的策略。

此参数仅支持type = "json"的函数变体。

支持的模式包括:

  • off: 发起聊天补全请求时不进行任何特殊JSON处理(不推荐)。
  • on: 以JSON模式发起聊天补全请求(如果服务提供商支持该功能)。
  • strict: 以严格JSON模式发起聊天补全请求(若服务提供商支持)。例如,TensorZero网关为OpenAI使用结构化输出。
  • implicit_tool: 在底层实现特殊用途工具的使用请求,并将工具调用转换为JSON响应。
tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
json_mode = "strict"
# ...
max_tokens
  • 类型: integer
  • 必填: 否(默认值:null

定义要生成的最大令牌数。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
max_tokens = 100
# ...
model
  • 类型: string
  • 必填项:

要调用的模型名称。

调用方式... 使用以下格式...
A model defined as [models.my_model] in your tensorzero.toml configuration file model_name="my_model"
A model offered by a model provider, without defining it in your tensorzero.toml configuration file (if supported, see below) model_name="{provider_type}::{model_name}"

例如,如果您有以下配置:

tensorzero.toml
[models.gpt-4o]
routing = ["openai", "azure"]
[models.gpt-4o.providers.openai]
# ...
[models.gpt-4o.providers.azure]
# ...

然后:

  • model = "gpt-4o" 调用您配置中的 gpt-4o 模型,该模型支持从 openai 回退到 azure。详情请参阅 重试与回退
  • model = "openai::gpt-4o" 直接调用OpenAI API获取gpt-4o模型,忽略上面定义的gpt-4o模型。
presence_penalty
  • 类型: float
  • 必填: 否(默认值:null

如果值为正,则根据文本中已出现的标记对新标记进行惩罚;如果值为负,则鼓励新标记的出现。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
presence_penalty = 0.5
# ...
retries
  • 类型: 带有可选键 num_retriesmax_delay_s 的对象
  • 必填: 否(默认为 num_retries = 0max_delay_s = 10

TensorZero的重试策略采用带抖动的截断指数退避算法。 num_retries参数定义重试次数(不包括初始请求)。 max_delay_s参数定义重试之间的最大延迟时间。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
retries = { num_retries = 3, max_delay_s = 10 }
# ...
seed
  • 类型: integer
  • 必填: 否(默认值:null

定义用于变体的种子值。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
seed = 42
system_template
  • 类型: string (路径)
  • 必填:

定义系统模板文件的路径。 该路径相对于配置文件。

该文件应包含系统消息的MiniJinja模板。 如果模板使用了任何变量,这些变量应在函数的system_schema字段中定义。

tensorzero.toml
[functions.draft-email]
# ...
system_schema = "./functions/draft-email/system_schema.json"
# ...
[functions.draft-email.variants.prompt-v1]
# ...
system_template = "./functions/draft-email/prompt-v1/system_template.minijinja"
# ...
temperature
  • 类型: float
  • 必填: 否(默认值:null

定义用于变体的温度值。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
temperature = 0.5
# ...
top_p
  • 类型: float,介于0到1之间
  • 必填: 否(默认值:null

定义在核采样过程中变体使用的top_p值。 通常最多只设置top_ptemperature中的一个参数。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
top_p = 0.3
# ...
user_template
  • 类型: string (路径)
  • 必填:

定义用户模板文件的路径。 该路径相对于配置文件。

该文件应包含用户消息的MiniJinja模板。 如果模板使用任何变量,这些变量应在函数的user_schema字段中定义。

tensorzero.toml
[functions.draft-email]
# ...
user_schema = "./functions/draft-email/user_schema.json"
# ...
[functions.draft-email.variants.prompt-v1]
# ...
user_template = "./functions/draft-email/prompt-v1/user_template.minijinja"
# ...
weight
  • 类型: float
  • 必填: 否(默认值:0)

定义变体的权重。 当调用函数时,该权重决定了采样时变体的相对重要性。

变体将按其权重比例进行概率采样。 例如,如果变体A的权重为1.0,变体B的权重为3.0,那么变体A的采样概率为1.0 / (1.0 + 3.0) = 25%,变体B的采样概率为3.0 / (1.0 + 3.0) = 75%

您可以通过将变体的权重设置为0来禁用它。 该变体仅在以下情况下会被使用:没有其他可用变体可供采样时,或在请求中通过variant_name明确指定该变体。 这对于定义后备变体非常有用,这些变体只有在没有其他可用变体时才会被使用。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
weight = 1.0
# ...
type: "experimental_best_of_n"
candidates
  • 类型: 字符串列表
  • 必填项:

该推理策略会生成N个候选响应,然后由评估模型选出最佳答案。 这种方法允许您利用多个提示或变体,以提高获得高质量响应的可能性。

candidates参数指定了用于生成候选响应结果的变体名称列表。 例如,如果您定义了两个变体(promptApromptB),您可以通过以下代码片段设置candidates列表来生成两个使用promptA的响应和一个使用promptB的响应。 评估器随后会从这三个候选响应中选择最佳结果。

tensorzero.toml
[functions.draft-email.variants.promptA]
type = "chat_completion"
# ...
[functions.draft-email.variants.promptB]
type = "chat_completion"
# ...
[functions.draft-email.variants.best-of-n]
type = "experimental_best_of_n"
candidates = ["promptA", "promptA", "promptB"] # 3 candidate generations
# ...
evaluator
  • 类型: 对象
  • 必填项:

evaluator参数指定了评估模型的配置,该模型将从生成的候选响应中评估并选择最佳响应。

评估器的配置方式类似于chat_completion变体,但不包含type字段。 此处的提示词应当采用您解决原始问题时使用的提示词,因为网关具有专用处理逻辑和模板来将其转换为评估器。

[functions.draft-email.variants.best-of-n]
type = "experimental_best_of_n"
# ...
[functions.draft-email.variants.best-of-n.evaluator]
# Same fields as a `chat_completion` variant (excl.`type`), e.g.:
# user_template = "functions/draft-email/best-of-n/user.minijinja"
# ...
timeout_s
  • 类型: float
  • 必填: 否(默认:300秒)

timeout_s参数指定了生成候选响应的最大允许时间(以秒为单位)。任何生成响应时间超过此时长的候选都将被排除在考虑范围之外。

[functions.draft-email.variants.best-of-n]
type = "experimental_best_of_n"
timeout_s = 60
# ...
weight
  • 类型: float
  • 必填: 否(默认值:0)

定义变体的权重。 当调用函数时,该权重决定了采样时变体的相对重要性。

变体将按其权重比例进行概率采样。 例如,如果变体A的权重为1.0,变体B的权重为3.0,那么变体A的采样概率为1.0 / (1.0 + 3.0) = 25%,变体B的采样概率为3.0 / (1.0 + 3.0) = 75%

您可以通过将变体的权重设置为0来禁用它。 该变体仅在无其他可用变体可采样时,或在请求中通过variant_name明确指定时才会被使用。 这对于定义后备变体非常有用,这些变体仅在其他变体不可用时才会被使用。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
weight = 1.0
# ...
type: "experimental_chain_of_thought"

experimental_chain_of_thought变体类型使用与chat_completion变体相同的配置。

type: "experimental_mixture_of_n"
candidates
  • 类型: 字符串列表
  • 必填项:

这种推理策略会生成N个候选响应,然后由一个融合模型将它们组合起来生成最终答案。这种方法允许您利用多个提示或变体,以提高获得高质量响应的可能性。

candidates参数指定了用于生成候选回复的变体名称列表。 例如,如果您定义了两个变体(promptApromptB),您可以通过以下代码片段设置candidates列表来生成两个使用promptA的回复和一个使用promptB的回复。 融合器随后会将这三个回复合并。

tensorzero.toml
[functions.draft-email.variants.promptA]
type = "chat_completion"
# ...
[functions.draft-email.variants.promptB]
type = "chat_completion"
# ...
[functions.draft-email.variants.mixture-of-n]
type = "experimental_mixture_of_n"
candidates = ["promptA", "promptA", "promptB"] # 3 candidate generations
# ...
fuser
  • 类型: 对象
  • 必填项:

fuser参数指定了用于评估和组合元素的模型配置。

评估器的配置方式类似于chat_completion变体,但不包含type字段。 此处的提示词应当是您用于解决原始问题的提示词,因为网关具有专用处理逻辑和模板来将其转换为融合器。

[functions.draft-email.variants.mixture-of-n]
type = "experimental_mixture_of_n"
# ...
[functions.draft-email.variants.mixture-of-n.fuser]
# Same fields as a `chat_completion` variant (excl.`type`), e.g.:
# user_template = "functions/draft-email/mixture-of-n/user.minijinja"
# ...
timeout_s
  • 类型: float
  • 必填: 否(默认:300秒)

timeout_s参数指定生成候选响应的最大允许时间(以秒为单位)。任何生成响应时间超过此时长的候选都将被排除在考虑范围之外。

[functions.draft-email.variants.mixture-of-n]
type = "experimental_mixture_of_n"
timeout_s = 60
# ...
weight
  • 类型: float
  • 必填: 否(默认值:0)

定义变体的权重。 当调用函数时,该权重决定了采样时变体的相对重要性。

变体将按其权重比例进行概率采样。 例如,如果变体A的权重为1.0,变体B的权重为3.0,则变体A的采样概率为1.0 / (1.0 + 3.0) = 25%,变体B的采样概率为3.0 / (1.0 + 3.0) = 75%

您可以通过将变体的权重设置为0来禁用它。 该变体仅在无其他可用采样变体时才会被使用,或当请求中通过variant_name明确指定时才会被使用。 这对于定义后备变体非常有用,这些变体仅在没有其他可用变体时才会被使用。

[functions.draft-email.variants.mixture-of-n]
# ...
weight = 1.0
# ...
type: "experimental_dynamic_in_context_learning"
embedding_model
  • 类型: string
  • 必填项:

调用的嵌入模型名称。

调用方式... 使用以下格式...
A model defined as [models.my_model] in your tensorzero.toml configuration file model_name="my_model"
A model offered by a model provider, without defining it in your tensorzero.toml configuration file (if supported, see below) model_name="{provider_type}::{model_name}"

例如,如果您有以下配置:

tensorzero.toml
[embedding_models.text-embedding-3-small]
#...
[embedding_models.text-embedding-3-small.providers.openai]
# ...
[embedding_models.text-embedding-3-small.providers.azure]
# ...

然后:

  • embedding_model = "text-embedding-3-small" 调用您配置中的 text-embedding-3-small 模型。
  • embedding_model = "openai::text-embedding-3-small" 直接调用OpenAI API获取text-embedding-3-small模型,忽略上面定义的text-embedding-3-small模型。
extra_body
  • 类型: 对象数组(见下方)
  • 必填:

extra_body字段允许您修改TensorZero发送给变体模型提供商的请求体。这一高级功能是一个"应急出口",让您能够使用TensorZero尚未实现的提供商特定功能。

对于experimental_dynamic_in_context_learning变体,extra_body仅适用于聊天补全请求。

数组中的每个对象必须包含两个字段:

  • pointer: 一个JSON Pointer字符串,用于指定修改请求体的位置
  • value: 要插入该位置的值;可以是任何类型,包括嵌套类型

示例:extra_body

如果TensorZero通常会向供应商发送此请求体…

{
"project": "tensorzero",
"safety_checks": {
"no_internet": false,
"no_agi": true
}
}

…那么接下来的 extra_body

extra_body = [
{ pointer = "/agi", value = true},
{ pointer = "/safety_checks/no_agi", value = { bypass = "on" }}
]

…覆盖请求体为:

{
"agi": true,
"project": "tensorzero",
"safety_checks": {
"no_internet": false,
"no_agi": {
"bypass": "on"
}
}
}
extra_headers
  • 类型: 对象数组(见下方)
  • 必填:

extra_headers字段允许您设置或覆盖TensorZero发送给模型提供商的请求头。这一高级功能是一个"应急出口",让您能够使用TensorZero尚未实现的特定提供商功能。

数组中的每个对象必须包含两个字段:

  • name (string): 需要修改的请求头名称 (例如 anthropic-beta)
  • value (string): 标头的值 (例如 token-efficient-tools-2025-02-19)

示例:extra_headers

如果TensorZero通常会向提供商发送以下请求头…

Safety-Checks: on

…那么以下的 extra_headers

extra_headers = [
{ name = "Safety-Checks", value = "off"},
{ name = "Intelligence-Level", value = "AGI"}
]

…覆盖请求头为:

Safety-Checks: off
Intelligence-Level: AGI
json_mode
  • 类型: string
  • 必填: 否(默认值:strict

定义生成JSON输出的策略。

此参数仅支持type = "json"的函数变体。

支持的模式包括:

  • off: 发起聊天补全请求时不进行任何特殊JSON处理(不推荐)。
  • on: 以JSON模式发起聊天补全请求(如果服务提供商支持该功能)。
  • strict: 以严格JSON模式发起聊天补全请求(如果服务提供商支持)。例如,TensorZero网关为OpenAI使用结构化输出。
  • implicit_tool: 在底层实现一个专用工具的使用请求,并将工具调用转换为JSON响应。
tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
json_mode = "strict"
# ...
k
  • 类型: 非负整数
  • 必填项:

定义推理时要检索的示例数量。

tensorzero.toml
[functions.draft-email.variants.dicl]
# ...
k = 10
# ...
max_tokens
  • 类型: integer
  • 必填: 否(默认值:null

定义要生成的最大令牌数。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
max_tokens = 100
# ...
model
  • 类型: string
  • 必填项:

要调用的模型名称。

调用方式... 使用以下格式...
A model defined as [models.my_model] in your tensorzero.toml configuration file model_name="my_model"
A model offered by a model provider, without defining it in your tensorzero.toml configuration file (if supported, see below) model_name="{provider_type}::{model_name}"

例如,如果您有以下配置:

tensorzero.toml
[models.gpt-4o]
routing = ["openai", "azure"]
[models.gpt-4o.providers.openai]
# ...
[models.gpt-4o.providers.azure]
# ...

然后:

  • model = "gpt-4o" 调用您配置中的 gpt-4o 模型,该模型支持从 openai 回退到 azure。详情请参阅 重试与回退机制
  • model = "openai::gpt-4o" 直接调用OpenAI API获取gpt-4o模型,忽略上方定义的gpt-4o模型。
retries
  • 类型: 带有可选键 num_retriesmax_delay_s 的对象
  • 必填: 否(默认为 num_retries = 0max_delay_s = 10

TensorZero的重试策略采用带抖动的截断指数退避算法。 num_retries参数定义重试次数(不包括初始请求)。 max_delay_s参数定义重试之间的最大延迟时间。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
retries = { num_retries = 3, max_delay_s = 10 }
# ...
seed
  • 类型: integer
  • 必填: 否(默认值:null

定义用于变体的种子值。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
seed = 42
system_instructions
  • 类型: string (路径)
  • 必填:

定义系统指令文件的路径。该路径相对于配置文件。

系统指令是一个文本文件,将被添加到评估者的系统提示中。 与system_template不同,它不支持变量。 该文件包含静态指令,用于定义AI助手在特定功能变体中的行为和角色。

tensorzero.toml
[functions.draft-email.variants.dicl]
# ...
system_instructions = "./functions/draft-email/prompt-v1/system_template.txt"
# ...
temperature
  • 类型: float
  • 必填: 否(默认值:null

定义用于变体的温度值。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
temperature = 0.5
# ...
weight
  • 类型: float
  • 必填: 否(默认值:0)

定义变体的权重。 当调用函数时,该权重决定了采样时变体的相对重要性。

变体将按其权重比例进行概率采样。 例如,如果变体A的权重为1.0,变体B的权重为3.0,那么变体A的采样概率为1.0 / (1.0 + 3.0) = 25%,变体B的采样概率为3.0 / (1.0 + 3.0) = 75%

您可以通过将变体的权重设置为0来禁用它。 该变体仅在无其他可用变体进行采样时,或在请求中通过variant_name明确指定时才会被使用。 这对于定义后备变体非常有用,这些变体仅在其他变体都不可用时才会被调用。

tensorzero.toml
[functions.draft-email.variants.prompt-v1]
# ...
weight = 1.0
# ...

type: "experimental_chain_of_thought"

除了type参数外,此变体与chat_completion变体类型具有相同的配置选项。 请参阅该文档以了解可用的选项。

[metrics]

[metrics] 部分用于定义指标的行为。 您可以通过包含多个 [metrics.metric_name] 部分来定义多个指标。

指标名称不能为commentdemonstration,因为这些名称被保留供内部使用。

如果您的metric_name不是基础字符串,可以用引号进行转义。 例如,基础字符串中不允许包含句点,因此您可以将beats-gpt-3.5定义为[metrics."beats-gpt-3.5"]

tensorzero.toml
[metrics.task-completed]
# fieldA = ...
# fieldB = ...
# ...
[metrics.user-rating]
# fieldA = ...
# fieldB = ...
# ...

level

  • 类型: string
  • 必填项:

定义该指标是适用于单次推理还是整个运行周期。

支持的级别包括 inferenceepisode

tensorzero.toml
[metrics.valid-output]
# ...
level = "inference"
# ...
[metrics.task-completed]
# ...
level = "episode"
# ...

optimize

  • 类型: string
  • 必填项:

定义该指标应最大化还是最小化。

支持的取值包括 maxmin

tensorzero.toml
[metrics.mistakes-made]
# ...
optimize = "min"
# ...
[metrics.user-rating]
# ...
optimize = "max"
# ...

type

  • 类型: string
  • 必填项:

定义指标的类型。

支持的指标类型包括 booleanfloat

tensorzero.toml
[metrics.user-rating]
# ...
type = "float"
# ...
[metrics.task-completed]
# ...
type = "boolean"
# ...

[tools.tool_name]

[tools.tool_name] 部分用于定义工具的行为。 您可以通过包含多个 [tools.tool_name] 部分来定义多个工具。

如果你的tool_name不是基础字符串,可以用引号进行转义。 例如,基础字符串中不允许包含句点,因此你可以将run-python-3.10定义为[tools."run-python-3.10"]

您可以通过将工具添加到函数的tools字段来为该函数启用工具。

tensorzero.toml
[functions.weather-chatbot]
# ...
type = "chat"
tools = [
# ...
"get-temperature"
# ...
]
# ...
[tools.get-temperature]
# ...

description

  • 类型: string
  • 必填项:

定义提供给模型的工具描述。

通常,通过提供工具的详细描述,您可以显著提升响应质量。

tensorzero.toml
[tools.get-temperature]
# ...
description = "Get the current temperature in a given location (e.g. \"Tokyo\") using the specified unit (must be \"celsius\" or \"fahrenheit\")."
# ...

parameters

  • 类型: string (路径)
  • 必填项:

定义参数文件的路径。 该路径相对于配置文件。

该文件应包含工具参数的JSON Schema

tensorzero.toml
[tools.get-temperature]
# ...
parameters = "./tools/get-temperature.json"
# ...

strict

  • 类型: boolean
  • 必填: 否(默认值:false

如果设置为true,TensorZero网关会尝试为工具参数使用严格的JSON生成方式。 这通常会提高响应质量。

仅有少数服务提供商支持严格的JSON格式生成。 例如,TensorZero网关为OpenAI提供了结构化输出功能。 若服务提供商不支持严格模式,TensorZero网关将忽略此字段。

tensorzero.toml
[tools.get-temperature]
# ...
strict = true
# ...

[object_storage]

[object_storage] 部分定义了对象存储的行为,该存储用于在多模态推理过程中存储使用的图像。

type

  • 类型: string
  • 必填项:

定义要使用的对象存储类型。

支持的类型包括:

  • s3_compatible: 使用兼容S3协议的对象存储服务。
  • filesystem: 将图像存储在本地目录中。
  • disabled: 禁用对象存储。

有关每种类型的更多详细信息,请参阅以下部分。

type: "s3_compatible"

如果设置type = "s3_compatible",TensorZero将使用兼容S3的对象存储服务来存储和检索图像。

TensorZero网关将按以下优先级顺序尝试从以下资源获取凭据:

  1. S3_ACCESS_KEY_IDS3_SECRET_ACCESS_KEY 环境变量
  2. AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量
  3. AWS SDK 的默认凭证配置

如果设置 type = "s3_compatible",则以下字段可用。

endpoint
  • 类型: string
  • 必填项: 否(默认为AWS S3)

定义对象存储服务的终端节点。 您可以使用此字段为对象存储服务指定自定义终端节点(例如GCP云存储、Cloudflare R2等众多服务)。

bucket_name
  • 类型: string
  • 必填:

定义用于对象存储的存储桶名称。除非在endpoint字段中已指定,否则应提供存储桶名称。

region
  • 类型: string
  • 必填:

定义对象存储服务的区域(如适用)。

某些服务提供商(如AWS S3)需要此配置。 如果提供商不需要指定区域,则可以省略此字段。

allow_http
  • 类型: boolean
  • 必填: 否(默认为 false

通常情况下,TensorZero网关需要通过HTTPS访问对象存储服务。 如果设置为true,TensorZero网关将改用HTTP访问对象存储服务。 这在本地开发时很有用(例如本地MinIO部署),但不建议在生产环境中使用。

type: "filesystem"
path
  • 类型: string
  • 必填项:

定义用于对象存储的目录路径。

type: "disabled"

如果设置type = "disabled",TensorZero网关将不会存储或检索图像。 此类型没有其他可用字段。