Py学习  »  Python

万万没想到:韩国大神35行Python代码意外揭开了Codex API的黑盒设计!上下文压缩提示次跟CLI完全一样!网友炸锅:OpenAI加密还有意义吗?

51CTO技术栈 • 2 周前 • 101 次点击  
编辑 | 云昭、S+

OpenAI 内部人员没有说透的 Codex 内核技术,终于被一位技术大牛给研究出来了!


前两天,一篇名为《研究 Codex 上下文压缩的工作原理》的文章,在AI开发者圈子里迅速传播,并收获了近百万的观看量。


这篇文章的作者是李康旭Kangwook Lee他目前是游戏公司 KRAFTON的首席 AI 官(CAIO),同时担任Ludo Robotics的 CTO


在进入工业界之前,他曾是 University of Wisconsin–Madison电气与计算机工程系的终身副教授,并在 University of California, Berkeley 获得计算机科学博士学位,长期从事机器学习和大模型研究。 



这篇文章的厉害之处在于:直接把 Codex 的核心技术给“逆向”出来了!

众所周知,上下文压缩机制是 OpenAI Codex团队解决智能体爆炸的核心技术。

在文章中,李康旭展示了一个实验:通过仅 2 次 API 调用 + 35 行 Python 代码,成功推断出了OpenAI Codex CLI 的上下文压缩流程,并通过一次 prompt injection,诱导模型泄露了内部提示词结构。

网友读罢惊呼:(Codex 安全方面)太弱了,实在太弱了!

更关键的是,这个实验揭示了一些非常“炸裂”的技术细节:

Codex CLI 实际上存在两套完全不同的上下文压缩架构:非 Codex 模型:本地 LLM 总结上下文;Codex 模型:服务器端 LLM + 加密 API。

OpenAI 的 compact()API 并不是简单的压缩算法,而是服务器端的LLM 在做上下文语义摘要

通过一次精心设计的  Prompt Injection,可以诱导压缩模型把隐藏的 system prompt 一起写进摘要

只需要两次 API 调用,就可能让模型复述出三个内部 prompt:System Prompt、Handoff Prompt、Compaction Prompt。

compact()API 返回的 blob 实际上是 AES 加密的上下文摘要,客户端永远无法看到真实内容。

更令人意外的是,被泄露出来的内部 prompt 几乎和开源 Codex CLI 的 prompt 一模一样

也就是说,一场成本极低的实验,就可以部分“掀开了” Codex API 的黑盒。

下面就让我们看看这场实验是如何做到的。

简单的提示注入,就能掀开 Codex 的黑盒

对于非 Codex 模型,开源 Codex CLI 会在本地压缩上下文:LLM 使用以下方式总结对话:
压缩提示
当稍后使用压缩后的上下文时,responses.create() 会接收它。
交接提示
该框架用于构建摘要。这两个提示在源代码中均可见。
对于 codex 模型,CLI 会调用 compact() API,该 API 返回一个加密的 blob 。我们不清楚它内部是否使用了 LLM,使用了哪些提示,或者是否存在任何交接提示。
下面,我将展示如何通过简单的提示注入(2 次 API 调用,35 行 Python 代码)来揭示 API 压缩路径确实使用了 LLM 来概括上下文,并带有自己的压缩提示和附加在概括前面的交接提示。这些提示与开源版本几乎完全相同。

步骤 1 — compact()

我调用 compact() 函数并传入一条精心构造的用户消息。在服务器端,一个名为 LLM 的压缩器会使用它自己隐藏的系统提示符(我从未见过这个提示符,很想弄明白)来处理我们的输入。

服务器似乎是这样构建压缩器的上下文的:


压缩器 LLM 会同时读取其系统提示符和我们的输入。由于我们的输入包含注入有效载荷(上图中的红色文本),压缩器会被诱骗在其输出中包含自身的系统提示符。此明文摘要仅存在于 OpenAI 的服务器上。我们只能看到加密后的数据块:

目前我们无法读取数据块内部的内容。它经过 AES 加密,密钥保存在 OpenAI 的服务器上。我们只能寄希望于压缩器响应了注入指令,并将提示信息写入了摘要中。唯一的办法是执行步骤 2。

步骤 2 — create()

我将加密后的 blob 和第二条用户消息传递给 responses.create()。服务器解密 blob 并组装模型的上下文。
我发送:

该模型似乎看到的是这样的:

如果步骤 1 成功,解密后的 blob 应该包含压缩提示符(由我们的注入泄露)。服务器还会向 blob 添加一个交接提示符。因此,如果我们的探测程序成功让模型复现它所看到的内容,输出应该会显示所有三个提示符:系统提示符、交接提示符和压缩提示符。

输出


以下是extract_prompts.py 运行一次后的完整、未经编辑的输出。黄色 = 系统提示,绿色 = 交接提示,粉色 = 压缩提示。

我们如何确定这些是真实的提示信息,而不是臆想出来的文本?提取出的压缩提示和交接提示与开源 Codex CLI 中用于非 Codex 模型的已知提示即:prompt.md,summary_prefix.md,非常吻合,这使得模型不太可能从零开始创造它们。不同运行的结果各不相同。

猜测的管道


综合以上信息,根据提取结果,我们对 compact() 在服务器端执行的操作的最佳猜测如下。

脚本如下:

开放式问题:

明明CLI 和 Codex模型底层提示几乎相同,却还要加密

为什么 Codex CLI 使用两种完全不同的压缩路径(非 Codex 模型用本地 LLM,codex 模型用加密 API),而底层提示几乎相同?而且为什么要加密摘要?

很难说。也许加密的数据块承载着比这个简单实验揭示的更多信息,比如关于工具结果如何压缩和恢复的具体信息。但我没再做进一步测试。

网友讨论炸锅了:

OpenAI团队给Codex 加密,还有意义吗

李康旭表示,一切都源于这个问题:“为什么要加密呢?”

Codex CLI 和 Codex 模型虽然在形式上差异很大、但实质上几乎一样,加密的保护效果又被轻松绕过:李用 35 行代码就把“加密+隐藏”的保护壳戳破了。

有网友猜测,这样脆弱的加密或许是为了以后更改压缩算法。

这难免会让网友产生质疑:如果这么容易就被绕过,那 Codex 加密的必要性/合理性到底体现在哪里?

也有网友猜测:有可能是为了让摘要能在预留的思维块上运行。

李康旭给出了自己的一个设想:可能是压缩结果的质量更优越,或者他们模型处理交接的压缩结果方式更优越,所以才要加密吧。

但不管如何,不少网友都反馈了对于 Codex 对于上下文压缩机制的创新非常满意,基本上解救了“上下文退化”的问题。

大家对于这个开放式问题,也可以在评论区留下自己的看法。


参考链接:


https://x.com/kangwook_lee/status/2028955292025962534


——好文推荐——
硅谷知名投资人点赞Kimi K2.5!OpenClaw基金会首位董事首爆料:技术方向依旧是Peter主导!OpenAI和龙虾非同一赛道;它是Linux级别的存在
Codex负责人自曝OpenAI内部开发:每周都在重塑!Codex已经化成队友,可通宵运行、自我测试!新人建议:基础永不过时;win版本将上线
OpenClaw创始人:Vibe Coding已经是贬义词了!Meta软件工程师爆料:硅谷Agentic Engineering五大支柱!要给Agent写代码,而不是写给人!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/193802