php 让 claude 调用函数,核心是构建符合 openai 标准的 tool_use 请求。你需要将 php 函数注册为工具描述,发送包含 tool_calls 的请求,解析返回的调用指令,执行本地函数后提交结果。此流程依赖 guzzlehttp/guzzle 库处理 http 通信。

如何定义并注册 PHP 函数作为工具?
通过构造 tools 数组,将 PHP 函数的签名、描述和参数类型映射为 JSON Schema。每个工具必须包含 type 为 function,以及 function 对象,其中 name 对应 PHP 方法名,description 说明用途,parameters 定义输入结构。这样 Claude 就能根据上下文决定调用哪个函数及传入什么参数。

{
"name": "get_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
如何解析 Claude 的调用请求并执行?
当 Claude 返回包含 tool_calls 的消息时,需遍历该数组提取 id、function.name 和 function.arguments。使用 json_decode 解析参数,通过 call_user_func 或反射机制执行对应的 PHP 函数。执行完成后,构造包含 role 为 tool 且携带 tool_call_id 和 content 的结果消息,再次发送给 Claude 以获取最终回答。

// 假设 $response 是 Claude API 返回的 JSON
$toolCalls = $response['choices'][0]['message']['tool_calls'];
foreach ($toolCalls as $call) {
$id = $call['id'];
$funcName = $call['function']['name'];
$args = json_decode($call['function']['arguments'], true);
// 执行函数
$result = call_user_func_array($funcName, $args);
// 构造回复消息
$messages[] = [
'role' => 'tool',
'tool_call_id' => $id,
'content' => json_encode(['status' => 'success', 'data' => $result])
];
}
如何处理多轮工具调用的状态管理?
在连续调用场景中,必须维护完整的 messages 历史数组。每次 Claude 返回 tool_calls,不仅要将原始用户消息保留,还要追加 Claude 的助手消息(含 tool_calls)以及你生成的 tool 角色结果消息。这种累积式对话历史确保 Claude 能理解之前的调用上下文,避免重复调用或逻辑断裂。若某次调用失败,应在 content 中返回错误信息,Claude 会自动尝试修正参数或更换策略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











