Anthropic | Utilisation des outils

Claude prend en charge l'utilisation d'outils (appel de fonctions), vous permettant de définir des outils que Claude peut invoquer au cours d'une conversation. Lorsque Claude décide d'utiliser un outil, il retourne un bloc de contenu tool_use. Vous exécutez ensuite l'outil et renvoyez le résultat sous forme de bloc de contenu tool_result.

Flux d'utilisation des outils

  1. Définissez des outils avec un nom, une description et un input_schema (JSON Schema).
  2. Envoyer un message avec des outils définis.
  3. Claude répond avec un bloc de contenu tool_use (stop_reason = 'tool_use').
  4. Exécutez l'outil avec l'entrée fournie.
  5. Envoyez un nouveau message avec un bloc de contenu tool_result contenant la sortie.
  6. Claude répond avec la réponse finale.

Exemple

Définissez un outil météo et gérez la boucle d'utilisation des outils.


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;