OpenAI
页面内容为机器翻译。查看英文原文。

在 Codex CLI 中使用 Daybreak

本指南介绍如何在 Codex CLI 中启用 Daybreak、将其配置用于自动化工作流和 SDK 集成,以及排查访问受限或请求被拒绝的问题。 

更新于:yesterday

请注意,要使用这些更新,你需要升级到 Codex CLI 0.163.0 或更高版本。CLI 升级由你自行选择:在你更新之前,已安装的版本会保持当前行为。

  • 如果你的自动化流程安装的是 @openai/codex@latest,则可能在下次安装或更新时应用这项变更。如果你通过 npm 全局安装了 Codex CLI,请运行 npm install -g @openai/codex@latest,然后运行 codex --version 确认升级成功。

  • 如需推迟应用这项变更,请将版本固定为 @openai/codex@0.162.0。使用 @latest 进行一次安装后,所安装的版本不会自动更新。固定使用旧版本的工作流会保持原有行为。

  • 对于 TypeScript 集成,请更新 @openai/codex-sdk 及其捆绑的运行时。对于 Python 集成,请更新 openai-codex 及其 Codex 运行时。仅更新全局 CLI 不一定会更新 SDK 的运行时。如果你配置了自定义可执行文件路径,也请更新该路径下的可执行文件。

如果模型目录可正常获取,但其中不包含手动配置的模型 ID,那么即使 Daybreak 已开启,CLI 和 Codex 桌面版也会继续按原有方式自动处理这些 ID。仅仅因为这些 ID 不在目录中,并不会导致请求无法成功。 

网络安全模型可能会按独立的发布计划逐步在模型选择器中开放。开放后,已使用受支持版本的用户无需再次下载,即可看到新上线的模型。重新打开模型选择器或重启 Codex,即可刷新列表。

在交互式 CLI 中启用 Daybreak

  1. 使用你常用的身份验证方式启动 Codex。

  2. 要开启 Daybreak,请输入 /daybreak。

  3. Codex 将显示 Daybreak on. Applies to new turns.

  4. 此设置将应用于当前对话线程,并保存为新会话的默认设置。

  5. 要关闭 Daybreak,请再次运行同一命令(/daybreak)。

在无头 CLI 中启用 Daybreak

无头工作流在没有交互式界面的情况下运行,通常通过脚本、定时任务或 CI 中的 codex exec 执行。此时不会出现交互式的“启用 Daybreak”(/daybreak)提示。你可以改用以下方式:

  1. 在每条需要减少拒绝响应的命令中添加 -c daybreak=true,即可为特定的 CLI 运行启用 Daybreak。例如,你可以输入:

codex exec -c daybreak=true "Review the changes in this repository."

  1. 保留现有的提示词和其他命令选项。为每次需要使用 Daybreak 的调用添加此设置,包括脚本、定时任务和 CI 配置中的命令。

  2. 在 Codex 加载的配置文件中添加 daybreak=true,即可让新的 CLI 会话和运行默认启用 Daybreak。

  3. 默认的用户配置文件为 ~/.codex/config.toml。如果你的自动化流程设置了 CODEX_HOME,则改用 $CODEX_HOME/config.toml。将此设置放在顶层,不要放在 [features] 等配置节内。

  4. 请在自动化流程实际运行的环境中进行此更改。更新笔记本电脑上的配置并不会同步更新 CI 运行器或远程机器上的配置。

  5. 此设置也适用于使用同一配置的新交互式会话。恢复的会话和分叉会话会保留已保存的 Daybreak 设置;新的默认配置不会覆盖该设置。

  6. 请注意,命令行设置会在本次调用中覆盖已保存的配置。因此,你可以在配置中保留 daybreak = true,并在某次运行时使用 -c daybreak=false。

使用代理推理提供商时启用 Daybreak

你可以在 Codex CLI 中使用 Daybreak,同时继续通过现有代理发送推理请求。Codex 会单独查询模型目录,以确定你的项目中哪些模型支持 Daybreak。

开始之前,请确保你使用的是 Codex CLI v0.167.0,已在其中配置了可正常工作的代理提供商,并且拥有 OpenAI API 密钥。该密钥所属的项目必须有权访问 Daybreak 及你要使用的模型。关于项目 Daybreak 访问权限的 OpenAI 文档

  1. 更新代理提供商配置:打开 ~/.codex/config.toml,找到代理对应的 [model_providers.<id>] 配置节。将下方示例的最后两行添加到该配置节中。保留现有的提供商 ID、代理 URL 和身份验证设置。


    [model_providers.proxy]

    name = "Proxied with Cyber"

    base_url = "https://<your-proxy>/v1"

    model_catalog_url = "<https://chatgpt.com/backend-api/codex/models>"

    capabilities.cyber_access_programs = true

    如果配置中已有 [model_providers.<id>.capabilities] 配置节,请将 cyber_access_programs = true 放在该节中,并将 model_catalog_url 保留在上一级提供商配置节中。Codex 配置参考文档

  2. 根据 CLI 使用的凭据选择相应选项,为目录查询配置身份验证。

    1. 如果 Codex 使用 OpenAI API 密钥,请保留第 1 步中的 OpenAI 目录 URL。使用已启用 Daybreak 的项目的密钥运行 Codex,以便直接向目录进行身份验证。

    2. 如果 Codex 使用代理的凭据,请将 model_catalog_url 设置为代理上目录路由的完整 URL。将该路由配置为执行以下操作:

      1. 使用常用的代理凭据验证 CLI 请求的身份。

      2. 使用已启用 Daybreak 的项目的 OpenAI API 密钥,将请求转发到 https://chatgpt.com/backend-api/codex/models。

      3. 将目录响应返回给 Codex。

  3. 开启 Daybreak:使用代理提供商启动一个新的 Codex CLI 会话。选择可使用 Daybreak 的模型,然后输入 /daybreak 将其开启。

    1. 如果 Daybreak 不可用,请先检查目录查询。即使目录请求失败,推理仍可能成功。请确认请求使用的是预期项目的密钥并已到达 OpenAI,同时确认该项目有权访问 Daybreak 和所选模型。

通过 TypeScript SDK 启用 Daybreak

通过客户端配置传递 Daybreak 设置:

import { Codex } from "@openai/codex-sdk";

const codex = new Codex({

  config: { daybreak: true },

});

const thread = codex.startThread();

const result = await thread.run("Review the changes in this repository.");

console.log(result.finalResponse);

使用 daybreak: false 关闭 Daybreak,并采用常规的拒绝策略。保留现有的身份验证配置。

通过应用服务器或 Python SDK 启用 Daybreak

1. 从 model/list 中读取所选模型的 availableAccessPrograms.cyber 值,然后在 turn/start 的参数中设置 cyberAccessProgram。

a.使用主线模型且账户拥有 Daybreak Blue 访问权限时:

{ "cyberAccessProgram": "daybreakBlue" }

b.使用网络安全模型且账户拥有 Daybreak Red 访问权限时:

{ "cyberAccessProgram": "daybreakRed" }

c.采用常规的拒绝策略时:

{ "cyberAccessProgram": "standard" }

2. 在每个需要使用该选项的交互轮次中都传入该选项;不要以为省略此参数就会关闭 Daybreak。直接连接应用服务器的客户端必须在初始化时启用 experimentalApi 能力,才能使用此参数。

3. Python SDK 的底层 CodexClient 可以传递相同的参数:

from openai_codex.client import CodexClient

with CodexClient() as client:

client.initialize()

thread = client.thread_start()

turn = client.turn_start(

thread.thread.id,

"Review the changes in this repository.",

params={"cyberAccessProgram": "daybreakBlue"},

)

client.wait_for_turn_completed(turn.turn.id)

4. 此示例假定 Daybreak Blue 对所选模型可用。Python 客户端默认启用实验性 API 能力。仅保存对话线程的偏好设置,并不会为应用服务器的交互轮次选定访问计划。

如果你在这些变更推出前添加了本地模型目录

如果此前使用 API 密钥登录后未显示你预期的模型,你可能已通过 config.toml 中的 model_catalog_json 添加了本地目录。Codex 会使用该本地文件,而不是自动获取的目录,因此你的模型列表可能会过时。当你的环境支持自动获取目录后,请按以下步骤切换回自动目录:

  1. 打开 config.toml。对于 Codex CLI,请打开 ~/.codex/config.toml(如果设置了 CODEX_HOME,则打开 $CODEX_HOME/config.toml)。在 Codex 桌面版中,前往设置 > 配置,然后选择打开 config.toml。

  2. 暂时禁用本地目录。在 model_catalog_json 所在行的开头添加 #,保存文件,然后使用同一账户或 API 密钥重启 Codex。保留你的组织要求配置的所有目录 URL。

  3. 验证你的访问权限。在 CLI 中,启动 codex,然后在会话中输入 /daybreak。在桌面版中,打开高级模型选择器并开启 Daybreak。如果你拥有 Daybreak Red 访问权限,请确认预期的网络安全模型已显示,且你可以使用它发送请求。

  4. 保留可正常使用的配置。如果验证成功,请删除已禁用的那一行并保存文件。如果验证失败,请移除 #,保存文件并重启 Codex,以恢复之前的配置。

排查 CLI 中的请求被拒问题

  • 使用与你的自动化流程相同的凭据、模型和配置,运行一项有代表性的任务。

  • 如果 Daybreak 不可用,请确认:

    • 你的账户或 API 项目拥有 Daybreak 访问权限。

    • 所选模型支持 Daybreak。

  • 在交互式 CLI 中,检查 Daybreak 是否已开启。当 Daybreak 可用但处于关闭状态时,交互式 CLI 可能会显示拒绝消息:Daybreak is currently off. If you’re doing authorized security work, turn it on and try your request again.

    • 提示会询问 Turn on Daybreak for your next request?并提供 Enable Daybreak 和 Not now 两个选项。

    • 选择启用 Daybreak,为下一次请求开启此功能,然后重新发送请求。请注意,被拒绝的请求不会自动重试;你必须重新发送请求。即使 Daybreak 已开启,某些请求仍可能被拒绝。

    • 选择暂不启用,使 Daybreak 保持关闭。

  • 对于自动化流程,请确认 daybreak=true 已传递给实际运行的 Codex 进程,且未被其他命令行设置覆盖。

在 Codex Security CLI 中使用 Daybreak

Codex Security CLI 使用 @openai/codex-security 进行安全扫描。其访问计划选项与上文的通用 Codex CLI 示例相互独立。

如需通过 API 密钥进行身份验证,请使用已启用 Daybreak 的 API 项目的密钥,并明确选择该项目获批的计划。对于 Daybreak Blue:


npx @openai/codex-security scan . --auth api-key --cyber-access-program daybreak_blue

仅在项目已获批使用 Daybreak Red 时使用 daybreak_red,或使用 standard 应用标准安全防护措施。选择某个计划并不会授予你该计划或其他模型的访问权限。

有关身份验证和扫描选项,请参阅 Codex Security CLI 参考文档。

在 Codex Security SDK 中使用 Daybreak

Codex Security TypeScript SDK(@openai/codex-security)可从应用程序或开发者工具中运行安全扫描。它独立于上文介绍的通用 Codex SDK。

请使用已获批的账号或 API 项目的凭据。部分网络安全请求和受保护的扫描发现需要 Trusted Access for Cyber 权限。安装 SDK 或选择模型并不会授予 Daybreak 访问权限。

请参阅 Codex Security SDK 指南,了解支持的身份验证方式、配置方法和扫描示例。

这篇文章对你有帮助吗?