mirror of
https://github.com/deepseek-ai/awesome-deepseek-agent.git
synced 2026-11-05 01:07:37 +00:00
[GH-ISSUE #349] DeepSeek-v4-flash接入Codex无法使用子代理的问题的排查与解决方法 #116
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
deepseek-ai/awesome-deepseek-agent#116
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @asnndpro on GitHub (Aug 4, 2026).
Original GitHub issue: https://github.com/deepseek-ai/awesome-deepseek-agent/issues/349
DeepSeek Codex 适配:子代理(Subagent)任务消息(
agent_message/encrypted_content)无法被模型读取摘要
使用 DeepSeek 为 Codex 适配的接口(
/responses,wire_api = responses,模型deepseek-v4-flash)时,主代理通过spawn_agent派发子代理,任务正文被封装在输入项的
agent_message+encrypted_content结构中。DeepSeek 适配层不把agent_message项的内容喂给模型,且不识别encrypted_content内容类型,导致子代理模型只能看到空的任务信封(
Payload:为空),收不到任何任务指令。环境信息
base_url = https://api.deepseek.com/,wire_api = responses)deepseek-v4-flash(GET /models确认存在)spawn_agent/followup_task/send_message(
features.multi_agent默认开启)问题表现
STATUS:NO-TASK,从不回显消息中的唯一 token;spawn_agent、followup_task、send_message三条通道同样受影响;fork_turns(none/all/1)、消息语言(中/英/JSON)、模型选择、推理强度等参数无关;
AGENTS.md约定的.agents/TASKS.md),子代理会退而读取文件执行任务,造成"时好时坏"假象,实际消息通道仍坏;
agent_message项的encrypted_content中,模型读不到;encrypted_content内容项的请求,DeepSeek 返回 400unknown variant encrypted_content。复现步骤
步骤 1:派发子代理
主线程调用:
实际结果:子代理回复"我还没有收到具体任务",而不是
REPRO-TOKEN-1234。步骤 2:抓包子代理首轮请求(可选,用于确认载荷)
把
config.toml的base_url指向本地转发代理后重启 Codex,再次派发,子代理首轮请求体中可见任务消息的封装方式:
步骤 3:直接验证 DeepSeek 对
encrypted_content的处理请求体:
响应(400):
步骤 4:确认模型读不到任务正文
原样重放步骤 2 的子代理首轮请求(不修改载荷),模型推理原文:
随后模型只能调用 shell 读取工作区的任务文件兜底。
预期行为 vs 实际行为
spawn_agent消息正文(如同 OpenAI 官方 Codex + OpenAI模型的组合);
根因分析
子代理首轮请求中任务消息的封装(见上文步骤 2)存在两个问题:
agent_message项未被喂给模型:DeepSeek 适配层把它当作平台元数据跳过,模型上下文里只有空的
Payload:信封;encrypted_content不是 OpenAI 官方内容类型:OpenAI 官方 Responses API内容类型只有
input_text/output_text/input_image/input_file,DeepSeek 严格校验直接拒绝(400),或在校验宽松路径下静默忽略。
修复方案(已验证)
在 Codex 与 DeepSeek 之间加本地转发代理,转发前把
agent_message项改写为OpenAI 官方
message(role="user")项、把encrypted_content改写为input_text。核心逻辑:验证结果(对步骤 2 同一请求重放):
模型明确引用了任务正文;
CHANNEL=FILE)与消息正文任务(
CHANNEL=MSG)并存时,子代理回复CHANNEL=MSG,确认消息通道修复。建议 DeepSeek 侧修复
agent_message输入项:将其 content 合并进模型可见的 user 输入(与 OpenAI 协作协议一致);
encrypted_content内容类型:至少将其按明文input_text处理(或按协议解包),而不是拒绝/忽略;
补充证据
agent_message+encrypted_content,任务 token
WIRE-9502),请求/响应均通过本地代理完整记录;其他
查看对应排查方式与解决方法
@DoiiarX commented on GitHub (Aug 6, 2026):
官方你们快点修啊。
@hairyf commented on GitHub (Aug 10, 2026):
提供一个已验证的本地转发代理实现,正好落地本 issue 描述的修复方案:
https://github.com/hairyf/codex-deepseek-subagent-proxy
base_url指向http://127.0.0.1:8787/)agent_messageitem 改写为标准message(role=user),encrypted_content解包为input_text,再原样转发给https://api.deepseek.com/spawn_agent/followup_task/send_message三条通道,无需重编 codex-core,不依赖具体版本agent_message的请求,主会话与 OpenAI 路径不受影响;不保存密钥,仅监听 127.0.0.1已在
deepseek-v4-flash(wire_api = "responses")上端到端验证:子代理(fork_turns="none")能收到任务并按要求回复 PONG,代理日志确认agent_message -> user message改写生效。Windows 下直接运行start-proxy.ps1即可。@lovelmh13 commented on GitHub (Aug 14, 2026):
我也遇到这个问题了,然后用 cc switch ,配置为 chat completions 同时开启路由解决了
@nothing0here commented on GitHub (Sep 16, 2026):
补充(2026-09):OpenCode Go 网关 +
deepseek-v4.1-flash上复现,以及精简后的修复原报告是 DeepSeek 官方端点(严格校验 → 400
unknown variant 'encrypted_content')。补一条同类但更隐蔽的路径:OpenCode Go 网关(
base_url = https://opencode.ai/zen/go/v1,wire_api = "responses")+deepseek-v4.1-flash(Codex Desktop 0.154.0-alpha.6.2,macOS)。症状相同,但网关不报错
同一个
agent_message(input_text 信封 + encrypted_content 正文)请求:也就是说这个网关对
agent_message是静默忽略,比 400 更难排查:客户端不报错,子代理线程被正常唤醒(
trigger_turn: true),只是模型拿到的是空信封。所以本地日志里看到的"任务发不出去但也不失败",和本 issue 是同一个根因。
v4 时代针对该网关的 workaround,现在多半已过时
社区代理的核心改写思路是对的(下文建议保留),但它同时带了几个针对 v4 时代网关行为的
hack;在同一网关 2026-09-16 的实测中这些已经不需要,照搬反而引入新问题:
name的 tool{"type":"web_search"}的请求返回 200(v4 时代是 400tools[N].function: missing field 'name')web_search等内置工具,且对所有请求生效,不限于子代理派发response.output_item.added/content_part.added、补response.completed.output)completed.output里 reasoning + message 齐全content数组 → 字符串reasoning.effort="none"重试max上静默降级推理强度,还可能掩盖真实错误建议的最小修复
只保留一处改写,其余请求体/头/响应流字节透传:
agent_messageitem →message(role="user"),encrypted_contentpart →input_textpart。即:
tools、assistant.content、reasoning、SSE 响应一律不动。实测不需要改写的请求上游收到的 body 与发送端 sha256 完全一致。
多模态注意事项
input_image(data URI PNG)走该网关正常,模型能正确识别;agent_message时不要只收集input_text,否则随派发消息携带的图片/附件会被丢掉;unsupported image ... webp, png, jpeg, gif),那是尺寸限制,与协议无关。
上游正解
网关侧把
agent_message按 OpenAI 协作层语义并入模型可见输入(至少把encrypted_content当明文
input_text消费)后,这类本地转发代理就可以下线。@nothing0here commented on GitHub (Sep 16, 2026):
补一句上下文:上面表格里的「社区代理」指的是 hairyf/codex-deepseek-proxy。
它把根因定位到
agent_message/encrypted_content这一步是完全正确的 —— 那也正是这次修复必须保留的核心;被列出的四条只是当时针对 v4 时代网关行为写的 workaround,在我这次实测的网关版本上已经不需要,属于「可以精简」,而不是写错。