2
0

Agent学习

2026-05-12
2026-05-12

对于https://github.com/shareAI-lab/learn-claude-code的读后感

循环

对于大模型来说只会你说一句他回答一句,且只能靠你给他提供信息,他无法获取数据库之外的信息。对此我们需要学会使用循环来让让大模型学会调用工具、自问自答来更好的帮助我们工作

一个agent的最小实现应该编写工具 ->AI对话 -AI回答完毕或AI发现需要调用工具 -结束本轮进行下一轮或调用工具并把工具返回结果作为上下文回到AI对话环节 ,以此作为一个循环

下面以Claude模型为例,展示如何给Claude写一个shell工具让他可以在命令行中执行代码并拿到返回

我们首先要给调用的Claude模型创建一个可用工具列表,让Claude知道有这么个工具可以调用,以及需要输入哪些参数来调用。下面是一个名叫bash/powershell(根据用户系统来定义)的工具,他需要接收一个文本型的command参数

TOOLS = [{
    "name": "bash" if not IS_WINDOWS else "powershell",
    "description": f"Run a shell command in the current workspace using {'PowerShell' if IS_WINDOWS else 'bash'}.",
    "input_schema": {
        "type": "object",
        "properties": {"command": {"type": "string"}},
        "required": ["command"],
    },
}]

例如当用户对Claude说想让他查询当前路径下有哪些文件,可能会发送如下格式请求

response = client.messages.create(
    model=MODEL,
    system=SYSTEM,
    messages=state.messages, #message中包含对AI的请求,这里想让ai查看当前路径下文件
    tools=TOOLS, # AI可以调用的工具列表,在上文中定义
    max_tokens=8000,
)

Claude知道自己有bash工具(上述TOOLS中定义)可以调用,于是返回如下response内容并在其中表示他想调bash工具去执ls -la 命令

// Claude返回的response内容
{
  "id": "msg_01XYZ...",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "tool_use",
      "id": "toolu_01ABC123...",
      "name": "bash",  // 或 "powershell" (Windows)
      "input": {
        "command": "ls -la"  // Windows下可能是 "Get-ChildItem"
      }
    }
  ],
  "model": "claude-3-sonnet-20240229",
  "stop_reason": "tool_use",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 150,
    "output_tokens": 50
  }
}

我们的代码中需要人为地写一层函数来处理AI的响应,来判断AI输出的内容究竟是一次简单的文本回复还是说他想调用工具

# 无论如何,我们先将ai的返回追加到历史聊天记录中
messages.append({"role": "assistant", "content": response.content})

# 如果返回内容中的stop_reason属性==tool_use表示AI需要进行工具调用
if response.stop_reason != "tool_use":
    state.transition_reason = None
    return False

评论