TH ▾
API ข้อความแบบไม่เซ็นเซอร์สำหรับสายงาน TTShttps://api.ttsapihub.com/v1

คีย์ API TTS ใน Python: การตั้งค่า, การสตรีม, โหมด JSON การตั้งค่า, สตรีมมิง, โหมด JSON

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

อัปเดต

คีย์ที่เปล่งแสงเหนือเทอร์มินัลพร้อมสายข้อมูล แสดงถึงการใช้คีย์ API จาก Python

ประเด็นสำคัญ

  • เอนด์พอยต์นี้เข้ากันได้กับ 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 นั่นคือการตั้งค่าทั้งหมด

รับคีย์ API