शुरुआत से पहले की जाँच सूची
पहले से देख लें ताकि बीच में वापस न जाना पड़े।
- एक ईमेल सेवा जिससे आप ईमेल प्राप्त कर सकें, साइन अप के लिए।
- आपके पास निम्नलिखित में से कोई एक रनटाइम वातावरन होना चाहिए: Python 3, JDK 15+ (टेक्स्ट ब्लॉक्स के लिए), Go, या curl एक्सटेंशन वाला PHP।
- आपकी उम्र 18 वर्ष या उससे अधिक हो, सेवा केवल वयस्कों के लिए है।
- आपको केवल टेक्स्ट चैट चाहिए: यहाँ केवल एक मॉडल है, वेक्टर, इमेज, ऑडियो या फाइन-ट्यूनिंग नहीं।
- एनवायरनमेंट वेरिएबल्स में कुंजी सेव करें, कोड में नहीं, और न ही रिपॉजिटरी में कम्िट करें।
API अनुबंध बहुत सरल है: एंडपॉइंट https://api.wushenchaapi.com/v1 है और यह OpenAI चैट कंप्लीशन के साथ संगत है, इसलिए आपका पुराना अनुरोध शरीर वैसे ही काम करेगा।
समय अनुमान: साइन अप में एक मिनट, वातावरन स्थापित करने में समय लग सकता है, पहला अनुरोध 30 सेकंड से कम लेना चाहिए। यदि इससे अधिक समय लगे, तो नेटवर्क या कुंजी की समस्या हो सकती है, त्रुटि निवारण सूची पर जाएँ। क्रम: पहले मॉडल, फिर चैट, पहले सिंक, फिर स्ट्रीमिंग।
रजिस्टर करें और key प्राप्त करें
/get-api-key/ पर जाएं और ईमेल व पासवर्ड से साइन इन करें। रजिस्टर करने पर तुरंत API कुंजी दिखती है, उसे कॉपी करें। ध्यान दें:
- प्रत्येक खाते के लिए केवल एक key होती है।
- इसे रीजेनरेट किया जा सकता है, लेकिन पुरानी key तुरंत अमान्य हो जाएगी, इसलिए लाइव सर्विस में key बदलने से पहले नई value को डिप्लॉय कर लें।
- नए खाते को $0.50 का मुफ़्त ट्रायल क्रेडिट मिलता है, जो 7 दिनों के लिए मान्य है, और भुगतान की जानकारी भरने की आवश्यकता नहीं है।
- ट्रायल क्रेडिट खत्म होने या समाप्त होने पर, अनुरोध 402 लौटाएगा, त्रुटि कोड
no_credit, प्रीपेड क्रेडिट टॉप-अप करें, सब्सक्रिप्शन नहीं, शेष राशि कभी समाप्त नहीं होगी।
key को एनवायरनमेंट वेरिएबल में डालें: macOS / Linux पर export API_KEY=your_key चलाएँ, Windows PowerShell पर $env:API_KEY="your_key" का उपयोग करें। आगे के सभी उदाहरण API_KEY से पढ़ेंगे।
पहला कदम: /v1/models से कनेक्टिविटी सत्यापित करें
चैट भेजने से पहले एक शून्य लागत वाला GET अनुरोध भेजें, यह सुनिश्चित करने के लिए कि URL, नेटवर्क और key ठीक हैं:
curl https://api.wushenchaapi.com/v1/models \
-H "Authorization: Bearer $API_KEY"200 कोड और मॉडल सूची (केवल uncensored) मिलने का मतलब कनेक्शन सही है। 401 का मतलब API कुंजी गलत है या वह भेजी नहीं गई है; टाइमआउट पर नेटवर्क या प्रॉक्सी जाँचें। समस्याओं को अलग-अलग हल करने से समय बचता है।
Python: requests
SDK की आवश्यकता नहीं है, केवल एक requests.post काफी है। तीन बातों का ध्यान रखें: timeout सेट करना अनिवार्य है; r.ok की जाँच करें, फिर choices प्राप्त करें; विफलता पर त्रुटि बॉडी {"error":{"code":...,"message":...}} होती है।
import os
import requests
url = "https://api.wushenchaapi.com/v1/chat/completions"
headers = {
"Authorization": "Bearer " + os.environ["API_KEY"],
"Content-Type": "application/json",
}
payload = {
"model": "uncensored",
"messages": [{"role": "user", "content": "用两句话描述一场雨夜里的追逐戏。"}],
"max_tokens": 300,
}
r = requests.post(url, headers=headers, json=payload, timeout=120)
print(r.status_code)
data = r.json()
if r.ok:
print(data["choices"][0]["message"]["content"])
print(data["usage"])
else:
print(data["error"]["code"], data["error"]["message"])सफलता पर usage में prompt_tokens और completion_tokens होते हैं। लागत समझने के लिए हर बार प्रिंट करें।
प्रत्येक फील्ड को अलग-अलग देखें
चारों भाषाओं में एक ही JSON भेजा जाता है, इसे समझें, भाषा बदलना केवल अनुवाद है।
| फील्ड | आवश्यक | विवरण |
|---|---|---|
| model | हाँ | स्थिर uncensored है। |
| messages | हाँ | एरे, प्रत्येक आइटम में role और content होता है, role system, user, assistant हो सकता है। |
| max_tokens | नहीं | डिफ़ॉल्ट 2048, प्रति अनुरोध अधिकतम 16,000। लंबे टेक्स्ट के लिए खुद से बढ़ाएँ। |
| temperature / top_p / stop | नहीं | मानक सैंपलिंग पैरामीटर, उन्हें वैसे ही पास करें। |
| stream | नहीं | जब true हो, तो SSE स्ट्रीमिंग का उपयोग होता है। |
प्रतिक्रिया में तीन मुख्य फ़ील्ड हैं: choices[0].message.content (सामग्री), choices[0].finish_reason (समाप्ति कारण), और usage (टोकन उपयोग)। तीनों को पढ़ें ताकि एकीकरण पूर्ण हो।
दो कठोर सीमाएँ याद रखें: अनुरोध बॉडी 8 MB से अधिक नहीं होनी चाहिए, और प्रति कुंजी प्रति मिनट 300 अनुरोध। बैच कार्यों के लिए सभी अनुरोध एक साथ न भेजें, पहले एक साधारण समानांतर अनुरोध सीमा सेट करें।
Java: java.net.http
JDK 11+ में HttpClient होता है। JDK 15+ टेक्स्ट ब्लॉक्स का उपयोग कर रहा है; पुराने संस्करणों में JSON स्ट्रिंग कनेक्शन या किसी JSON लाइब्रेरी का उपयोग करें।
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class Demo {
public static void main(String[] args) throws Exception {
String key = System.getenv("API_KEY");
String body = """
{"model":"uncensored",
"messages":[{"role":"user","content":"写一段两百字以内的悬疑小说开头。"}],
"max_tokens":400}
""";
HttpRequest req = HttpRequest.newBuilder(
URI.create("https://api.wushenchaapi.com/v1/chat/completions"))
.timeout(Duration.ofSeconds(120))
.header("Authorization", "Bearer " + key)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> resp = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.statusCode());
System.out.println(resp.body());
}
}सुझाव: जब सामग्री में चीनी भाषा होती है, तो BodyPublishers.ofString डिफ़ॉल्ट रूप से UTF-8 एन्कोडिंग का उपयोग करता है, अतिरिक्त प्रसंस्करण की आवश्यकता नहीं है। उत्पादन वातावरण में HttpClient को सिंगलटन बनाकर पुन: उपयोग करें, हर बार नया न बनाएं।
Go: net/http
Go की स्टैंडर्ड लाइब्रेरी भी पर्याप्त है। http.DefaultClient का उपयोग करते समय टाइमआउट सेट करना न भूलें, वरना goroutine अटके रहेंगे।
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
body := []byte(`{"model":"uncensored","messages":[{"role":"user","content":"给一个反派角色写三句独白。"}],"max_tokens":300}`)
req, err := http.NewRequest("POST", "https://api.wushenchaapi.com/v1/chat/completions", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 120 * time.Second}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(resp.StatusCode, string(out))
}प्रतिक्रिया बॉडी को io.ReadAll से पढ़ें और फिर पार्स करें। संरचित प्रसंस्करण के लिए, संबंधित struct परिभाषित करें और encoding/json से डिसीरियलाइज़ करें। फ़ील्ड्स choices, message, content, usage हैं।
PHP: curl
PHP में curl एक्सटेंशन का उपयोग करें। json_encode में JSON_UNESCAPED_UNICODE जोड़ना न भूलें, अन्यथा चीनी अक्षर \uXXXX में बदल जाएंगे, जो काम कर सकता है लेकिन डीबगिंग में पढ़ने में कठिनाई होती है।
<?php
$payload = [
"model" => "uncensored",
"messages" => [["role" => "user", "content" => "写一首八行的现代诗,主题是末班地铁。"]],
"max_tokens" => 300,
];
$ch = curl_init("https://api.wushenchaapi.com/v1/chat/completions");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);
$res = curl_exec($ch);
if ($res === false) {
die("curl 错误: " . curl_error($ch) . "\n");
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, "\n";
$data = json_decode($res, true);
echo $data["choices"][0]["message"]["content"] ?? $res, "\n";दो प्रकार की विफलताओं में अंतर करें: curl_exec द्वारा false लौटना नेटवर्क स्तर की समस्या है; सामग्री लौटना लेकिन स्टेटस कोड 200 न हो, API स्तर की समस्या है, error.code पढ़ें।
पहली कॉल में आम समस्याएँ
- 401: Header में
Authorization: कुंजीलिखा है, लेकिनBearerप्रिफ़िक्स भूल गए हैं; या फिर नए टर्मिनल में एनवायरनमेंट वेरिएबल लोड नहीं हुआ है। - 404: पथ में
/v1छूट गया है, याchat/completionsगलत लिखा गया है। - 400: JSON अमान्य है, या prompt plus max_tokens 100,000 टोकन की सीमा से अधिक है।
- 402: शेष राशि खत्म हो गई है या ट्रायल समाप्त हो गया है।
- आउटपुट ट्रंकेट हो गया:
max_tokensडिफ़ॉल्ट 2048 है, अधिकतम 16,000 तक। लंबे टेक्स्ट के लिए इसे स्पष्ट रूप से बढ़ाएं। - स्ट्रीमिंग चाहिए: अनुरोध बॉडी में
"stream": trueजोड़ें। प्रतिक्रिया SSE होगी, अंत में usage के साथ एक डेटा ब्लॉक स्वचालित रूप से जुड़ जाएगा।
跑通之后,下一步看 Prompt 写法 调输出质量,遇到报错查 错误码排障手册。参数完整说明在 文档,价格见 价格页。
सफलता के बाद, लॉन्च से पहले तीन चीजें जोड़ें
ट्यूटोरियल का उदाहरण न्यूनतम संस्करण है। वास्तव में सेवा में डालने से पहले कम से कम ये तीन चीजें जोड़ें।
- टाइमआउट। उदाहरण में 120 सेकंड दिए गए हैं क्योंकि लंबे टेक्स्ट में समय लगता है। सिंक्रोनस मोड में टाइमआउट कम करें और स्ट्रीमिंग का उपयोग करें ताकि उपयोगकर्ता को तुरंत आउटपुट दिखे।
- त्रुटि रूटिंग। 401, 402, 403 त्रुटियाँ हैं जिनमें रीट्राई काम नहीं करती (अलर्ट या यूजर को सूचित करें)। 429 और 503 के लिए बैकऑफ रीट्राई का उपयोग करें।
- उपयोग लॉगिंग। हर प्रतिक्रिया की usage डेटा एक लॉग फ़ाइल में लिखें, लेकिन यूजर कंटेंट न लिखें। यह माह की बिलिंग और एनॉर्मल कॉस्ट चेक के लिए जरूरी है।
कुंजी प्रबंधन के बारे में एक बात और: केवल एक कुंजी होती है, यदि वह लीक हो जाए तो केवल नई कुंजी बनाई जा सकती है, जिससे सभी सक्रिय सेवाएँ अस्थायी रूप से बाधित हो सकती हैं। इसलिए इसे कई स्क्रिप्ट्स या मशीनों में बिखेरें नहीं, बल्कि एक केंद्रीय कुंजी कॉन्फ़िगरेशन में रखें ताकि बदलते समय कोई छूटे नहीं।
सामग्री की सीमाएँ: वयस्क सामग्री, काल्पनिक कहानियाँ और विवादास्पद विषयों को अस्वीकार नहीं किया जाता, लेकिन किशोरों से संबंधित यौन सामग्री को 403 स्टेटस कोड के साथ ब्लॉक कर दिया जाता है, चाहे वह काल्पनिक ही क्यों न हो। यदि आपकी सेवा वयस्कों के लिए है, तो रजिस्ट्रेशन प्रक्रिया में आयु सत्यापन जोड़ें।
अंत में एक जाँच क्रम: क्या API कुंजी एनवायरनमेंट में है; models कनेक्ट हैं; JSON वैध है; मॉडल uncensored है; max_tokens पर्याप्त है; finish_reason stop है; usage रिकॉर्ड है।