
MLflow Gateway Python API 详解URI 配置、路由模型与启动实战【免费下载链接】mlflowThe open source AI engineering platform for agents, LLMs, and ML models. MLflow enables teams of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data.项目地址: https://gitcode.com/GitHub_Trending/ml/mlflow本篇技术指南聚焦 MLflow 开源仓库中 mlflow.gateway 的 Python 侧编程接口与配置体系覆盖set_gateway_uri/get_gateway_uri的 URI 管理、mlflow.gateway.config中的 Provider、EndpointType、EndpointConfig 等配置模型以及如何通过 YAML 配置文件和mlflow gateway start命令启动网关服务。读完本文你将掌握以编程方式对接 MLflow AI Gateway、编写合法网关配置、以及从源码层理解其校验与解析机制的全部要点。从 API 参考页到真实代码mlflow.gateway的 API 参考文档定义在 docs/api_reference/source/python_api/mlflow.gateway.rst它是一份基于 Sphinxautomodule指令的自动生成式文档页指定了三个被收录的 API 面mlflow.gateway模块本体包含其所有公开成员mlflow.gateway.base_models模块的ConfigModel类mlflow.gateway.config模块排除model_computed_fields这一实现细节。也就是说这份 RST 文档最终渲染出的内容完全来自上述模块源码中的 docstring 与签名。因此要真正理解这份 API 参考文档必须回到源码层。本文所有结论均以当前仓库 mlflow/gateway 目录下的实现为准。模块入口gateway URI 的编程式管理mlflow.gateway模块的公开 API 非常收敛全部导出集中在 mlflow/gateway/init.pyfrom mlflow.gateway.utils import get_gateway_uri, set_gateway_uri __all__ [ get_gateway_uri, set_gateway_uri, ]两个函数都实现在 mlflow/gateway/utils.py 中它们共同构成网关客户端侧的核心状态管理。set_gateway_uri设定全局网关地址set_gateway_uri(gateway_uri: str)的作用是在全局上下文中设置一个已配置且正在运行的 MLflow AI Gateway 服务器 URI。只有先设置合法 URI才能使用网关相关的 fluent API。函数签名与语义源码 mlflow/gateway/utils.py#L161-L177def set_gateway_uri(gateway_uri: str): Sets the uri of a configured and running MLflow AI Gateway server in a global context. Providing a valid uri and calling this function is required in order to use the MLflow AI Gateway fluent APIs. Args: gateway_uri: The full uri of a running MLflow AI Gateway server or, if running on Databricks, databricks. if not _is_valid_uri(gateway_uri): raise MlflowException.invalid_parameter_value( The gateway uri provided is missing required elements. Ensure that the schema and netloc are provided. ) global _gateway_uri _gateway_uri gateway_uri注意其中隐含的 URI 合法性校验_is_valid_uri见 mlflow/gateway/utils.py#L147-L158特殊值databricks直接视为合法用于 Databricks 托管环境其余字符串必须通过urlparse解析出scheme 和 netloc即必须形如http://127.0.0.1:5000这样的完整地址协议头 域名/主机都不可缺只提供裸主机名或不完整地址会抛出MlflowException错误类型为invalid_parameter_value。典型用法import mlflow.gateway mlflow.gateway.set_gateway_uri(http://127.0.0.1:5000)get_gateway_uri读取当前网关地址get_gateway_uri()返回当前生效的网关服务器 URI其解析优先级如下源码 mlflow/gateway/utils.py#L180-L195若此前调用过set_gateway_uri直接返回该值否则回退读取环境变量MLFLOW_GATEWAY_URI两者皆无时抛出MlflowException提示先调用set_gateway_uri()或设置环境变量。from mlflow.gateway import get_gateway_uri uri get_gateway_uri() # 可能抛出 MlflowException环境变量MLFLOW_GATEWAY_URI的定义位于 mlflow/environment_variables.py#L583被声明为实验性Experimental可能变更或移除。同文件中 mlflow/environment_variables.py#L593 还定义了MLFLOW_GATEWAY_CONFIG用于指定网关配置文件路径该变量会被mlflow gateway start命令作为--config-path的默认值读取见下文 CLI 部分。配置模型基座base_models 模块RST 文档显式收录了mlflow.gateway.base_models.ConfigModel。mlflow/gateway/base_models.py 定义了四个 Pydantic 基类它们是整个网关数据层的基石类用途extra 策略说明RequestModel网关请求数据如 chat / completions 请求allow允许额外字段以兼容各家厂商特有的 embedding 等请求参数ResponseModel网关响应数据如 GetRoute 返回的路由信息ignore忽略未知字段保证客户端跨后端获得一致的响应体验ConfigModel网关配置数据如某条 OpenAI completions 路由的名称、模型名、API Key 等ignore忽略配置中的未知字段LimitModel网关限额数据renewal_period、key、value 等ignore配置类限额模型此外还有SetLimitsModel其字段为class SetLimitsModel(BaseModel, extraignore): route: str limits: list[dict[str, Any]]它对应网关 SetLimits 请求体包含目标路由名称与限额列表。这些基类选择请求宽松、响应与配置严格的策略是网关作为多厂商统一入口的关键设计请求侧要容纳各家差异响应侧则要保证客户端拿到稳定结构。配置模块详解mlflow.gateway.configmlflow/gateway/config.py共 661 行是网关配置体系的核心包含 Provider 枚举、EndpointType 枚举、各厂商配置模型、Endpoint/Route 模型以及配置文件的加载与校验函数。Provider支持的模型服务商Provider枚举mlflow/gateway/config.py#L42-L72列出了网关可对接的全部 Provideropenai, anthropic, cohere, ai21labs, mlflow-model-serving, mosaicml, huggingface-text-generation-inference, palm, gemini, bedrock别名 amazon-bedrock, databricks-model-serving, databricks, mistral, togetherai, litellm, azure, groq, deepseek, xai, openrouter, ollama, vertex_ai, portkey, sap-ai-core其中databricks-model-serving与databricks在源码注释中明确标注仅在 Databricks 上受支持。Provider.values()类方法返回所有枚举值的集合供配置校验使用。EndpointType三类网关端点EndpointType枚举mlflow/gateway/config.py#L83-L86定义了端点的任务类型即网关对外暴露的统一 API 形态枚举值含义llm/v1/completions文本补全llm/v1/chat对话式补全llm/v1/embeddings向量嵌入与之配套的GatewayRequestType枚举mlflow/gateway/config.py#L89-L101则进一步细分了网关内部的请求类型包括统一的unified/chat、unified/embeddings、面向各厂商的 passthrough 请求如passthrough/model/openai-chat、passthrough/model/anthropic-messages、passthrough/model/gemini-generateContent以及proxy/raw原始代理。各厂商配置模型每个 Provider 都有对应的 Pydantic 配置类配置字段随厂商而异这里列出有代表性的几个全部位于 mlflow/gateway/config.pyOpenAIConfigL146-L194——字段最复杂的一个openai_api_key必填openai_api_type枚举openai/azure/azuread默认openai且大小写不敏感通过_missing_实现openai_api_base默认https://api.openai.com/v1当 type 为openai时openai_api_version、openai_deployment_name、openai_organization可选。其_validate_field_compatibility校验器强制了字段兼容规则当openai_api_type为openai时不得设置openai_deployment_name当为azure/azuread时openai_api_base、openai_deployment_name、openai_api_version三者必须同时提供且不得设置openai_organization。AnthropicConfigL197-L204anthropic_api_key必填anthropic_version默认2023-06-01anthropic_api_base默认https://api.anthropic.com/v1。AmazonBedrockConfigL254-L256仅含aws_config一个字段其类型在AWSBearerToken、AWSRole、AWSIdAndKey、AWSBaseConfig之间选择分别对应三种 AWS 认证方式AWSRoleaws_role_arn 可选aws_regionsession_length_seconds默认 900 秒15 分钟AWSIdAndKeyaws_access_key_idaws_secret_access_key 可选aws_session_tokenAWSBearerTokenaws_bearer_token。MlflowModelServingConfigL223-L228model_server_url为兼容 Pydantic 对model_前缀的保留命名空间警告显式设置了model_config pydantic.ConfigDict(protected_namespaces())。LiteLLMConfigL328-L359litellm_providerlitellm_auth_config后者会移除 MLflow 特有的auth_mode字段解析 API Key并将 Databricks 的 base URL 规范化为包含/serving-endpoints的形式。其余还有 CohereConfig、AI21LabsConfig、MosaicMLConfig、PaLMConfig、GeminiConfig、HuggingFaceTextGenerationInferenceConfig、MistralConfig、PortkeyConfig、VertexAIConfig 等。API Key 解析机制所有厂商配置中的 API Key 字段都经过_resolve_api_key_from_inputmlflow/gateway/config.py#L367-L407处理接受三种输入形式按顺序尝试环境变量引用以$开头的字符串如$OPENAI_API_KEY仅当MLFLOW_GATEWAY_RESOLVE_API_KEY_FROM_ENV环境变量为true时生效会从环境变量中读取真实密钥密钥文件路径当MLFLOW_GATEWAY_RESOLVE_API_KEY_FROM_FILE为true时若字符串指向一个存在的文件则读取文件内容作为密钥明文密钥本身以上两种都不命中时直接把字符串当作密钥返回。这套机制允许在 YAML 配置中不落盘明文密钥而使用环境变量或密钥文件间接引用提升安全性。需要说明的是源码注释将其限定为 legacy YAML-config gateway 的解析路径即仅用于传统配置文件方式。EndpointConfig端点配置模型EndpointConfigmlflow/gateway/config.py#L464-L562是 YAML 配置中每个 endpoint 的对应模型字段如下字段类型必填说明namestr是端点名称只能包含 ASCII 字母数字、下划线、连字符和点正则[a-zA-Z0-9_\-\.]不能含空格与 URL 保留字符endpoint_typeEndpointType是必须是上述三类端点类型之一modelModel是模型信息name、provider、configlimitLimit否限流配置calls次数、key可选、renewal_period周期字符串limit会通过limits.parse(f{calls}/{renewal_period})验证语法例如calls: 10、renewal_period: 1 minute会拼成10/1 minute交给限流解析器。Model模型的provider字段接受枚举字符串或已在 provider_registry 中注册的 Provider 名称且当 provider 属于标准 Provider 集合时强制要求提供config源码 mlflow/gateway/config.py#L480-L489 中的validate_model。此外还有针对模型名的语义校验validate_route_type_and_model_nameL491-L513MosaicML 的 chat 路由只接受以受支持前缀开头的模型名AI21Labs 只接受j2-ultra、j2-mid、j2-light三个模型。TrafficRouteConfig流量拆分路由除了普通端点配置还支持流量拆分路由L565-L574class RouteDestinationConfig(ConfigModel): name: str traffic_percentage: int class TrafficRouteConfig(ConfigModel): name: str task_type: EndpointType destinations: list[RouteDestinationConfig] routing_strategy: Literal[TRAFFIC_SPLIT] TRAFFIC_SPLIT一条路由routes包含名称、任务类型与多个目的地每个目的地指向一个端点并分配流量百分比。check_configuration_route_name_collisionsmlflow/gateway/utils.py#L68-L117会校验端点与路由名称全局不得重复路由目的地必须引用已存在的端点名目的地的endpoint_type必须与路由task_type一致每个目的地的traffic_percentage必须在 0100 之间同一路由所有目的地的流量百分比之和必须恰好为 100。配置文件的加载与校验_load_gateway_configmlflow/gateway/config.py#L623-L643负责读取 YAML 文件用yaml.safe_load解析解析失败报 not a valid yaml file调用check_configuration_deprecated_fields拒绝已废弃的route_type键提示改用endpoint_type调用check_configuration_route_name_collisions做名称冲突与流量百分比校验实例化GatewayConfig(endpoints[...], routes[...])Pydantic 校验失败时抛出带错误详情的MlflowException。一个典型的端点 YAML 配置如下对应_ROUTE_EXTRA_SCHEMA中给出的示例形态endpoints: - name: openai-completions endpoint_type: llm/v1/completions model: name: gpt-4o-mini provider: openai config: openai_api_key: $OPENAI_API_KEY网关启动命令mlflow gateway start网关服务通过 CLI 子命令启动定义在 mlflow/gateway/cli.pymlflow gateway start --config-path path/to/config.yaml \ --host 127.0.0.1 \ --port 5000 \ --workers 2各选项默认值与行为源码 mlflow/gateway/cli.py#L25-L56选项默认值说明--config-path无必填可用环境变量MLFLOW_GATEWAY_CONFIG指定网关配置文件路径启动前会先经_validate_config校验非法则直接报BadParameter--host127.0.0.1监听地址--port5000监听端口--workers2worker 进程数注意两点Windows 不支持is_windows()检查通过后会抛出ClickException(MLflow AI Gateway does not support Windows.)已标记废弃start命令被deprecated装饰器标注提示迁移到新的基于 UI 的 AI Gateway仓库内对应文档位于 docs/docs/genai 目录参见 mlflow-ai-gateway 集成文档。CLI 入口本身仍可用但作为历史形态存在。命令内部流程是记录GatewayStartEvent遥测事件后调用 mlflow/gateway/runner.py 中的run_app拉起应用。流式响应与协议工具网关客户端侧的流式处理工具集中在 mlflow/gateway/utils.py 后半部分虽然不在mlflow.gateway的__all__中但对理解网关的 SSE 流式行为很有帮助parse_sse_lines/stream_sse_data解析标准 SSE 格式data:前缀行、多行块、跳过[DONE]标记handle_incomplete_chunks处理服务端返回的不完整分块缓冲拼接至换行边界再产出safe_stream流式响应中途出错时HTTP 头已发出、无法再抛 HTTPException把异常编码为 SSE 错误块交给客户端make_streaming_response将异步生成器包装为text/event-stream的StreamingResponsetranslate_http_exception装饰器把AIGatewayException与MlflowException翻译为 FastAPIHTTPException这是网关 HTTP 层统一错误出口的机制。实践要点小结围绕mlflow.gateway的 Python API可以从源码归纳出几条可直接落地的实践要点URI 三段式设置要么编程式mlflow.gateway.set_gateway_uri(http://host:port)要么通过环境变量MLFLOW_GATEWAY_URI二选一即可读取时优先级前者高于后者配置即 PydanticYAML 配置会被严格解析为GatewayConfig模型字段名、枚举值、模型名校验均在前置阶段完成配置错误会在启动时而非请求时暴露密钥尽量不落盘优先用$ENV_VAR引用或密钥文件路径配合MLFLOW_GATEWAY_RESOLVE_API_KEY_FROM_ENV/MLFLOW_GATEWAY_RESOLVE_API_KEY_FROM_FILE两个开关Azure OpenAI 有三件套约束type 为azure/azuread时openai_api_base、openai_deployment_name、openai_api_version必须同时出现流量拆分百分比严格校验路由内各目的地流量百分比之和必须恰好为 100且任务类型与目标端点必须一致API 参考文档与源码强绑定本页 RST 的最终内容即 mlflow/gateway/init.py、mlflow/gateway/base_models.py 与 mlflow/gateway/config.py 中 docstring 的渲染结果阅读源码可获得比文档页更完整的字段默认值与校验规则。【免费下载链接】mlflowThe open source AI engineering platform for agents, LLMs, and ML models. MLflow enables teams of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data.项目地址: https://gitcode.com/GitHub_Trending/ml/mlflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考