---
title: AI से पूछें
description: >-
  आपके डॉक्स पर आधारित एक इन-पेज सहायक — सुझाए गए प्रश्न, कस्टम निर्देश, रिट्रीवल आकार, Vercel AI Gateway से लेकर किसी भी OpenAI-संगत एंडपॉइंट तक के बैकएंड, और इसके लिए आवश्यक सर्वर आउटपुट।
---

एक ऐसा सहायक जोड़ें जो पाठकों के प्रश्नों का उत्तर एक इन-पेज चैट पैनल में दे, जो एक स्ट्रीमिंग सर्वर एंडपॉइंट और [AI SDK](https://ai-sdk.dev) द्वारा समर्थित हो। यह ऑप्ट-इन है, और जब तक आप इसे चालू नहीं करते तब तक स्टैटिक डॉक्स पूरी तरह स्टैटिक ही रहते हैं:

```ts blume.config.ts lineNumbers
ai: {
  ask: {
    enabled: true,
    provider: "gateway", // default
    model: "openai/gpt-5.5",
  },
}
```

## सुझाए गए प्रश्न [#suggested-questions]

खाली अवस्था में कुछ शुरुआती प्रॉम्प्ट जोड़ें। प्रत्येक एक क्लिक करने योग्य सुझाव के रूप में प्रस्तुत होता है — किसी एक पर क्लिक करके उसे भेजें — और लेबल के साथ एक वैकल्पिक [Lucide आइकन](/docs/content/components#icon) दिखता है:

```ts blume.config.ts lineNumbers
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` को अनसेट (या खाली) छोड़ दें और पैनल एक सादे इनपुट के साथ खुलेगा।

## कस्टम निर्देश [#custom-instructions]

`instructions` के साथ अपना स्वयं का सिस्टम-प्रॉम्प्ट टेक्स्ट जोड़ें — पहचान, भाषा, लहजा, या कुछ और जिसे सहायक को ध्यान में रखना चाहिए:

```ts blume.config.ts lineNumbers
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.",
  },
}
```

आपका टेक्स्ट अंतर्निहित निर्देशों को प्रतिस्थापित करने के बजाय उनके **साथ जोड़ा जाता है**: अंतर्निहित हिस्से में [ग्राउंडिंग](#grounding) अनुबंध होता है — केवल पुनःप्राप्त पृष्ठों से उत्तर दें, उन्हें Markdown लिंक के रूप में उद्धृत करें — जिस पर चैट पैनल के उद्धरण निर्भर करते हैं, इसलिए आप जो भी जोड़ें, वह बरकरार रहता है।

## ग्राउंडिंग [#grounding]

Ask AI **आपके डॉक्स पर आधारित** है। प्रत्येक प्रश्न के लिए यह सबसे प्रासंगिक पृष्ठ पुनःप्राप्त करता है — उसी लेक्सिकल [Orama](/docs/configuration/search) इंडेक्स का उपयोग करते हुए जो ऑन-पेज खोज को शक्ति देता है — और उन्हें मॉडल के सिस्टम प्रॉम्प्ट में इंजेक्ट करता है, ताकि उत्तर मॉडल के अपने ज्ञान के बजाय आपकी सामग्री से आएँ। सहायक को निर्देश दिया जाता है कि वह केवल पुनःप्राप्त पृष्ठों से उत्तर दे, बताए कि कब कोई बात कवर नहीं है, और जिन पृष्ठों से उसने सामग्री ली है उन्हें उद्धृत करे।

पाठक जिस पृष्ठ पर वर्तमान में है, उसे सबसे पहले संदर्भ में जोड़ा जाता है और उसका उपयोग रिट्रीवल को उस पृष्ठ की भाषा तक सीमित करने के लिए किया जाता है, ताकि उत्तर वहीं प्रासंगिक रहें जहाँ पाठक डॉक्स में हैं। रिट्रीवल अनुरोध के समय बिल्ड में समाहित एक स्नैपशॉट से चलता है, इसलिए यह आपके [search](/docs/configuration/search) प्रदाता की परवाह किए बिना काम करता है — तब भी जब search `none` पर सेट हो — और इसे किसी कॉन्फ़िगरेशन की आवश्यकता नहीं होती।

ग्राउंडिंग **[Inkeep](#backends)** को छोड़कर हर बैकएंड के लिए चालू है, जो अपने डैशबोर्ड में आपके द्वारा इंडेक्स की गई सामग्री पर अपना स्वयं का रिट्रीवल चलाता है।

## रिट्रीवल आकार [#retrieval-size]

एक प्रश्न कितना दस्तावेज़ीकरण साथ ले जाता है, यह सबसे बड़ा कारक है कि पाठक को पहले शब्द के लिए कितनी देर प्रतीक्षा करनी पड़ती है: मॉडल एक टोकन उत्सर्जित करने से पहले हर इंजेक्ट किए गए वर्ण को पढ़ता है। किसी होस्टेड फ्रंटियर मॉडल पर यह अदृश्य होता है, लेकिन सेल्फ-होस्टेड बैकएंड पर यह हावी हो जाता है। `retrieval` इसका आकार तय करता है:

```ts blume.config.ts lineNumbers
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` से अधिकतम एक पृष्ठ अधिक उद्धृत कर सकता है।

डिफ़ॉल्ट मान किसी होस्टेड मॉडल के लिए उपयुक्त हैं। जब आप अपने स्वयं के हार्डवेयर से सेवा दे रहे हों और टाइम-टू-फ़र्स्ट-टोकन रिकॉल से अधिक मायने रखता हो, तो इन्हें कम करें; उत्तर दोनों ही स्थितियों में आधारित रहते हैं, और सहायक को निर्देश दिया जाता है कि खाली जगह भरने के बजाय यह बताए कि कब कोई बात कवर नहीं है।

## बाहरी एंडपॉइंट [#external-endpoint]

क्या आपके पास पहले से AI के लिए एक API बैकएंड है? पैनल को उस पर इंगित करें और डॉक्स बिल्ड को स्टैटिक बनाए रखें:

```ts blume.config.ts lineNumbers
ai: {
  ask: {
    enabled: true,
    endpoint: "https://api.example.com/v1/docs/ask",
  },
}
```

Blume वही `POST` बॉडी भेजता है जो उसका अंतर्निहित रूट भेजता है:

```json
{
  "messages": [{ "role": "user", "content": "How do I deploy?" }],
  "page": { "path": "/deployment" }
}
```

एक सफल प्रतिक्रिया लौटाएँ जिसकी बॉडी एक सादी UTF-8 टेक्स्ट स्ट्रीम हो। यदि एंडपॉइंट किसी अन्य ओरिजिन पर है, तो CORS के साथ डॉक्स ओरिजिन को अनुमति दें: `OPTIONS` और `POST` स्वीकार करें, `content-type` अनुरोध हेडर की अनुमति दें, और प्रीफ़्लाइट तथा स्ट्रीम की गई प्रतिक्रिया दोनों पर CORS हेडर लौटाएँ। `endpoint` सेट होने पर, Blume चैट UI तो जनरेट करता है लेकिन कोई सर्वर रूट, ग्राउंडिंग स्नैपशॉट, प्रदाता निर्भरता, या प्रदाता-सीक्रेट चेतावनी नहीं; रिट्रीवल, प्रमाणीकरण, दर सीमन, मॉडल एक्सेस, और उद्धरण आपके बैकएंड के अधीन होते हैं।

## सर्वर आउटपुट आवश्यक [#server-output-required]

Blume का अंतर्निहित Ask AI बैकएंड एक सर्वर रूट (`POST /api/ask`) है, इसलिए यह स्टैटिक बिल्ड पर नहीं चल सकता। सर्वर आउटपुट पर स्विच करें और एक एडाप्टर चुनें:

```ts blume.config.ts lineNumbers
deployment: {
  output: "server",
  adapter: "vercel",
}
```

Ask AI सक्षम और बिना बाहरी `endpoint` वाला स्टैटिक बिल्ड तुरंत विफल हो जाता है और एक संदेश देता है जो आपसे `deployment.output` को `server` पर सेट करने को कहता है। एडाप्टर के लिए [Deployment](/docs/deployment) देखें।

## बैकएंड [#backends]

डिफ़ॉल्ट रूप से 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](https://openrouter.ai) मॉडल | `OPENROUTER_API_KEY` | `@openrouter/ai-sdk-provider` |
| `llmgateway` | कोई भी [LLMGateway](https://llmgateway.io) मॉडल | `LLMGATEWAY_API_KEY` | `@ai-sdk/openai-compatible` |
| `inkeep` | एक [Inkeep](https://inkeep.com) QA मॉडल | `INKEEP_API_KEY` | `@ai-sdk/openai-compatible` |
| `openai-compatible` | जो भी आपका एंडपॉइंट प्रदान करता है | `apiKeyEnv` के साथ सेट करें | `@ai-sdk/openai-compatible` |

ये SDK वैकल्पिक पीयर निर्भरताएँ हैं, इसलिए अपने प्रोजेक्ट में वही जोड़ें जिसकी आपके बैकएंड को आवश्यकता है (उदा. `npm install @openrouter/ai-sdk-provider`)। यदि वह अनुपस्थित है, तो Vite द्वारा इम्पोर्ट रिज़ॉल्व करने में विफल होने से पहले ही बिल्ड सटीक पैकेज नाम के साथ चेतावनी देता है।

उदाहरण के लिए, OpenRouter का उपयोग करने हेतु:

```ts blume.config.ts lineNumbers
ai: {
  ask: {
    enabled: true,
    provider: "openrouter",
    model: "anthropic/claude-sonnet-4-5",
  },
}
```

कोई भी OpenAI-संगत एंडपॉइंट `openai-compatible` के माध्यम से काम करता है — `baseUrl` और उसकी कुंजी रखने वाला env वेरिएबल प्रदान करें:

```ts blume.config.ts lineNumbers
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`) सेट करें।

:::note
**Inkeep** उस सामग्री से उत्तर देता है जिसे आपने Inkeep डैशबोर्ड में इंडेक्स किया है — यह अपना स्वयं का रिट्रीवल चलाता है — इसलिए Blume इसे बिना ग्राउंडिंग के छोड़ देता है। हर दूसरा बैकएंड इस साइट के पृष्ठों पर [आधारित](#grounding) होता है।
:::

कुंजियाँ `process.env` से पढ़ी जाती हैं, जो Node, Vercel, और Netlify एडाप्टर को कवर करता है। Cloudflare पर, कुंजी को प्लेटफ़ॉर्म की [रनटाइम बाइंडिंग](https://docs.astro.build/en/guides/integrations-guide/cloudflare/#environment-variables-and-secrets) के माध्यम से उपलब्ध कराएँ। Ask AI सक्षम करने से इन-पेज आइलैंड के लिए React भी चालू हो जाता है — देखें [Customization](/docs/configuration/customization#interactive-islands)।

## दर सीमन [#rate-limiting]

`POST /api/ask` एंडपॉइंट **अप्रमाणित** है — इसे ऐसा होना ही पड़ता है, ताकि इन-पेज सहायक इसे कॉल कर सके। Blume प्रत्येक अनुरोध को मान्य करता है — विकृत बॉडी को अस्वीकार करता है, इसे 1–40 संदेशों तक सीमित करता है, और केवल `user`/`assistant` भूमिकाएँ स्वीकार करता है ताकि कोई कॉलर अपना स्वयं का सिस्टम प्रॉम्प्ट इंजेक्ट करके रूट को एक सामान्य LLM प्रॉक्सी में न बदल सके — जिससे यह सीमित रहे कि एक कॉल आपके मॉडल पर कितना खर्च कर सकती है, लेकिन यह किसी को एंडपॉइंट को बार-बार कॉल करने से नहीं रोक सकता। यदि लागत का दुरुपयोग एक चिंता है, तो रूट को एक रेट लिमिटर के पीछे रखें — आपके होस्ट की (उदा. Vercel की) एज रेट लिमिटिंग, एक मिडलवेयर, या आपके मॉडल प्रदाता की प्रति-कुंजी खर्च सीमाएँ।

यह एंडपॉइंट [एजेंट रीडेबिलिटी मैनिफ़ेस्ट](/docs/discoverability/agent-discovery#agent-readability) में साइट की बाकी मशीन-पठनीय सतह के साथ प्रचारित किया जाता है।
