คีย์ API TTS ใน Python: การตั้งค่า, การสตรีม, โหมด JSON การตั้งค่า, สตรีมมิง, โหมด JSON
นี่คือบทแนะนำ Python สำหรับ API ที่อยู่เบื้องหลังเว็บไซต์นี้: เก็บคีย์ สร้างไคลเอนต์ สตรีมคำตอบ บังคับผลลัพธ์เป็น JSON และจัดการขีดจำกัดอัตรา ข้อควรระวังประการแรก: มันสร้างข้อความ ไม่ใช่เสียง
อัปเดต

ประเด็นสำคัญ
- เอนด์พอยต์นี้เข้ากันได้กับ OpenAI ดังนั้นแพ็กเกจ Python openai จึงทำงานได้โดยตั้งค่า base_url เป็น https://api.ttsapihub.com/v1
- เก็บคีย์ไว้ในตัวแปรสภาพแวดล้อม อย่าเก็บในซอร์สโค้ด
- รองรับการสตรีมมิง โหมด JSON และการเรียกใช้เครื่องมือ; ไม่รองรับการส่งออกเสียง
- จัดการ HTTP 429 ด้วยการรอสั้นๆ และอ่าน X-Balance-USD เพื่อติดตามค่าใช้จ่าย
ตรวจสอบว่าคีย์นี้เปิดใช้งานอะไร
คนที่ค้นหาตัวอย่าง tts api key python มักต้องการแปลงข้อความเป็นเสียงพูด คีย์จากบริการนี้ไม่ได้ทำแบบนั้น มันยืนยันคำขอไปยัง LLM ข้อความ: POST /v1/chat/completions และ GET /v1/models โดยใช้โมเดล uncensored ไม่มีเสียงสังเคราะห์ ไม่มีอัปโหลดเสียง และไม่มี embeddings
หากสิ่งนั้นเหมาะกับโปรเจกต์ของคุณ เช่น เมื่อคุณสร้างสคริปต์ บทสนทนา หรือบทบรรยายที่จะส่งไปยังเครื่องมือแปลงเสียงแยกต่างหาก หน้าที่เหลือของหน้านี้จะให้คุณใช้ Python ได้ทันที หากต้องการเอาต์พุตเสียงจาก API โดยตรง นี่คือบริการที่ไม่ถูกต้อง และควรทราบไว้ตอนนี้เลย รายการ docs ระบุชุดฟีเจอร์ที่แน่นอน
วิธีปฏิบัติในการใช้การสร้างข้อความในโปรเจกต์เสียงคือการใช้เป็นขั้นตอนการเขียน โมเดลร่างบทบรรยาย แก้ไขบรรทัดให้พอดีกับขีดจำกัดเวลา หรือเปลี่ยนโน้ตให้เป็นบทสนทนาระหว่างผู้พูดหลายคน โค้ด Python ของคุณจึงส่งข้อความสุดท้ายไปยังเครื่องมือพูดที่คุณใช้ การแยกขั้นตอนออกจากกันยังหมายถึงคุณสามารถสลับอย่างใดอย่างหนึ่งโดยไม่กระทบอีกอย่าง และคุณจ่าย API นี้เฉพาะสำหรับคำที่มันเขียนเท่านั้น
เพื่อให้ทำตามได้ คุณต้องมี Python 3.9 ขึ้นไปและคีย์ สมัครสมาชิกที่ หน้าคีย์ API และรับเครดิตทดลองใช้ $0.50 เพียงคลิกเดียว; ใช้ได้ 7 วัน และไม่ต้องการบัตร
เก็บคีย์และติดตั้งแพ็กเกจ
อย่าเขียนคีย์ลงในไฟล์ที่คุณคอมมิต ใส่คีย์ไว้ในตัวแปรสภาพแวดล้อมและอ่านค่าเมื่อรันไทม์
# base URL used below: https://api.ttsapihub.com/v1 , model: uncensored
pip install openai
export API_KEY="paste-your-key-here"บน PowerShell ของ Windows คำสั่งที่เทียบเท่าคือ $env:API_KEY = "paste-your-key-here" สำหรับโปรเจกต์ ไฟล์ .env ที่โหลดด้วยแพ็กเกจเช่น python-dotenv เป็นรูปแบบทั่วไป ตราบใดที่ .env อยู่ใน .gitignore ของคุณ
หากคีย์รั่วไหลไปยังที่เก็บข้อมูล ให้ถือว่าคีย์นั้นถูกเผา: ลบออกจากรหัสประวัติหากทำได้ และขอคีย์ใหม่ โปรดจำไว้ว่าคีย์ใช้เครดิตแบบเติมเงินล่วงหน้า ดังนั้นคีย์ที่รั่วไหลจึงเป็นการรั่วไหลทางการเงินด้วย
สร้างไคลเอนต์และทำคำขอครั้งแรก
แพ็กเกจทางการรองรับ base_url ส่วนที่เหลือเป็นรูปแบบการเรียกแบบ OpenAI ทั่วไป
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.ttsapihub.com/v1",
api_key=os.environ["API_KEY"],
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You write short narration scripts."},
{"role": "user", "content": "Draft a 40-word intro for a podcast about night trains."},
],
temperature=0.8,
max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)ออบเจกต์ usage แสดงจำนวนโทเคนที่คำขอนั้นใช้ ดังนั้นคุณจึงคำนวณต้นทุนได้: โทเคนอินพุตคูณ $0.15 ต่อล้าน บวกกับโทเคนเอาต์พุตคูณ $0.50 ต่อล้าน หากคำขอข้างต้นใช้โทเคนอินพุต 60 และโทเคนเอาต์พุต 80 ต้นทุนคือ $0.000009 บวก $0.00004 ซึ่งเท่ากับ $0.000049 คำขอที่ล้มเหลวหรือถูกปฏิเสธจะไม่ถูกเรียกเก็บเงิน
max_tokens เป็นตัวเลือก หากไม่มีค่านี้ การสร้างข้อความสามารถใช้พื้นที่ที่เหลือของหน้าต่าง 100,000 โทเคนได้ ดังนั้นจึงควรตั้งค่าเมื่อคุณต้องการจำกัดความยาวและต้นทุน
สตรีมมิงคำตอบ
สตรีมมิงจะส่งโทเคนออกมาเมื่อสร้างเสร็จโดยใช้เซิร์ฟเวอร์ส่งเหตุการณ์ (SSE) ตั้งค่า stream=True และวนลูปอ่าน
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.ttsapihub.com/v1", api_key=os.environ["API_KEY"])
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Describe a rainy station platform in four sentences."}],
stream=True,
)
parts = []
for chunk in stream:
if not chunk.choices:
continue
delta = chunk.choices[0].delta.content or ""
parts.append(delta)
print(delta, end="", flush=True)
text = "".join(parts)การป้องกันรายการ choices ว่างมีอยู่เพราะเหตุการณ์สุดท้ายของการสตรีมสามารถมีข้อมูลการใช้งานและไม่มีข้อความ การข้ามเหตุการณ์นี้ช่วยหลีกเลี่ยงข้อผิดพลาดดัชนี รายละเอียดการทำงานหนึ่งประการ: คำขอที่สตรีมจะสงวนช่อง concurrent ไว้จนกว่าการสตรีมจะสิ้นสุด หากคุณเริ่มสตรีมหลายสตรีมในเธรดและไม่เคยอ่านจนจบ คุณจะชนกับขีดจำกัด concurrent แม้ว่าคุณจะมีอัตราคำขอต่ำก็ตาม
ขอ JSON และเรียกใช้เครื่องมือ
โหมด JSON
ตั้งค่า response_format เป็นออบเจกต์ JSON เพื่อให้การตอบกลับสามารถแยกวิเคราะห์ได้ นอกจากนี้ยังบอกโมเดลในพรอมต์ว่าคุณต้องการ JSON การตั้งค่าจะจำกัดรูปแบบ และพรอมต์บอกโมเดลถึงรูปร่างที่ต้องการ
import json, os
from openai import OpenAI
client = OpenAI(base_url="https://api.ttsapihub.com/v1", api_key=os.environ["API_KEY"])
resp = client.chat.completions.create(
model="uncensored",
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": "Reply only with JSON: {\"title\": str, \"beats\": [str]}"},
{"role": "user", "content": "Outline a three-beat radio drama about a lost key."},
],
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], len(data["beats"]))ห่อ json.loads ด้วยบล็อก try อยู่ดี การตอบกลับที่ชน max_tokens อาจถูกตัดกลางออบเจกต์
การเรียกใช้เครื่องมือ
ส่ง tools และตัวเลือก tool_choice เมื่อโมเดลขอใช้เครื่องมือ ให้รันเครื่องมือเองและส่งผลลัพธ์กลับเป็นข้อความที่มี role: "tool"
import json, os
from openai import OpenAI
client = OpenAI(base_url="https://api.ttsapihub.com/v1", api_key=os.environ["API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "word_count",
"description": "Count the words in a text",
"parameters": {
"type": "object",
"properties": {"text": {"type": "string"}},
"required": ["text"],
},
},
}]
messages = [{"role": "user", "content": "How many words are in: the quick brown fox?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
msg = first.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
args = json.loads(call.function.arguments)
result = len(args["text"].split())
messages.append(msg)
messages.append({"role": "tool", "tool_call_id": call.id, "content": str(result)})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)รักษาการสนทนาและติดตามงบประมาณโทเคน
API เป็นแบบไร้สถานะ หากคุณต้องการแชทที่จำสิ่งที่พูดได้ ให้เก็บรายการข้อความในโปรแกรมของคุณและส่งทั้งหมดไปกับทุกการเรียกใช้ คลาสขนาดเล็กทำได้ และยังเป็นตำแหน่งที่เหมาะสมในการจำกัดประวัติเพื่อให้ต้นทุนไม่เพิ่มขึ้น
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.ttsapihub.com/v1", api_key=os.environ["API_KEY"])
history = [{"role": "system", "content": "You are a dialogue writer. Keep replies under 120 words."}]
def say(user_text, keep_last=12):
history.append({"role": "user", "content": user_text})
# keep the system message plus the most recent turns
trimmed = [history[0]] + history[1:][-keep_last:]
resp = client.chat.completions.create(model="uncensored", messages=trimmed, max_tokens=250)
reply = resp.choices[0].message.content
history.append({"role": "assistant", "content": reply})
return reply, resp.usage.total_tokens
print(say("Open a scene in a ticket office at closing time.")[0])การตัดทอนนั้นสำคัญต่อเงินมากกว่าหน้าต่าง โมเดลรองรับโทเคนได้สูงสุด 100,000 โทเคนรวมกัน แต่หากทุกเทิร์นส่งประวัติ 30,000 โทเคนกลับเข้าไป ทุกคำขอจะมีต้นทุนอินพุต $0.0045 เพียงอย่างเดียว (30,000 คูณ $0.15 ต่อล้าน) 50 เทิร์นเช่นนี้จะรวมกันเป็น $0.225 ก่อนที่จะนับโทเคนเอาต์พุตแม้แต่ตัวเดียว การเก็บเทิร์นล่าสุดสิบสองเทิร์น หรือสรุปเทิร์นเก่าเป็นโน้ตสั้นๆ มักจะรักษาคุณภาพและลดบิลได้อย่างมาก
ความพร้อมใช้งานพร้อมกันเป็นอีกสิ่งหนึ่งที่ต้องออกแบบ หากโปรแกรมของคุณให้บริการผู้ใช้หลายคนพร้อมกัน เซมิโฟร์ที่มีขนาดตามขีดจำกัดของคีย์ของคุณ (8 สำหรับคีย์เต็ม, 2 สำหรับคีย์ทดลอง) จะช่วยให้คุณไม่เกิดข้อผิดพลาด concurrency การเรียกใช้ที่เกินขีดจำกัดจะรอในคิวของคุณเองแทนที่จะล้มเหลว ซึ่งเป็นมิตรกว่าการลองใหม่เมื่อได้รับ 429
การทดสอบก็สำคัญเช่นกัน เขียนสคริปต์เล็กๆ สคริปต์หนึ่งที่เรียก API ด้วยค่า seed คงที่ อุณหภูมิต่ำ และค่า max_tokens สั้นๆ แล้วรันสคริปต์ทุกครั้งเมื่อมีการเปลี่ยนแปลงพรอมต์หรือการตั้งค่า การใช้ seed และอุณหภูมิต่ำทำให้ผลลัพธ์มีความสามารถในการทำซ้ำได้มากขึ้น ซึ่งช่วยให้คุณเปรียบเทียบเวอร์ชันของพรอมต์สองเวอร์ชันได้โดยไม่มีความแปรปรวน รักษาคำตรวจสอบเหล่านี้ให้เล็กที่สุด; การทดสอบที่เสียค่าใช้จ่ายเพียงเศษเสี้ยวของเซ็นต์สามารถรันบนทุก commit ได้โดยไม่มีใครสังเกตเห็นใบแจ้งหนี้
สุดท้าย บันทึก ID คำขอจากการตอบกลับแต่ละรายการ เมื่อคำขอทำงานผิดปกติ ID นั้นเป็นวิธีที่เร็วที่สุดในการชี้ไปที่คำขอที่แน่นอนสำหรับฝ่ายสนับสนุน
จัดการขีดจำกัด ข้อผิดพลาด และยอดเงิน
คีย์เต็มรองรับคำขอพร้อมกัน 8 คำขอและ 300 คำขอต่อนาที คีย์ทดลองรองรับ 2 และ 60 การเกินขีดแรกจะคืน HTTP 429 พร้อมรหัสข้อผิดพลาด concurrency และการเกินขีดที่สองจะคืน 429 พร้อม rate_limited การโอเวอร์โหลดชั่วคราวยังคืน 429 พร้อมเฮดเดอร์ Retry-After: 5
แพ็กเกจ OpenAI ลองเรียกซ้ำความล้มเหลวบางรายการโดยอัตโนมัติ และคุณสามารถเพิ่มจำนวนนั้นด้วย max_retries สำหรับงานแบทช์ ให้เพิ่มขีดจำกัดการทำงานแบบขนานของคุณเองด้วย เพื่อให้อยู่ใต้ขีดจำกัด concurrent แทนที่จะพึ่งพาการลองซ้ำ
import os
from openai import OpenAI, RateLimitError
client = OpenAI(base_url="https://api.ttsapihub.com/v1", api_key=os.environ["API_KEY"], max_retries=3)
raw = client.chat.completions.with_raw_response.create(
model="uncensored",
messages=[{"role": "user", "content": "One sentence about trains."}],
max_tokens=60,
)
print("balance:", raw.headers.get("X-Balance-USD"))
print("request id:", raw.headers.get("X-Request-Id"))
print(raw.parse().choices[0].message.content)ส่วนหัวของคำตอบ X-Request-Id และ X-Balance-USD มีประโยชน์ในบันทึกเหตุการณ์ อ้างอิง ID คำขอเมื่อติดต่อฝ่ายสนับสนุน ค่าใช้จ่ายแสดงอยู่ที่ หน้าราคา: $0.15 ต่อ 1M input tokens และ $0.50 ต่อ 1M output tokens พร้อมเติมเงินตั้งแต่ $20 ถึง $500 และโบนัส 5%, 10% และ 15% ที่ $50, $100 และ $200 บัตร (Visa, Mastercard, Apple Pay, Google Pay) และคริปโต (USDT บน TRC20, USDC บน Base) ได้รับการยอมรับ พรอมต์ไม่ถูกใช้สำหรับการฝึก โมเดลนี้เหมาะสำหรับการใช้งานของผู้ใหญ่ตามกฎหมาย และเนื้อหาทางเพศที่เกี่ยวข้องกับผู้เยาว์ไม่อนุญาตเด็ดขาด
คู่มือเพิ่มเติม
ถาม-ตอบ
คีย์ API นี้ใช้สำหรับแปลงข้อความเป็นเสียงใน Python ได้หรือไม่?
ไม่ได้ คีย์นี้ใช้สำหรับการยืนยันตัวตนของ text LLM API ซึ่งไม่มีการส่งออกเสียง ใช้เพื่อสร้างข้อความ แล้วนำข้อความนั้นไปส่งต่อให้เครื่องมือสร้างเสียง
ควรใช้แพ็กเกจ Python ตัวใด?
แพ็กเกจ openai อย่างเป็นทางการ ตั้งค่า base_url เป็น https://api.ttsapihub.com/v1 และ model เป็น uncensored
ฉันจะเก็บคีย์ไว้ไม่ให้อยู่ในโค้ดได้อย่างไร?
อ่านค่าจากตัวแปรสภาพแวดล้อมเช่น API_KEY และเก็บไฟล์ .env ใดๆ ออกจากการควบคุมเวอร์ชัน
ฉันจะดูว่าคำขอแต่ละครั้งมีค่าใช้จ่ายเท่าใดได้อย่างไร?
อ่าน resp.usage สำหรับจำนวนโทเคน และส่วนหัวการตอบกลับ X-Balance-USD สำหรับยอดคงเหลือที่เหลือ
เกิดอะไรขึ้นเมื่อถึงขีดจำกัดอัตรา?
API จะส่ง HTTP 429 พร้อมรหัส rate_limited หรือ concurrency รอไม่กี่วินาทีแล้วลองใหม่; คำขอที่ล้มเหลวจะไม่ถูกคิดเงิน
เพียงกรอกแบบฟอร์มก็รับคีย์ได้
สร้างบัญชี คัดลอกคีย์ และเปลี่ยน base URL นั่นคือการตั้งค่าทั้งหมด