Вградено веб пребарување
Поставете web_search: true и моделот го заснова одговорот на резултати во живо.
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
}' Одговорот е обично chat завршување со две додатоци. Одговорот упатува на резултатите од пребарувањето со броеви во средни загради, sources кажува што означува секој број, а annotations означува каде е цитиран секој од нив:
{
"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"
}
]
} Вклучување на пребарувањето
Пребарувањето е поле на барањето, стандардно исклучено. Ништо не се пребарува освен ако барањето не го испрати.
| Поле | Тип | Стандардно | Опис | Го применуваат |
|---|---|---|---|---|
web_search | boolean | false | true извршува веб пребарување за ова барање и им ги дава резултатите на моделот пред да одговори. | Секој модел Shannon освен shannon-coder-1 |
| Ендпоинт | Веб пребарување | Како |
|---|---|---|
/v1/chat/completions | Да | "web_search": true во телото на барањето. |
/v1/messages | Да | "web_search": true во телото на барањето. |
/v1/responses | — | Овој ендпоинт одговара само од моделот. За одговор со пребарување користете еден од горните два. |
На /v1/messages полето е на највисокото ниво на телото, покрај model и messages:
{
"model": "shannon-3",
"web_search": true,
"messages": [
{
"role": "user",
"content": "What is the weather forecast for Lisbon this weekend?"
}
]
} Што прави барање со пребарување
- API-то пребарува на вебот според последната порака на корисникот. Претходните чекори на разговорот му го даваат контекстот на пребарувањето.
- Пребарувањето се извршува на секое барање што испраќа
web_search: true. Моделот не избира дали да пребарува. - Резултатите се ставаат пред моделот како нумерирани извори, а моделот го пишува својот одговор врз основа на нив.
- Одговорот започнува кога пребарувањето ќе заврши. Барање со streaming не испраќа ништо, ни header-и ни настани, до тогаш, затоа предвидете подолго чекање до првиот chunk.
Што содржи одговорот
- Одговорот го има вообичаениот облик на својот ендпоинт. Одговорот е во
choices[0].message.content(блокtextна/v1/messages). - Текстот може да носи ознаки како
[1]и[2]по изјавите што ги поддржуваат. Секој број означува еден од резултатите што ги прочитал моделот. sourcesги именува тие резултати: по еден запис за секој резултат што му бил даден на моделот, соindex,titleиurl. Ознаката[1]е записот соindex1. Резултатите што одговорот не ги цитира се исто така наведени.- На
/v1/chat/completionsпораката има иannotations, во обликот на OpenAI: по еденurl_citationза секој извор што го именува некоја ознака, соurl,title, иstart_indexиend_index, позицијата на ознаката воcontentброена во знаци (крајот не е вклучен). - Во stream
sourcesдоаѓа со последниот chunk, а на/v1/messagesсо настанотmessage_delta. Анотациите доаѓаат во еден chunk непосредно пред последниот, какоdelta.annotations. sourcesго има само кога пребарувањето на ова барање нашло нешто. Одговор без него е напишан без резултати од пребарување.
Како се бројат пребарувањата
Секој план вклучува одреден број пребарувања на ден:
| План | Пребарувања на ден |
|---|---|
| Бесплатно | 3 |
| Плус | 30 |
| Standard | 50 |
| Про | 60 |
- Барање чие пребарување нашло нешто користи едно пребарување од дневниот лимит. Пребарување што не нашло ништо не користи ниедно.
- Разговорот и API-то го делат лимитот на сметката што го поседува клучот.
- Бројот започнува одново секој ден во 00:00 UTC.
- Резултатите од пребарувањето се влезни токени на барањето и се наплатуваат заедно со остатокот од prompt-от.
Кога дневните пребарувања се искористени
Барање што испраќа web_search: true по последното пребарување за денот не се одбива. Се одговара без пребарување: статусот е 200 и одговорот нема sources.
Пребарување како ваша алатка
web_search: true е единствениот прекинувач на пребарувањето опишано овде. Функција што ја дефинирате во tools и ја именувате web_search е една од вашите алатки: моделот враќа повик, а вашиот код го извршува пребарувањето и го испраќа резултатот назад.
Типовите алатки за пребарување на други платформи, како web_search_20250305 на /v1/messages или {"type": "web_search"} на /v1/responses, тука не започнуваат пребарување.
Грешки
Веб пребарувањето не додава статус код ниту тип на грешка. Пребарување што не наоѓа ништо, или ден без преостанати пребарувања, дава нормален одговор без резултати од пребарување. Секоја друга грешка е иста како за барање без пребарување. Ракување со грешки