【开源项目】Learn Claude Code

项目地址Learn Claude Code

Learn Claude Code的作者认为,现在很多的Agent都是伪Agent,都是使用代码编排好了流程。

真的Agent应该将决策权交给大模型,而不是在代码中写死。模型就是Agent,代码只是起到Harness的作用。

Learn Claude Code就是教你怎么搭建Harness代码,由s01-s12来演示。

Learn Claude Code给出Agent就是一个Loop。用户发来请求,由大模型判断是否要调用外部工具,如果需要则调用工具,然后返回结果给大模型,最后由大模型判断下一步要做什么。

所有复杂的机制都叠加在这个永远不变的Loop上,代码作为Harness只做三件事:跑循环,执行工具,像大模型返回结果。

Loop痛点

这个Loop也不是没有问题的,主要有下面四个痛点

1.Context Fade 失忆

大模型在执行多步任务的时候,很可能会丢失进度,造成重复执行已经执行过的任务,跳步,跑偏等等。这个时候上下文会越来越长,系统提示的能力被稀释。(s03、s07)

解决方式:TodoWrite约束

强迫大模型写下计划,同时也要设定约束规则:最多20项,仅1个in_process,连续3轮未更新系统自动提醒。

大模型生成的任务列表要有结构,包括当前任务的状态,依赖哪些前置文件。要想执行一个任务,这个任务必须是pending状态,并且blockedBy为空。

python 复制代码
class TaskManager:
    def __init__(self, tasks_dir: Path):
        self.dir = tasks_dir
        self.dir.mkdir(exist_ok=True)
        self._next_id = self._max_id() + 1

    def create(self, subject, description=""):
        task = {"id": self._next_id, "subject": subject,
                "status": "pending", "blockedBy": [],
                "owner": ""}
        self._save(task)
        self._next_id += 1
        return json.dumps(task, indent=2)

2.Context Pollution 探索垃圾

比如一个用户问了一个问题:这个项目的架构是什么。此时父agent上下文已经有一部分了,如果此时再去分析这个问题,可能会导致上下文不纯净,上下文过长。(s04)

解决方式:Subagent隔离

主进程写代码,子进程读文件探索。完全隔离,保护主进程认知清晰度。

关于这个子task,其实也是一个工具,大模型判断是否需要调用这个工具。

3.知识瓶颈

比如我们想要大模型按照某个特定的工作流来执行某个任务,但是其本身其实不知道怎么执行,因此我们就会给他一个提示,这个提示其实就是skill。(s05)

但是如果我们的skill比较多怎么办,比如有100个,难道要全部加载进去吗?其实不用。

解决方式:Skills渐进式加载

100个预置Skill,按需加载。我们可以写一个总的skill预览表,像目录一样,需要哪个再按需加载即可。

4.上下文爆表

上下文窗口是有限的,因为我们的上下文是不能无限增长的,需要进行压缩提炼。(s06)

解决方式:三层压缩防御

Micro(旧工具结果变占位符)-> Auto(超50K自动摘要)->Manual(主动调用 compact)。

完整的历史上下文保存至硬盘中,信息没有消失,只是移出了活跃上下文。

第一层:Micro(旧工具结果变占位符)

每次调用大模型前默认执行,只保留近三条工具结果,将更早的工具结果替换成工具的名称。

第二层:Auto(超50K自动摘要)

到达条件自动触发摘要,先将所有信息以JSON的格式写入硬盘中。再使用大模型进行摘要,要包括:已完成的工作、当前状态、关键决策。最后用一条message替代messages列表。

第三层:Manual(主动调用 compact)

由模型自行判断是否需要主动调用compact工具,之后执行的过程与第二层一样。

团队协作

真正的团队协作需要三样东西: (1) 能跨多轮对话存活的持久 Agent, (2) 身份和生命周期管理, (3) Agent 之间的通信通道。

Agent之间通过JSONL 收件箱来通信,每个agent都有一个自己的邮箱(一个json文件),每次调用大模型前都要去邮箱中查看是否邮件,如果有就加入上下文中。

只有收发功能是不行的,必须要有双方怎么响应,怎么协调。因此引入了通信协议。

此时的子Agent,你不给他分配工作他不干,属于是踢一脚走一步。因此我们要让子Agent自己扫描任务面板,没人干的活自己领一个。

但是这个也有一个问题,如果两个agent同时改同一个文件,未提交的改动相互污染,根本就回滚不了了。

因此我们使用git worktree创建不同的目录,每个agent都在自己的目录下执行,互不影响。

流程展示

1.用户与Agent对话执行过程

2.Agent_Loop的具体过程

相关推荐
甘露s2 小时前
一文理解透MCP、Skill、Workflow的区别。
ai·ai编程
青山如墨雨如画3 小时前
【北邮-无线通信中的人工智能】物理层技术中AI的应用实践:基于KNN的调制识别(1)理论基础
人工智能·python·机器学习·matlab·jupyter
MATLAB代码顾问3 小时前
Python Matplotlib数据可视化实战指南
python·信息可视化·matplotlib
倔强的初学者3 小时前
呼入智能客服提示词工程实战:从方法选型到框架融合的「最优解」
ai·prompt·智能客服·提示词工程·ai应用编程
AI 编程助手GPT4 小时前
用 Python 做一个世界杯赛前分析脚本:以巴西 vs 摩洛哥为例
开发语言·网络·人工智能·python·chatgpt
万事大吉CC4 小时前
Python 笔试输入模板总结
python·算法
Java患者·4 小时前
《Python 人脸识别入门实践:从人脸检测到人脸比对完整实现》
开发语言·python·opencv·目标检测·计算机视觉·目标跟踪·视觉检测
宸丶一4 小时前
Day 10:LangGraph - Agent 的图执行引擎
java·windows·python
weixin_307779134 小时前
Python写入Shell文件使用Linux系统的换行符
linux·开发语言·python·自动化