Carian Web Terbina dalam
Tetapkan web_search: true dan model mengukuhkan jawapannya dengan hasil langsung.
POST https://api.shannon-ai.com/v1/chat/completions
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.shannon-ai.com/v1")
response = client.chat.completions.create(
model="shannon-3",
messages=[{"role": "user", "content": "What is the weather forecast for Lisbon this weekend?"}],
extra_body={"web_search": True}, # a Shannon field, so it goes in extra_body
)
print(response.choices[0].message.content) import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1" });
const response = await client.chat.completions.create({
model: "shannon-3",
messages: [{ role: "user", content: "What is the weather forecast for Lisbon this weekend?" }],
web_search: true,
});
console.log(response.choices[0].message.content); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "What is the weather forecast for Lisbon this weekend?"}
],
"web_search": true
}' Balasan ialah chat completion biasa dengan dua tambahan. Jawapan menunjuk kepada hasil carian dengan nombor dalam kurungan segi empat, sources menyatakan apa yang diwakili setiap nombor, dan annotations menandakan tempat setiap satu dipetik:
{
"id": "chatcmpl-3e5a7c9b1d2f4a6c8e0b2d4f6a8c1e3b",
"object": "chat.completion",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Saturday in Lisbon is forecast to be sunny with a high near 24 °C [1]. Sunday turns cloudy, with a chance of light rain in the afternoon [2].",
"reasoning_content": null,
"annotations": [
{
"type": "url_citation",
"url_citation": {
"start_index": 66,
"end_index": 69,
"url": "https://weather.example/lisbon/weekend",
"title": "Lisbon weather: weekend outlook"
}
},
{
"type": "url_citation",
"url_citation": {
"start_index": 137,
"end_index": 140,
"url": "https://forecast.example/pt/lisbon/sunday",
"title": "Sunday forecast for Lisbon"
}
}
]
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 2874,
"completion_tokens": 41,
"total_tokens": 2915
},
"sources": [
{
"index": 1,
"title": "Lisbon weather: weekend outlook",
"url": "https://weather.example/lisbon/weekend"
},
{
"index": 2,
"title": "Sunday forecast for Lisbon",
"url": "https://forecast.example/pt/lisbon/sunday"
},
{
"index": 3,
"title": "Portugal: the week ahead",
"url": "https://news.example/portugal/weather-week"
}
]
} Menghidupkan carian
Carian ialah medan permintaan, mati secara lalai. Tiada apa-apa dicari melainkan permintaan menghantarnya.
| Medan | Jenis | Lalai | Penerangan | Dilaksanakan oleh |
|---|---|---|---|---|
web_search | boolean | false | true menjalankan carian web untuk permintaan ini dan memberikan hasilnya kepada model sebelum ia menjawab. | Setiap model Shannon kecuali shannon-coder-1 |
| Endpoint | Carian web | Caranya |
|---|---|---|
/v1/chat/completions | Ya | "web_search": true dalam badan permintaan. |
/v1/messages | Ya | "web_search": true dalam badan permintaan. |
/v1/responses | — | Endpoint ini menjawab daripada model sahaja. Gunakan salah satu daripada dua di atas untuk jawapan yang disertai carian. |
Pada /v1/messages, medan itu terletak di peringkat atas badan, di sebelah model dan messages:
{
"model": "shannon-3",
"web_search": true,
"messages": [
{
"role": "user",
"content": "What is the weather forecast for Lisbon this weekend?"
}
]
} Apa yang dilakukan oleh permintaan yang disertai carian
- API mencari di web untuk mesej pengguna yang terakhir. Giliran perbualan terdahulu memberikan konteks kepada carian.
- Carian berjalan pada setiap permintaan yang menghantar
web_search: true. Model tidak memilih sama ada hendak mencari. - Hasil diletakkan di hadapan model sebagai sumber bernombor, dan model menulis jawapannya daripadanya.
- Balasan bermula apabila carian selesai. Permintaan yang di-stream tidak menghantar apa-apa, sama ada header atau peristiwa, sehingga ketika itu, jadi sediakan penantian yang lebih lama sebelum chunk pertama.
Apa yang terkandung dalam balasan
- Balasan mempunyai bentuk lazim endpointnya. Jawapan berada dalam
choices[0].message.content(bloktextpada/v1/messages). - Teks boleh membawa penanda seperti
[1]dan[2]selepas pernyataan yang disokongnya. Setiap nombor mewakili salah satu hasil yang dibaca model. sourcesmenamakan hasil tersebut: satu entri bagi setiap hasil yang diberikan kepada model, denganindex,titledanurl. Penanda[1]ialah entri denganindex1. Hasil yang tidak dipetik oleh jawapan turut disenaraikan.- Pada
/v1/chat/completionsmesej juga mempunyaiannotations, dalam bentuk OpenAI: satuurl_citationbagi setiap sumber yang dinamakan oleh sesuatu penanda, denganurl,title, sertastart_indexdanend_index, iaitu kedudukan penanda dalamcontentyang dikira dalam aksara (hujungnya tidak termasuk). - Dalam stream,
sourcesdatang bersama chunk terakhir, dan pada/v1/messagesbersama peristiwamessage_delta. Anotasi datang dalam satu chunk sebelum chunk terakhir, sebagaidelta.annotations. sourceshanya ada apabila carian bagi permintaan ini menemui sesuatu. Balasan tanpanya ditulis tanpa hasil carian.
Cara carian dikira
Setiap pelan termasuk sejumlah carian sehari:
| Pelan | Carian sehari |
|---|---|
| Percuma | 3 |
| Tambahan pula | 30 |
| Standard | 50 |
| Pro | 60 |
- Permintaan yang carinya menemui sesuatu menggunakan satu carian daripada kuota hari itu. Carian yang tidak menemui apa-apa tidak menggunakan satu pun.
- Sembang dan API berkongsi kuota akaun yang memiliki kunci.
- Kiraan bermula semula setiap hari pada 00:00 UTC.
- Hasil carian ialah token input permintaan dan dibilkan bersama selebihnya prompt.
Apabila carian hari itu telah habis
Permintaan yang menghantar web_search: true selepas carian terakhir pada hari itu tidak ditolak. Ia dijawab tanpa carian: statusnya 200 dan balasan tidak mempunyai sources.
Carian sebagai alat anda sendiri
web_search: true ialah satu-satunya suis carian yang diterangkan di sini. Fungsi yang anda takrifkan dalam tools dan namakan web_search ialah salah satu alat anda sendiri: model memulangkan panggilan, dan kod anda menjalankan carian dan menghantar keputusan kembali.
Jenis alat carian platform lain, seperti web_search_20250305 pada /v1/messages atau {"type": "web_search"} pada /v1/responses, tidak memulakan carian di sini.
Ralat
Carian web tidak menambah kod status atau jenis ralat. Carian yang tidak menemui apa-apa, atau hari tanpa carian yang berbaki, memberikan jawapan biasa tanpa hasil carian. Setiap ralat lain adalah sama seperti bagi permintaan tanpa carian. Pengendalian Ralat