配置参考
配置文件是TensorZero的核心支柱。 它定义了网关的行为,包括模型及其供应商、函数及其变体、工具、指标等。 开发者通过在此配置文件中定义相关的提示模板、模式和其他参数,来表达LLM调用的行为。
你可以查看示例配置文件这里。
配置文件是一个TOML格式的文件,包含几个主要部分(TOML表):gateway
、clickhouse
、models
、model_providers
、functions
、variants
、tools
和metrics
。
[gateway]
[gateway]
部分定义了 TensorZero 网关的行为。
bind_address
- 类型: string
- 必填: 否(默认值:
0.0.0.0:3000
)
定义TensorZero网关绑定的套接字地址。
[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。
[gateway]# ...observability.enabled = true# ...
disable_observability
(已弃用)
- 类型: boolean
- 必填: 否(默认值:
false
)
禁用TensorZero网关的可观测性功能(不推荐)。
[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"]
。
[models.claude-3-haiku-20240307]# fieldA = ...# fieldB = ...# ...
[models."llama-3.1-8b-instruct"]# fieldA = ...# fieldB = ...# ...
routing
- 类型: 字符串数组
- 必填项: 是
一个提供者名称列表,用于路由请求。
这些提供者必须在providers
子章节中定义(见下文)。
TensorZero网关会尝试将请求路由到列表中的第一个提供者,如果请求不成功,将按顺序回退到后续提供者。
[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"]
。
[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
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
extra_headers
如果TensorZero通常会向提供商发送以下请求头…
Safety-Checks: on
…那么以下的 extra_headers
…
extra_headers = [ { name = "Safety-Checks", value = "off"}, { name = "Intelligence-Level", value = "AGI"}]
…覆盖请求头为:
Safety-Checks: offIntelligence-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
, vllm
和 xai
。
提供者子部分中的其他字段取决于提供者类型。
[models.gpt-4o.providers.azure]# ...type = "azure"# ...
type: "anthropic"
type: "anthropic"
type: "anthropic"
model_name
- 类型: string
- 必填项: 是
定义与Anthropic API配合使用的模型名称。 请参阅Anthropic官方文档获取可用模型名称列表。
[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_VARIABLE
和dynamic::ARGUMENT_NAME
(详见API参考文档获取更多信息)。
[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"
type: "aws_bedrock"
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列表。
[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区域。
[models.claude-3-haiku.providers.aws_bedrock]# ...type = "aws_bedrock"region = "us-east-2"# ...
type: "aws_sagemaker"
type: "aws_sagemaker"
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_provider
是openai
(包括任何与OpenAI兼容的服务器,例如Ollama)。
[models.claude-3-haiku.providers.aws_sagemaker]# ...type = "aws_sagemaker"hosted_provider = "openai"# ...
model_name
- 类型: string
- 必填项: 是
定义与AWS SageMaker API一起使用的模型名称。
[models.claude-3-haiku.providers.aws_sagemaker]# ...type = "aws_sagemaker"model_name = "gemma3:1b"# ...
region
- 类型: string
- 必填: 否(默认值:如果设置了凭证则基于凭证,否则为
us-east-1
)
定义与AWS Bedrock API配合使用的AWS区域。
[models.claude-3-haiku.providers.aws_sagemaker]# ...type = "aws_sagemaker"region = "us-east-2"# ...
type: "azure"
type: "azure"
type: "azure"
TensorZero Gateway 会自动处理底层API版本(当前为2024-06-01
)。
您只需设置deployment_id
和endpoint
字段即可。
deployment_id
- 类型: string
- 必填项: 是
定义Azure OpenAI部署的部署ID。
查看Azure OpenAI的文档获取可用模型列表。
[models.gpt-4o-mini.providers.azure]# ...type = "azure"deployment_id = "gpt4o-mini-20240718"# ...
endpoint
- 类型: string
- 必填项: 是
定义Azure OpenAI部署的端点(协议和主机名)。
[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_VARIABLE
和dynamic::ARGUMENT_NAME
(详见API参考文档获取更多信息)。
[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"
type: "deepseek"
type: "deepseek"
model_name
- 类型: string
- 必填项: 是
定义与DeepSeek API配合使用的模型名称。
当前支持的模型包括deepseek-chat
(DeepSeek-v3) 和 deepseek-reasoner
(R1)。
[models.deepseek_chat.providers.deepseek]# ...type = "deepseek"model_name = "deepseek-chat"# ...
api_key_location
- 类型: string
- 必填: 否(默认值:
env::DEEPSEEK_API_KEY
)
定义DeepSeek提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLE
和dynamic::ARGUMENT_NAME
(详见API参考文档获取更多信息)。
[models.deepseek_chat.providers.deepseek]# ...type = "deepseek"api_key_location = "dynamic::deepseek_api_key"# api_key_location = "env::ALTERNATE_DEEPSEEK_API_KEY"# ...
type: "fireworks"
type: "fireworks"
type: "fireworks"
model_name
- 类型: string
- 必填项: 是
定义与Fireworks API一起使用的模型名称。
查看Fireworks的文档获取可用模型名称列表。 您也可以在Fireworks AI上部署自己的模型。
[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参考文档。
[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"
type: "gcp_vertex_anthropic"
type: "gcp_vertex_anthropic"
location
- 类型: string
- 必填项: 是
定义GCP Vertex AI Anthropic模型的位置(区域)。
[models.claude-3-haiku.providers.gcp_vertex]# ...type = "gcp_vertex_anthropic"location = "us-central1"# ...
model_id
- 类型: string
- 必填项: 是
定义GCP Vertex AI模型的模型ID。
查看Anthropic的GCP文档获取可用模型ID列表。
[models.claude-3-haiku.providers.gcp_vertex]# ...type = "gcp_vertex_anthropic"model_id = "claude-3-haiku@20240307"# ...
project_id
- 类型: string
- 必填项: 是
定义GCP Vertex AI模型的项目ID。
[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_FILE
、dynamic::CREDENTIALS_ARGUMENT_NAME
(详见API参考)以及file::PATH_TO_CREDENTIALS_FILE
。
[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"
type: "gcp_vertex_gemini"
type: "gcp_vertex_gemini"
location
- 类型: string
- 必填项: 是
定义GCP Vertex Gemini模型的位置(区域)。
[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列表。
[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。
[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_FILE
、dynamic::CREDENTIALS_ARGUMENT_NAME
(详见API参考)以及file::PATH_TO_CREDENTIALS_FILE
。
[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"
type: "google_ai_studio_gemini"
type: "google_ai_studio_gemini"
model_name
- 类型: string
- 必填项: 是
定义与Google AI Studio Gemini API配合使用的模型名称。 请参阅Google AI Studio文档获取可用模型名称列表。
[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_VARIABLE
和dynamic::ARGUMENT_NAME
(详见API参考获取更多信息)。
[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"
type: "hyperbolic"
type: "hyperbolic"
model_name
- 类型: string
- 必填项: 是
定义与Hyperbolic API一起使用的模型名称。
查看Hyperbolic文档获取可用模型名称列表。
[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_VARIABLE
和dynamic::ARGUMENT_NAME
(详见API参考文档获取更多信息)。
[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"
type: "mistral"
type: "mistral"
model_name
- 类型: string
- 必填项: 是
定义与Mistral API一起使用的模型名称。
查看Mistral的文档获取可用模型名称列表。
[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_VARIABLE
和dynamic::ARGUMENT_NAME
(详见API参考文档获取更多信息)。
[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"
type: "openai"
type: "openai"
api_base
- 类型: string
- 必填: 否(默认值:
https://api.openai.com/v1/
)
定义OpenAI API的基础URL。
你可以使用api_base
字段来调用与OpenAI API兼容的API服务提供商。
不过,许多提供商只是"近似兼容"OpenAI API,因此在这些情况下你可能需要使用专门的模型提供商。
[models."gpt-4o".providers.openai]# ...type = "openai"api_base = "https://api.openai.com/v1/"# ...
model_name
- 类型: string
- 必填项: 是
定义与OpenAI API一起使用的模型名称。
查看OpenAI的文档获取可用模型名称列表。
[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_VARIABLE
、dynamic::ARGUMENT_NAME
和none
(详见API参考文档获取更多信息)。
[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"
type: "sglang"
type: "sglang"
api_base
- 类型: string
- 必填项: 是
定义SGLang API的基础URL。
[models.llama.providers.sglang]# ...type = "sglang"api_base = "http://localhost:8080/v1/"# ...
api_key_location
- 类型: string
- 必填: 否(默认值:
none
)
定义SGLang提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLE
、dynamic::ARGUMENT_NAME
和none
(详见API参考文档获取更多详情)。
[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"
type: "together"
type: "together"
model_name
- 类型: string
- 必填项: 是
定义与Together API一起使用的模型名称。
查看Together的文档获取可用模型名称列表。 您也可以在Together AI上部署自己的模型。
[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_VARIABLE
和dynamic::ARGUMENT_NAME
(详见API参考获取更多详情)。
[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"
type: "vllm"
type: "vllm"
api_base
- 类型: string
- 必填项: 是(默认值:
http://localhost:8000/v1/
)
定义VLLM API的基础URL。
[models."phi-3.5-mini-instruct".providers.vllm]# ...type = "vllm"api_base = "http://localhost:8000/v1/"# ...
model_name
- 类型: string
- 必填项: 是
定义与vLLM API一起使用的模型名称。
[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_VARIABLE
、dynamic::ARGUMENT_NAME
和none
(详见API参考文档获取更多信息)。
[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"
type: "xai"
type: "xai"
model_name
- 类型: string
- 必填项: 是
定义与xAI API一起使用的模型名称。
查看xAI的文档获取可用模型名称列表。
[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_VARIABLE
和dynamic::ARGUMENT_NAME
(详见API参考文档获取更多信息)。
[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"
type: "tgi"
type: "tgi"
api_base
- 类型: string
- 必填项: 是
定义TGI API的基础URL。
[models.phi_4.providers.tgi]# ...type = "tgi"api_base = "http://localhost:8080/v1/"# ...
api_key_location
- 类型: string
- 必填项: 否(默认值:
none
)
定义TGI提供商的API密钥存储位置。支持的位置包括env::ENVIRONMENT_VARIABLE
、dynamic::ARGUMENT_NAME
和none
(详见API参考文档获取更多信息)。
[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"]
。
[embedding_models.openai-text-embedding-3-small]# fieldA = ...# fieldB = ...# ...
[embedding_models."t0-text-embedding-3.5-massive"]# fieldA = ...# fieldB = ...# ...
routing
- 类型: 字符串数组
- 必填项: 是
一个提供者名称列表,用于路由请求。
这些提供者必须在providers
子章节中定义(见下文)。
TensorZero网关会尝试将请求路由到列表中的第一个提供者,如果请求不成功,将按顺序回退到后续提供者。
[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"]
。
[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
作为嵌入模型的提供商。
更多集成方案即将推出。
提供者子部分中的其他字段取决于提供者类型。
[embedding_models.model-name.providers.openai]# ...type = "openai"# ...
type: "openai"
type: "openai"
type: "openai"
api_base
- 类型: string
- 必填: 否(默认值:
https://api.openai.com/v1/
)
定义OpenAI API的基础URL。
您可以使用api_base
字段来调用与OpenAI API兼容的API服务提供商。
但请注意,许多提供商仅"近似兼容"OpenAI API,因此在这些情况下您可能需要使用专门的模型提供商。
[embedding_models.openai-text-embedding-3-small.providers.openai]# ...type = "openai"api_base = "https://api.openai.com/v1/"# ...
model_name
- 类型: string
- 必填项: 是
定义与OpenAI API一起使用的模型名称。
查看OpenAI的文档获取可用模型名称列表。
[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_VARIABLE
、dynamic::ARGUMENT_NAME
和none
(详见API参考文档获取更多详情)。
[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"]
。
[functions.draft-email]# fieldA = ...# fieldB = ...# ...
[functions.summarize-email]# fieldA = ...# fieldB = ...# ...
assistant_schema
- 类型: string (路径)
- 必填: 否
定义助手模式文件的路径。该路径相对于配置文件。
如果提供,助手模式文件应包含助手消息的JSON Schema。 模式中的变量用于模板化助手消息。 如果提供了模式,所有功能变体也必须提供助手模板(见下文)。
[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
- 必填: 否
定义函数的描述。
未来,此描述将用于指导自动化优化方案。
[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。 模式中的变量用于系统消息的模板化。 如果提供了模式,则所有函数变体也必须提供系统模板(见下文)。
[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
- 必填项: 是
定义函数的类型。
支持的功能类型包括chat
和json
。
函数部分中的大多数其他字段取决于函数类型。
[functions.draft-email]# ...type = "chat"# ...
type: "chat"
type: "chat"
type: "chat"
parallel_tool_calls
- 类型: boolean
- 必填: 否
决定是否允许该函数在单次对话轮次中调用多个工具。
如果未设置,TensorZero将默认采用模型提供商的默认行为。
大多数模型提供商不支持此功能。在这些情况下,该字段将被忽略。
[functions.draft-email]# ...type = "chat"parallel_tool_calls = true# ...
tool_choice
- 类型: string
- 必填: 否(默认值:
auto
)
确定该函数的工具选择策略。
支持的工具有以下选择策略:
none
: 该函数不应使用任何工具。auto
: 模型自行决定是否使用工具。如果决定使用工具,还会选择具体使用哪些工具。required
: 模型必须使用工具。若存在多个可用工具,则由模型决定使用哪个工具。{ specific = "tool_name" }
: 模型应使用特定工具。该工具必须在tools
字段中定义(见下文)。
[functions.solve-math-problem]# ...type = "chat"tool_choice = "auto"tools = [ # ... "run-python" # ...]# ...
[tools.run-python]# ...
[functions.generate-query]# ...type = "chat"tool_choice = { specific = "query-database" }tools = [ # ... "query-database" # ...]# ...
[tools.query-database]# ...
工具
- 类型: 字符串数组
- 必填: 否(默认值:
[]
)
确定该函数可以使用的工具。
支持的工具定义在[tools.tool_name]
部分(见下文)。
[functions.draft-email]# ...type = "chat"tools = [ # ... "query-database" # ...]# ...
[tools.query-database]# ...
type: "json"
type: "json"
type: "json"
output_schema
- 类型: string (路径)
- 必填: 否(默认值:
{}
,即接受任何有效JSON输出的空JSON模式)
定义输出模式文件的路径,该文件应包含函数输出的JSON Schema。该路径是相对于配置文件的。
该模式用于验证函数的输出。
[functions.extract-customer-info]# ...type = "json"output_schema = "./functions/extract-customer-info/output_schema.json"# ...
user_schema
- 类型: string (路径)
- 必填: 否
定义用户模式文件的路径。 该路径相对于配置文件。
如果提供用户模式文件,该文件应包含用户消息的JSON模式。 模式中的变量用于用户消息模板化。 如果提供了模式,所有函数变体也必须提供用户模板(见下文)。
[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"]
。
[functions.draft-email]# ...
[functions.draft-email.variants."llama-3.1-8b-instruct"]# ...
[functions.draft-email.variants.claude-3-haiku]# ...
type
- 类型: string
- 必填项: 是
定义变体的类型。
TensorZero 目前支持以下变体类型:
类型 | 描述 |
---|---|
chat_completion | Uses 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_n | Generates multiple response candidates with other variants, and selects the best one using an evaluator model. |
experimental_chain_of_thought | Encourages 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_learning | Selects 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_n | Generates multiple response candidates with other variants, and combines the responses using a fuser model. |
[functions.draft-email.variants.prompt-v1]# ...type = "chat_completion"# ...
type: "chat_completion"
type: "chat_completion"
type: "chat_completion"
assistant_template
- 类型: string (路径)
- 必填: 否
定义助手模板文件的路径。 该路径相对于配置文件。
该文件应包含用于助手消息的MiniJinja模板。
如果模板使用了任何变量,这些变量应在函数的assistant_schema
字段中定义。
[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
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
extra_headers
如果TensorZero通常会向提供商发送以下请求头…
Safety-Checks: on
…那么以下的 extra_headers
…
extra_headers = [ { name = "Safety-Checks", value = "off"}, { name = "Intelligence-Level", value = "AGI"}]
…覆盖请求头为:
Safety-Checks: offIntelligence-Level: AGI
frequency_penalty
- 类型: float
- 必填: 否(默认值:
null
)
如果值为正,则根据新词元在当前文本中的出现频率进行惩罚;如果为负,则鼓励使用。
[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响应。
[functions.draft-email.variants.prompt-v1]# ...json_mode = "strict"# ...
max_tokens
- 类型: integer
- 必填: 否(默认值:
null
)
定义要生成的最大令牌数。
[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}"
|
例如,如果您有以下配置:
[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
)
如果值为正,则根据文本中已出现的标记对新标记进行惩罚;如果值为负,则鼓励新标记的出现。
[functions.draft-email.variants.prompt-v1]# ...presence_penalty = 0.5# ...
retries
- 类型: 带有可选键
num_retries
和max_delay_s
的对象 - 必填: 否(默认为
num_retries = 0
和max_delay_s = 10
)
TensorZero的重试策略采用带抖动的截断指数退避算法。
num_retries
参数定义重试次数(不包括初始请求)。
max_delay_s
参数定义重试之间的最大延迟时间。
[functions.draft-email.variants.prompt-v1]# ...retries = { num_retries = 3, max_delay_s = 10 }# ...
seed
- 类型: integer
- 必填: 否(默认值:
null
)
定义用于变体的种子值。
[functions.draft-email.variants.prompt-v1]# ...seed = 42
system_template
- 类型: string (路径)
- 必填: 否
定义系统模板文件的路径。 该路径相对于配置文件。
该文件应包含系统消息的MiniJinja模板。
如果模板使用了任何变量,这些变量应在函数的system_schema
字段中定义。
[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
)
定义用于变体的温度值。
[functions.draft-email.variants.prompt-v1]# ...temperature = 0.5# ...
top_p
- 类型: float,介于0到1之间
- 必填: 否(默认值:
null
)
定义在核采样过程中变体使用的top_p
值。
通常最多只设置top_p
和temperature
中的一个参数。
[functions.draft-email.variants.prompt-v1]# ...top_p = 0.3# ...
user_template
- 类型: string (路径)
- 必填: 否
定义用户模板文件的路径。 该路径相对于配置文件。
该文件应包含用户消息的MiniJinja模板。
如果模板使用任何变量,这些变量应在函数的user_schema
字段中定义。
[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
明确指定该变体。
这对于定义后备变体非常有用,这些变体只有在没有其他可用变体时才会被使用。
[functions.draft-email.variants.prompt-v1]# ...weight = 1.0# ...
type: "experimental_best_of_n"
type: "experimental_best_of_n"
type: "experimental_best_of_n"
candidates
- 类型: 字符串列表
- 必填项: 是
该推理策略会生成N个候选响应,然后由评估模型选出最佳答案。 这种方法允许您利用多个提示或变体,以提高获得高质量响应的可能性。
candidates
参数指定了用于生成候选响应结果的变体名称列表。
例如,如果您定义了两个变体(promptA
和promptB
),您可以通过以下代码片段设置candidates
列表来生成两个使用promptA
的响应和一个使用promptB
的响应。
评估器随后会从这三个候选响应中选择最佳结果。
[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
明确指定时才会被使用。
这对于定义后备变体非常有用,这些变体仅在其他变体不可用时才会被使用。
[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"
type: "experimental_mixture_of_n"
type: "experimental_mixture_of_n"
candidates
- 类型: 字符串列表
- 必填项: 是
这种推理策略会生成N个候选响应,然后由一个融合模型将它们组合起来生成最终答案。这种方法允许您利用多个提示或变体,以提高获得高质量响应的可能性。
candidates
参数指定了用于生成候选回复的变体名称列表。
例如,如果您定义了两个变体(promptA
和promptB
),您可以通过以下代码片段设置candidates
列表来生成两个使用promptA
的回复和一个使用promptB
的回复。
融合器随后会将这三个回复合并。
[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"
type: "experimental_dynamic_in_context_learning"
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}"
|
例如,如果您有以下配置:
[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
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
extra_headers
如果TensorZero通常会向提供商发送以下请求头…
Safety-Checks: on
…那么以下的 extra_headers
…
extra_headers = [ { name = "Safety-Checks", value = "off"}, { name = "Intelligence-Level", value = "AGI"}]
…覆盖请求头为:
Safety-Checks: offIntelligence-Level: AGI
json_mode
- 类型: string
- 必填: 否(默认值:
strict
)
定义生成JSON输出的策略。
此参数仅支持type = "json"
的函数变体。
支持的模式包括:
off
: 发起聊天补全请求时不进行任何特殊JSON处理(不推荐)。on
: 以JSON模式发起聊天补全请求(如果服务提供商支持该功能)。strict
: 以严格JSON模式发起聊天补全请求(如果服务提供商支持)。例如,TensorZero网关为OpenAI使用结构化输出。implicit_tool
: 在底层实现一个专用工具的使用请求,并将工具调用转换为JSON响应。
[functions.draft-email.variants.prompt-v1]# ...json_mode = "strict"# ...
k
- 类型: 非负整数
- 必填项: 是
定义推理时要检索的示例数量。
[functions.draft-email.variants.dicl]# ...k = 10# ...
max_tokens
- 类型: integer
- 必填: 否(默认值:
null
)
定义要生成的最大令牌数。
[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}"
|
例如,如果您有以下配置:
[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_retries
和max_delay_s
的对象 - 必填: 否(默认为
num_retries = 0
和max_delay_s = 10
)
TensorZero的重试策略采用带抖动的截断指数退避算法。
num_retries
参数定义重试次数(不包括初始请求)。
max_delay_s
参数定义重试之间的最大延迟时间。
[functions.draft-email.variants.prompt-v1]# ...retries = { num_retries = 3, max_delay_s = 10 }# ...
seed
- 类型: integer
- 必填: 否(默认值:
null
)
定义用于变体的种子值。
[functions.draft-email.variants.prompt-v1]# ...seed = 42
system_instructions
- 类型: string (路径)
- 必填: 否
定义系统指令文件的路径。该路径相对于配置文件。
系统指令是一个文本文件,将被添加到评估者的系统提示中。
与system_template
不同,它不支持变量。
该文件包含静态指令,用于定义AI助手在特定功能变体中的行为和角色。
[functions.draft-email.variants.dicl]# ...system_instructions = "./functions/draft-email/prompt-v1/system_template.txt"# ...
temperature
- 类型: float
- 必填: 否(默认值:
null
)
定义用于变体的温度值。
[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
明确指定时才会被使用。
这对于定义后备变体非常有用,这些变体仅在其他变体都不可用时才会被调用。
[functions.draft-email.variants.prompt-v1]# ...weight = 1.0# ...
type: "experimental_chain_of_thought"
除了type参数外,此变体与chat_completion
变体类型具有相同的配置选项。
请参阅该文档以了解可用的选项。
[metrics]
[metrics]
部分用于定义指标的行为。
您可以通过包含多个 [metrics.metric_name]
部分来定义多个指标。
指标名称不能为comment
或demonstration
,因为这些名称被保留供内部使用。
如果您的metric_name
不是基础字符串,可以用引号进行转义。
例如,基础字符串中不允许包含句点,因此您可以将beats-gpt-3.5
定义为[metrics."beats-gpt-3.5"]
。
[metrics.task-completed]# fieldA = ...# fieldB = ...# ...
[metrics.user-rating]# fieldA = ...# fieldB = ...# ...
level
- 类型: string
- 必填项: 是
定义该指标是适用于单次推理还是整个运行周期。
支持的级别包括 inference
和 episode
。
[metrics.valid-output]# ...level = "inference"# ...
[metrics.task-completed]# ...level = "episode"# ...
optimize
- 类型: string
- 必填项: 是
定义该指标应最大化还是最小化。
支持的取值包括 max
和 min
。
[metrics.mistakes-made]# ...optimize = "min"# ...
[metrics.user-rating]# ...optimize = "max"# ...
type
- 类型: string
- 必填项: 是
定义指标的类型。
支持的指标类型包括 boolean
和 float
。
[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
字段来为该函数启用工具。
[functions.weather-chatbot]# ...type = "chat"tools = [ # ... "get-temperature" # ...]# ...
[tools.get-temperature]# ...
description
- 类型: string
- 必填项: 是
定义提供给模型的工具描述。
通常,通过提供工具的详细描述,您可以显著提升响应质量。
[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。
[tools.get-temperature]# ...parameters = "./tools/get-temperature.json"# ...
strict
- 类型: boolean
- 必填: 否(默认值:
false
)
如果设置为true
,TensorZero网关会尝试为工具参数使用严格的JSON生成方式。
这通常会提高响应质量。
仅有少数服务提供商支持严格的JSON格式生成。 例如,TensorZero网关为OpenAI提供了结构化输出功能。 若服务提供商不支持严格模式,TensorZero网关将忽略此字段。
[tools.get-temperature]# ...strict = true# ...
[object_storage]
[object_storage]
部分定义了对象存储的行为,该存储用于在多模态推理过程中存储使用的图像。
type
- 类型: string
- 必填项: 是
定义要使用的对象存储类型。
支持的类型包括:
s3_compatible
: 使用兼容S3协议的对象存储服务。filesystem
: 将图像存储在本地目录中。disabled
: 禁用对象存储。
有关每种类型的更多详细信息,请参阅以下部分。
type: "s3_compatible"
type: "s3_compatible"
type: "s3_compatible"
如果设置type = "s3_compatible"
,TensorZero将使用兼容S3的对象存储服务来存储和检索图像。
TensorZero网关将按以下优先级顺序尝试从以下资源获取凭据:
S3_ACCESS_KEY_ID
和S3_SECRET_ACCESS_KEY
环境变量AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
环境变量- 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"
type: "filesystem"
type: "filesystem"
path
- 类型: string
- 必填项: 是
定义用于对象存储的目录路径。
type: "disabled"
type: "disabled"
type: "disabled"
如果设置type = "disabled"
,TensorZero网关将不会存储或检索图像。
此类型没有其他可用字段。