对chat api=>response api转换器进行了一番改造,终于让它可以跑了。
可能很多人都是把response api=>chat api,这样可以把国产大模型给codex用。但其实,codex就那么回事,它并不算是什么先进的agent,它的上下文管理很糟糕,因此非常浪费tokens。
所以,更好的方法,是把gpt模型的api转给其它省tokens的agent用。不要迷信codex,它的能力还是靠模型。
之前的问题是,转换器只是把chat机械转换为response api,但是,response api,是不输出明文思考(reasoning)内容的,思考内容加密,防止竞争对手蒸馏。而llm在接到指令自动工作的时候,模式就是:思考=>工具调用=>思考=>工具调用,过程中根本不会说话,埋头苦干。
而转换器的做法,是把加密的reasoning抛弃(看不懂留着也没意义),而不是发回去。因此,gpt在服务端,就不知道上次调用工具是为了什么(因为加密的思考内容没发回去),失去记忆。
解决的方法,就是在发请求的时候,指定让转换器发, "reasoning": { "effort": "medium", "summary": "auto" }
这样,response api就会发一个 reasoning的明文summary,然后,转换器再把这个reasoning summary转换为chat api的reasoning,这样就不会丢失上下文了。虽然不是全部的reasoning,但有总比没有好。至少能工作了。而且,推理并不需要思考的细节,只需要知道思考的决策是什么,实际上有个summary正好压缩了上下文。
本来这个项目是js写的,我看代码量不大(1000行级别),就让ai重写了,改成了c井,这样就跟我的其它项目结合起来了,将来还能作为兼容层,放到我自己的agent里。
AI写这种小工具的确很快。差不多一天能搞好,比手写效率还是快。手写可能要一周时间。