Ugrađena web pretraga
Postavite web_search: true i model utemeljuje svoj odgovor na svježim rezultatima.
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
}' Odgovor je običan chat completion s dva dodatka. Odgovor upućuje na rezultate pretrage brojevima u uglastim zagradama, sources kaže šta koji broj označava, a annotations označava gdje se svaki navodi:
{
"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"
}
]
} Uključivanje pretrage
Pretraga je polje zahtjeva, zadano isključeno. Ništa se ne pretražuje osim ako je zahtjev pošalje.
| Polje | Tip | Zadano | Opis | Primjenjuje |
|---|---|---|---|---|
web_search | boolean | false | true pokreće pretragu weba za ovaj zahtjev i daje rezultate modelu prije nego što odgovori. | Svaki Shannon model osim shannon-coder-1 |
| Endpoint | Pretraga weba | Kako |
|---|---|---|
/v1/chat/completions | Da | "web_search": true u tijelu zahtjeva. |
/v1/messages | Da | "web_search": true u tijelu zahtjeva. |
/v1/responses | — | Ovaj endpoint odgovara samo iz modela. Za odgovor s pretragom koristite jedan od dva iznad. |
Na /v1/messages polje stoji na najvišem nivou tijela, pored model i messages:
{
"model": "shannon-3",
"web_search": true,
"messages": [
{
"role": "user",
"content": "What is the weather forecast for Lisbon this weekend?"
}
]
} Šta radi zahtjev s pretragom
- API pretražuje web za posljednju korisničku poruku. Raniji krugovi razgovora daju pretrazi kontekst.
- Pretraga se pokreće na svaki zahtjev koji šalje
web_search: true. Model ne bira hoće li pretraživati. - Rezultati se stavljaju pred model kao numerisani izvori, a model iz njih piše svoj odgovor.
- Odgovor počinje kada je pretraga gotova. Zahtjev sa streamingom do tada ne šalje ništa, ni zaglavlja ni događaje, zato računajte na duže čekanje prije prvog chunka.
Šta odgovor sadrži
- Odgovor ima uobičajen oblik svog endpointa. Odgovor je u
choices[0].message.content(bloktextna/v1/messages). - Tekst može nositi oznake kao što su
[1]i[2]iza tvrdnji koje podupiru. Svaki broj označava jedan od rezultata koje je model pročitao. sourcesimenuje te rezultate: jedan unos za svaki rezultat koji je dat modelu, sindex,titleiurl. Oznaka[1]je unos sindex1. Navedeni su i rezultati koje odgovor ne navodi.- Na
/v1/chat/completionsporuka ima iannotations, u OpenAI obliku: jedanurl_citationza svaki izvor koji imenuje oznaka, surl,title, testart_indexiend_index, pozicijom oznake ucontentbrojanom u znakovima (kraj nije uključen). - U streamu
sourcesdolazi s posljednjim chunkom, a na/v1/messagess događajemmessage_delta. Anotacije dolaze u jednom chunku neposredno prije posljednjeg, kaodelta.annotations. sourcespostoji samo ako je pretraga ovog zahtjeva nešto našla. Odgovor bez njega napisan je bez rezultata pretrage.
Kako se pretrage broje
Svaki plan uključuje određen broj pretraga dnevno:
| Plan | Pretraga dnevno |
|---|---|
| Besplatno | 3 |
| Više | 30 |
| Standard | 50 |
| Profesionalni | 60 |
- Zahtjev čija je pretraga nešto našla troši jednu pretragu iz dnevne kvote. Pretraga koja nije našla ništa ne troši nijednu.
- Chat i API dijele kvotu računa kojem ključ pripada.
- Brojanje počinje ponovo svaki dan u 00:00 UTC.
- Rezultati pretrage su ulazni tokeni zahtjeva i naplaćuju se zajedno s ostatkom prompta.
Kada se dnevne pretrage potroše
Zahtjev koji šalje web_search: true nakon posljednje pretrage u danu ne odbija se. Odgovara se bez pretrage: status je 200, a odgovor nema sources.
Pretraga kao vlastiti alat
web_search: true je jedini prekidač ovdje opisane pretrage. Funkcija koju definirate u tools i nazovete web_search jedan je od vaših vlastitih alata: model vraća poziv, a vaš kod pokreće pretragu i šalje rezultat nazad.
Tipovi alata za pretragu drugih platformi, kao web_search_20250305 na /v1/messages ili {"type": "web_search"} na /v1/responses, ovdje ne pokreću pretragu.
Greške
Pretraga weba ne dodaje nijedan statusni kod ni tip greške. Pretraga koja ne nađe ništa, ili dan bez preostalih pretraga, daje običan odgovor bez rezultata pretrage. Svaka druga greška ista je kao za zahtjev bez pretrage. Upravljanje greškama