---
title: Esfuerzo por mensaje
url: https://platform.claude.com/docs/es/build-with-claude/effort-per-message
description: Usa un mensaje del sistema para cambiar el nivel de esfuerzo a mitad de una conversación y conservar la caché de prompts.
featureMetadata:
  status: beta
  betaHeader: mid-conversation-output-config-2026-07-01
  supportedModels:
    - claude-fable-5-2
    - claude-mythos-5-2
    - claude-fable-5-1
    - claude-mythos-5-1
    - claude-opus-5-5
    - claude-opus-5
    - claude-sonnet-5-5
    - claude-haiku-5-5
  supportedPlatforms:
    Claude API: beta
    Amazon Bedrock: beta
    Amazon Bedrock (bedrock-runtime):
      availability: beta
      note: Envía el valor beta en el array `anthropic_beta` del cuerpo de la solicitud.
    Claude Platform on AWS: beta
    Claude Models on Google Cloud (Anthropic managed): beta
    Claude Models on Google Cloud (Google managed): beta
    Microsoft Foundry: beta
---

Un cambio de esfuerzo por mensaje establece un nuevo nivel de esfuerzo para los turnos posteriores de una conversación sin cambiar el valor de nivel superior de la solicitud, por lo que el prefijo almacenado en caché sigue coincidiendo.

## Cambiar el nivel de esfuerzo

Para cambiar el nivel a mitad de una conversación:

1. Agrega un mensaje `role: "system"` a `messages`, con `content` vacío y el nuevo nivel de [esfuerzo](https://platform.claude.com/docs/es/build-with-claude/effort) en `output_config.effort`.
2. Envía el [encabezado beta](https://platform.claude.com/docs/es/api/beta-headers) `mid-conversation-output-config-2026-07-01`.
3. Deja el valor de nivel superior sin cambios.

El siguiente ejemplo mantiene el valor de nivel superior en `high` y baja a `low` para un seguimiento rutinario:

<CodeGroup>
  ```bash cURL
  # Mensaje del sistema solo de esfuerzo: el nuevo nivel se aplica desde el siguiente turno del usuario.
  curl https://api.anthropic.com/v1/messages \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2026-10-21" \
    -H "anthropic-beta: mid-conversation-output-config-2026-07-01" \
    -H "content-type: application/json" \
    -d '{
      "model": "claude-fable-5-1",
      "max_tokens": 4096,
      "output_config": {"effort": "high"},
      "messages": [
        {"role": "user", "content": "Plan a migration from SQLite to PostgreSQL in three short steps."},
        {"role": "assistant", "content": "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."},
        {"role": "system", "content": [], "output_config": {"effort": "low"}},
        {"role": "user", "content": "Summarize the plan in one sentence."}
      ]
    }'
  ```

  ```bash CLI
  ant beta:messages create \
    --beta mid-conversation-output-config-2026-07-01 <<'YAML'
  model: claude-fable-5-1
  max_tokens: 4096
  output_config:
    effort: high
  messages:
    - role: user
      content: Plan a migration from SQLite to PostgreSQL in three short steps.
    - role: assistant
      content: "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."
    # Mensaje del sistema solo de esfuerzo: el nuevo nivel surte efecto desde el siguiente turno del usuario.
    - role: system
      content: []
      output_config:
        effort: low
    - role: user
      content: Summarize the plan in one sentence.
  YAML
  ```

  ```python Python
  client = anthropic.Anthropic()

  response = client.beta.messages.create(
      model="claude-fable-5-1",
      max_tokens=4096,
      output_config={"effort": "high"},
      messages=[
          {
              "role": "user",
              "content": "Plan a migration from SQLite to PostgreSQL in three short steps.",
          },
          {
              "role": "assistant",
              "content": "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.",
          },
          # Mensaje del sistema solo de esfuerzo: el nuevo nivel se aplica a partir del siguiente turno del usuario.
          {"role": "system", "content": [], "output_config": {"effort": "low"}},
          {"role": "user", "content": "Summarize the plan in one sentence."},
      ],
      betas=["mid-conversation-output-config-2026-07-01"],
  )

  for block in response.content:
      if block.type == "text":
          print(block.text)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const response = await client.beta.messages.create({
    model: "claude-fable-5-1",
    max_tokens: 4096,
    output_config: { effort: "high" },
    messages: [
      {
        role: "user",
        content: "Plan a migration from SQLite to PostgreSQL in three short steps."
      },
      {
        role: "assistant",
        content:
          "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."
      },
      // Mensaje del sistema solo de esfuerzo: el nuevo nivel se aplica desde el próximo turno del usuario.
      { role: "system", content: [], output_config: { effort: "low" } },
      { role: "user", content: "Summarize the plan in one sentence." }
    ],
    betas: ["mid-conversation-output-config-2026-07-01"]
  });

  for (const block of response.content) {
    if (block.type === "text") {
      console.log(block.text);
    }
  }
  ```

  ```csharp C#
  using Anthropic.Models.Beta;
  using Anthropic.Models.Beta.Messages;
  using Model = Anthropic.Models.Messages.Model;

  AnthropicClient client = new();

  var response = await client.Beta.Messages.Create(new MessageCreateParams
  {
      Model = Model.ClaudeFable5_1,
      MaxTokens = 4096,
      OutputConfig = new() { Effort = Effort.High },
      Messages =
      [
          new BetaUserMessageParam { Content = "Plan a migration from SQLite to PostgreSQL in three short steps." },
          new BetaAssistantMessageParam { Content = "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts." },
          // Mensaje del sistema solo de esfuerzo: el nuevo nivel se aplica a partir del siguiente turno del usuario.
          new BetaSystemMessageParam
          {
              Content = new([]),
              OutputConfig = new() { Effort = BetaSystemMessageOutputConfigEffort.Low },
          },
          new BetaUserMessageParam { Content = "Summarize the plan in one sentence." },
      ],
      Betas = [AnthropicBeta.MidConversationOutputConfig2026_07_01],
  });

  foreach (var block in response.Content)
  {
      if (block.TryPickText(out var textBlock))
      {
          Console.WriteLine(textBlock.Text);
      }
  }
  ```

  ```go Go
  client := anthropic.NewClient()

  response, err := client.Beta.Messages.New(context.Background(), anthropic.BetaMessageNewParams{
  	Model:     anthropic.ModelClaudeFable5_1,
  	MaxTokens: 4096,
  	OutputConfig: anthropic.BetaOutputConfigParam{
  		Effort: anthropic.BetaOutputConfigEffortHigh,
  	},
  	Messages: []anthropic.BetaMessageParam{
  		anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Plan a migration from SQLite to PostgreSQL in three short steps.")),
  		{OfAssistant: &anthropic.BetaAssistantMessageParam{
  			Content: []anthropic.BetaContentBlockParamUnion{anthropic.NewBetaTextBlock("1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.")},
  		}},
  		// Mensaje del sistema solo de esfuerzo: el nuevo nivel se aplica desde el siguiente turno del usuario.
  		anthropic.NewBetaSystemMessage(anthropic.BetaSystemMessageOutputConfigParam{
  			Effort: anthropic.BetaSystemMessageOutputConfigEffortLow,
  		}),
  		anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Summarize the plan in one sentence.")),
  	},
  	Betas: []anthropic.AnthropicBeta{anthropic.AnthropicBetaMidConversationOutputConfig2026_07_01},
  })
  if err != nil {
  	log.Fatal(err)
  }

  for _, block := range response.Content {
  	if textBlock, ok := block.AsAny().(anthropic.BetaTextBlock); ok {
  		fmt.Println(textBlock.Text)
  	}
  }
  ```

  ```java Java
  import com.anthropic.models.beta.AnthropicBeta;
  import com.anthropic.models.beta.messages.BetaMessage;
  import com.anthropic.models.beta.messages.BetaOutputConfig;
  import com.anthropic.models.beta.messages.BetaSystemMessageOutputConfig;
  import com.anthropic.models.beta.messages.BetaSystemMessageParam;
  import com.anthropic.models.beta.messages.MessageCreateParams;
  import com.anthropic.models.messages.Model;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      MessageCreateParams params = MessageCreateParams.builder()
          .model(Model.CLAUDE_FABLE_5_1)
          .maxTokens(4096L)
          .addBeta(AnthropicBeta.MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01)
          .outputConfig(BetaOutputConfig.builder()
              .effort(BetaOutputConfig.Effort.HIGH)
              .build())
          .addUserMessage("Plan a migration from SQLite to PostgreSQL in three short steps.")
          .addAssistantMessage("1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.")
          // Mensaje del sistema solo de esfuerzo: el nuevo nivel se aplica desde el siguiente turno del usuario.
          .addMessage(BetaSystemMessageParam.builder()
              .contentOfBlocks(List.of())
              .outputConfig(BetaSystemMessageOutputConfig.builder()
                  .effort(BetaSystemMessageOutputConfig.Effort.LOW)
                  .build())
              .build())
          .addUserMessage("Summarize the plan in one sentence.")
          .build();

      BetaMessage response = client.beta().messages().create(params);
      response.content().stream()
          .flatMap(block -> block.text().stream())
          .forEach(textBlock -> IO.println(textBlock.text()));
  }
  ```

  ```php PHP
  use Anthropic\Beta\AnthropicBeta;
  use Anthropic\Beta\Messages\BetaMessageParam;
  use Anthropic\Beta\Messages\BetaOutputConfig;
  use Anthropic\Beta\Messages\BetaSystemMessageOutputConfig;
  use Anthropic\Beta\Messages\BetaTextBlock;
  use Anthropic\Client;
  use Anthropic\Messages\Model;

  $client = new Client();

  $response = $client->beta->messages->create(
      model: Model::CLAUDE_FABLE_5_1,
      maxTokens: 4096,
      outputConfig: BetaOutputConfig::with(effort: 'high'),
      messages: [
          BetaMessageParam::with(role: 'user', content: 'Plan a migration from SQLite to PostgreSQL in three short steps.'),
          BetaMessageParam::with(role: 'assistant', content: '1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.'),
          // Mensaje del sistema solo de esfuerzo: el nuevo nivel se aplica desde el siguiente turno del usuario.
          BetaMessageParam::with(
              role: 'system',
              content: [],
              outputConfig: BetaSystemMessageOutputConfig::with(effort: 'low'),
          ),
          BetaMessageParam::with(role: 'user', content: 'Summarize the plan in one sentence.'),
      ],
      betas: [AnthropicBeta::MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01],
  );

  foreach ($response->content as $block) {
      if ($block instanceof BetaTextBlock) {
          echo $block->text, PHP_EOL;
      }
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  response = client.beta.messages.create(
    model: Anthropic::Model::CLAUDE_FABLE_5_1,
    max_tokens: 4096,
    output_config: {effort: :high},
    messages: [
      {role: "user", content: "Plan a migration from SQLite to PostgreSQL in three short steps."},
      {role: "assistant", content: "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."},
      # Mensaje del sistema solo de esfuerzo: el nuevo nivel se aplica desde el siguiente turno del usuario.
      {role: "system", content: [], output_config: {effort: :low}},
      {role: "user", content: "Summarize the plan in one sentence."}
    ],
    betas: [Anthropic::AnthropicBeta::MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01]
  )

  response.content.each do |block|
    case block
    when Anthropic::Beta::BetaTextBlock
      puts block.text
    end
  end
  ```
</CodeGroup>

La posición del mensaje decide cuándo comienza el nuevo nivel:

* Directamente después de un turno `user` con nueva entrada: la respuesta de Claude a ese turno usa el nuevo nivel.
* En cualquier otra posición, como entre un turno `assistant` y el siguiente turno `user` como en el ejemplo anterior: el nuevo nivel comienza en el siguiente turno `user` con nueva entrada.

Un turno `user` que solo contiene bloques `tool_result` no cuenta como nueva entrada.

El nuevo nivel permanece vigente hasta que un mensaje posterior lo cambie.

Coloca el mensaje después de todo lo que ya hayas enviado y mantenlo en su lugar en las solicitudes posteriores. No lo insertes antes de turnos que ya hayas enviado, y no lo muevas ni lo elimines más adelante. En los modelos con “preserved thinking” ([pensamiento preservado](https://platform.claude.com/docs/es/build-with-claude/preserved-thinking)), cualquiera de esos cambios invalida los bloques de pensamiento en los turnos `assistant` posteriores al mensaje. [Qué hace la API con un bloque no válido](https://platform.claude.com/docs/es/build-with-claude/preserved-thinking#mismatch-behavior) explica lo que sucede a continuación.

Si está junto a un mensaje `system` que tiene contenido, ambos mensajes deben seguir las [reglas de ubicación para mensajes del sistema a mitad de la conversación](https://platform.claude.com/docs/es/build-with-claude/mid-conversation-system-messages#limitations).

Con la API InvokeModel de Amazon Bedrock, envía el valor beta en el arreglo `anthropic_beta` del cuerpo de la solicitud en lugar del encabezado. Para conocer los modelos que admiten el esfuerzo por mensaje allí, consulta [Mensajes del sistema a mitad de la conversación en Bedrock](https://platform.claude.com/docs/es/build-with-claude/claude-on-amazon-bedrock-legacy#mid-conversation-system-messages-on-bedrock).

## Errores

* Sin el encabezado beta, un `output_config` por mensaje devuelve un error 400: `messages.N.output_config: Extra inputs are not permitted`, donde `N` es el índice del mensaje `system` en `messages`.
* Con el encabezado beta, los modelos sin esfuerzo por mensaje, como Claude Fable 5, devuelven un error 400: `output_config.effort requires a model that supports per-turn effort; this model does not`. En Amazon Bedrock, esos modelos y Claude Opus 5 devuelven `Extra inputs are not permitted` en su lugar.
* En Claude Sonnet 5.5 con `thinking: {"type": "between_tools"}` y en Claude Haiku 5.5 con `thinking: {"type": "disabled"}`, no puedes cambiar el nivel de esfuerzo a mitad de la conversación. En esos casos, un `output_config.effort` por mensaje con un nuevo nivel devuelve un error 400. Para variar el esfuerzo en cada turno, usa el pensamiento adaptativo.

## Esfuerzo por mensaje o de nivel superior

Prefiere el esfuerzo por mensaje en lugar de [cambiar el valor de nivel superior](https://platform.claude.com/docs/es/build-with-claude/effort#top-level-effort-on-the-next-request) entre solicitudes. Un cambio por mensaje deja sin cambios todo lo anterior, por lo que el prefijo almacenado en caché sigue coincidiendo. Un cambio de nivel superior reinicia la caché. En Claude Fable 5.1, un cambio de nivel superior además dirige el modelo de forma menos confiable. Las respuestas anteriores del modelo se escribieron con el nivel previo, y el modelo tiende a mantenerse coherente con ellas.

## Disponibilidad

Esfuerzo por mensaje está en beta en algunos modelos.

### Compatibilidad con la API

#### [Messages API](https://platform.claude.com/docs/es/build-with-claude/working-with-messages)

* Disponibilidad: Disponible

| Estado           | Plataformas en la nube                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | Modelos                                                                                                                                                                                                                                                                                                                                    |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Beta             | Claude API, [Amazon Bedrock](https://platform.claude.com/docs/es/build-with-claude/claude-in-amazon-bedrock), [Claude Platform on AWS](https://platform.claude.com/docs/es/build-with-claude/claude-platform-on-aws), [Claude Models on Google Cloud (Anthropic managed)](https://platform.claude.com/docs/es/build-with-claude/claude-models-on-google-cloud/anthropic-managed), [Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/es/build-with-claude/claude-models-on-google-cloud/google-managed), [Microsoft Foundry](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry) | [Claude Fable 5.1](https://platform.claude.com/docs/es/models/fable-5-1/overview), [Claude Opus 5.5](https://platform.claude.com/docs/es/models/opus-5-5/overview)                                                                                                                                                                         |
| Beta<sup>1</sup> | [Amazon Bedrock (bedrock-runtime)](https://platform.claude.com/docs/es/build-with-claude/claude-on-amazon-bedrock-legacy)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | [Claude Fable 5.2](https://platform.claude.com/docs/es/models/fable-5-2/overview), [Claude Mythos 5.2](https://platform.claude.com/docs/es/models/mythos-5-2/overview), [Claude Fable 5.1](https://platform.claude.com/docs/es/models/fable-5-1/overview), [Claude Opus 5.5](https://platform.claude.com/docs/es/models/opus-5-5/overview) |
| Beta             | Claude API, [Claude Platform on AWS](https://platform.claude.com/docs/es/build-with-claude/claude-platform-on-aws), [Claude Models on Google Cloud (Anthropic managed)](https://platform.claude.com/docs/es/build-with-claude/claude-models-on-google-cloud/anthropic-managed), [Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/es/build-with-claude/claude-models-on-google-cloud/google-managed), [Microsoft Foundry](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry)                                                                                                   | [Claude Fable 5.2](https://platform.claude.com/docs/es/models/fable-5-2/overview), [Claude Opus 5](https://platform.claude.com/docs/es/models/opus-5/overview), [Claude Sonnet 5.5](https://platform.claude.com/docs/es/models/sonnet-5-5/overview), [Claude Haiku 5.5](https://platform.claude.com/docs/es/models/haiku-5-5/overview)     |
| Beta             | Claude API, [Amazon Bedrock](https://platform.claude.com/docs/es/build-with-claude/claude-in-amazon-bedrock), [Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/es/build-with-claude/claude-models-on-google-cloud/google-managed), [Microsoft Foundry (hosted on Anthropic)](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry)                                                                                                                                                                                                                                               | [Claude Mythos 5.1](https://platform.claude.com/docs/es/models/mythos-5-1/overview)                                                                                                                                                                                                                                                        |
| Beta             | Claude API, [Claude Models on Google Cloud (Anthropic managed)](https://platform.claude.com/docs/es/build-with-claude/claude-models-on-google-cloud/anthropic-managed), [Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/es/build-with-claude/claude-models-on-google-cloud/google-managed), [Microsoft Foundry (hosted on Anthropic)](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry)                                                                                                                                                                                     | [Claude Mythos 5.2](https://platform.claude.com/docs/es/models/mythos-5-2/overview)                                                                                                                                                                                                                                                        |

1. Envía el valor beta en el array `anthropic_beta` del cuerpo de la solicitud.

#### [Managed Agents](https://platform.claude.com/docs/es/managed-agents/overview)

* Disponibilidad: No disponible
* Uso: En su lugar, establece el esfuerzo de una sesión anulando la configuración del modelo del agente.

### Encabezados beta requeridos

[Descripción general de los encabezados beta](https://platform.claude.com/docs/es/api/beta-headers)

Los encabezados beta te permiten acceder a funciones experimentales y nuevas capacidades de los modelos antes de que formen parte de la API estándar.

* `mid-conversation-output-config-2026-07-01`
