ওয়েব সার্চ
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
}' উত্তরটি একটি সাধারণ চ্যাট কমপ্লিশন, তবে দুটি বাড়তি জিনিস আছে। উত্তর বর্গ বন্ধনীর সংখ্যা দিয়ে সার্চ ফলাফলের দিকে ইঙ্গিত করে, 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-coder-1 ছাড়া প্রতিটি Shannon মডেল |
| এন্ডপয়েন্ট | ওয়েব সার্চ | কীভাবে |
|---|---|---|
/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পাঠানো প্রতিটি রিকোয়েস্টে সার্চ চলে। সার্চ করবে কি না তা মডেল ঠিক করে না।- ফলাফল নম্বর দেওয়া উৎস হিসেবে মডেলের সামনে রাখা হয়, এবং মডেল সেগুলো থেকে উত্তর লেখে।
- সার্চ শেষ হলে উত্তর শুরু হয়। স্ট্রিম করা রিকোয়েস্ট তার আগে হেডার বা ইভেন্ট কিছুই পাঠায় না, তাই প্রথম চাঙ্কের আগে দীর্ঘতর অপেক্ষার জন্য প্রস্তুত থাকুন।
উত্তরে কী থাকে
- উত্তর তার এন্ডপয়েন্টের স্বাভাবিক আকারে থাকে। উত্তর থাকে
choices[0].message.content-এ (/v1/messages-এ একটিtextব্লক)। - টেক্সটে সমর্থিত বক্তব্যের পরে
[1]ও[2]-এর মতো চিহ্ন থাকতে পারে। প্রতিটি সংখ্যা মডেলের পড়া একটি ফলাফল বোঝায়। sourcesসেই ফলাফলগুলোর নাম দেয়: মডেলকে দেওয়া প্রতিটি ফলাফলের জন্য একটি এন্ট্রি, তাতেindex,titleওurlথাকে।[1]মার্কারটি হলোindex1 সহ এন্ট্রি। উত্তর যে ফলাফল উদ্ধৃত করে না সেগুলোও তালিকায় থাকে।/v1/chat/completions-এ মেসেজে OpenAI-এর আকারেannotations-ও থাকে: মার্কারের নাম করা প্রতিটি উৎসের জন্য একটিurl_citation, তাতেurl,title, এবংstart_indexওend_indexথাকে, যাcontent-এ মার্কারের অবস্থান, অক্ষরে গোনা (শেষটি অন্তর্ভুক্ত নয়)।- স্ট্রিমে
sourcesআসে শেষ চাঙ্কের সঙ্গে, আর/v1/messages-এmessage_deltaইভেন্টের সঙ্গে। অ্যানোটেশন আসে শেষটির ঠিক আগের একটি চাঙ্কে,delta.annotationsহিসেবে। sourcesথাকে শুধু যখন এই রিকোয়েস্টের সার্চে কিছু পাওয়া গেছে। এটি ছাড়া উত্তর লেখা হয়েছে সার্চ ফলাফল ছাড়াই।
সার্চ কীভাবে গোনা হয়
প্রতিটি প্ল্যানে প্রতিদিন কিছু সার্চ অন্তর্ভুক্ত:
| প্ল্যান | প্রতিদিন সার্চ |
|---|---|
| ফ্রি | 3 |
| প্লাস | 30 |
| Standard | 50 |
| প্রো | 60 |
- যে রিকোয়েস্টের সার্চে কিছু পাওয়া গেছে তা দিনের এলাউন্সের একটি সার্চ ব্যবহার করে। যে সার্চে কিছু পাওয়া যায়নি তা কিছুই ব্যবহার করে না।
- চ্যাট ও API key-এর মালিক অ্যাকাউন্টের এলাউন্স ভাগ করে নেয়।
- গণনা প্রতিদিন 00:00 UTC-তে আবার শুরু হয়।
- সার্চের ফলাফল রিকোয়েস্টের ইনপুট tokens এবং প্রম্পটের বাকি অংশের সাথে বিল হয়।
দিনের সার্চ শেষ হয়ে গেলে
দিনের শেষ সার্চের পরে web_search: true পাঠানো রিকোয়েস্ট প্রত্যাখ্যাত হয় না। তার উত্তর সার্চ ছাড়া দেওয়া হয়: স্ট্যাটাস 200 এবং উত্তরে sources থাকে না।
নিজের টুল হিসেবে সার্চ
web_search: true এখানে বর্ণিত সার্চের একমাত্র সুইচ। আপনি tools-এ যে ফাংশন সংজ্ঞায়িত করে নাম দেন web_search তা আপনার নিজের টুলগুলোর একটি: মডেল একটি কল ফেরত দেয়, আর আপনার কোড সার্চ চালিয়ে ফলাফল ফেরত পাঠায়।
অন্য প্ল্যাটফর্মের সার্চ টুলের type, যেমন /v1/messages-এ web_search_20250305 বা /v1/responses-এ {"type": "web_search"}, এখানে সার্চ শুরু করে না।
এরর
ওয়েব সার্চ কোনো স্ট্যাটাস কোড বা এররের type যোগ করে না। যে সার্চে কিছু পাওয়া যায় না, বা যে দিনে সার্চ বাকি নেই, তাতে সার্চ ফলাফল ছাড়া একটি স্বাভাবিক উত্তর আসে। অন্য প্রতিটি এরর সার্চ ছাড়া রিকোয়েস্টের মতোই। এরর হ্যান্ডলিং