
Opik Python SDK Service Toggles Client 实战指南读取平台功能开关配置【免费下载链接】comet-llmDebug, evaluate, and monitor your LLM applications, RAG systems, and agentic workflows with comprehensive tracing, automated evaluations, and production-ready dashboards.项目地址: https://gitcode.com/GitHub_Trending/co/comet-llm导读Service Toggles服务功能开关是 Opik LLM 可观测平台中控制各功能模块启停的服务端配置机制。本文基于 Opik Python SDK 的ServiceTogglesClient说明文档结合仓库内的 Python SDK 源码与 Java 后端实现系统讲解如何通过opik.Opik().rest_client.service_toggles读取平台的功能开关配置、理解ServiceTogglesConfig返回结构中每个字段的业务语义、以及后端v1/private/toggles端点背后的配置来源。读完本文你将掌握在集成代码中正确判断某个功能是否可用的完整方法并了解如何通过环境变量在服务端调整这些开关。Service Toggles 是什么Opik 平台的功能开关机制在 Opik 平台中许多功能模块Python 评估器、Guardrails、警报、各 LLM Provider 接入、数据集导出等并非对所有部署实例无条件开放。平台通过一组service toggles服务级功能开关统一控制这些模块的启停。Opik Python SDK 中的 Service Toggles client 正是为消费这些开关状态而设计的The Service Toggles client provides methods for managing service feature toggles in the Opik platform.它让客户端应用可以拉取到当前部署实例的功能开关快照从而在代码层面感知某项能力当前是否可用避免直接调用已关闭的功能而报错。从架构链路看完整的数据流是服务端运维人员通过环境变量如TOGGLE_GUARDRAILS_ENABLED在配置文件中设定各开关的默认值Java 后端通过GET /v1/private/toggles/端点把聚合后的开关配置以 JSON 形式暴露出来见 ServiceTogglesResource.javaPython SDK 的ServiceTogglesClient请求该端点并把响应解析为强类型的ServiceTogglesConfig模型。快速开始读取服务开关配置根据 service_toggles.rst 中的官方示例最基础的使用方式如下import opik client opik.Opik() # 获取服务开关配置 config client.rest_client.service_toggles.get_service_toggles()创建opik.Opik()后通过rest_client即 REST API 客户端下的service_toggles属性即可访问ServiceTogglesClient实例。该客户端在 client.py 中定义核心方法签名如下def get_service_toggles( self, *, request_options: typing.Optional[RequestOptions] None ) - ServiceTogglesConfig: Get Service Toggles参数request_options可选的请求级配置如超时、额外请求头大多数场景可省略返回值ServiceTogglesConfig类型封装了平台全部功能开关的当前状态。注意官方示例中feature_enabled是示意代码文档中的判断示例# Check if a specific feature is enabled if config.feature_enabled: # Use the feature pass这里的feature_enabled仅是占位示意——真实的ServiceTogglesConfig模型并不存在feature_enabled这个字段。实际判断某个功能是否开启时应使用模型中的具体字段例如config client.rest_client.service_toggles.get_service_toggles() if config.guardrails_enabled: print(Guardrails 功能已开启) else: print(Guardrails 功能未开启请勿调用相关接口)这一点可以从ServiceTogglesConfig的完整字段定义得到确认详见下一节。深入解析 ServiceTogglesConfig 返回结构get_service_toggles()返回的ServiceTogglesConfig是一个 Pydantic 模型定义在 service_toggles_config.py。该模型由 Fern 依据 OpenAPI 定义自动生成所有布尔字段均以NotNull约束必填并且同时暴露了 snake_casePython 访问名与 camelCaseJSON 字段名两种命名。完整字段清单与语义以下字段对应平台的各项功能开关取值均为布尔值bool含义来自 config.yml 中的官方注释Python 字段名snake_caseJSON 字段名camelCase功能说明python_evaluator_enabledpythonEvaluatorEnabled是否启用 Python 评估器trace_thread_python_evaluator_enabledtraceThreadPythonEvaluatorEnabled是否启用 trace thread线程追踪的 Python 评估器span_llm_as_judge_enabledspanLlmAsJudgeEnabled是否启用 span 级的 LLM-as-Judge 评估器span_user_defined_metric_python_enabledspanUserDefinedMetricPythonEnabled是否启用 span 级的用户自定义 Python 指标评估器guardrails_enabledguardrailsEnabled是否启用 Guardrails 安全护栏功能opik_ai_enabledopikAIEnabled是否启用 OpikAI 功能alerts_enabledalertsEnabled是否启用告警Alert功能welcome_wizard_enabledwelcomeWizardEnabled是否启用新用户引导Welcome Wizardexport_enabledexportEnabled是否启用导出/下载功能cost_intelligence_enabledcostIntelligenceEnabled是否启用成本智能Cost Intelligence / AI Spend功能dataset_versioning_enableddatasetVersioningEnabled是否启用数据集版本管理功能dataset_export_enableddatasetExportEnabled是否启用数据集导出为 CSV 的功能demo_data_enableddemoDataEnabled部署是否会在新用户注册时生成演示项目数据为 false 时前端跳过演示数据加载页openai_provider_enabledopenaiProviderEnabled是否启用 OpenAI Provideranthropic_provider_enabledanthropicProviderEnabled是否启用 Anthropic Providergemini_provider_enabledgeminiProviderEnabled是否启用 Gemini Provideropenrouter_provider_enabledopenrouterProviderEnabled是否启用 OpenRouter Providervertexai_provider_enabledvertexaiProviderEnabled是否启用 Vertex AI Providerbedrock_provider_enabledbedrockProviderEnabled是否启用 Bedrock Providercustomllm_provider_enabledcustomllmProviderEnabled是否启用 Custom LLM Providerollama_provider_enabledollamaProviderEnabled是否启用 Ollama Providerollie_enabledollieEnabled是否启用 Ollie AI 助手集成同时作为 Agent Insights 自由 SQL 查询路径只读 ClickHouse 客户端的开关project_homepage_enabledprojectHomepageEnabled是否启用项目主页为 false 时 Ollie 页面是默认项目页online_scoring_tracing_enabledonlineScoringTracingEnabled在线评分LLM-as-judge评估循环是否持久化为监控 trace/spandefault_page_sizedefaultPageSize非布尔字段UI 表格默认每页行数typing.Optional[int]后端校验范围为 5100按业务域归类理解为便于记忆可以把这些开关分为四类评估与评分类python_evaluator_enabled、trace_thread_python_evaluator_enabled、span_llm_as_judge_enabled、span_user_defined_metric_python_enabled、online_scoring_tracing_enabled平台功能类guardrails_enabled、opik_ai_enabled、alerts_enabled、welcome_wizard_enabled、export_enabled、cost_intelligence_enabled、dataset_versioning_enabled、dataset_export_enabled、demo_data_enabled、ollie_enabled、project_homepage_enabledLLM Provider 类openai_provider_enabled、anthropic_provider_enabled、gemini_provider_enabled、openrouter_provider_enabled、vertexai_provider_enabled、bedrock_provider_enabled、customllm_provider_enabled、ollama_provider_enabledUI 行为类default_page_size非布尔控制分页大小。服务端如何产生这些开关config.yml 与环境变量这些开关并非 SDK 虚构而是来自服务端配置。Java 后端在 ServiceTogglesConfig.java 中定义了同名字段全部NotNulldefaultPageSize额外带Min(5) Max(100)校验并通过 OpikConfiguration.java 将其挂载到全局配置对象上。每个开关都可以通过环境变量在部署时覆盖。以下为 config.yml 中serviceToggles配置块的默认值与对应环境变量配置键环境变量默认值pythonEvaluatorEnabledTOGGLE_PYTHON_EVALUATOR_ENABLEDtruetraceThreadPythonEvaluatorEnabledTOGGLE_TRACE_THREAD_PYTHON_EVALUATOR_ENABLEDtruespanLlmAsJudgeEnabledTOGGLE_SPAN_LLM_AS_JUDGE_ENABLEDtruespanUserDefinedMetricPythonEnabledTOGGLE_SPAN_USER_DEFINED_METRIC_PYTHON_ENABLEDtrueguardrailsEnabledTOGGLE_GUARDRAILS_ENABLEDfalseopikAIEnabledTOGGLE_OPIK_AI_ENABLEDfalsealertsEnabledTOGGLE_ALERTS_ENABLEDtruewelcomeWizardEnabledTOGGLE_WELCOME_WIZARD_ENABLEDfalseexportEnabledTOGGLE_EXPORT_ENABLEDtruedatasetVersioningEnabledTOGGLE_DATASET_VERSIONING_ENABLEDtruedatasetExportEnabledDATASET_EXPORT_ENABLEDfalsedemoDataEnabledTOGGLE_DEMO_DATA_ENABLEDtruecostIntelligenceEnabledTOGGLE_COST_INTELLIGENCE_ENABLEDfalseopenaiProviderEnabledTOGGLE_OPENAI_PROVIDER_ENABLEDtrueanthropicProviderEnabledTOGGLE_ANTHROPIC_PROVIDER_ENABLEDtruegeminiProviderEnabledTOGGLE_GEMINI_PROVIDER_ENABLEDtrueopenrouterProviderEnabledTOGGLE_OPENROUTER_PROVIDER_ENABLEDtruevertexaiProviderEnabledTOGGLE_VERTEXAI_PROVIDER_ENABLEDtruebedrockProviderEnabledTOGGLE_BEDROCK_PROVIDER_ENABLEDtruecustomllmProviderEnabledTOGGLE_CUSTOMLLM_PROVIDER_ENABLEDtrueollamaProviderEnabledTOGGLE_OLLAMA_PROVIDER_ENABLEDtrueollieEnabledTOGGLE_OLLIE_ENABLEDfalseprojectHomepageEnabledTOGGLE_PROJECT_HOMEPAGE_ENABLEDfalseonlineScoringTracingEnabledTOGGLE_ONLINE_SCORING_TRACING_ENABLEDtruedefaultPageSizeUI_DEFAULT_PAGE_SIZE100可以看到评估器、导出、主流 LLM Provider、告警、在线评分追踪等默认开启而 Guardrails、Cost Intelligence、Ollie、数据集导出 CSV、Welcome Wizard 等默认关闭。这意味着在不同部署实例上同一个 SDK 调用拿到的ServiceTogglesConfig可能是不同的——判断功能可用性必须以运行时返回值而非代码假设为准。底层实现get_service_toggles 的调用链ServiceTogglesClient是带类型包装的高层客户端其内部委托给RawServiceTogglesClient完成真实 HTTP 请求源码见 raw_client.py_response self._client_wrapper.httpx_client.request( v1/private/toggles, methodGET, request_optionsrequest_options, )关键点请求路径v1/private/toggles相对 SDK 配置的 base URL与 Java 后端 ServiceTogglesResource.java 中Path(/v1/private/toggles/)的端点一一对应请求方法GET响应解析2xx 状态下将响应 JSON 通过parse_obj_as(ServiceTogglesConfig, ...)解析为强类型模型非 2xx 或 JSON 解析失败时抛出ApiError同步/异步双实现ServiceTogglesClient同步与AsyncServiceTogglesClient异步各自持有对应的 Raw 客户端。在后端ServiceTogglesResource.getToggles()的实现极为简洁——直接返回配置对象中的serviceToggles快照return Response.ok() .entity(config.getServiceToggles()) .build();因此可以推断该端点返回的内容完全由服务端启动时的配置决定不依赖任何运行期状态是一个典型的只读配置查询接口。获取原始响应with_raw_response在某些场景下如需要检查 HTTP 状态码、响应头或做调试可以使用with_raw_response属性获取未解析的原始响应包装client opik.Opik() raw client.rest_client.service_toggles.with_raw_response response raw.get_service_toggles() # response 为 HttpResponse[ServiceTogglesConfig] print(response.response.status_code) # 原始 HTTP 响应对象 print(response.data.guardrails_enabled) # 仍是解析后的强类型数据该属性在 client.py 中定义为返回RawServiceTogglesClient而 Raw 客户端的方法返回HttpResponse[ServiceTogglesConfig]见 raw_client.py其中既包含原始response又包含解析后的data。文档的autoclass指令特意排除了with_raw_response成员但它作为补充能力同样可用。异步客户端与错误处理异步用法如果代码运行在 asyncio 环境中可以使用异步客户端定义于 client.pyimport asyncio import opik client opik.Opik() async def main() - None: config await client.rest_client.service_toggles.get_service_toggles() print(config.alerts_enabled) asyncio.run(main())异步版与同步版共享同一个v1/private/toggles端点区别仅在于底层使用异步 httpx 客户端与AsyncHttpResponse。错误处理由于底层请求可能失败网络问题、服务端 4xx/5xx建议对调用做异常处理。Raw 客户端在非 2xx 或响应体非 JSON 时会抛出ApiError其status_code、headers、body属性携带详细信息参见 raw_client.pyfrom opik.rest_api.core.api_error import ApiError try: config client.rest_client.service_toggles.get_service_toggles() except ApiError as e: print(f获取开关配置失败: status{e.status_code}, body{e.body})典型应用场景1. 功能降级与优雅提示。当集成了 Guardrails 或 Cost Intelligence 这类默认关闭的能力时先检查对应开关再展示 UI 或调用 APIconfig client.rest_client.service_toggles.get_service_toggles() if not config.guardrails_enabled: print(当前部署未启用 Guardrails跳过相关配置)2. Provider 可见性控制。SDK 的 playground / 模型选择逻辑可以依据openai_provider_enabled、anthropic_provider_enabled等字段动态决定展示哪些模型提供商后端对应各 Provider 开关的默认值见上文表格。3. 分页参数适配。读取default_page_size可能为None为空时使用客户端自定义的默认值从而与服务端 UI 的分页行为保持一致page_size config.default_page_size or 504. 集成测试断言。在自动化测试中先拉取开关配置再决定测试前置条件避免在开关关闭的部署上执行必然失败的用例。小结Service Toggles Client 是 Opik Python SDK 中接入平台功能开关的唯一入口。通过client.rest_client.service_toggles.get_service_toggles()开发者可以拿到一份强类型的ServiceTogglesConfig其中包含评估器、平台功能、LLM Provider 与 UI 行为四类共 25 个字段的当前状态这些状态最终由服务端 config.yml 中的环境变量决定并经GET /v1/private/toggles/端点ServiceTogglesResource.java下发。编写与 Opik 深度集成的应用时建议始终以运行时返回的开关值为准配合with_raw_response与异步客户端即可稳健地适配不同部署实例的功能差异。【免费下载链接】comet-llmDebug, evaluate, and monitor your LLM applications, RAG systems, and agentic workflows with comprehensive tracing, automated evaluations, and production-ready dashboards.项目地址: https://gitcode.com/GitHub_Trending/co/comet-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考