HI ▾
API कुंजी पाएँ

GetAiApiKeyउत्पादन के लिए कृत्रिम बुद्धिमत्ता API चेकलिस्ट

Python में LLM कैसे इंस्टॉल करें: स्थानीय या API

आप एक मॉडल को अपनी मशीन पर चला सकते हैं, या एक छोटा पायथन पैकेज इंस्टॉल करके HTTP के माध्यम से होस्टेड मॉडल को कॉल कर सकते हैं। यह पृष्ठ दोनों को कवर करता है, फिर API मार्ग को चरण-दर-चरण समझाता है।

अपडेट किया गया

एक Python स्क्रिप्ट को चमकते हुए क्लाउड मॉडल क्यूब से जोड़ने वाले केबल का चित्रण, जो एक API कनेक्शन दिखाता है

मुख्य बिंदु

  1. स्थानीय इंस्टॉल में मॉडल वेट्स और पर्याप्त मेमोरी की आवश्यकता होती है; API रास्ते के लिए केवल openai पैकेज और एक कुंजी की आवश्यकता होती है।
  2. बेस URL को https://api.getaiapikey.com/v1 पर सेट करें और मॉडल को uncensored पर सेट करें।
  3. स्ट्रीमिंग, टूल कॉलिंग और JSON मोड सभी मानक OpenAI क्लाइंट के माध्यम से काम करते हैं।
  4. HTTP 429 को छोटे रीट्राई से संभालें, और समानांतर अनुरोधों को 8 या उससे कम रखें।

LLM इंस्टॉल करने के दो अर्थ

जब लोग Python में llm इंस्टॉल करने के बारे में पूछते हैं, तो वे आमतौर पर दो चीजों में से एक का मतलब निकालते हैं। पहला स्थानीय रूप से एक मॉडल चलाना है: वेट्स डाउनलोड करना और अपने स्वयं के CPU या GPU पर एक लाइब्रेरी के साथ उन्हें लोड करना। दूसरा एक क्लाइंट लाइब्रेरी इंस्टॉल करना है ताकि आपका Python कोड किसी ऐसे मॉडल से बात कर सके जो कहीं और चलता है। दोनों मान्य हैं, और सही विकल्प आपके हार्डवेयर और आप क्या बनाना चाहते हैं, इस पर निर्भर करता है।

API मार्ग बहुत छोटा है। आप pip install openai चलाते हैं, क्लाइंट को एक बेस URL पर पॉइंट करते हैं, और मॉडल को कॉल करते हैं। कोई वेट्स, कोई GPU ड्राइवर, कोई मेमोरी की योजना नहीं। इस पृष्ठ का शेष भाग उस मार्ग के लिए चरण और कोड देता है, ताकि आप तुलना कर सकें, स्थानीय मार्ग पर एक छोटा खंड भी है।

स्थानीय इंस्टॉल या होस्टेड API: कैसे चुनें

प्रश्नस्थानीय इंस्टॉलहोस्टेड API
आपको क्या इंस्टॉल करना हैएक इन्फरेंस लाइब्रेरी और मॉडल वेट्सopenai पैकेज
हार्डवेयरमेमोरी और आमतौर पर मॉडल के आकार के अनुरूप GPUकोई भी मशीन जो HTTPS कॉल कर सकती है
लागतआपका हार्डवेयर और बिजलीप्रति टोकन, प्रीपेड क्रेडिट से
ऑफ़लाइन काम करता हैहाँनहीं
पहली प्रतिक्रिया पाने में समयडाउनलोड, सेटअप, ट्यूनिंगकुछ मिनट

स्थानीय मार्ग तब समझ में आता है यदि आपको सब कुछ एक ही मशीन पर रखना है, ऑफ़लाइन काम करने की आवश्यकता है, या आप वेट्स स्वयं के साथ प्रयोग करना चाहते हैं। llama.cpp बाइंडिंग्स या Hugging Face ट्रांसफॉर्मर्स जैसे लाइब्रेरी आमतौर पर शुरुआत के बिंदु हैं; हार्डवेयर आवश्यकताओं के लिए उनकी अपनी दस्तावेज़ीकरण जांचें, क्योंकि वे आपके द्वारा चुने गए मॉडल के आकार पर निर्भर करते हैं।

API तब समझ में आता है यदि आप जल्दी एक कार्यरत परिणाम चाहते हैं, आपका लैपटॉप एक बड़े मॉडल को संभाल नहीं सकता, या आपके ऐप को कई उपयोगकर्ताओं को सर्व करना है। आप हार्डवेयर खरीदने के बजाय प्रति टोकन भुगतान करते हैं। इस सेवा के लिए यह 1M इनपुट टोकन के लिए $0.15 और 1M आउटपुट टोकन के लिए $0.50 है, कोई सदस्यता नहीं। मूल्य निर्धारण पृष्ठ में विवरण हैं।

चरण 1: एक वर्चुअल एनवायरनमेंट बनाएं और पैकेज इंस्टॉल करें

एक वर्चुअल एनवायरनमेंट का उपयोग करें ताकि इंस्टॉल साफ रहे। कोई भी हालिया Python 3 रिलीज openai पैकेज के साथ काम करती है।

python3 -m venv .venv
source .venv/bin/activate
pip install openai

अगला कदम एक कुंजी लेना है। Google या ईमेल और पासवर्ड से API कुंजी पेज पर साइन अप करें। नए उपयोगकर्ता वहाँ एक क्लिक से $0.50 का ट्रायल क्रेडिट दावा कर सकते हैं, जो 7 दिनों के लिए मान्य है और बिना कार्ड के। कुंजी को अपने स्रोत फ़ाइल में रखने के बजाय एक एनवायरनमेंट वेरिएबल में स्टोर करें:

export API_KEY="paste-your-key-here"

चरण 2: अपना पहला कॉल बनाएं

सर्विस OpenAI-कम्पैटिबल है, इसलिए स्टॉक OpenAI स्क्रिप्ट से केवल बेस URL और मॉडल ID में ही बदलाव हैं। मॉडल ID uncensored है।

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.getaiapikey.com/v1",
    api_key=os.environ["API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a context window is in two sentences."},
    ],
    temperature=0.7,
    max_tokens=200,
)

print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

यदि यह एक उत्तर और टोकन की दो गणनाएँ प्रिंट करता है, तो इंस्टॉल पूरा हो गया है। यह जाँचने के लिए कि आपकी कुंजी काम कर रही है और मॉडल ID देखने के लिए, आप GET /v1/models को भी कॉल कर सकते हैं:

for m in client.models.list():
    print(m.id)

शेल से वही अनुरोध, बिना Python के, एक अकेले curl कॉल से होता है https://api.getaiapikey.com/v1/chat/completions, जिसमें हेडर Authorization: Bearer आपकी कुंजी के साथ जुड़ा होता है। दस्तावेज़ क्विकस्टार्ट इसे पूरा दिखाता है।

चरण 3: आने पर टोकन स्ट्रीम करें

कुछ भी प्रिंट करने से पहले एक लंबे उत्तर के पूरा होने का इंतज़ार करना धीमा लगता है। stream=True सेट करें और सर्वर सर्वर-सेंट इवेंट्स के माध्यम से टोकन भेजता है। आप stream_options के साथ अंतिम चंक में एक उपयोग सारांश मांग सकते हैं।

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.total_tokens, "tokens")

उत्पादन के लिए एक विवरण महत्वपूर्ण है: एक स्ट्रीम किया गया अनुरोध अपने कंकरेंसी स्लॉट को स्ट्रीम समाप्त होने तक पकड़े रखता है। एक पूर्ण कुंजी 8 समानांतर अनुरोधों की अनुमति देती है, इसलिए यदि आपका ऐप कई लंबी स्ट्रीम्स खोलता है, तो उपयोगकर्ता के डिस्कनेक्ट होने पर उन्हें बंद कर दें।

चरण 4: JSON मोड और टूल कॉलिंग

स्ट्रक्चर्ड आउटपुट के लिए, response_format को एक JSON ऑब्जेक्ट पर सेट करें। साथ ही, प्रॉम्प्ट में मॉडल को JSON में उत्तर देने के लिए कहें, क्योंकि सेटिंग वैध JSON सिंटैक्स की गारंटी देती है लेकिन आपके द्वारा वांछित फ़ील्ड नामों की नहीं।

import json

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
        {"role": "user", "content": "Give me a title and tags for a post about slow travel."},
    ],
    response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

टूल कॉलिंग मानक पैटर्न का पालन करती है। आप एक फ़ंक्शन का वर्णन करते हैं, मॉडल उसे कॉल करने का अनुरोध कर सकता है, आप इसे स्वयं चलाते हैं और role: "tool" के साथ परिणाम वापस भेजते हैं।

tools = [{
    "type": "function",
    "function": {
        "name": "get_time",
        "description": "Return the current time for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)

msg = first.choices[0].message
if msg.tool_calls:
    call = msg.tool_calls[0]
    messages.append(msg)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps({"time": "14:05"}),
    })
    final = client.chat.completions.create(
        model="uncensored", messages=messages, tools=tools
    )
    print(final.choices[0].message.content)

उन पर भरोसा करने से पहले कुछ प्रॉम्प्ट्स पर टूल कॉल का परीक्षण करें। कोई भी मॉडल गलत फ़ंक्शन चुन सकता है या तर्क खराब भर सकता है, इसलिए साइड इफेक्ट्स के साथ कुछ भी चलाने से पहले अपने कोड में तर्कों की जाँच करें।

चरण 5: लिमिट्स और त्रुटियों को हैंडल करें

पूर्ण कुंजियाँ 8 समानांतर अनुरोध और प्रति मिनट 300 अनुरोधों की अनुमति देती हैं। ट्रायल कुंजियाँ 2 और 60 की अनुमति देती हैं। उन सीमाओं से परे, आपको HTTP 429 मिलता है। त्रुटि कोड rate_limited का अर्थ है प्रति मिनट बहुत सारे अनुरोध, और concurrency का अर्थ है एक साथ बहुत सारे। अस्थायी ओवरलोड पर API 429 भी Retry-After: 5 हेडर के साथ लौटाता है।

OpenAI Python क्लाइंट कुछ विफलताओं को स्वयं पुनः प्रयास करता है, लेकिन एक स्पष्ट wrapper व्यवहार को स्पष्ट रखता है:

import time
from openai import RateLimitError

def ask(messages, tries=4):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited after retries")

प्रत्येक प्रतिक्रिया X-Request-Id, X-Balance-USD और रेट लिमिट हेडर लेती है, जिसे आप लॉग कर सकते हैं। यदि आप सपोर्ट से संपर्क करते हैं, तो अनुरोध ID शामिल करें। विफल या अस्वीकृत अनुरोधों के लिए शुल्क नहीं लगाया जाता, इसलिए पुनःप्रयास करने में अतिरिक्त लागत नहीं आती।

आकार सीमाओं की भी योजना बनाएं। कॉन्टेक्स्ट विंडो 100,000 टोकन का है, प्रॉम्प्ट और पूर्णता सहित, और अधिकतम अनुरोध बॉडी 8 MB है। लंबे चैट इतिहास को उन संख्याओं तक पहुंचने से पहले काटना या सारांशित करना चाहिए।

जब कॉल काम नहीं करती

ज्यादातर पहली बार चलाने की समस्याएं कुछ गलतियों से आती हैं। किसी अन्य बात पर संदेह करने से पहले इनकी जांच इस क्रम में करें।

  • बिना वर्जन पथ के बेस URL। मान /v1 पर समाप्त होना चाहिए। क्लाइंट /chat/completions जोड़ता है, इसलिए एक गायब /v1 अनुरोध को गलत मार्ग पर भेजता है।
  • गलत या अनुपलब्ध कुंजी। कुंजी Authorization: Bearer हेडर में जाती है, जिसे क्लाइंट api_key से बनाता है। यदि एनवायरनमेंट वेरिएबल खाली है, तो क्लाइंट शुरू में त्रुटि देता है या खाली कुंजी भेजता है। bool(os.environ.get("API_KEY")) प्रिंट करके जांचें।
  • किसी दूसरी सेवा से मॉडल नाम। यहाँ एकमात्र मॉडल ID uncensored है। अन्य ट्यूटोरियल में दिए गए नाम मेल नहीं खाएंगे।
  • कोई बैलेंस नहीं। X-Balance-USD हेडर देखें। 7 दिनों की समाप्ति हो चुकी ट्रायल या खत्म हो चुका बैलेंस, $20 से टॉप-अप करने की आवश्यकता है।
  • पुराना पैकेज। यदि उदाहरण OpenAI( का उपयोग करता है और Python कहता है कि वह नाम इम्पोर्ट नहीं कर सकता, तो आपके पास 1.0 से पहले का पैकेज है। pip install --upgrade openai चलाएँ।

हेडर सहित कच्ची प्रतिक्रिया देखने के लिए, क्लाइंट के raw-response wrapper का उपयोग करें:

raw = client.chat.completions.with_raw_response.create(
    model="uncensored",
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)

यह अनुरोध ID और आपके शेष बैलेंस को उत्तर के बगल में प्रिंट करता है, जो एक त्वरित स्वास्थ्य जांच है जिसे आप एक cron job या स्टार्टअप स्क्रिप्ट से चला सकते हैं।

अन्य टूल्स से उपयोग

चूँकि एंडपॉइंट OpenAI फॉर्मेट का पालन करता है, अन्य Python लाइब्रेरियाँ उसी दो सेटिंग्स के साथ इसे उपयोग कर सकती हैं। ऐसे फ्रेमवर्क जो कस्टम OpenAI बेस URL स्वीकार करते हैं, उन्हें केवल base_url और api_key की आवश्यकता होती है। Node के लिए, आधिकारिक openai पैकेज समान फ़ील्ड लेता है:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.getaiapikey.com/v1",
  apiKey: process.env.API_KEY,
});

const r = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);

यह केवल पाठ सेवा है: न तो छवि या ऑडियो जनरेशन, न एम्बेडिंग और न ही फाइन-ट्यूनिंग। यदि आपके प्रोजेक्ट को उनकी आवश्यकता है, तो उस भाग के लिए इस API को किसी अन्य टूल के साथ जोड़ें। मॉडल एक ओपन-वेट मॉडल है जिसे एक स्वतंत्र प्रदाता चलाता है और वयस्कों के कानूनी उपयोग के लिए बिना सामग्री अस्वीकृति के उत्तर देने के लिए ट्यून्ड किया गया है। नाबालिगों से जुड़ी यौन सामग्री कभी भी अनुमति नहीं है।

प्रश्न और उत्तर

क्या इस तरह Python में LLM का उपयोग करने के लिए GPU की आवश्यकता है?

नहीं। मॉडल प्रदाता की ओर चलता है। आपकी मशीन को एंडपॉइंट कॉल करने के लिए केवल Python और एक इंटरनेट कनेक्शन की आवश्यकता है।

मुझे कौन सा पैकेज इंस्टॉल करना चाहिए?

pip के साथ आधिकारिक openai पैकेज इंस्टॉल करें। फिर Base URL को https://api.getaiapikey.com/v1 और मॉडल को uncensored पर सेट करें।

इसे आज़माने का कोई मुफ़्त तरीका है?

नए उपयोगकर्ता साइन-अप के बाद एक क्लिक के साथ $0.50 का मुफ़्त ट्रायल क्रेडिट दावा कर सकते हैं। यह 7 दिनों के लिए मान्य है, कार्ड की आवश्यकता नहीं है, और प्रति व्यक्ति केवल एक बार।

एक अनुरोध की लागत कितनी है?

2,000 इनपुट टोकन और 500 आउटपुट टोकन वाले एक अनुरोध की लागत $0.00055 है, $0.15 और $0.50 प्रति 1M टोकन से। आप केवल सफल अनुरोधों के लिए भुगतान करते हैं।

क्या यह स्ट्रीमिंग और फ़ंक्शन कॉलिंग को सपोर्ट करता है?

हाँ। SSE के माध्यम से स्ट्रीमिंग, फ़ंक्शन कॉलिंग और JSON मोड सभी मानक OpenAI क्लाइंट के माध्यम से काम करते हैं।

आपकी कुंजी बस एक फ़ॉर्म दूर है

एक खाता बनाएँ, कुंजी कॉपी करें, बेस URL बदलें। सेटअप यही है।