Anthropic | Tool Use

Claude unterstützt Tool-Nutzung (Function Calling), wodurch Sie Tools definieren können, die Claude während einer Konversation aufrufen kann. Wenn Claude entscheidet, ein Tool zu verwenden, gibt es einen tool_use-Inhaltsblock zurück. Sie führen dann das Tool aus und senden das Ergebnis als tool_result-Inhaltsblock zurück.

Tool-Use-Ablauf

  1. Definieren Sie Tools mit name, description und input_schema (JSON Schema).
  2. Senden Sie eine Nachricht mit definierten Tools.
  3. Claude antwortet mit einem tool_use-Inhaltsblock (stop_reason = 'tool_use').
  4. Führt das Tool mit der bereitgestellten Eingabe aus.
  5. Senden Sie eine neue Nachricht mit einem tool_result-Inhaltsblock, der die Ausgabe enthält.
  6. Claude antwortet mit der endgültigen Antwort.

Beispiel

Definieren Sie ein Wetter-Tool und behandeln Sie die Tool-Use-Schleife.


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;