Claude supporta l'uso di strumenti (function calling), consentendo di definire strumenti che Claude può invocare durante una conversazione. Quando Claude decide di utilizzare uno strumento, restituisce un blocco di contenuto tool_use. Si esegue quindi lo strumento e si invia il risultato come blocco di contenuto tool_result.
Definire uno strumento meteo e gestire il ciclo di utilizzo degli strumenti.
Anthropic := TsgcHTTP_API_Anthropic.Create(nil);
Anthropic.AnthropicOptions.ApiKey := 'API_KEY';
// Step 1: Create request with tools
oRequest := TsgcAnthropicClass_Request_Messages.Create;
Try
oRequest.Model := 'claude-sonnet-4-20250514';
oRequest.MaxTokens := 4096;
// Define user message
oMessage := TsgcAnthropicClass_Request_Message.Create;
oMessage.Role := 'user';
oMessage.Content := 'What is the weather in San Francisco?';
SetLength(oMessages, 1);
oMessages[0] := oMessage;
oRequest.Messages := oMessages;
// Define tool
oTool := TsgcAnthropicClass_Request_Tool.Create;
oTool.Name := 'get_weather';
oTool.Description := 'Get the current weather in a given location';
oTool.InputSchema :=
'{"type":"object","properties":{"location":{"type":"string",' +
'"description":"The city and state"}},"required":["location"]}';
SetLength(oTools, 1);
oTools[0] := oTool;
oRequest.Tools := oTools;
// Step 2: Send request
oResponse := Anthropic.CreateMessage(oRequest);
Try
// Step 3: Check if Claude wants to use a tool
if oResponse.StopReason = 'tool_use' then
begin
// Find the tool_use content block
for i := 0 to Length(oResponse.Content) - 1 do
begin
if oResponse.Content[i].ContentType = 'tool_use' then
begin
vToolUseId := oResponse.Content[i].Id;
vToolName := oResponse.Content[i].Name;
vToolInput := oResponse.Content[i].Input;
// Step 4: Execute your tool (get_weather) and get result
vToolResult := '72 degrees and sunny';
Break;
end;
end;
// Step 5: Send tool result back
// Build new message array with assistant response + tool result
// ... (continue the conversation with tool_result content block)
end;
Finally
oResponse.Free;
End;
Finally
oMessage.Free;
oTool.Free;
oRequest.Free;
End;