Fitur ini memenuhi syarat untuk Zero Data Retention (ZDR). Ketika organisasi Anda memiliki pengaturan ZDR, data yang dikirim melalui fitur ini tidak disimpan setelah respons API dikembalikan.
Blok konten hasil pencarian memungkinkan sitasi alami dengan atribusi sumber yang tepat, menghadirkan sitasi berkualitas setara pencarian web ke aplikasi kustom Anda. Fitur ini sangat berguna untuk aplikasi "Retrieval-Augmented Generation" (generasi yang diperkaya pengambilan), atau RAG, di mana Anda membutuhkan Claude untuk mengutip sumber secara akurat.
Fitur hasil pencarian tersedia pada model-model berikut:
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)Hasil pencarian dapat disediakan dengan dua cara:
Dalam kedua kasus tersebut, Claude dapat secara otomatis mengutip informasi dari hasil pencarian dengan atribusi sumber yang tepat.
Hasil pencarian menggunakan struktur berikut:
{
"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
}
}| Field | Tipe | Deskripsi |
|---|---|---|
type | string | Harus berupa "search_result" |
source | string | URL sumber atau pengidentifikasi untuk konten |
title | string | Judul deskriptif untuk hasil pencarian |
content | array | Array blok teks yang berisi konten sebenarnya |
| Field | Tipe | Deskripsi |
|---|---|---|
citations | object | Konfigurasi sitasi dengan field boolean enabled |
cache_control | object | Pengaturan kontrol cache (misalnya, {"type": "ephemeral"}) |
Setiap item dalam array content harus berupa blok teks dengan:
type: Harus berupa "text"text: Konten teks sebenarnya (string yang tidak kosong)Kasus penggunaan yang paling kuat adalah mengembalikan hasil pencarian dari alat kustom Anda. Ini memungkinkan aplikasi RAG dinamis di mana alat mengambil dan mengembalikan konten yang relevan dengan sitasi otomatis.
from anthropic.types import (
MessageParam,
TextBlockParam,
SearchResultBlockParam,
ToolResultBlockParam,
)
client = Anthropic()
# Definisikan alat pencarian basis pengetahuan
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"],
},
}
# Fungsi untuk menangani panggilan alat
def search_knowledge_base(query):
# Logika pencarian Anda di sini
# Mengembalikan hasil pencarian dalam format yang benar
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},
),
]
# Buat pesan dengan alat tersebut
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?")
],
)
# Ketika Claude memanggil alat, berikan hasil pencarian
if response.content[0].type == "tool_use":
tool_result = search_knowledge_base(response.content[0].input["query"])
# Kirim kembali hasil alat
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
)
],
),
],
)Anda juga dapat menyediakan hasil pencarian secara langsung dalam pesan pengguna. Ini berguna untuk:
from anthropic.types import MessageParam, TextBlockParam, SearchResultBlockParam
client = Anthropic()
# Berikan hasil pencarian langsung dalam pesan pengguna
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)Terlepas dari bagaimana hasil pencarian disediakan, Claude secara otomatis menyertakan sitasi saat menggunakan informasi dari hasil tersebut:
{
"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
}
]
}
]
}Setiap sitasi mencakup:
| Field | Tipe | Deskripsi |
|---|---|---|
type | string | Selalu "search_result_location" untuk sitasi hasil pencarian |
source | string | Sumber dari hasil pencarian asli |
title | string atau null | Judul dari hasil pencarian asli |
cited_text | string | Teks lengkap dari blok yang dikutip, digabungkan. Sama dengan isi dari content[start_block_index:end_block_index] yang digabungkan bersama. Tidak dihitung terhadap token output. |
search_result_index | integer | Indeks berbasis 0 dari hasil pencarian yang dikutip di antara semua blok search_result dalam permintaan, sesuai urutan kemunculannya (di seluruh pesan dan hasil alat). |
start_block_index | integer | Indeks berbasis 0 dari blok pertama yang dikutip dalam array content hasil pencarian. |
end_block_index | integer | Indeks akhir eksklusif dari rentang blok yang dikutip dalam array content hasil pencarian. Selalu lebih besar dari start_block_index. |
Indeks blok mengidentifikasi potongan dari array content hasil pencarian, dan cited_text adalah teks lengkap dari potongan tersebut. Blok teks adalah unit terkecil yang dapat dikutip: Claude mengutip blok secara utuh, bukan substring di dalam sebuah blok. Untuk mendapatkan sitasi yang lebih terperinci, pecah konten hasil pencarian Anda menjadi blok-blok yang lebih kecil (lihat Beberapa blok konten).
Hasil pencarian dapat berisi beberapa blok teks dalam 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."
}
]
}Sitasi yang merujuk pada blok batas laju terlihat seperti ini:
{
"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
}Ketika hasil pencarian ini dikutip, start_block_index dan end_block_index mengidentifikasi blok mana yang dicakup oleh sitasi, dan cited_text berisi persis teks dari blok-blok tersebut. Memecah konten menjadi blok-blok yang lebih kecil dan terfokus memberi Claude batas sitasi yang lebih halus; menggabungkan konten menjadi satu blok berarti setiap sitasi mengembalikan teks lengkap. Ini adalah model yang sama yang digunakan oleh dokumen konten kustom dalam fitur Citations.
Anda dapat menggunakan hasil pencarian berbasis alat dan tingkat atas dalam percakapan yang sama:
from anthropic.types import MessageParam, SearchResultBlockParam, TextBlockParam
# Pesan pertama dengan hasil pencarian tingkat atas
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",
),
],
)
]
# Claude mungkin merespons dan memanggil alat untuk mencari harga
# Kemudian Anda memberikan hasil alat dengan lebih banyak hasil pencarianKedua metode mendukung pencampuran hasil pencarian dengan konten lain:
from anthropic.types import SearchResultBlockParam, TextBlockParam
# Dalam hasil alat
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."
),
]
# Dalam konten tingkat atas
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?"
),
]Tambahkan kontrol cache untuk performa yang lebih baik:
{
"type": "search_result",
"source": "https://docs.company.com/guide",
"title": "User Guide",
"content": [{ "type": "text", "text": "..." }],
"cache_control": {
"type": "ephemeral"
}
}Secara default, sitasi dinonaktifkan untuk hasil pencarian. Anda dapat mengaktifkan sitasi dengan secara eksplisit mengatur konfigurasi 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
}
}Ketika citations.enabled diatur ke true, Claude menyertakan referensi sitasi saat menggunakan informasi dari hasil pencarian. Ini memungkinkan:
Sitasi bersifat semua-atau-tidak-sama-sekali: semua hasil pencarian dalam sebuah permintaan harus memiliki sitasi yang diaktifkan, atau semuanya harus dinonaktifkan. Mencampur hasil pencarian dengan pengaturan sitasi yang berbeda akan menghasilkan error.
Strukturkan hasil secara efektif:
Pertahankan konsistensi:
Tangani error dengan baik:
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 harus berisi setidaknya satu blok teksPelajari cara kerja sitasi di seluruh dokumen, konten kustom, dan hasil pencarian.
Biarkan Claude mencari di web dan mengutip sumber secara otomatis menggunakan alat server.
Lihat dokumentasi Messages API lengkap, termasuk tipe blok konten.
Cache hasil pencarian dengan cache_control untuk mengurangi biaya dan latensi pada permintaan berulang.
Was this page helpful?