Este recurso é elegível para Zero Data Retention (ZDR). Quando sua organização possui um acordo de ZDR, os dados enviados por meio deste recurso não são armazenados após a resposta da API ser retornada.
Os blocos de conteúdo de resultados de pesquisa permitem citações naturais com atribuição adequada de fonte, trazendo citações com qualidade de pesquisa na web para suas aplicações personalizadas. Esse recurso é particularmente poderoso para aplicações "RAG" (Retrieval-Augmented Generation, ou geração aumentada por recuperação), nas quais você precisa que o Claude cite fontes com precisão.
O recurso de resultados de pesquisa está disponível nos seguintes modelos:
claude-opus-4-7)claude-opus-4-6)claude-sonnet-5)claude-sonnet-4-6)claude-sonnet-4-5-20250929)claude-opus-4-5-20251101)claude-opus-4-1-20250805)claude-opus-4-20250514)claude-sonnet-4-20250514)claude-haiku-4-5-20251001)claude-3-5-haiku-20241022)Os resultados de pesquisa podem ser fornecidos de duas maneiras:
Em ambos os casos, o Claude pode citar automaticamente informações dos resultados de pesquisa com atribuição adequada de fonte.
Os resultados de pesquisa usam a seguinte estrutura:
{
"type": "search_result",
"source": "https://example.com/article", // Required: Source URL or identifier
"title": "Article Title", // Required: Title of the result
"content": [
// Required: Array of text blocks
{
"type": "text",
"text": "The actual content of the search result..."
}
],
"citations": {
// Optional: Citation configuration
"enabled": true // Enable/disable citations for this result
}
}| Campo | Tipo | Descrição |
|---|---|---|
type | string | Deve ser "search_result" |
source | string | A URL ou identificador da fonte do conteúdo |
title | string | Um título descritivo para o resultado de pesquisa |
content | array | Um array de blocos de texto contendo o conteúdo real |
| Campo | Tipo | Descrição |
|---|---|---|
citations | object | Configuração de citação com o campo booleano enabled |
cache_control | object | Configurações de controle de cache (por exemplo, {"type": "ephemeral"}) |
Cada item no array content deve ser um bloco de texto com:
type: Deve ser "text"text: O conteúdo de texto real (string não vazia)O caso de uso mais poderoso é retornar resultados de pesquisa a partir de suas ferramentas personalizadas. Isso permite aplicações RAG dinâmicas nas quais as ferramentas buscam e retornam conteúdo relevante com citações automáticas.
from anthropic.types import (
MessageParam,
TextBlockParam,
SearchResultBlockParam,
ToolResultBlockParam,
)
client = Anthropic()
# Defina uma ferramenta de busca na base de conhecimento
knowledge_base_tool = {
"name": "search_knowledge_base",
"description": "Search the company knowledge base for information",
"input_schema": {
"type": "object",
"properties": {"query": {"type": "string", "description": "The search query"}},
"required": ["query"],
},
}
# Função para tratar a chamada da ferramenta
def search_knowledge_base(query):
# Sua lógica de busca aqui
# Retorna os resultados da busca no formato correto
return [
SearchResultBlockParam(
type="search_result",
source="https://docs.company.com/product-guide",
title="Product Configuration Guide",
content=[
TextBlockParam(
type="text",
text="To configure the product, navigate to Settings > Configuration. The default timeout is 30 seconds, but can be adjusted between 10-120 seconds based on your needs.",
)
],
citations={"enabled": True},
),
SearchResultBlockParam(
type="search_result",
source="https://docs.company.com/troubleshooting",
title="Troubleshooting Guide",
content=[
TextBlockParam(
type="text",
text="If you encounter timeout errors, first check the configuration settings. Common causes include network latency and incorrect timeout values.",
)
],
citations={"enabled": True},
),
]
# Crie uma mensagem com a ferramenta
response = client.messages.create(
model="claude-opus-4-8", # Works with all supported models
max_tokens=1024,
tools=[knowledge_base_tool],
messages=[
MessageParam(role="user", content="How do I configure the timeout settings?")
],
)
# Quando o Claude chamar a ferramenta, forneça os resultados da busca
if response.content[0].type == "tool_use":
tool_result = search_knowledge_base(response.content[0].input["query"])
# Envie o resultado da ferramenta de volta
final_response = client.messages.create(
model="claude-opus-4-8", # Works with all supported models
max_tokens=1024,
messages=[
MessageParam(
role="user", content="How do I configure the timeout settings?"
),
MessageParam(role="assistant", content=response.content),
MessageParam(
role="user",
content=[
ToolResultBlockParam(
type="tool_result",
tool_use_id=response.content[0].id,
content=tool_result, # Search results go here
)
],
),
],
)Você também pode fornecer resultados de pesquisa diretamente em mensagens do usuário. Isso é útil para:
from anthropic.types import MessageParam, TextBlockParam, SearchResultBlockParam
client = Anthropic()
# Forneça os resultados da pesquisa diretamente na mensagem do usuário
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
MessageParam(
role="user",
content=[
SearchResultBlockParam(
type="search_result",
source="https://docs.company.com/api-reference",
title="API Reference - Authentication",
content=[
TextBlockParam(
type="text",
text="All API requests must include an API key in the Authorization header. Keys can be generated from the dashboard. Rate limits: 1000 requests per hour for standard tier, 10000 for premium.",
)
],
citations={"enabled": True},
),
SearchResultBlockParam(
type="search_result",
source="https://docs.company.com/quickstart",
title="Getting Started Guide",
content=[
TextBlockParam(
type="text",
text="To get started: 1) Sign up for an account, 2) Generate an API key from the dashboard, 3) Install our SDK using pip install company-sdk, 4) Initialize the client with your API key.",
)
],
citations={"enabled": True},
),
TextBlockParam(
type="text",
text="Based on these search results, how do I authenticate API requests and what are the rate limits?",
),
],
)
],
)
print(response)Independentemente de como os resultados de pesquisa são fornecidos, o Claude inclui citações automaticamente ao usar informações deles:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "All API requests must include an API key in the Authorization header. Keys can be generated from the dashboard.",
"citations": [
{
"type": "search_result_location",
"cited_text": "All API requests must include an API key in the Authorization header. Keys can be generated from the dashboard. Rate limits: 1000 requests per hour for standard tier, 10000 for premium.",
"source": "https://docs.company.com/api-reference",
"title": "API Reference - Authentication",
"search_result_index": 0,
"start_block_index": 0,
"end_block_index": 1
}
]
},
{
"type": "text",
"text": "\n\nTo set this up from scratch, you'll need to "
},
{
"type": "text",
"text": "sign up for an account, generate an API key from the dashboard, install the SDK using `pip install company-sdk`, and initialize the client with your API key.",
"citations": [
{
"type": "search_result_location",
"cited_text": "To get started: 1) Sign up for an account, 2) Generate an API key from the dashboard, 3) Install our SDK using pip install company-sdk, 4) Initialize the client with your API key.",
"source": "https://docs.company.com/quickstart",
"title": "Getting Started Guide",
"search_result_index": 1,
"start_block_index": 0,
"end_block_index": 1
}
]
}
]
}Cada citação inclui:
| Campo | Tipo | Descrição |
|---|---|---|
type | string | Sempre "search_result_location" para citações de resultados de pesquisa |
source | string | A fonte do resultado de pesquisa original |
title | string ou null | O título do resultado de pesquisa original |
cited_text | string | O texto completo do(s) bloco(s) citado(s), concatenado. Equivale ao conteúdo de content[start_block_index:end_block_index] unido. Não é contabilizado nos tokens de saída. |
search_result_index | integer | Índice baseado em 0 do resultado de pesquisa citado entre todos os blocos search_result na requisição, na ordem em que aparecem (em todas as mensagens e resultados de ferramentas). |
start_block_index | integer | Índice baseado em 0 do primeiro bloco citado no array content do resultado de pesquisa. |
end_block_index | integer | Índice final exclusivo do intervalo de blocos citados no array content do resultado de pesquisa. Sempre maior que start_block_index. |
Os índices de bloco identificam uma fatia do array content do resultado de pesquisa, e cited_text é o texto completo dessa fatia. O bloco de texto é a unidade mínima citável: o Claude cita blocos inteiros, não substrings dentro de um bloco. Para obter citações mais granulares, divida o conteúdo do seu resultado de pesquisa em blocos menores (consulte Múltiplos blocos de conteúdo).
Os resultados de pesquisa podem conter múltiplos blocos de texto no array content:
{
"type": "search_result",
"source": "https://docs.company.com/api-guide",
"title": "API Documentation",
"content": [
{
"type": "text",
"text": "Authentication: All API requests require an API key."
},
{
"type": "text",
"text": "Rate Limits: The API allows 1000 requests per hour per key."
},
{
"type": "text",
"text": "Error Handling: The API returns standard HTTP status codes."
}
]
}Uma citação referenciando o bloco de limites de taxa tem a seguinte aparência:
{
"type": "search_result_location",
"cited_text": "Rate Limits: The API allows 1000 requests per hour per key.",
"source": "https://docs.company.com/api-guide",
"title": "API Documentation",
"search_result_index": 0,
"start_block_index": 1,
"end_block_index": 2
}Quando esse resultado de pesquisa é citado, start_block_index e end_block_index identificam quais desses blocos a citação abrange, e cited_text contém exatamente o texto desses blocos. Dividir o conteúdo em blocos menores e focados dá ao Claude limites de citação mais precisos; combinar o conteúdo em um único bloco significa que cada citação retorna o texto completo. Esse é o mesmo modelo usado por documentos de conteúdo personalizado no recurso de Citações.
Você pode usar resultados de pesquisa baseados em ferramentas e de nível superior na mesma conversa:
from anthropic.types import MessageParam, SearchResultBlockParam, TextBlockParam
# Primeira mensagem com resultados de pesquisa no nível superior
messages = [
MessageParam(
role="user",
content=[
SearchResultBlockParam(
type="search_result",
source="https://docs.company.com/overview",
title="Product Overview",
content=[
TextBlockParam(
type="text", text="Our product helps teams collaborate..."
)
],
citations={"enabled": True},
),
TextBlockParam(
type="text",
text="Tell me about this product and search for pricing information",
),
],
)
]
# O Claude pode responder e chamar uma ferramenta para pesquisar preços
# Em seguida, você fornece resultados da ferramenta com mais resultados de pesquisaAmbos os métodos suportam a combinação de resultados de pesquisa com outros conteúdos:
from anthropic.types import SearchResultBlockParam, TextBlockParam
# Em resultados de ferramentas
tool_result = [
SearchResultBlockParam(
type="search_result",
source="https://docs.company.com/guide",
title="User Guide",
content=[TextBlockParam(type="text", text="Configuration details...")],
citations={"enabled": True},
),
TextBlockParam(
type="text", text="Additional context: This applies to version 2.0 and later."
),
]
# Em conteúdo de nível superior
user_content = [
SearchResultBlockParam(
type="search_result",
source="https://research.com/paper",
title="Research Paper",
content=[TextBlockParam(type="text", text="Key findings...")],
citations={"enabled": True},
),
{
"type": "image",
"source": {"type": "url", "url": "https://example.com/chart.png"},
},
TextBlockParam(
type="text", text="How does the chart relate to the research findings?"
),
]Adicione controle de cache para melhor desempenho:
{
"type": "search_result",
"source": "https://docs.company.com/guide",
"title": "User Guide",
"content": [{ "type": "text", "text": "..." }],
"cache_control": {
"type": "ephemeral"
}
}Por padrão, as citações estão desabilitadas para resultados de pesquisa. Você pode habilitar citações definindo explicitamente a configuração citations:
{
"type": "search_result",
"source": "https://docs.company.com/guide",
"title": "User Guide",
"content": [{ "type": "text", "text": "Important documentation..." }],
"citations": {
"enabled": true // Enable citations for this result
}
}Quando citations.enabled está definido como true, o Claude inclui referências de citação ao usar informações do resultado de pesquisa. Isso permite:
As citações são tudo ou nada: todos os resultados de pesquisa em uma requisição devem ter citações habilitadas, ou todos devem tê-las desabilitadas. Misturar resultados de pesquisa com configurações de citação diferentes resulta em um erro.
Estruture os resultados de forma eficaz:
Mantenha a consistência:
Trate erros de forma adequada:
def search_with_fallback(query):
try:
results = perform_search(query)
if not results:
return {"type": "text", "text": "No results found."}
return format_as_search_results(results)
except Exception as e:
return {"type": "text", "text": f"Search error: {str(e)}"}content deve conter pelo menos um bloco de textoSaiba como as citações funcionam em documentos, conteúdo personalizado e resultados de pesquisa.
Permita que o Claude pesquise na web e cite fontes automaticamente usando uma ferramenta de servidor.
Consulte a documentação completa da API de Mensagens, incluindo tipos de blocos de conteúdo.
Armazene resultados de pesquisa em cache com cache_control para reduzir custo e latência em requisições repetidas.
Was this page helpful?