跳到正文

TECH NOTE

867 字 4 分钟 系列 21 / 22

demo/ — Subagents 抓包实验(手写版 + Deep Agents 版)

ON THIS PAGE / 目录4 节

配套笔记:

文件清单#

文件作用
demo.py手写版最小 Subagents 系统:主管(1 个工具 schedule_event)+ 日历子智能体(1 个工具 create_calendar_event,桩函数)。跑一次用户请求会产生 4 次模型调用。
deepagents_demo.pyDeep Agents 版:create_deep_agent(tools=[save_note], subagents=[research_subagent])。用来对照”subagents= 参数最终变成了什么”。
capture.pymitmdump addon:把 api.deepseek.com 的请求/响应正文逐条落成 JSONL(输出路径可用 CAPTURE_OUT 指定)。
summarize.py把抓包 JSONL 汇总成”第 N 次调用:请求了什么上下文 → 产出了什么”的可读清单(兼容 Responses / Chat 两种协议)。
captured.jsonl手写版实测抓包(4 条 HTTP 往返,16 KB,只含正文,不含请求头与密钥)。
captured_deepagents.jsonlDeep Agents 版实测抓包(4 条 HTTP 往返,约 107 KB——因为 task + 7 个文件系统工具的 schema 都要随每次请求发送)。

跑一遍#

Terminal window
# 1) 模型配置(不要写进代码/仓库)
export CLOUD_MODEL_BASE_URL=https://api.deepseek.com
export CLOUD_MODEL_API_KEY=<你的 key>
export CLOUD_MODEL_NAME=deepseek-v4-flash-vision-exp
export CLOUD_MODEL_DEFAULT_REF=deepseek
export CLOUD_MODEL_PROVIDER=deepseek
export CLOUD_MODEL_PROTOCOL=RESPONSES # 或 CHAT,两条路都验证过
# 2) 直接跑(不抓包)
python demo.py # 手写版
python deepagents_demo.py # Deep Agents 版
# 3) 抓包跑(另开一个终端起代理)
python -m venv /tmp/mitmenv && /tmp/mitmenv/bin/pip install mitmproxy
/tmp/mitmenv/bin/mitmdump -q -s capture.py -p 8888 --set confdir=/tmp/subagents-demo/.mitmproxy
HTTPS_PROXY=http://127.0.0.1:8888 SSL_CERT_FILE=/tmp/subagents-demo/.mitmproxy/mitmproxy-ca-cert.pem python demo.py
# Deep Agents 版换个输出文件,避免覆盖上一次抓包:
CAPTURE_OUT=$PWD/captured_deepagents.jsonl /tmp/mitmenv/bin/mitmdump -q -s capture.py -p 8888 --set confdir=/tmp/subagents-demo/.mitmproxy
HTTPS_PROXY=http://127.0.0.1:8888 SSL_CERT_FILE=/tmp/subagents-demo/.mitmproxy/mitmproxy-ca-cert.pem python deepagents_demo.py
# 4) 看结果
python summarize.py captured.jsonl
python summarize.py captured_deepagents.jsonl

实测结果速览(2026-09-01)#

手写版(demo.py,详见 13 篇):4 次调用 / 2227 in + 720 out tokens / 端到端约 5 秒。

#谁在调模型上下文产出in / out tokens
1主管system + 用户原话function_call: schedule_event347 / 75
2日历子智能体自己的 system + 转交的请求function_call: create_calendar_event398 / 584
3日历子智能体上者 + 工具结果文本(回给主管)1020 / 30
4主管system + 用户原话 + 1 的调用 + 3 的结果文本(给用户)462 / 31

Deep Agents 版(deepagents_demo.py,详见 14 篇):形状同构,但首轮上下文大得多。

#谁在调模型上下文产出in / out tokens
1主管system + 用户原话 + 9 个工具的 schematask(description, subagent_type="research-agent")2622 / 466
2调研子智能体只有自己的 system + 主管给的任务描述ls(path="/")2536 / 841
3调研子智能体上者 + ls 结果调研结论(回给主管)3392 / 1473
4主管system + 用户原话 + task 调用 + 工具结果面向用户的回答4561 / 933

Deep Agents 的派活次数由模型决定:同一份代码另一次运行里,主管连续调了 5 次 task(12 条消息)。所以”Deep Agents 一次请求等于几次模型调用”没有固定答案。

环境说明#

  • 解释器:Python 3.11 + langchain 1.x + langchain-openai 1.x(文档里的 create_agent / @tool API);Deep Agents 版另需 deepagents 0.7.5。
  • 模型:请求名 deepseek-v4-flash-vision-exp,接口回报的实际模型是 deepseek-flash(/v1/models 里只有 deepseek-flash、deepseek-v4-pro)。
  • 协议:/v1/responses(Responses API)与 /v1/chat/completions 都能跑通工具调用;本仓库抓的是 Responses 协议。
  • 子智能体里的 create_calendar_event 是桩函数(不写真实日历),只为让”子智能体自己也要调工具”这一步真实发生。
  • Deep Agents 版里 research-agent 没有显式指定 tools,所以它继承了主 Agent 的全部工具(文件系统工具 + save_note)——这正是 14 篇要提醒的默认值之一。
demo/ — Subagents 抓包实验(手写版 + Deep Agents 版)
https://aicooleo.cn/blog/posts/multiagent-demo/
作者
aicooleo
发布于
2026-09-01
许可协议
CC BY-NC-SA 4.0
多 Agent 精讲 · 第 21 / 22 篇 返回合集