learn claude code学习记录-S01

跟着learn claude code学习shareAI-lab/learn-claude-code: Bash is all you need - A nano claude code--like 「agent harness」, built from 0 to 1https://github.com/shareAI-lab/learn-claude-code/tree/main

1. Agent循环

1.1 最小心智模型

工具结果必须重新进入消息历史,成为下一轮推理的输入。

复制代码
user message
   |
   v
LLM
   |
   +-- 普通回答 ----------> 结束
   |
   +-- tool_use ----------> 执行工具
                              |
                              v
                         tool_result
                              |
                              v
                         写回 messages
                              |
                              v
                         下一轮继续

1.2 最小实现

输入messages = {"role": "user", "content": query}

python 复制代码
def agent_loop(state):
    while True:
        response = client.messages.create(
            model=MODEL,
            system=SYSTEM,
            messages=state["messages"],
            tools=TOOLS,
            max_tokens=8000,
        )

        state["messages"].append({
            "role": "assistant",
            "content": response.content,
        })

        if response.stop_reason != "tool_use":
            state["transition_reason"] = None
            return

        results = []
        for block in response.content:
            if block.type == "tool_use":
                output = run_tool(block)
                results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": output,
                })

        state["messages"].append({"role": "user", "content": results})
        state["turn_count"] += 1
        state["transition_reason"] = "tool_result"

这里面有两个点之前是没注意到的:

1.大模型回复中可能包括多个工具调用tool_use,这里是用tool_use_id将每个工具调用区分开来,将所有工具调用的结果都存放在results中。

2.工具调用的结果是放在user中返回的

接下来我使用claude code中的read和write工具验证一下这个流程:

1.我发现的确是将工具调用的结果放在user的content中返回了,只不过第一次调用Glod查找的是大写的README,所以失败了

2.第二次大模型一次性输出了三个tool_use,包括一个Bash和两个Glob命令,除了Glob:3因为查找的是.md文件而我创建的是txt文件,所以失败了,其他两个都成功检索到了。

3.检索到后大模型又准备调用Read工具读取文件内容,调用Edit工具写入信息。因为Edit是替换旧内容,但是旧内容是大模型自己编的,所以自然就没有找到要替换的字符串,就报错了

4.大模型又调用了一边Edit工具,并且cc的tui界面也做了权限的管控

5.最后也是成功的写入了

相关推荐
风吹心凉26 分钟前
ROS2核心概念
学习
jaysee-sjc1 小时前
【JavaWeb】Tlias智能学习辅助系统|后端Web实战(登录认证)
java·开发语言·前端·学习·mybatis
MartinYeung51 小时前
[论文学习]AdInject:通过广告投放对Web代理发起真实世界黑盒攻击
前端·学习
runafterhit1 小时前
【学习地图】Linux学习类 · 文章索引
linux·运维·学习
黑泽明*2 小时前
LVS-Keepalived-全解析
服务器·开发语言·笔记·学习·php
大模型码小白2 小时前
AI安全前沿:AI大模型安全防护的前沿技术
java·网络·人工智能·python·深度学习·学习·安全
天天爱吃肉82183 小时前
【工程师硬件学习笔记:串口‑总线体系与三电试验室异构系统集成深度实战】
大数据·笔记·python·嵌入式硬件·学习·汽车
PC2005-cloud3 小时前
Git学习笔记:GitHub Git Data API 完全指南,用 Go 操控 Git 底层对象
笔记·git·学习
依然鸣3 小时前
PTA团体程序设计天梯赛L2真题讲解L2-001-004
经验分享·学习·算法·深度优先·pat考试
云贝教育-郑老师4 小时前
8.29 杭州线下沙龙|OpenTenBase城市行:当 AI 智能体成为数据库的新生产力
学习·ai·dba