Claude ondersteunt het gebruik van tools (functie-aanroepen), waarmee u tools kunt definiƫren die Claude kan aanroepen tijdens een gesprek. Wanneer Claude besluit een tool te gebruiken, retourneert het een tool_use-inhoudsblok. U voert de tool vervolgens uit en stuurt het resultaat terug als een tool_result-inhoudsblok.
Definieer een weersinstrument en verwerk de lus voor het gebruik van instrumenten.
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;