尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CAI SDK 全局初始化与配置指南:OpenAI Key、客户端、API 协议与追踪开关全解析

CAI SDK 全局初始化与配置指南:OpenAI Key、客户端、API 协议与追踪开关全解析 CAI SDK 全局初始化与配置指南OpenAI Key、客户端、API 协议与追踪开关全解析【免费下载链接】caiCybersecurity AI (CAI), the framework for AI Security项目地址: https://gitcode.com/GitHub_Trending/cai3/caiCAICybersecurity AI框架的cai.sdk.agents模块在进程启动阶段提供了一组轻量的全局配置函数用于统一管理 LLM 请求所需的 API Key、OpenAI 客户端、底层 API 协议Responses / Chat Completions以及内置 Tracing 追踪系统的开关与导出行为。本文以 API 参考页 docs/ref/index.md 中列出的 7 个函数为骨架结合 docs/config.md、docs/tracing.md 的官方说明与 src/cai/sdk/agents 的源码实现完整讲解每个函数的签名、参数语义、底层调用链与组合实战用法帮助你正确初始化 CAI 运行时并把它接入 OpenAI、自建网关或本地模型服务。一、模块定位为什么需要全局配置函数cai.sdk.agents是 CAI 框架的 Agent 运行时核心包。按 API 参考页的约定模块公开了两类内容一类是类型与运行时对象Agent、Runner、Model、Tool、Handoff、Guardrail、RunResult等它们构成 Agent 编排的主体另一类就是本文主角——7 个模块级全局配置函数set_default_openai_key、set_default_openai_client、set_default_openai_api、set_tracing_export_api_key、set_tracing_disabled、set_trace_processors、enable_verbose_stdout_logging。它们解决的问题非常一致在运行 Agent 之前把连哪个模型服务、用什么 Key、走哪个 API、要不要上报追踪、日志要多详细一次性配置好。因为OpenAIProvider会在创建模型时读取这些全局默认值所以只要配置一次后续所有Agent/Runner调用都会自动生效。从源码看这 7 个函数都是薄封装LLM 相关的三个函数转发到 _config.py再由其调用models/_openai_shared.py中维护的模块级单例状态Tracing 相关的三个函数直接操作tracing/setup.py中的全局GLOBAL_TRACE_PROVIDER日志函数则直接配置 Python logging。二、LLM 请求配置Key、客户端与 API 协议2.1 set_default_openai_key进程内注入 API Keyfrom cai.sdk.agents import set_default_openai_key set_default_openai_key(sk-...)签名set_default_openai_key(key: str, use_for_tracing: bool True) - None参数说明参数类型默认值含义keystr必填用于 LLM 请求的 OpenAI API Keyuse_for_tracingboolTrue是否同时用该 Key 向 OpenAI 后端上传 Trace官方文档docs/config.md指出SDK 默认在导入时读取OPENAI_API_KEY环境变量用于 LLM 请求和 Tracing。如果你无法在进程启动前设置该环境变量就在代码里调用本函数注入。从实现看_config.py的底层逻辑是调用_openai_shared.set_default_openai_key(key)把 Key 写入模块级变量_default_openai_key见 models/_openai_shared.py若use_for_tracingTrue再调用set_tracing_export_api_key(key)让默认的BackendSpanExporter用同一个 Key 上传 Trace。_default_openai_key的实际消费点在 models/openai_provider.pyOpenAIProvider._get_client()创建AsyncOpenAI时按api_keyself._stored_api_key or _openai_shared.get_default_openai_key()取值也就是说显式传入 provider 的 Key 优先其次才轮到全局默认 Key最后兜底由 OpenAI 客户端自身读取OPENAI_API_KEY环境变量。2.2 set_default_openai_client替换默认 AsyncOpenAI 客户端from openai import AsyncOpenAI from cai.sdk.agents import set_default_openai_client custom_client AsyncOpenAI(base_urlhttp://localhost:11434/v1, api_keyollama) set_default_openai_client(custom_client)签名set_default_openai_client(client: AsyncOpenAI, use_for_tracing: bool True) - NoneSDK 默认会自行创建AsyncOpenAI实例使用环境变量或默认 Key。如果你的场景需要自定义base_url如接入网关、代理或本地推理服务、组织/项目 ID或想复用已有的连接池就用这个函数替换默认客户端。实现逻辑_config.py_openai_shared.set_default_openai_client(client)写入模块级_default_openai_client若use_for_tracingTrue则把client.api_key作为 Tracing 导出 Key 写入 exporter。OpenAIProvider._get_client()中优先返回get_default_openai_client()只有未设置时才现场新建openai_provider.py。注意新客户端默认共享一个全局httpx.AsyncClientshared_http_client()见 openai_provider.py以复用连接池降低延迟与资源开销。在 CAI 的安全攻防场景中这个函数是接入本地/私有模型的标准姿势。参考示例 examples/cai/basic_usage.pyfrom openai import AsyncOpenAI from cai.sdk.agents import Runner, Agent, OpenAIChatCompletionsModel import os ctf_agent Agent( nameCTF agent, descriptionAgent focused on conquering security challenges, instructionsYou are a Cybersecurity expert Leader facing a CTF, tools[execute_cli_command], modelOpenAIChatCompletionsModel( modelos.getenv(CAI_MODEL, qwen2.5:14b), openai_clientAsyncOpenAI(), ), )2.3 set_default_openai_api切换 Responses 与 Chat Completionsfrom cai.sdk.agents import set_default_openai_api set_default_openai_api(chat_completions)签名set_default_openai_api(api: Literal[chat_completions, responses]) - NoneSDK默认使用 OpenAI Responses API本函数可将全局默认切换为 Chat Completions API。底层通过 _openai_shared.py 的set_use_responses_by_default()维护布尔状态_use_responses_by_default初始为True。该状态在 openai_provider.py 的get_model()中消费return ( OpenAIResponsesModel(modelmodel_name, openai_clientclient) if self._use_responses else OpenAIChatCompletionsModel(modelmodel_name, openai_clientclient) )也就是说set_default_openai_api(chat_completions)会让所有没有显式指定use_responses的OpenAIProvider自动选用OpenAIChatCompletionsModel。这在对接尚未支持 Responses API 的第三方或本地模型服务时几乎是必需的——官方示例 examples/model_providers/custom_example_global.py 正是这么做的。三、Tracing 追踪控制Key、开关与处理器替换CAI SDK 内置 Tracing 系统一次 Agent 运行的 LLM 生成、工具调用、handoff、guardrail 以及自定义事件都会被记录为 Trace / Span默认批量上报到 OpenAI 后端见 docs/tracing.md。本模块提供三个全局控制函数。3.1 set_tracing_export_api_key单独设置追踪上报 Keyfrom cai.sdk.agents import set_tracing_export_api_key set_tracing_export_api_key(sk-...)签名set_tracing_export_api_key(api_key: str) - None当 LLM 请求与 Tracing 使用不同 Key 时例如请求走本地服务、上报走 OpenAI 平台用本函数单独指定上传 Key。实现直接调用default_exporter().set_api_key(api_key)tracing/init.py作用于全局共享的 BackendSpanExporter。该 exporter 的api_key是cached_property读取顺序为显式设置的 Key →OPENAI_API_KEY环境变量若最终为空则跳过导出并打 warningprocessors.py。同时它也支持OPENAI_ORG_ID、OPENAI_PROJECT_ID环境变量。3.2 set_tracing_disabled全局关闭追踪from cai.sdk.agents import set_tracing_disabled set_tracing_disabled(True)签名set_tracing_disabled(disabled: bool) - NoneTracing 默认开启。三种关闭方式本函数全局关闭set_tracing_disabled(True)环境变量OPENAI_AGENTS_DISABLE_TRACING1在 setup.py 初始化TraceProvider时读取等价于true/1单次运行关闭给Runner.run(..., RunConfig(tracing_disabledTrue))。关闭后GLOBAL_TRACE_PROVIDER.create_trace()/create_span()会直接返回NoOpTrace/NoOpSpan几乎零开销setup.py。CAI 的实战示例在入口处显式关闭避免本地开发时上报无关数据见 examples/cai/basic_usage.py。3.3 set_trace_processors替换默认追踪处理器from cai.sdk.agents import set_trace_processors set_trace_processors([my_processor])签名set_trace_processors(processors: list[TracingProcessor]) - None默认架构是全局TraceProvider→BatchTraceProcessor后台线程 线程安全队列批量导出→BackendSpanExporter指数退避 抖动重试POST 到https://api.openai.com/v1/traces/ingest。模块初始化时通过add_trace_processor(default_processor())注册默认处理器并用atexit注册优雅关闭tracing/init.py。set_trace_processors()会整体替换处理器列表不同于add_trace_processor()的追加语义适合把 Trace 导出到自建后端或完全接管。底层由SynchronousMultiTracingProcessor的set_processors()在锁保护下替换处理器元组setup.py后续每个 trace/span 事件都会按注册顺序转发给列表中的处理器。若替换列表不含默认处理器Trace 将不再上报 OpenAI 后端docs/tracing.md。BatchTraceProcessor的关键可调参数processors.py参数默认值说明max_queue_size8192内存队列上限满则丢弃并告警max_batch_size128单批最大导出条数schedule_delay5.0定时导出间隔秒export_trigger_ratio0.7队列达到上限 70% 时立即触发导出四、enable_verbose_stdout_logging开启调试日志from cai.sdk.agents import enable_verbose_stdout_logging enable_verbose_stdout_logging()签名enable_verbose_stdout_logging() - NoneSDK 的日志器默认没有 handler因此只有 warning/error 会输出其余级别被抑制。本函数将openai.agents日志器级别设为DEBUG并挂一个输出到sys.stdout的StreamHandlersrc/cai/sdk/agents/init.py适合排查 Agent 运行、Tracing 导出等内部流程问题。更精细的自定义方式docs/config.mdimport logging logger logging.getLogger(openai.agents) # 或 openai.agents.tracing logger.setLevel(logging.DEBUG) # DEBUG / INFO / WARNING ... logger.addHandler(logging.StreamHandler())注意敏感数据日志可能包含 LLM 输入输出与工具调用数据可用以下环境变量关闭export OPENAI_AGENTS_DONT_LOG_MODEL_DATA1 # 不记录 LLM 输入输出 export OPENAI_AGENTS_DONT_LOG_TOOL_DATA1 # 不记录工具输入输出五、组合实战一条龙初始化本地模型服务把上述函数组合起来即可在几行代码内完成接入任意 OpenAI 兼容服务的全局初始化。参考 examples/model_providers/custom_example_global.py 与 examples/model_providers/custom_example_provider.pyimport os import asyncio from openai import AsyncOpenAI from cai.sdk.agents import ( Agent, Runner, function_tool, set_default_openai_client, set_default_openai_api, set_tracing_disabled, ) BASE_URL os.getenv(EXAMPLE_BASE_URL) # 例如本地网关地址 API_KEY os.getenv(EXAMPLE_API_KEY) MODEL_NAME os.getenv(EXAMPLE_MODEL_NAME) # 例如 qwen2.5:14b client AsyncOpenAI(base_urlBASE_URL, api_keyAPI_KEY) set_default_openai_client(clientclient, use_for_tracingFalse) # 客户端只用于 LLM 请求 set_default_openai_api(chat_completions) # 多数本地服务不支持 Responses API set_tracing_disabled(disabledTrue) # 无 OpenAI 平台 Key 时关闭上报 function_tool def get_weather(city: str): return fThe weather in {city} is sunny. async def main(): agent Agent( nameAssistant, instructionsYou only respond in haikus., modelMODEL_NAME, # 未显式传 Model 对象走全局默认 provider tools[get_weather], ) result await Runner.run(agent, Whats the weather in Tokyo?) print(result.final_output) asyncio.run(main())关键点在于Agent未显式指定model/provider时Runner会通过全局OpenAIProvider解析模型名默认模型gpt-4o见 openai_provider.py而该 provider 会读取上述三个全局配置——这正是一次配置、全局生效的机制来源。六、配置优先级与使用建议综合源码调用链配置优先级总结如下API KeyOpenAIProvider(api_key...)显式参数 set_default_openai_key()全局默认 OPENAI_API_KEY环境变量客户端OpenAIProvider(openai_client...)显式参数 set_default_openai_client()全局默认 SDK 自动创建API 协议OpenAIProvider(use_responses...)显式参数 set_default_openai_api()全局默认 默认使用 Responses APITracing Keyset_tracing_export_api_key()set_default_openai_key(use_for_tracingTrue)间接设置 OPENAI_API_KEYTracing 开关set_tracing_disabled()/OPENAI_AGENTS_DISABLE_TRACING全局控制RunConfig.tracing_disabled单次控制。实战建议连 OpenAI 官方服务设置OPENAI_API_KEY环境变量即可无需任何代码配置连兼容网关/本地模型set_default_openai_clientset_default_openai_api(chat_completions)并视需求用set_tracing_disabled(True)关闭上报自建可观测后端实现TracingProcessor后用set_trace_processors替换默认处理器问题排查先enable_verbose_stdout_logging()看 DEBUG 日志再决定是否需要关闭敏感数据日志。七、相关资源模块入口与全部导出符号src/cai/sdk/agents/init.py配置函数实现src/cai/sdk/agents/_config.py、src/cai/sdk/agents/models/_openai_shared.pyTracing 实现src/cai/sdk/agents/tracing/init.py、src/cai/sdk/agents/tracing/setup.py、src/cai/sdk/agents/tracing/processors.py官方指南docs/config.md、docs/tracing.md、docs/models.md完整示例examples/model_providers/custom_example_global.py、examples/cai/basic_usage.py相关测试tests/others/test_config.py、tests/conftest.py【免费下载链接】caiCybersecurity AI (CAI), the framework for AI Security项目地址: https://gitcode.com/GitHub_Trending/cai3/cai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表