社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

51CTO技术栈 • 5 月前 • 300 次点击  
编辑 | 云昭、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