AI से पूछें
आपके डॉक्स पर आधारित एक इन-पेज सहायक — सुझाए गए प्रश्न, कस्टम निर्देश, रिट्रीवल आकार, Vercel AI Gateway से लेकर किसी भी OpenAI-संगत एंडपॉइंट तक के बैकएंड, और इसके लिए आवश्यक सर्वर आउटपुट।
एक ऐसा सहायक जोड़ें जो पाठकों के प्रश्नों का उत्तर एक इन-पेज चैट पैनल में दे, जो एक स्ट्रीमिंग सर्वर एंडपॉइंट और AI SDK द्वारा समर्थित हो। यह ऑप्ट-इन है, और जब तक आप इसे चालू नहीं करते तब तक स्टैटिक डॉक्स पूरी तरह स्टैटिक ही रहते हैं:
ai: {
ask: {
enabled: true,
provider: "gateway", // default
model: "openai/gpt-5.5",
},
}
सुझाए गए प्रश्न
खाली अवस्था में कुछ शुरुआती प्रॉम्प्ट जोड़ें। प्रत्येक एक क्लिक करने योग्य सुझाव के रूप में प्रस्तुत होता है — किसी एक पर क्लिक करके उसे भेजें — और लेबल के साथ एक वैकल्पिक Lucide आइकन दिखता है:
ai: {
ask: {
enabled: true,
suggestions: [
{ label: "What is Blume?", icon: "rocket" },
{ label: "How do I write a docs page?", icon: "file-text" },
{ label: "How do I configure the theme?", icon: "settings" },
],
},
}
label वह प्रश्न है जो पूछा जाता है; icon वैकल्पिक है। suggestions को अनसेट (या खाली) छोड़ दें और पैनल एक सादे इनपुट के साथ खुलेगा।
कस्टम निर्देश
instructions के साथ अपना स्वयं का सिस्टम-प्रॉम्प्ट टेक्स्ट जोड़ें — पहचान, भाषा, लहजा, या कुछ और जिसे सहायक को ध्यान में रखना चाहिए:
ai: {
ask: {
enabled: true,
instructions:
"You are Bloomy, the Acme docs assistant. Answer in the language the question was asked in, and keep answers under three paragraphs.",
},
}
आपका टेक्स्ट अंतर्निहित निर्देशों को प्रतिस्थापित करने के बजाय उनके साथ जोड़ा जाता है: अंतर्निहित हिस्से में ग्राउंडिंग अनुबंध होता है — केवल पुनःप्राप्त पृष्ठों से उत्तर दें, उन्हें Markdown लिंक के रूप में उद्धृत करें — जिस पर चैट पैनल के उद्धरण निर्भर करते हैं, इसलिए आप जो भी जोड़ें, वह बरकरार रहता है।
ग्राउंडिंग
Ask AI आपके डॉक्स पर आधारित है। प्रत्येक प्रश्न के लिए यह सबसे प्रासंगिक पृष्ठ पुनःप्राप्त करता है — उसी लेक्सिकल Orama इंडेक्स का उपयोग करते हुए जो ऑन-पेज खोज को शक्ति देता है — और उन्हें मॉडल के सिस्टम प्रॉम्प्ट में इंजेक्ट करता है, ताकि उत्तर मॉडल के अपने ज्ञान के बजाय आपकी सामग्री से आएँ। सहायक को निर्देश दिया जाता है कि वह केवल पुनःप्राप्त पृष्ठों से उत्तर दे, बताए कि कब कोई बात कवर नहीं है, और जिन पृष्ठों से उसने सामग्री ली है उन्हें उद्धृत करे।
पाठक जिस पृष्ठ पर वर्तमान में है, उसे सबसे पहले संदर्भ में जोड़ा जाता है और उसका उपयोग रिट्रीवल को उस पृष्ठ की भाषा तक सीमित करने के लिए किया जाता है, ताकि उत्तर वहीं प्रासंगिक रहें जहाँ पाठक डॉक्स में हैं। रिट्रीवल अनुरोध के समय बिल्ड में समाहित एक स्नैपशॉट से चलता है, इसलिए यह आपके search प्रदाता की परवाह किए बिना काम करता है — तब भी जब search none पर सेट हो — और इसे किसी कॉन्फ़िगरेशन की आवश्यकता नहीं होती।
ग्राउंडिंग Inkeep को छोड़कर हर बैकएंड के लिए चालू है, जो अपने डैशबोर्ड में आपके द्वारा इंडेक्स की गई सामग्री पर अपना स्वयं का रिट्रीवल चलाता है।
रिट्रीवल आकार
एक प्रश्न कितना दस्तावेज़ीकरण साथ ले जाता है, यह सबसे बड़ा कारक है कि पाठक को पहले शब्द के लिए कितनी देर प्रतीक्षा करनी पड़ती है: मॉडल एक टोकन उत्सर्जित करने से पहले हर इंजेक्ट किए गए वर्ण को पढ़ता है। किसी होस्टेड फ्रंटियर मॉडल पर यह अदृश्य होता है, लेकिन सेल्फ-होस्टेड बैकएंड पर यह हावी हो जाता है। retrieval इसका आकार तय करता है:
ai: {
ask: {
enabled: true,
retrieval: {
maxResults: 3, // fewer pages retrieved per question
excerptChars: 1200, // shorter excerpt from each one
contextBudget: 3000, // smaller total injection
},
},
}
| विकल्प | डिफ़ॉल्ट | विवरण |
|---|---|---|
maxResults |
6 |
प्रति प्रश्न पुनःप्राप्त किए गए दस्तावेज़। |
excerptChars |
2000 |
प्रत्येक पुनःप्राप्त पृष्ठ से रखे गए वर्ण। |
contextBudget |
10000 |
सभी अंशों को मिलाकर, कुल इंजेक्ट किए गए वर्ण। |
ये तीनों आपस में विनिमेय नहीं हैं। contextBudget पूरे इंजेक्शन की सीमा तय करता है, excerptChars तय करता है कि किसी एक लंबे पृष्ठ में उसका अंश कितनी गहराई तक पहुँचता है — इसे तब बढ़ाएँ जब एक ही पृष्ठ में पूरा उत्तर हो और अंश उसे काट दे — और maxResults सीमित करता है कि रिट्रीवल कितने पृष्ठ जोड़ता है। पाठक जिस पृष्ठ को देख रहा है, उसे पुनःप्राप्त पृष्ठों के ऊपर इंजेक्ट किया जाता है, इसलिए एक उत्तर maxResults से अधिकतम एक पृष्ठ अधिक उद्धृत कर सकता है।
डिफ़ॉल्ट मान किसी होस्टेड मॉडल के लिए उपयुक्त हैं। जब आप अपने स्वयं के हार्डवेयर से सेवा दे रहे हों और टाइम-टू-फ़र्स्ट-टोकन रिकॉल से अधिक मायने रखता हो, तो इन्हें कम करें; उत्तर दोनों ही स्थितियों में आधारित रहते हैं, और सहायक को निर्देश दिया जाता है कि खाली जगह भरने के बजाय यह बताए कि कब कोई बात कवर नहीं है।
बाहरी एंडपॉइंट
क्या आपके पास पहले से AI के लिए एक API बैकएंड है? पैनल को उस पर इंगित करें और डॉक्स बिल्ड को स्टैटिक बनाए रखें:
ai: {
ask: {
enabled: true,
endpoint: "https://api.example.com/v1/docs/ask",
},
}
Blume वही POST बॉडी भेजता है जो उसका अंतर्निहित रूट भेजता है:
{
"messages": [{ "role": "user", "content": "How do I deploy?" }],
"page": { "path": "/deployment" }
}
एक सफल प्रतिक्रिया लौटाएँ जिसकी बॉडी एक सादी UTF-8 टेक्स्ट स्ट्रीम हो। यदि एंडपॉइंट किसी अन्य ओरिजिन पर है, तो CORS के साथ डॉक्स ओरिजिन को अनुमति दें: OPTIONS और POST स्वीकार करें, content-type अनुरोध हेडर की अनुमति दें, और प्रीफ़्लाइट तथा स्ट्रीम की गई प्रतिक्रिया दोनों पर CORS हेडर लौटाएँ। endpoint सेट होने पर, Blume चैट UI तो जनरेट करता है लेकिन कोई सर्वर रूट, ग्राउंडिंग स्नैपशॉट, प्रदाता निर्भरता, या प्रदाता-सीक्रेट चेतावनी नहीं; रिट्रीवल, प्रमाणीकरण, दर सीमन, मॉडल एक्सेस, और उद्धरण आपके बैकएंड के अधीन होते हैं।
सर्वर आउटपुट आवश्यक
Blume का अंतर्निहित Ask AI बैकएंड एक सर्वर रूट (POST /api/ask) है, इसलिए यह स्टैटिक बिल्ड पर नहीं चल सकता। सर्वर आउटपुट पर स्विच करें और एक एडाप्टर चुनें:
deployment: {
output: "server",
adapter: "vercel",
}
Ask AI सक्षम और बिना बाहरी endpoint वाला स्टैटिक बिल्ड तुरंत विफल हो जाता है और एक संदेश देता है जो आपसे deployment.output को server पर सेट करने को कहता है। एडाप्टर के लिए Deployment देखें।
बैकएंड
डिफ़ॉल्ट रूप से Ask AI Vercel AI Gateway के माध्यम से रूट होता है: model एक provider/model स्ट्रिंग है, इसलिए आप इसे बदलकर मॉडल स्विच करते हैं (openai/gpt-5.5, anthropic/claude-sonnet-4-5, इत्यादि), और कोई प्रदाता SDK इंस्टॉल करने की आवश्यकता नहीं होती। गेटवे आपके एनवायरनमेंट से AI_GATEWAY_API_KEY पढ़ता है और जब आप Vercel पर डिप्लॉय करते हैं तो यह स्वतः जुड़ जाता है।
Ask AI को कहीं और इंगित करने के लिए provider सेट करें। प्रत्येक बैकएंड अपनी API कुंजी एक एनवायरनमेंट वेरिएबल से पढ़ता है और आपके प्रोजेक्ट में इंस्टॉल किए गए एक प्रदाता SDK के माध्यम से स्ट्रीम करता है — केवल वही जिसका आप उपयोग करते हैं:
provider |
model |
API कुंजी env वेरिएबल | इंस्टॉल करने के लिए SDK |
|---|---|---|---|
gateway (डिफ़ॉल्ट) |
AI Gateway के माध्यम से एक provider/model स्ट्रिंग |
AI_GATEWAY_API_KEY |
कोई नहीं — Blume के साथ आता है |
openrouter |
कोई भी OpenRouter मॉडल | OPENROUTER_API_KEY |
@openrouter/ai-sdk-provider |
llmgateway |
कोई भी LLMGateway मॉडल | LLMGATEWAY_API_KEY |
@ai-sdk/openai-compatible |
inkeep |
एक Inkeep QA मॉडल | INKEEP_API_KEY |
@ai-sdk/openai-compatible |
openai-compatible |
जो भी आपका एंडपॉइंट प्रदान करता है | apiKeyEnv के साथ सेट करें |
@ai-sdk/openai-compatible |
ये SDK वैकल्पिक पीयर निर्भरताएँ हैं, इसलिए अपने प्रोजेक्ट में वही जोड़ें जिसकी आपके बैकएंड को आवश्यकता है (उदा. npm install @openrouter/ai-sdk-provider)। यदि वह अनुपस्थित है, तो Vite द्वारा इम्पोर्ट रिज़ॉल्व करने में विफल होने से पहले ही बिल्ड सटीक पैकेज नाम के साथ चेतावनी देता है।
उदाहरण के लिए, OpenRouter का उपयोग करने हेतु:
ai: {
ask: {
enabled: true,
provider: "openrouter",
model: "anthropic/claude-sonnet-4-5",
},
}
कोई भी OpenAI-संगत एंडपॉइंट openai-compatible के माध्यम से काम करता है — baseUrl और उसकी कुंजी रखने वाला env वेरिएबल प्रदान करें:
ai: {
ask: {
enabled: true,
provider: "openai-compatible",
baseUrl: "https://my-gateway.example.com/v1",
apiKeyEnv: "MY_GATEWAY_API_KEY",
model: "gpt-4o",
},
}
किसी भिन्न env वेरिएबल या प्रॉक्सी की ओर इंगित करने के लिए किसी भी बैकएंड पर apiKeyEnv (और, नामित प्रदाताओं के लिए, baseUrl) सेट करें।
कुंजियाँ process.env से पढ़ी जाती हैं, जो Node, Vercel, और Netlify एडाप्टर को कवर करता है। Cloudflare पर, कुंजी को प्लेटफ़ॉर्म की रनटाइम बाइंडिंग के माध्यम से उपलब्ध कराएँ। Ask AI सक्षम करने से इन-पेज आइलैंड के लिए React भी चालू हो जाता है — देखें Customization।
दर सीमन
POST /api/ask एंडपॉइंट अप्रमाणित है — इसे ऐसा होना ही पड़ता है, ताकि इन-पेज सहायक इसे कॉल कर सके। Blume प्रत्येक अनुरोध को मान्य करता है — विकृत बॉडी को अस्वीकार करता है, इसे 1–40 संदेशों तक सीमित करता है, और केवल user/assistant भूमिकाएँ स्वीकार करता है ताकि कोई कॉलर अपना स्वयं का सिस्टम प्रॉम्प्ट इंजेक्ट करके रूट को एक सामान्य LLM प्रॉक्सी में न बदल सके — जिससे यह सीमित रहे कि एक कॉल आपके मॉडल पर कितना खर्च कर सकती है, लेकिन यह किसी को एंडपॉइंट को बार-बार कॉल करने से नहीं रोक सकता। यदि लागत का दुरुपयोग एक चिंता है, तो रूट को एक रेट लिमिटर के पीछे रखें — आपके होस्ट की (उदा. Vercel की) एज रेट लिमिटिंग, एक मिडलवेयर, या आपके मॉडल प्रदाता की प्रति-कुंजी खर्च सीमाएँ।
यह एंडपॉइंट एजेंट रीडेबिलिटी मैनिफ़ेस्ट में साइट की बाकी मशीन-पठनीय सतह के साथ प्रचारित किया जाता है।