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