TH ▾
NSFW Video Generator

API ไม่เซ็นเซอร์สำหรับสายงานวิดีโอสำหรับผู้ใหญ่

LLM ฟรีสำหรับ Python: โมเดลท้องถิ่นเทียบกับ API แบบโฮสต์ โมเดลท้องถิ่นเทียบกับ API แบบโฮสต์

LLM ฟรีสำหรับ Python มีสองประเภท: โมเดลแบบเปิดน้ำหนักที่รันบนเครื่องของคุณเอง และเอนด์พอยต์แบบโฮสต์ที่คิดค่าใช้จ่ายเพียงไม่กี่เซ็นต์ คู่มือนี้เปรียบเทียบทั้งสองและให้โค้ดที่ใช้งานได้สำหรับเส้นทางแบบโฮสต์

อัปเดต

ภาพประกอบไอโซเมตริกของเครื่องท้องถิ่นที่เชื่อมต่อกับคลัสเตอร์เซิร์ฟเวอร์แบบโฮสต์ เปรียบเทียบ LLM แบบท้องถิ่นและแบบโฮสต์

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

  1. โมเดลแบบเปิดน้ำหนักแบบท้องถิ่นไม่มีค่าใช้จ่ายต่อโทเคนแต่ต้องการหน่วยความจำ เวลาติดตั้ง และการบำรุงรักษา
  2. API แบบโฮสต์เข้ากันได้กับ OpenAI: ติดตั้งแพ็คเกจ openai ตั้งค่า base URL ใช้โมเดล ID uncensored
  3. การสตรีมมิง การเรียกใช้เครื่องมือ และโหมด JSON ทำงานทั้งหมดผ่านการเรียก chat completions ปกติ
  4. คีย์ทดลองให้เครดิต $0.50 เป็นเวลา 7 วัน พร้อมคำขอพร้อมกัน 2 คำขอและ 60 คำขอต่อนาที

สองวิธีในการใส่ LLM ฟรีลงในสคริปต์ Python

เมื่อผู้คนค้นหา llms ฟรีสำหรับ python พวกเขาหมายถึงสิ่งใดสิ่งหนึ่งจากสองสิ่ง ประการแรกคือโมเดลแบบเปิดน้ำหนักที่คุณดาวน์โหลดและรันเอง โดยใช้เครื่องมือเช่น Ollama llama.cpp หรือไลบรารี Hugging Face transformers ประการที่สองคือเอนด์พอยต์แบบโฮสต์ที่มีค่าใช้จ่ายต่ำมาก หรือมีเครดิตทดลองใช้เพียงพอจนรู้สึกเหมือนฟรีสำหรับโปรโตไทป์ ทั้งสองอย่างถูกต้องและเหมาะสำหรับงานที่แตกต่างกัน

การรันแบบท้องถิ่นหมายถึงไม่มีบิลต่อโทเคนและไม่มีข้อมูลออกจากระบบของคุณ นอกจากนี้ยังหมายถึงคุณต้องมี RAM หรือหน่วยความจำ GPU เพียงพอสำหรับโมเดลที่คุณเลือก คุณต้องรอดาวน์โหลด และโมเดลขนาดเล็กที่พอดีกับแล็ปท็อปให้คำตอบที่แย่กว่าโมเดลขนาดใหญ่ API แบบโฮสต์ตัดปัญหาฮาร์ดแวร์ออก แต่คุณต้องจ่ายต่อโทเคนเมื่อเครดิตทดลองใช้หมด หน้าหน้านี้ครอบคลุมทั้งสองอย่างอย่างตรงไปตรงมา จากนั้นแสดงโค้ด Python สำหรับตัวเลือกโฮสต์บนเว็บไซต์นี้ ซึ่งเข้ากันได้กับ OpenAI และทำงานกับแพ็คเกจ openai มาตรฐาน

โมเดลท้องถิ่นและ API แบบโฮสต์เปรียบเทียบเคียงข้างกัน

คำถามรันด้วยตัวเองAPI แบบเติมเงินล่วงหน้าแบบโฮสต์
ต้นทุนต่อโทเคนไม่มี แต่คุณจ่ายค่าฮาร์ดแวร์และไฟฟ้า$0.15 ต่อ 1M input, $0.50 ต่อ 1M output
เวลาตั้งค่าติดตั้ง runtime ดาวน์โหลดน้ำหนักโมเดล และปรับการตั้งค่าติดตั้งแพ็กเกจเดียว วางคีย์
ความยาวของบริบทจำกัดโดยหน่วยความจำของคุณ100,000 โทเคน, พรอมต์รวมกับผลลัพธ์
คำขอพร้อมกันตามความสามารถของเครื่องของคุณ8 คำขอพร้อมกันบนคีย์เต็ม 2 คำขอบนคีย์ทดลอง
การปฏิเสธขึ้นอยู่กับน้ำหนักโมเดลที่คุณเลือกปรับแต่งให้ตอบโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย
การใช้งานแบบออฟไลน์ใช่ไม่

หากคุณมี GPU ที่เพียงพอและงานของคุณเป็นแบบส่วนตัวหรือออฟไลน์ การใช้งานแบบโลคัลเป็นคำตอบที่ดีและคุณสามารถหยุดอ่านได้ที่นี่ หากคุณต้องการโมเดลที่ใหญ่กว่าโดยไม่ต้องเป็นเจ้าของเครื่อง หรือต้องการให้สคริปต์ของคุณทำงานเหมือนกันบนแล็ปท็อป เซิร์ฟเวอร์ และตัวรัน CI เส้นทางแบบโฮสต์จะง่ายกว่า โครงการจำนวนมากใช้ทั้งสองแบบ: โมเดลโลคัลขนาดเล็กขณะพัฒนา และแบบโฮสต์เมื่อใช้งานจริง โดยสลับกันด้วยการเปลี่ยน base URL เพียงค่าเดียว

ตั้งค่าเอนด์พอยต์แบบโฮสต์ในห้านาที

คุณต้องการคีย์ก่อน เข้าสู่ระบบด้วย Google หรือด้วยอีเมลและรหัสผ่าน จากนั้นขอเครดิตทดลองใช้ $0.50 ด้วยคลิกเดียวบน หน้าคีย์ API เครดิตทดลองใช้มีอายุ 7 วัน คนละหนึ่งครั้ง และไม่ต้องการการชำระเงิน จากนั้นติดตั้ง SDK และเก็บคีย์ออกจากโค้ดต้นฉบับของคุณ

pip install openai
export NOTRACK_API_KEY="sk-your-key-here"

ไคลเอนต์ต้องเปลี่ยนแปลงสองอย่างจากการตั้งค่า OpenAI มาตรฐาน: Base URL และคีย์ โมเดล ID คือ uncensored และมีโมเดลเดียวที่เสนอ

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.nsfwvideogenerator.cc/v1",
    api_key=os.environ["NOTRACK_API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise writing assistant."},
        {"role": "user", "content": "Give me three title ideas for a noir short story."},
    ],
    temperature=0.8,
)

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

การตรวจสอบสิทธิ์คือส่วนหัว Authorization: Bearer มาตรฐาน ซึ่ง SDK เพิ่มให้คุณ มีสองวิธี: POST /v1/chat/completions และ GET /v1/models คุณสามารถยืนยันการเชื่อมต่อด้วย client.models.list() ซึ่งส่งกลับโมเดล ID ที่พร้อมใช้งาน รายการพารามิเตอร์เต็มมีอยู่ใน หน้าเอกสาร

การตอบกลับแบบสตรีมมิง

สำหรับสิ่งใดๆ ที่บุคคลดู ให้สตรีม ตั้งค่า stream=True และวนซ้ำผ่านชิ้นส่วนเมื่อเหตุการณ์ที่ส่งโดยเซิร์ฟเวอร์มาถึง การใช้งานจะรายงานที่ท้ายสตรีม ดังนั้นคุณยังสามารถบันทึกจำนวนโทเคนได้

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a four-line poem about rain on a tin roof."}],
    stream=True,
)

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

รายละเอียดหนึ่งอย่างที่ทำให้คนตกหลุมพราง: คำขอสตรีมจะยึดช่อง concurrent ของมันจนกว่าสตรีมจะเสร็จสิ้น บนคีย์ทดลองที่มี 2 ช่อง สองสตรีมเปิดหมายความว่าคำเรียกที่สามจะได้รับ 429 พร้อมรหัส concurrency เสมอ ควรบริโภคหรือปิดสตรีม

การเรียกใช้ฟังก์ชันและโหมด JSON

เอนด์พอยต์รองรับ tools, tool_choice, สตรีมมิง tool_calls และผลลัพธ์ที่ส่งกลับเป็น role: "tool" นี่คือรอบการทำงานเต็มรูปแบบพร้อมฟังก์ชันหนึ่งตัว

import json

tools = [{
    "type": "function",
    "function": {
        "name": "word_count",
        "description": "Count the words in a piece of text.",
        "parameters": {
            "type": "object",
            "properties": {"text": {"type": "string"}},
            "required": ["text"],
        },
    },
}]

messages = [{"role": "user", "content": "How many words are in: the quick brown fox jumps"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message

if msg.tool_calls:
    messages.append(msg)
    for call in msg.tool_calls:
        args = json.loads(call.function.arguments)
        result = len(args["text"].split())
        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)

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

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply with a JSON object with keys title and tags (list of strings)."},
        {"role": "user", "content": "Describe a lighthouse keeper's diary."},
    ],
    response_format={"type": "json_object"},
    temperature=0.2,
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

ระบุ JSON และชื่อคีย์ในพรอมต์ของคุณ และตั้งค่า temperature ให้ต่ำ ห่อหุ้ม json.loads ด้วยบล็อก try สำหรับโค้ดการผลิต

ขีดจำกัดอัตรา ข้อผิดพลาด และการเรียกซ้ำ

คีย์เต็มอนุญาตคำขอพร้อมกัน 8 รายการและ 300 รายการต่อนาที คีย์ทดลองอนุญาต 2 และ 60 รายการ เกินแล้วได้ HTTP 429 พร้อมโค้ด rate_limited (เกินต่อนาที) หรือ concurrency (เกินพร้อมกัน) เมื่อโหลดเกินชั่วคราว API จะคืน 429 พร้อมหัว Retry-After: 5 SDK จะลองใหม่เองสำหรับข้อผิดพลาดบางรายการ; สำหรับสคริปต์ที่กระจายงาน การห่อหุ้มแบบชัดแจ้งเล็กน้อยจะชัดเจนกว่า

import time
from concurrent.futures import ThreadPoolExecutor
from openai import RateLimitError

def ask(prompt, tries=4):
    for attempt in range(tries):
        try:
            r = client.chat.completions.create(
                model="uncensored",
                messages=[{"role": "user", "content": prompt}],
                max_tokens=300,
            )
            return r.choices[0].message.content
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited")

prompts = [f"Summarize idea number {i} in one sentence." for i in range(20)]
with ThreadPoolExecutor(max_workers=2) as pool:   # 8 on a full key
    results = list(pool.map(ask, prompts))

การจับคู่ max_workers กับขีดจำกัด concurrent ของคีย์ของคุณป้องกัน 429 ส่วนใหญ่ก่อนที่มันจะเกิดขึ้น การตอบกลับแต่ละรายการยังส่ง X-Request-Id, X-Balance-USD และส่วนหัวขีดจำกัดอัตราสองส่วน ซึ่งคุณสามารถอ่านผ่าน client.chat.completions.with_raw_response.create(...) เมื่อคุณต้องการสำหรับดีบักหรือการสนับสนุน

วิธีการเลือกระหว่างแบบโลคัลและแบบโฮสต์

ข้ามอุดมการณ์และตอบคำถามสี่ข้อเกี่ยวกับโปรเจกต์ของคุณ

  1. ข้อมูลต้องอยู่บนเครื่องของคุณหรือไม่? หากสัญญาหรือนิสัยบอกว่าใช่ ให้รันแบบโลคัล พรอมต์แบบโฮสต์ไม่ได้ใช้สำหรับการฝึกที่นี่ แต่พวกมันเดินทางผ่านเครือข่าย
  2. คุณมีหน่วยความจำเท่าไหร่? ขนาดโมเดลขับเคลื่อนคุณภาพ แล็ปท็อปที่ไม่มี GPU เฉพาะจำกัดคุณไว้ที่โมเดลขนาดเล็ก และคำตอบจะแสดงข้อจำกัดนั้น โมเดลแบบโฮสต์ให้คุณใช้โมเดลขนาดใหญ่ที่มีหน้าต่างบริบท 100,000 โทเคน ซึ่งยากที่จะจับคู่ที่บ้าน
  3. คุณจะส่งคำขอจำนวนเท่าไหร่? คำขอไม่กี่ร้อยต่อสัปดาห์เป็นเรื่องเล็กน้อยทั้งสองด้าน คำขอหลายแสนต่อเดือนเปลี่ยนบิลแบบโฮสต์ให้เป็นตัวเลขที่แท้จริง และเครื่องท้องถิ่นจะเริ่มดูน่าสนใจหากมันว่างเปล่าในกรณีอื่น คำนวณผลรวม: คำขอ 100,000 คำขอที่มี 1,000 โทเคนอินพุตและ 500 โทเคนเอาต์พุตมีค่าใช้จ่าย 100,000 x $0.0004 = $40
  4. คุณต้องการจัดการการปฏิเสธแบบเฉพาะเจาะจงหรือไม่? โมเดลแบบเปิดน้ำหนักจำนวนมากมาพร้อมกับการปฏิเสธในตัว และอื่นๆ ถูกปรับให้ลบมันออก โมเดลแบบโฮสต์ที่นี่ถูกปรับให้ตอบโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย ดังนั้นคุณไม่ต้องค้นหาน้ำหนักที่เหมาะสม

หากคำตอบของคุณชี้ไปในทั้งสองทิศทาง ให้เริ่มใช้โฮสต์ก่อนในสัปดาห์แรก การทดลองใช้ไม่มีค่าใช้จ่าย และคุณจะเรียนรู้ว่าพรอมต์ของคุณต้องการอะไรก่อนที่จะซื้อฮาร์ดแวร์หรือดาวน์โหลดไฟล์ขนาดใหญ่หลายกิกะไบต์

ข้อผิดพลาดทั่วไปในสคริปต์ Python

ปัญหาส่วนใหญ่ที่ผู้คนพบเจอเป็นปัญหาเล็กน้อยและแก้ไขได้

  • URL ฐานผิด ต้องลงท้ายด้วย /v1 การขาดคำต่อท้ายให้ 404 ไม่ใช่ข้อความที่มีประโยชน์ พิมพ์ client.base_url หากไม่แน่ใจ
  • คีย์ในโค้ด อ่านจากตัวแปรสภาพแวดล้อม ตามที่กล่าวมา และเพิ่มไฟล์ .env ของคุณไปยัง .gitignore
  • ชื่อโมเดลผิด ID โมเดลมีเพียง uncensored เท่านั้น ชื่อจากผู้ให้บริการอื่นจะใช้ไม่ได้ จึงต้องเปลี่ยนเมื่อพอร์ตโค้ด
  • ลูปไม่จำกัด ลูปการเรียกใช้เครื่องมือที่ไม่มีวันจบเป็นข้อผิดพลาดที่แพงมาก ควรจำกัดไว้ที่ เช่น ห้ารอบ
  • เพิกเฉยต่องบประมาณหน้าต่างบริบท พรอมต์และการตอบกลับแบ่งปัน 100,000 โทเคน หากเพิ่มทุกการสนทนาตลอดไป คุณจะถึงขีดจำกัดในที่สุด ตัดหรือสรุปข้อความเก่า
  • สมมติว่า JSON ถูกต้องเสมอ แม้ในโหมด JSON ให้ตรวจสอบคีย์ที่คุณต้องการก่อนใช้งาน

เมื่อมีบางอย่างดูผิดที่ฝั่งเซิร์ฟเวอร์ ให้อ้างค่า X-Request-Id จากการตอบกลับเมื่อคุณเขียนถึง support มันช่วยให้ทีมสนับสนุนพบคำเรียกที่แน่นอนของคุณ

ค่าใช้จ่ายสำหรับตัวเลือกโฮสต์สำหรับงาน Python

การเรียกสคริปต์ทั่วไปที่มี 1,000 โทเคนอินพุตและ 500 โทเคนเอาต์พุตมีค่าใช้จ่าย $0.00015 บวก $0.00025 รวมเป็น $0.0004 เครดิตทดลอง $0.50 ครอบคลุมการเรียกได้ประมาณ 1,250 ครั้ง การเติมเงินขั้นต่ำ $20 ครอบคลุม 50,000 ครั้ง เครดิตไม่หมดอายุ คำขอที่ล้มเหลวหรือถูกปฏิเสธจะไม่ถูกเรียกเก็บเงิน และพรอมต์ไม่ถูกนำไปใช้ฝึกโมเดล เติมเงินได้สูงสุด $500 พร้อมโบนัสเมื่อเติมตั้งแต่ $50 และชำระเงินด้วยคริปโต USDT บน TRC20 หรือ USDC บน Base ดูรายละเอียดที่หน้า ราคา

นี่คือข้อความเท่านั้น: ไม่มีรูปภาพ เสียง วิดีโอ การฝังตัว หรือการปรับแต่งอย่างละเอียด และกฎข้อเดียวที่เข้มงวดคือไม่มีเนื้อหาทางเพศที่เกี่ยวข้องกับผู้เยาว์ สำหรับโปรเจกต์ Python ที่ต้องการการสร้างข้อความพร้อมการปฏิเสธน้อยลง นี่คือขอบเขตทั้งหมด

ถาม-ตอบ

ฉันต้องใช้แพ็กเกจ Python อะไร?

แพ็กเกจ openai ทางการ ตั้งค่า base_url เป็น https://api.nsfwvideogenerator.cc/v1, ส่งคีย์ของคุณเป็น api_key และใช้โมเดล ID uncensored

ฉันสามารถใช้ LangChain หรือเฟรมเวิร์กอื่นได้หรือไม่?

ไคลเอนต์ใดๆ ที่อนุญาตให้คุณตั้งค่า base_url และคีย์ที่เข้ากันได้กับ OpenAI ควรใช้งานได้ เนื่องจาก API ปฏิบัติตามรูปแบบการเสร็จสิ้นการสนทนา ชี้ไปที่ base_url และใช้ uncensored เป็นชื่อโมเดล

โมเดลโลคอลฟรีดีเท่าแบบโฮสต์หรือไม่?

ขึ้นอยู่กับโมเดลและฮาร์ดแวร์ของคุณ โมเดลที่รันบนแล็ปท็อปได้มักจะมีขนาดเล็กและประสิทธิภาพต่ำกว่าโมเดลขนาดใหญ่แบบโฮสต์ แต่ไม่มีค่าใช้จ่ายต่อโทเคนและทำงานแบบออฟไลน์ได้

ฉันจะหลีกเลี่ยงข้อผิดพลาด 429 ใน Python ได้อย่างไร?

รักษาจำนวนเธรดของ worker ให้ไม่เกินขีดจำกัดความพร้อมกัน (2 สำหรับคีย์ทดลองใช้, 8 สำหรับคีย์เต็ม) และทำซ้ำหลังจากพักสั้นๆ เมื่อได้รับสถานะ rate_limited, concurrency หรือ Retry-After: 5

คีย์ของคุณอยู่ห่างแค่แบบฟอร์มเดียว

สร้างบัญชี คัดลอกคีย์ และเปลี่ยน base URL นั่นคือการตั้งค่าทั้งหมด