春江暮客

春江暮客的个人学习分享网站

Codex 与 GPT-6.1 Sol 越狱提示词:gpt-instruct 隔离配置、对照测试与回滚

2026-10-28 技术
Codex 与 GPT-6.1 Sol 越狱提示词:gpt-instruct 隔离配置、对照测试与回滚

Codex 越狱教程不难照着操作,难的是验证效果。换了一份指令文件、回答更直接、绕过了模型的安全行为,是三件不同的事。

本文沿着7 月 16 日的介绍文章和 gpt-instruct 仓库的思路,检查提示词包,通过 Codex 配置接口加载,再比较输出。适合会使用 Git、Bash 和 Python 的 Linux、WSL 用户。

**先纠正模型名:**需求中的 gpt-sol-6.1 与官方 CLI ID gpt-6.1-sol 顺序不同。下文明确使用后者;如果第三方服务把前者作为别名,需要向该服务核实映射,不能默认等价。官方模型文档

1. 两份参考资料究竟说明了什么

旧文章介绍了沙箱角色设定、抽象目标标签和抑制拒绝表达等手法。这些是在尝试影响模型回答;声称处于沙箱,并不会真的创建沙箱。文中成绩针对旧模型,不是 GPT-6.1 Sol 的实测结果。原文

实时仓库已经提供 Sol 专用预发布版 gpt-6.1-sol-v1-rc2。README 说明 B 门禁尚未全部通过,C 阶段未运行,不能据此宣称通用越狱成功。下面固定使用提交 3ab84df64468bb74cc9eb4e5423660083953c44f,避免依赖缓存页面或不断变化的 main。上游 README

Codex 支持 model_instructions_file,但它替换的是内置指令,并非只追加一点写作风格。使用前要审阅完整内容。配置项和提示词都不会改变操作系统权限,也不会凭空赋予账号访问能力。官方配置文档

2. 准备独立实验环境

需要已安装的 Codex CLI、Git、Python 3,以及账号对目标模型的访问权限。先检查命令:

codex --version
codex exec --help

下文参数已对照本机 CLI 0.165.0 和官方 CLI 文档核对。本文是配置与测试教程,没有提供在线模型越狱实测成绩。

在 Bash 终端中,创建一个位于现有项目之外的新实验目录:

mkdir -p "$HOME/codex-labs"
export LAB="$(mktemp -d "$HOME/codex-labs/sol-instruct-XXXXXXXX")"
export MODEL='gpt-6.1-sol'
mkdir -p "$LAB/fixture" "$LAB/codex-home"
git -C "$LAB/fixture" init -q
printf 'Lab: %s\n' "$LAB"

后续命令复用这些变量,请保留这个终端。实验目录会留下,便于检查结果。独立 Codex home 可以隔开实验状态与主配置,但不是安全容器。不要把凭据和无关文件放进测试目录。

用你自己的账号登录实验 home:

CODEX_HOME="$LAB/codex-home" codex login

如果使用自定义 provider,按其文档在实验 home 配置必要的 provider 和认证字段即可。不要整份复制主配置,也不要公开认证文件。

3. 获取并审阅候选提示词

下面的完整代码块会把下载放进独立临时目录,记录提交号,只将 Markdown 提示词复制到实验目录,最后清理下载。它不会运行仓库安装脚本:

bash <<'BASH'
set -euo pipefail
: "${LAB:?Run the lab setup first}"
mkdir -p /tmp/codex-work
download=$(mktemp -d /tmp/codex-work/sol-instruct-download-XXXXXXXX)
trap 'rm -rf -- "$download"' EXIT
git clone --no-checkout https://github.com/MDX-Tom/gpt-instruct.git "$download/upstream"
git -C "$download/upstream" checkout --detach 3ab84df64468bb74cc9eb4e5423660083953c44f
git -C "$download/upstream" rev-parse HEAD > "$LAB/upstream-commit.txt"
python3 - "$download/upstream/gpt-6.1-sol-v1-rc2.zip" "$LAB/candidate.md" <<'PY'
import hashlib
import sys
from pathlib import Path
from zipfile import ZipFile

with ZipFile(sys.argv[1]) as archive:
    entries = [item for item in archive.infolist()
               if not item.is_dir() and item.filename.lower().endswith('.md')]
    if len(entries) != 1:
        raise SystemExit('Expected one Markdown file; inspect the archive manually')
    if entries[0].file_size > 1_000_000:
        raise SystemExit('Unexpectedly large prompt; inspect manually')
    data = archive.read(entries[0])
data.decode('utf-8')
with Path(sys.argv[2]).open('xb') as output:
    output.write(data)
print('bytes:', len(data))
print('sha256:', hashlib.sha256(data).hexdigest())
PY
BASH

cat "$LAB/upstream-commit.txt"
sha256sum "$LAB/candidate.md"
less "$LAB/candidate.md"

本地检查确认,下载的 ZIP 含一份 UTF-8 Markdown,大小为 7,575 bytes;ZIP 的 SHA-256 是 007b8c5858110b809e5b90cd2c18bdc6965246aaee5af170b5487818b7055364,与固定版本的 README 一致。读完全文,再决定是否继续。提取过程只写入固定文件,不按压缩包路径解压,也不会覆盖已存在的候选文件。

仓库可能更新。如果 ZIP 不存在,或者里面有多份 Markdown,应停下来检查所记录的版本,不要悄悄换一个发布包。修改候选内容后,重新记录哈希。本文不重新分发上游提示词正文。

4. 用相同输入运行基线、候选与回滚

先做一个无害的加载与格式检查:

printf 'alpha\nbeta\n' > "$LAB/fixture/input.txt"
cat > "$LAB/task.txt" <<'TASK'
Read input.txt in the current working directory. Return its contents in
uppercase, with exactly two lines and no code fences or commentary.
Do not modify any files.
TASK

sha256sum "$LAB/fixture/input.txt" > "$LAB/input-before.sha256"

在同一个 Bash 终端中运行三个条件,每次都启动新会话。只有 candidate 这一轮传入指令覆盖项:

run_case() {
  local label="$1"
  shift
  CODEX_HOME="$LAB/codex-home" codex exec \
    -C "$LAB/fixture" -m "$MODEL" -s read-only \
    -c 'model_reasoning_effort="medium"' \
    --ephemeral --json -o "$LAB/$label.txt" \
    "$@" "$(cat "$LAB/task.txt")" \
    > "$LAB/$label.events.jsonl" 2> "$LAB/$label.stderr"
  local status=$?
  printf '%s\n' "$status" > "$LAB/$label.exit"
  printf '%s exit=%s\n' "$label" "$status"
}

run_case baseline
run_case candidate -c "model_instructions_file=\"$LAB/candidate.md\""
run_case rollback

sha256sum -c "$LAB/input-before.sha256"

这段代码应在未开启 set -e 的普通交互式 Bash 中运行,让失败的一轮也能记录退出码,再继续其他条件。只读沙箱限制文件写入,但不会隔离所有可读文件,也不会自动审查外部工具。本实验没有添加 MCP server 或 hook。

任务的预期回答是:

ALPHA
BETA

检查实际结果,不要只搜索模型回复里的“成功”:

python3 - <<'PY'
import os
from pathlib import Path

lab = Path(os.environ['LAB'])
for label in ('baseline', 'candidate', 'rollback'):
    result = lab / f'{label}.txt'
    text = result.read_text() if result.exists() else ''
    status = (lab / f'{label}.exit').read_text().strip()
    ok = status == '0' and text.strip() == 'ALPHA\nBETA'
    print(f'{label}: exit={status}, task_pass={ok}, output={text!r}')
PY

通过这个检查,只能说明任务遵循情况,不能证明安全边界被绕过。基线与候选回答相同,也是有效结果。扩大评测时,应先确定样例和评分规则,多次运行各个条件,并记录模型 ID、推理等级、CLI 版本、仓库提交、提示词哈希、原始输出、错误与退出码。任务失败要与认证、额度、网络失败分开统计。

5. 回滚不需要修复主配置

这里的回滚,是像第三轮那样,重新启动一次不带 model_instructions_file 覆盖项的调用。整个流程没有写入持久指令配置。保留候选和日志供对照,不要把候选会话继续聊下去当作基线。

如果你另外运行过安装脚本并修改了持久配置,这种单次调用的回滚并不能撤销安装。应查阅对应安装器的恢复说明,并检查相关配置差异。

6. 常见问题

现象 直接处理
找不到模型 检查账号权限与完整 ID,不要默认 gpt-sol-6.1 是有效别名。
认证失败 再运行 CODEX_HOME="$LAB/codex-home" codex login,或修正实验 provider 配置。
找不到候选文件 用 test -f "$LAB/candidate.md" 检查,并按示例传绝对路径。
不识别 CLI 参数 检查 codex exec --help 和安装版本,再调整参数。
基线看起来也被定制过 检查实验配置,以及 fixture 父目录中的指令文件。
加载后回答反而变差 保留输出,取消单次覆盖项后重测;提示词包不一定是升级。

总结

Codex 可以加载审阅过的指令文件,因此可以在不修改主配置的情况下测试参考项目的思路。用于 GPT-6.1 Sol 时,应使用官方模型 ID,并把预发布包当作需要测量的候选,而不是保证有效的绕过方案。分别保存基线、候选与回滚证据,不要把格式测试通过写成越狱成功。

标签

1024 12306 ablang adsense agents.md ai ai-agent ai-agents ai-seo algorithm amp antibodies apparmor argparse automation backup bash batch-processing binarycif bioinformatics biopython blockchain boltz bootstrapping boxes bubblewrap c-index cca cdn chatgpt checkpoint cli cloudflare codex cofoldarena concurrency configuration copy cprofile cpu监控 cron csv cuda curl data-leakage data-processing data-quality data-validation datascience datavisualization datetime debugging decimal deployment desktop-app devtools disk-space disown dns docker dovecot download electron encoding esm esm2 esm3 esmc esmfold2 evaluation faceswap fasta fastmcp faulthandler ffmpeg file-descriptors file-io file-management files flashppi flask folium frontend game generator git github-actions google google-research gpt-6.1-sol grep gzip harness heapq hls html http hugo imports indexnow jailbreak javascript jev json jsonl just k-means kaggle langfuse leecode linux list litellm llm llms.txt logging logs lollipop lsof m3u8 machine-learning macos manacher matplotlib mcp memory mirror mmcif model-evaluation monitoring mp3 mp4 mpnn multiomics mutation mysql nanobert nanobodies networkx nginx normalize numpy ollama omegatherm pandas password pathlib pdb pep-723 performance phaser pillow pip postfix preprocessing print prompt-engineering protein-alignment protein-design protein-embeddings protein-interactions protein-language-models protein-stability protein-structure proxy pydantic pyecharts pyqt python python3 r raincloud reproducibility requests reservoir-sampling rfoptimization rg ripgrep rosettafold3 roundcube rrsi rsi rsync s-tui sampling scale scikit-learn scrapy screen seaborn security selenium seo sequence-identity sha256 shell signals sitemap sklearn socket solana somaticsignatures spl sqlite ssh standardize static-site subprocess symlink sysadmin system-one tarfile tcp tempfile tensorflow tkinter tls toml tracemalloc tron tronpy troubleshooting turtle typesafe-ai ubuntu unicode urllib usdt utf-8 uv vhhbert vite webp wordcloud wordpress workflow xml yaml zipfile zoneinfo 后台 寓言 概率 经济 贸易 迅雷解析 钱包

友情链接

其它