找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5484

积分

0

好友

744

主题
发表于 昨天 20:31 | 查看: 4| 回复: 0

问:我让AI分析项目里用了什么测试框架,它读了5个文件后开始胡扯,告诉我“项目使用Jest”——明明应该是pytest。为什么会这样?

答:因为它的上下文被垃圾信息塞满了。

问:什么意思?不是读了文件会更清楚吗?

答:读文件本身没错,错的是读完后那些内容一直堆在对话里。5个文件的内容加上命令输出,上下文里已经积累了几千个token。而你最初的问题“用了什么测试框架”反而被挤到了边缘。

问:那怎么办?不读文件了?

答:不是不读,而是换个地方读

s04要解决的就是这个问题。它引入了一个新机制:Subagent(子Agent)

核心思路异常简单:当主Agent遇到一个需要大量探索的子任务时,它不自己动手,而是派一个“临时工”出去。这个临时工拥有全新的对话上下文,与主Agent完全隔离。临时工完成任务后,只把结论带回来,中间那些读文件、试命令、走弯路又重试的过程,全部丢弃。

def run_subagent(task: str) -> str:
    messages = [{"role": "user", "content": task}]
    # 子Agent的messages[]是全新的,跟主对话完全隔离
    for _ in range(30):  # 最多30轮
        response = client.messages.create(
            model=MODEL, system=SYSTEM, messages=messages,
            tools=CHILD_TOOLS, max_tokens=8000,
        )
        messages.append({"role": "assistant", "content": response.content})
        if response.stop_reason != "tool_use":
            # 返回最终文本结果,整个对话历史丢弃
            return next((b.text for b in response.content
                        if hasattr(b, "text")), "(no result)")
        # ...执行工具,继续循环

注意两个关键点:messages = [{"role": "user", "content": task}] 是从零开始的,主对话里那些乱七八糟的工具调用结果、报错信息,子Agent一个字都看不到。另外还有一个安全限制:子Agent的工具列表里没有 task 工具,所以它不能再派自己的子Agent,从而防止无限套娃。

问:具体跑起来效果如何?

答:我实际试了一下。对主Agent说“这个项目用了什么测试框架?”

没有Subagent的时候,主Agent自己去读文件:先读 pyproject.toml,再读 setup.py,再读某个测试文件看看import了什么……读完后上下文里堆了三份文件内容。回答完你的问题之后,这些内容还在上下文里,影响后面的对话。

有了Subagent,主Agent调用 task 工具,把问题甩给子Agent:“去查一下这个项目用的测试框架。”子Agent在自己的干净上下文里读文件、跑命令,最后只带回一句话:“pytest。”

主Agent的上下文里只剩下:“用户问了测试框架 → 子Agent说pytest。”干干净净。

问:这跟Claude Code有什么关系?

答:Claude Code里的Subagent就是这个机制的产品级实现。你在Claude Code里让它做一件复杂的事,比如“帮我重构这个模块”,它会自己拆成子任务,每个子任务用独立的上下文执行。你在Claude Code界面上看到的“Dispatching agent...”提示,就是在派子Agent。

问:听起来就像多进程,没什么新奇的啊?

答:这不是多进程,而是上下文隔离。多进程强调的是并行执行,Subagent强调的是信息隔离。就算你的子Agent是串行执行的,隔离上下文的价值依然在——主对话不会被子任务的噪音污染。

这个思路在很多场景都适用。你在公司里处理一个大项目,核心决策层只看最终结论,不需要知道执行层翻了几个文件、试了几种方案。Subagent就是给Agent建了同样的信息分层。

问:那子Agent读的文件内容不会丢吗?

答:会丢,但这正是设计意图。子Agent读完文件、得出结论后,文件内容和中间过程全部丢弃。下次需要的时候,再派一个新的子Agent去读。有人说这不是浪费token吗?确实有点,但比另一种情况好得多:主对话被几十个文件的冗余内容塞满,到后面连你的原始指令都记不住了。丢了中间过程,保住了决策质量。 这账算下来是划算的。

项目地址:https://github.com/shareAI-lab/learn-claude-code

运行一下试试,给它一个需要探索的任务:

python agents/s04_subagent.py

比如“分析这个项目有哪些Python模块,每个模块的职责是什么”,看看主Agent会不会派子Agent出去干活。

Agent开发有个很深的体会:上下文管理比工具设计难多了。工具是你主动添加的,上下文膨胀却是你被动承受的。Subagent是第一个对抗上下文污染的机制,后续的s05和s06还会从另外两个角度解决同类问题,值得持续关注。




上一篇:晶圆级老化测试(WLBI)原理、优势与流程详解
下一篇:10人团队0投资:Paralives如何靠社区众筹颠覆模拟人生品类
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-30 07:09 , Processed in 0.615930 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表