拡張思考により、Claudeは応答を提供する前に複雑な問題を段階的に考え抜く能力を得ます。有効にすると、Claudeは内部の推論(思考ブロック)を作成し、数学、コーディング、分析、その他の複雑なタスクに対する応答の品質を向上させます。
コンビニエンスメソッドを使用して、拡張思考を有効にしたメッセージを送信します。思考が有効な場合、API が要求するため、温度は自動的に1.0に設定されます。
Anthropic := TsgcHTTP_API_Anthropic.Create(nil);
Anthropic.AnthropicOptions.ApiKey := 'API_KEY';
WriteLn(Anthropic._CreateMessageWithThinking('claude-sonnet-4-20250514',
'How many r''s are in the word strawberry?', 10000));
型付きリクエスト/レスポンスクラスを使用して完全に制御してください。ThinkingType を 'enabled' に設定し、ThinkingBudgetTokens を目的のトークン予算(最小 1024)に設定します。レスポンスには thinking とテキストコンテンツブロックが含まれます。
Anthropic := TsgcHTTP_API_Anthropic.Create(nil);
Anthropic.AnthropicOptions.ApiKey := 'API_KEY';
oRequest := TsgcAnthropicClass_Request_Messages.Create;
Try
oRequest.Model := 'claude-sonnet-4-20250514';
oRequest.MaxTokens := 16384;
oRequest.ThinkingType := 'enabled';
oRequest.ThinkingBudgetTokens := 10000;
oMessage := TsgcAnthropicClass_Request_Message.Create;
oMessage.Role := 'user';
oMessage.Content := 'Explain the proof that there are infinitely many primes.';
oMessages := oRequest.Messages;
SetLength(oMessages, 1);
oMessages[0] := oMessage;
oRequest.Messages := oMessages;
oResponse := Anthropic.CreateMessage(oRequest);
Try
for i := 0 to Length(oResponse.Content) - 1 do
begin
if oResponse.Content[i].ContentType = 'thinking' then
WriteLn('Thinking: ' + oResponse.Content[i].Thinking)
else if oResponse.Content[i].ContentType = 'text' then
WriteLn('Response: ' + oResponse.Content[i].Text);
end;
Finally
oResponse.Free;
End;
Finally
oMessage.Free;
oRequest.Free;
End;
マルチターン会話で拡張思考を使用する場合、以前のレスポンスからの thinking および redacted_thinking ブロックを会話に含めて渡す必要があります。ContentBlocks 配列を使用してこれらのブロックを含めてください。
// Pass back thinking blocks from a previous response
oBlock := TsgcAnthropicClass_Request_Content_Block.Create;
oBlock.ContentType := 'thinking';
oBlock.Text := oPrevThinkingBlock.Thinking; // thinking text
oBlock.Signature := oPrevThinkingBlock.Signature; // signature string
// Pass back redacted thinking blocks
oBlock := TsgcAnthropicClass_Request_Content_Block.Create;
oBlock.ContentType := 'redacted_thinking';
oBlock.Data := oPrevRedactedBlock.Data;