Todos os modelos Gemini usam um "processo de pensamento" interno que melhora significativamente as habilidades de raciocínio e planejamento em várias etapas, tornando-os altamente eficazes para tarefas complexas, como programação, matemática avançada e análise de dados.
Os modelos de raciocínio oferecem as seguintes configurações e opções:
Controlar a quantidade de raciocínio
É possível configurar os níveis de raciocínio para controlar o quanto um modelo pode "pensar". Essa configuração é particularmente importante se a redução da latência ou do custo for uma prioridade. Além disso, confira a comparação de dificuldades de tarefas para decidir o quanto um modelo pode precisar da capacidade de raciocínio.Receber resumos de pensamentos
Você pode ativar os resumos de pensamentos para incluir na resposta gerada. Esses resumos são versões sintetizadas dos pensamentos brutos do modelo e oferecem insights sobre o processo de raciocínio interno dele.Processar assinaturas de pensamento
Os SDKs do Firebase AI Logic processam automaticamente as assinaturas de pensamento para você, o que garante que o modelo tenha acesso ao contexto de pensamento de turnos anteriores, especificamente ao usar a chamada de função.
Confira as práticas recomendadas e as orientações de comandos para usar modelos de raciocínio.
Práticas recomendadas e orientações de comandos para usar modelos de raciocínio
Recomendamos testar seu comando no Google AI Studio ou no Agent Studio, onde você pode conferir todo o processo de raciocínio. Você pode identificar as áreas em que o modelo pode ter se desviado para refinar os comandos e receber respostas mais consistentes e precisas.
Comece com um comando geral que descreva o resultado desejado e observe as considerações iniciais do modelo sobre como ele determina a resposta. Se a resposta não for a esperada, ajude o modelo a gerar uma resposta melhor usando uma das seguintes técnicas de comando:
- Fornecer instruções detalhadas
- Forneça vários exemplos de pares de entrada e saída
- Forneça orientações sobre como a saída e as respostas devem ser formuladas e formatadas.
- Fornecer etapas de verificação específicas
Além de usar comandos, considere estas recomendações:
Defina instruções do sistema, que são como um "preâmbulo" adicionado antes que o modelo seja exposto a outras instruções do comando ou do usuário final. Elas permitem que você oriente o comportamento do modelo com base nas suas necessidades e casos de uso específicos.
Defina um nível de raciocínio para controlar o quanto o modelo pode pensar. Se você definir um nível alto, o modelo poderá pensar mais, se necessário. Se você definir um valor mais baixo, o modelo não vai "pensar demais" na resposta e também vai reservar mais do limite total de saída de tokens para a resposta real, o que pode ajudar a reduzir a latência e o custo.
Ative o AI monitoring no console do Firebase para monitorar a contagem de tokens de raciocínio e a latência das suas solicitações com o raciocínio ativado. Se você tiver os resumos de pensamento ativados, eles vão aparecer no console, onde é possível inspecionar o raciocínio detalhado do modelo para ajudar você a depurar e refinar seus comandos.
Controlar a quantidade de pensamento
É possível configurar níveis de pensamento para controlar quanto "pensamento" e raciocínio um modelo pode fazer antes de retornar uma resposta. Essa configuração é particularmente importante se a redução da latência ou do custo for uma prioridade.
Confira a comparação de dificuldades de tarefas para decidir o quanto um modelo pode precisar da capacidade de raciocínio. Confira algumas orientações gerais:
- Defina um valor de pensamento mais baixo para tarefas menos complexas ou se reduzir a latência ou o custo for uma prioridade para você.
- Defina um valor de pensamento mais alto para tarefas mais complexas.
Níveis de raciocínio
Para controlar o quanto um modelo pode pensar para gerar uma resposta, especifique um nível de raciocínio para a quantidade de tokens de raciocínio que ele pode usar.
Definir o nível de raciocínio
|
Clique no seu provedor de Gemini API para conferir o conteúdo e o código específicos do provedor nesta página. |
Defina o nível de pensamento em um GenerationConfig como parte da criação da
instância GenerativeModel. A configuração é mantida durante o ciclo de vida da instância. Se você quiser usar níveis de pensamento diferentes para solicitações
diferentes, crie instâncias GenerativeModel configuradas com cada nível.
Saiba mais sobre os valores aceitos para o nível de raciocínio mais adiante nesta seção.
Swift
Defina o nível de pensamento em um
GenerationConfig
como parte da criação de uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(thinkingLevel: .low)
)
// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_3.x_MODEL_NAME",
generationConfig: generationConfig
)
// ...
Kotlin
Defina os valores dos parâmetros em um
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
thinkingLevel = ThinkingLevel.LOW
}
}
// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_3.x_MODEL_NAME",
generationConfig,
)
// ...
Java
Defina os valores dos parâmetros em um
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setThinkingLevel(ThinkingLevel.LOW)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_3.x_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// ...
Web
Defina os valores dos parâmetros em um
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
const generationConfig = {
thinkingConfig: {
thinkingLevel: ThinkingLevel.LOW
}
};
// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_3.x_MODEL_NAME", generationConfig });
// ...
Dart
Defina os valores dos parâmetros em um
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
final thinkingConfig = ThinkingConfig.withThinkingLevel(ThinkingLevel.low);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_3.x_MODEL_NAME',
generationConfig: generationConfig,
);
// ...
Unity
Defina os valores dos parâmetros em um
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Use a thinking level value appropriate for your model (example value shown here).
var thinkingConfig = new ThinkingConfig(thinkingLevel: ThinkingLevel.Low);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_3.x_MODEL_NAME",
generationConfig: generationConfig
);
// ...
Valores aceitos para o nível de raciocínio
A tabela a seguir lista os valores de nível de pensamento que podem ser definidos para cada
modelo configurando o thinkingLevel do modelo.
MINIMAL |
LOW |
MEDIUM |
HIGH |
|
|---|---|---|---|---|
|
O modelo usa o mínimo de tokens possível, quase sem raciocínio Tarefas de baixa complexidade |
O modelo usa menos tokens, o que minimiza a latência e o custo Tarefas simples e de alta capacidade de processamento |
O modelo usa uma abordagem equilibrada Tarefas de complexidade moderada |
O modelo usa tokens até o nível máximo Comandos complexos que exigem raciocínio profundo |
|
Gemini 4 Argongemini-4-argon
|
1 | (padrão) | ||
Gemini 3.x Progemini-3.1-pro-preview
|
(padrão) | |||
Gemini 3.x Flashgemini-3.8-flashgemini-3.7-flashgemini-3.6-flashgemini-3.5-flash
|
não é compatível com gemini-3.8-flashgemini-3.7-flash |
(padrão) | ||
Gemini 3.x Flash‑Litegemini-3.5-flash-litegemini-3.1-flash-lite
|
(padrão) | |||
Gemini Nano Banana 2.1gemini-nano-banana-2.1
|
(padrão) | |||
Gemini Nano Banana 2gemini-3.1-flash-image |
(padrão) | |||
Gemini Nano Banana 2 Litegemini-3.1-flash-lite-image |
(padrão) | |||
Gemini Nano Banana Progemini-3-pro-image
|
(padrão) |
1 gemini-4-argon, gemini-3.8-flash
e gemini-3.7-flash não são compatíveis com o
nível de raciocínio MINIMAL. Se você definir o nível de pensamento como
MINIMAL, a solicitação vai falhar com um erro 400.
Orçamentos de raciocínio (modelos Gemini 2.5)
Para controlar o quanto um modelo Gemini 2.5 pode pensar para gerar a resposta, especifique um orçamento de pensamento para a quantidade de tokens de pensamento que ele pode usar.
Complexidade da tarefa para todos os modelos de raciocínio
Tarefas fáceis — o raciocínio não é tão necessário
Solicitações simples em que o raciocínio complexo não é necessário, como recuperação de fatos ou classificação. Exemplos:- "Onde a DeepMind foi fundada?"
- "Este e-mail está pedindo uma reunião ou apenas fornecendo informações?"
Tarefas moderadas: é provável que seja necessário pensar um pouco
Solicitações comuns que se beneficiam de um grau de processamento detalhado ou compreensão mais profunda. Exemplos:- "Crie uma analogia entre a fotossíntese e o crescimento."
- "Compare e contraste carros elétricos e carros híbridos."
Tarefas difíceis: pode ser necessário usar o nível máximo de raciocínio
Desafios realmente complexos, como resolver problemas de matemática complexos ou tarefas de programação. Esses tipos de tarefas exigem que o modelo use todos os recursos de raciocínio e planejamento, geralmente envolvendo muitas etapas internas antes de fornecer uma resposta. Exemplos:- "Resolva o problema 1 do AIME 2025: encontre a soma de todas as bases inteiras b > 9 para as quais 17b é um divisor de 97b."
- "Escreva um código Python para um aplicativo da Web que visualize dados do mercado de ações em tempo real, incluindo autenticação de usuário. Faça com que seja o mais eficiente possível."
Resumos de raciocínio
Os resumos de pensamentos são versões sintetizadas dos pensamentos brutos do modelo e oferecem insights sobre o processo de raciocínio interno dele.
Confira alguns motivos para incluir resumos de pensamento nas respostas:
Você pode mostrar o resumo do pensamento na interface do app ou disponibilizá-lo para os usuários. O resumo do pensamento é retornado como uma parte separada na resposta para que você tenha mais controle sobre como ele é usado no app.
Se você também ativar o AI monitoring no console do Firebase, os resumos de pensamento serão mostrados no console, onde você poderá inspecionar o raciocínio detalhado do modelo para ajudar a depurar e refinar seus comandos.
Confira algumas observações importantes sobre os resumos de pensamentos:
Os resumos de pensamento não são controlados por orçamentos de pensamento (os orçamentos se aplicam apenas aos pensamentos brutos do modelo). No entanto, se o pensamento estiver desativado, o modelo não vai retornar um resumo do pensamento.
Os resumos de pensamento são considerados parte da resposta de texto gerado regular do modelo e contam como tokens de saída.
Ativar resumos de raciocínio
|
Clique no seu provedor de Gemini API para conferir o conteúdo e o código específicos do provedor nesta página. |
Para ativar os resumos de pensamento, defina includeThoughts como verdadeiro na configuração do modelo. Em seguida, você pode acessar o resumo verificando o
campo thoughtSummary da resposta.
Confira um exemplo que demonstra como ativar e recuperar resumos de pensamento com a resposta:
Swift
Ative os resumos de pensamento na
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(includeThoughts: true)
)
// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
)
let response = try await model.generateContent("solve x^2 + 4x + 4 = 0")
// Handle the response that includes thought summaries.
if let thoughtSummary = response.thoughtSummary {
print("Thought Summary: \(thoughtSummary)")
}
guard let text = response.text else {
fatalError("No text in response.")
}
print("Answer: \(text)")
Kotlin
Ative os resumos de pensamento na
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
includeThoughts = true
}
}
// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
generationConfig,
)
val response = model.generateContent("solve x^2 + 4x + 4 = 0")
// Handle the response that includes thought summaries.
response.thoughtSummary?.let {
println("Thought Summary: $it")
}
response.text?.let {
println("Answer: $it")
}
Java
Ative os resumos de pensamento na
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setIncludeThoughts(true)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// Handle the response that includes thought summaries.
ListenableFuture responseFuture = model.generateContent("solve x^2 + 4x + 4 = 0");
Futures.addCallback(responseFuture, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse response) {
if (response.getThoughtSummary() != null) {
System.out.println("Thought Summary: " + response.getThoughtSummary());
}
if (response.getText() != null) {
System.out.println("Answer: " + response.getText());
}
}
@Override
public void onFailure(Throwable t) {
// Handle error
}
}, MoreExecutors.directExecutor());
Web
Ative os resumos de pensamento na
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
const generationConfig = {
thinkingConfig: {
includeThoughts: true
}
};
// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });
const result = await model.generateContent("solve x^2 + 4x + 4 = 0");
const response = result.response;
// Handle the response that includes thought summaries.
if (response.thoughtSummary()) {
console.log(`Thought Summary: ${response.thoughtSummary()}`);
}
const text = response.text();
console.log(`Answer: ${text}`);
Dart
Ative os resumos de pensamento no
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
final thinkingConfig = ThinkingConfig(includeThoughts: true);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_MODEL_NAME',
generationConfig: generationConfig,
);
final response = await model.generateContent([Content.text('solve x^2 + 4x + 4 = 0')]);
// Handle the response that includes thought summaries.
if (response.thoughtSummary != null) {
print('Thought Summary: ${response.thoughtSummary}');
}
if (response.text != null) {
print('Answer: ${response.text}');
}
Unity
Ative os resumos de pensamento na
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
var thinkingConfig = new ThinkingConfig(includeThoughts: true);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
);
var response = await model.GenerateContentAsync("solve x^2 + 4x + 4 = 0");
// Handle the response that includes thought summaries.
if (response.ThoughtSummary != null) {
Debug.Log($"Thought Summary: {response.ThoughtSummary}");
}
if (response.Text != null) {
Debug.Log($"Answer: {response.Text}");
}
Resumos de raciocínio de streaming
Também é possível conferir resumos de pensamentos se você optar por transmitir uma resposta usando
generateContentStream. Isso vai retornar resumos contínuos e incrementais durante
a geração da resposta.
Swift
Ative os resumos de pensamento na
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(includeThoughts: true)
)
// Specify the config as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
)
let stream = try model.generateContentStream("solve x^2 + 4x + 4 = 0")
// Handle the streamed response that includes thought summaries.
var thoughts = ""
var answer = ""
for try await response in stream {
if let thought = response.thoughtSummary {
if thoughts.isEmpty {
print("--- Thoughts Summary ---")
}
print(thought)
thoughts += thought
}
if let text = response.text {
if answer.isEmpty {
print("--- Answer ---")
}
print(text)
answer += text
}
}
Kotlin
Ative os resumos de pensamento na
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
includeThoughts = true
}
}
// Specify the config as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
generationConfig,
)
// Handle the streamed response that includes thought summaries.
var thoughts = ""
var answer = ""
model.generateContentStream("solve x^2 + 4x + 4 = 0").collect { response ->
response.thoughtSummary?.let {
if (thoughts.isEmpty()) {
println("--- Thoughts Summary ---")
}
print(it)
thoughts += it
}
response.text?.let {
if (answer.isEmpty()) {
println("--- Answer ---")
}
print(it)
answer += it
}
}
Java
Ative os resumos de pensamento na
GenerationConfig
como parte da criação de uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setIncludeThoughts(true)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// Streaming with Java is complex and depends on the async library used.
// This is a conceptual example using a reactive stream.
Flowable responseStream = model.generateContentStream("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries
StringBuilder thoughts = new StringBuilder();
StringBuilder answer = new StringBuilder();
responseStream.subscribe(response -> {
if (response.getThoughtSummary() != null) {
if (thoughts.length() == 0) {
System.out.println("--- Thoughts Summary ---");
}
System.out.print(response.getThoughtSummary());
thoughts.append(response.getThoughtSummary());
}
if (response.getText() != null) {
if (answer.length() == 0) {
System.out.println("--- Answer ---");
}
System.out.print(response.getText());
answer.append(response.getText());
}
}, throwable -> {
// Handle error
});
Web
Ative os resumos de pensamento na
GenerationConfig
como parte da criação de uma instância GenerativeModel.
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
const generationConfig = {
thinkingConfig: {
includeThoughts: true
}
};
// Specify the config as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });
const result = await model.generateContentStream("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries.
let thoughts = "";
let answer = "";
for await (const chunk of result.stream) {
if (chunk.thoughtSummary()) {
if (thoughts === "") {
console.log("--- Thoughts Summary ---");
}
// In Node.js, process.stdout.write(chunk.thoughtSummary()) could be used
// to avoid extra newlines.
console.log(chunk.thoughtSummary());
thoughts += chunk.thoughtSummary();
}
const text = chunk.text();
if (text) {
if (answer === "") {
console.log("--- Answer ---");
}
// In Node.js, process.stdout.write(text) could be used.
console.log(text);
answer += text;
}
}
Dart
Ative os resumos de pensamento no
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
final thinkingConfig = ThinkingConfig(includeThoughts: true);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_MODEL_NAME',
generationConfig: generationConfig,
);
final responses = model.generateContentStream([Content.text('solve x^2 + 4x + 4 = 0')]);
// Handle the streamed response that includes thought summaries.
var thoughts = '';
var answer = '';
await for (final response in responses) {
if (response.thoughtSummary != null) {
if (thoughts.isEmpty) {
print('--- Thoughts Summary ---');
}
thoughts += response.thoughtSummary!;
}
if (response.text != null) {
if (answer.isEmpty) {
print('--- Answer ---');
}
answer += response.text!;
}
}
Unity
Ative os resumos de pensamento na
GenerationConfig
ao criar uma instância GenerativeModel.
// ...
// Set the thinking configuration.
// Optionally enable thought summaries in the generated response (default is false).
var thinkingConfig = new ThinkingConfig(includeThoughts: true);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance.
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
);
var stream = model.GenerateContentStreamAsync("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries.
var thoughts = "";
var answer = "";
await foreach (var response in stream)
{
if (response.ThoughtSummary != null)
{
if (string.IsNullOrEmpty(thoughts))
{
Debug.Log("--- Thoughts Summary ---");
}
Debug.Log(response.ThoughtSummary);
thoughts += response.ThoughtSummary;
}
if (response.Text != null)
{
if (string.IsNullOrEmpty(answer))
{
Debug.Log("--- Answer ---");
}
Debug.Log(response.Text);
answer += response.Text;
}
}
Assinaturas de raciocínio
Ao usar o raciocínio em interações de vários turnos, o modelo não tem acesso ao contexto de raciocínio de turnos anteriores. No entanto, se você estiver usando a chamada de função, poderá aproveitar as assinaturas de pensamento para manter o contexto do pensamento entre as interações. As assinaturas de pensamento são representações criptografadas do processo de pensamento interno do modelo e estão disponíveis ao usar o pensamento e a chamada de função. Especificamente, as assinaturas de pensamento são geradas quando:
- O raciocínio está ativado e as ideias são geradas.
- A solicitação inclui declarações de função.
Para aproveitar as assinaturas de pensamento, use a chamada de função normalmente.
Os SDKs do Firebase AI Logic simplificam o processo gerenciando o estado
e processando automaticamente as assinaturas de pensamento para você. Os SDKs transmitem automaticamente
as assinaturas de pensamento geradas entre chamadas subsequentes de sendMessage ou
sendMessageStream em uma sessão de Chat.
Preços e contagem de tokens de raciocínio
Os tokens de raciocínio usam os mesmos preços dos tokens de saída de texto. Se você ativar os resumos de pensamento, eles serão considerados tokens de raciocínio e terão o preço definido de acordo.
Ative o AI monitoring no console do Firebase para monitorar a contagem de tokens de raciocínio em solicitações com o raciocínio ativado.
É possível conferir o número total de tokens de raciocínio no campo thoughtsTokenCount
no atributo usageMetadata da resposta:
Swift
// ...
let response = try await model.generateContent("Why is the sky blue?")
if let usageMetadata = response.usageMetadata {
print("Thoughts Token Count: \(usageMetadata.thoughtsTokenCount)")
}
Kotlin
// ...
val response = model.generateContent("Why is the sky blue?")
response.usageMetadata?.let { usageMetadata ->
println("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}")
}
Java
// ...
ListenableFuture<GenerateContentResponse> response =
model.generateContent("Why is the sky blue?");
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String usageMetadata = result.getUsageMetadata();
if (usageMetadata != null) {
System.out.println("Thoughts Token Count: " +
usageMetadata.getThoughtsTokenCount());
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
// ...
const response = await model.generateContent("Why is the sky blue?");
if (response?.usageMetadata?.thoughtsTokenCount != null) {
console.log(`Thoughts Token Count: ${response.usageMetadata.thoughtsTokenCount}`);
}
Dart
// ...
final response = await model.generateContent(
Content.text("Why is the sky blue?"),
]);
if (response?.usageMetadata case final usageMetadata?) {
print("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}");
}
Unity
// ...
var response = await model.GenerateContentAsync("Why is the sky blue?");
if (response.UsageMetadata != null)
{
UnityEngine.Debug.Log($"Thoughts Token Count: {response.UsageMetadata?.ThoughtsTokenCount}");
}
Saiba mais sobre tokens no guia de contagem de tokens.