LLM ทำอะไรในไพป์ไลน์วิดีโอ
หากคุณกำลังสร้างเวิร์กโฟลว์ API LLM สำหรับสคริปต์วิดีโอ NSFW สิ่งแรกที่ต้องตกลงคือส่วนแบ่งงาน โมเดลภาษาเขียน โมเดลวิดีโอแยกต่างหาก หรือผู้ตัดต่อ หรือการถ่ายทำ สร้างภาพเคลื่อนไหว บริการนี้เสนอเพียงส่วนแรก: โมเดลข้อความแบบเปิดน้ำหนักหนึ่งตัว ปรับแต่งให้ตอบโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ตามกฎหมาย ผ่านเอนด์พอยต์ที่เข้ากันได้กับ OpenAI มันจะไม่เรนเดอร์เฟรม สร้างเสียง หรือสร้างภาพ และไม่ได้เสนอ embeddings หรือ fine-tuning
สิ่งนี้ครอบคลุมงานจำนวนมากสำหรับโปรเจกต์ที่จัดทำสำหรับกลุ่มผู้ชมผู้ใหญ่ เช่น นิยาย, การสวมบทบาท และการเล่าเรื่องสไตล์เพื่อนคู่ใจ โมเดลสามารถร่างบท treatment แยกเป็นฉาก เขียนบทสนทนาและคำบรรยาย สร้างรายการ shot-by-shot และเขียนพรอมต์สำหรับเครื่องมือวิดีโอที่คุณใช้ต่อในสายการผลิต หน้า NSFW pipelines อธิบายว่าขั้นตอนข้อความนี้เชื่อมต่อกับส่วนอื่นของสแต็กอย่างไร
กฎหนึ่งข้อที่ตายตัวและใช้กับทุกคำขอ: ไม่มีเนื้อหาทางเพศที่เกี่ยวข้องกับ ผู้เยาว์ สร้างระบบพรอมต์ของคุณเพื่อให้ตัวละครทุกตัวเป็นผู้ใหญ่ และถือเป็นข้อกำหนดของโปรเจกต์ ไม่ใช่เรื่องรอง
สายงานสี่ขั้นตอน
เวิร์กโฟลว์สคริปต์ทำงานได้ดีที่สุดเมื่อแต่ละคำขอทำหน้าที่เดียวและส่งผลลัพธ์ที่มีโครงสร้างไปยังขั้นตอนถัดไป การจัดวางที่เป็นไปได้มีดังนี้:
- หนังสืออ้างอิงเรื่อง เอกสารหนึ่งฉบับที่มีตัวละคร (ผู้ใหญ่ทั้งหมด), ฉาก, น้ำเสียง และรายละเอียดที่ปรากฏซ้ำ คุณเขียนครั้งเดียวแล้วส่งพร้อมกับทุกคำขอ
- Outline. คำขอหนึ่งรายการเปลี่ยนแนวคิดเป็นบทสรุปจังหวะ 8 ถึง 15 จุด
- บทละครฉาก คำขอหนึ่งคำต่อจังหวะการผลิตบทสนทนา บรรทัดการกระทำ และคำบรรยาย โดยใช้หนังสืออ้างอิงและฉากก่อนหน้าเพื่อรักษาความต่อเนื่อง
- รายการ shot และพรอมต์ คำขอสุดท้ายต่อฉากจะส่งคืน JSON: shots, ความยาว, หมายเหตุกล้อง และสตริงพรอมต์สำหรับเครื่องมือวิดีโอของคุณ
การแบ่งส่วนนี้ทำให้ผลลัพธ์มีขนาดสั้น ซึ่งทำให้แต่ละผลลัพธ์ตรวจสอบได้ง่ายขึ้นและมีค่าใช้จ่ายถูกกว่าหากคุณไม่ชอบ นอกจากนี้ยังหมายความว่าคำขอที่ล้มเหลวมีค่าใช้จ่ายเพียงหนึ่งฉาก ไม่ใช่สคริปต์ทั้งหมด
ระบบพรอมต์ที่กำหนดกฎ
พรอมต์ระบบคือที่ที่น้ำเสียง รูปแบบ และขีดจำกัดอยู่ โมเดลที่ไม่มีพฤติกรรมปฏิเสธยังคงปฏิบัติตามคำสั่ง ดังนั้นคุณภาพของพรอมต์ของคุณจะเป็นตัวกำหนดคุณภาพของสคริปต์ ระบุให้ชัดเจนเกี่ยวกับแนวเรื่อง มุมมอง และสิ่งที่ควรตัดออก นี่คือจุดเริ่มต้นสำหรับเรื่องแต่งที่มุ่งหมายให้ผู้ชมผู้ใหญ่ ซึ่งเขียนให้คงอยู่ในขอบเขตระดับมืออาชีพ:
SYSTEM = '''You are a screenwriter for adult-audience fiction videos.
All characters are adults aged 25 or older, and you state each age in the character sheet.
Write in present tense, third person, with short visual action lines.
Keep dialogue natural and under 25 words per line.
Build tension and character through setting, glances and subtext.
Never include ผู้เยาว์ in any role or reference.
Follow the story bible exactly; do not change names, ages or relationships.
When asked for JSON, return only the JSON object.'''
ปรับตามโปรเจกต์ เรื่องลึกลับแนวโนอาร์และโรแมนติกคอมเมดี้ต้องการคำแนะนำที่แตกต่างกัน และตัวอย่างสไตล์หนึ่งบรรทัดภายในพรอมต์มักช่วยนำทางโมเดลได้ดีกว่าย่อหน้าของคำคุณศัพท์
การสร้างรายการฉากในโหมด JSON
สำหรับขั้นตอนรายการ shot คุณต้องการเอาต์พุตที่โค้ดสามารถอ่านได้ โหมด JSON บังคับให้ใช้วัตถุที่อ่านค่าได้ ส่ง response_format={"type": "json_object"} ตั้งชื่อคีย์ในพรอมต์ และตั้งค่า temperature ให้ต่ำ ตัวอย่างนี้ใช้แพ็กเกจ Python openai พร้อม Base URL ของเว็บไซต์นี้และ ID โมเดล uncensored
import json, os
from openai import OpenAI
client = OpenAI(
base_url="https://api.nsfwvideogenerator.cc/v1",
api_key=os.environ["NOTRACK_API_KEY"],
)
SYSTEM = open("system_prompt.txt").read()
BIBLE = open("story_bible.txt").read()
def shot_list(scene_text):
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": (
"Story bible:\n" + BIBLE +
"\n\nScene script:\n" + scene_text +
"\n\nReturn a JSON object with key 'shots': a list of objects with "
"'number', 'seconds', 'camera', 'action' and 'video_prompt'."
)},
],
response_format={"type": "json_object"},
temperature=0.3,
seed=7,
)
data = json.loads(resp.choices[0].message.content)
return data["shots"]
for shot in shot_list(open("scene_03.txt").read()):
print(shot["number"], shot["seconds"], shot["video_prompt"])
ตรวจสอบผลลัพธ์ก่อนส่งต่อ ตรวจสอบว่า shots มีอยู่, ว่า seconds เป็นตัวเลข และว่าสตริงพรอมต์ไม่ว่าง หากการแยกวิเคราะห์ล้มเหลว ให้ลองใหม่หนึ่งครั้ง คำขอที่ล้มเหลวหรือถูกปฏิเสธจะไม่ถูกเรียกเก็บเงิน ดังนั้นการลองใหม่จึงไม่มีค่าใช้จ่ายเพิ่มเติมสำหรับคำขอที่ผิดพลาด
การตั้งค่าที่สำคัญสำหรับข้อความเชิงสร้างสรรค์
ขั้นตอนต่างๆ ต้องการการตั้งค่าที่แตกต่างกัน และ API ส่งค่ามาตรฐานผ่าน: temperature, top_p, stop, seed และค่าปรับความถี่และการปรากฏ
- Outlines and dialogue: temperature 0.8 ถึง 1.0 เพื่อความหลากหลาย สร้างสองหรือสามรูปแบบแล้วเลือกหนึ่งรายการ
- Shot lists: temperature 0.2 ถึง 0.3 พร้อม
seedคงที่ เพื่อให้การรันซ้ำของอินพุตเดียวกันสามารถเปรียบเทียบกันได้ - การทำซ้ำ: ฉากที่ยาวบางครั้งอาจวนลูปในประโยคเดียวกัน ค่าปรับความถี่เล็กน้อย เช่น 0.3 ช่วยได้
- การควบคุมความยาว:
max_tokensเป็นค่าที่ไม่บังคับ แต่การกำหนดค่าสูงสุดที่ 800 สำหรับหนึ่งฉากช่วยให้ผลลัพธ์กระชับ ลำดับstopเช่น"END SCENE"ช่วยให้คุณหยุดที่เครื่องหมายที่คุณขอให้โมเดลเขียน - สตรีมมิง เปิด
stream: trueหากนักเขียนต้องการดูเอาต์พุตแบบเรียลไทม์ โปรดจำไว้ว่าสตรีมจะครอบครองช่อง concurrent จนกว่าจะสิ้นสุด
quickstart ระบุพารามิเตอร์ที่รองรับทั้งหมด และเอนด์พอยต์คือ POST /v1/chat/completions และ GET /v1/models
การใช้หน้าต่างบริบท 100k สำหรับความต่อเนื่อง
ความต่อเนื่องคือจุดล้มเหลวที่พบบ่อยในสคริปต์ที่สร้าง: ชื่อเปลี่ยนไป อายุคลาดเคลื่อน หรืออุปกรณ์ประกอบฉากหายไป หน้าต่างบริบทมีขนาด 100,000 โทเคน (รวมพรอมต์และการสร้าง) ซึ่งมากพอที่จะใส่หนังสืออ้างอิงเรื่องทั้งหมด บทสรุป และฉากที่เสร็จแล้วหลายฉากลงในคำขอแต่ละครั้ง คุณไม่จำเป็นต้องใช้ระบบการดึงข้อมูลสำหรับโปรเจกต์ในระดับนี้ เพียงวางข้อเท็จจริงเข้าไปและให้โมเดลอ่านข้อมูลเหล่านั้นทุกครั้ง
บริบทไม่ได้ฟรี แต่มีราคาถูก สมมติว่าไบเบิลและโครงเรื่องของคุณมีโทเคนรวม 20,000 โทเคน และคุณเขียน 50 ฉาก โดยแต่ละคำขอส่งคืนโทเคนประมาณ 600 โทเคน:
- อินพุต: 50 x 20,000 = 1,000,000 โทเคน x $0.15 ต่อ 1M = $0.15
- เอาต์พุต: 50 x 600 = 30,000 โทเคน x $0.50 ต่อ 1M = $0.015
- รวม: $0.165 สำหรับ 50 ฉากทั้งหมด
เพิ่มขั้นตอนการตรวจสอบ shot-list สำหรับฉาก 50 ฉากเดียวกัน โดยรับเข้า 3,000 โทเคนและส่งออก 500 โทเคนต่อฉาก: อินพุต 150,000 โทเคนมีค่าใช้จ่าย $0.0225 และเอาต์พุต 25,000 โทเคนมีค่าใช้จ่าย $0.0125 รวมเป็นค่าใช้จ่ายเพิ่มเติม $0.035 สคริปต์และรายการ shot ทั้งหมดมีค่าใช้จ่ายประมาณ $0.20 ซึ่งน้อยกว่าเครดิตทดลองใช้ $0.50 ที่คุณสามารถอ้างสิทธิ์ได้จาก API key page
โปรดทราบว่าหน้าต่างบริบทต้องรองรับทั้งพรอมต์และคำตอบ ไบเบิลขนาด 20,000 โทเคนจึงเหลือพื้นที่เพียงพอ แต่พรอมต์ขนาด 95,000 โทเคนจะเหลือพื้นที่น้อยสำหรับการสร้างข้อความ
การตรวจสอบและแก้ไขเอาต์พุต
ให้พิจารณาฉากที่สร้างทุกฉากเป็นร่างแรก การตรวจสอบสามขั้นตอนจะจับปัญหาส่วนใหญ่ก่อนที่มันจะไปถึงเครื่องมือวิดีโอ ขั้นแรก รันขั้นตอนความสอดคล้อง: ส่งสคริปต์ที่เสร็จแล้วกลับพร้อมหนังสืออ้างอิงเรื่องและขอให้โมเดลระบุทุกจุดที่ชื่อ อายุ สถานที่ หรือไทม์ไลน์แตกต่างกัน คำขอครั้งที่สองด้วย temperature ต่ำมีราคาถูกและมักพบความเบี่ยงเบนที่คุณมองข้าม ขั้นที่สอง อ่านบทสนทนาออกเสียง บรรทัดที่ดูดีบนหน้าจออาจทำได้ยากเมื่อพูด และนักแสดงเสียงพากย์หรือเครื่องมือ text-to-speech จะเผยให้เห็นทันที ขั้นที่สาม ตรวจสอบว่าความยาวของ shot รวมกันเป็นความยาวที่คุณวางแผนไว้ โมเดลคำนวณเลขไม่แม่นยำ ดังนั้นให้บวกฟิลด์ seconds ในโค้ดแทนที่จะไว้วางใจผลรวมที่โมเดลเขียน
เมื่อฉากหนึ่งพลาดเป้าหมาย ให้หลีกเลี่ยงการเขียนใหม่ทั้งระบบพรอมต์ เพิ่มคำแนะนำแก้ไขหนึ่งข้อในข้อความผู้ใช้ เช่น "บรรทัดการกระทำสั้นลง" หรือ "บทสนทนาเพิ่มขึ้น รายละเอียดลดลง" แล้วสร้างฉากนั้นใหม่เพียงฉากเดียว การรักษาหนังสืออ้างอิงและระบบพรอมต์ให้คงที่ในขณะที่คุณปรับเปลี่ยนคำแนะนำเพียงข้อเดียวในแต่ละครั้งทำให้ชัดเจนว่าการเปลี่ยนแปลงใดช่วยได้ พารามิเตอร์ seed มีประโยชน์ที่นี่ เพราะ seed คงที่พร้อมการแก้ไขพรอมต์เล็กน้อยจะแยกผลกระทบของการแก้ไขนั้น
ข้อจำกัด ความจริง และขั้นตอนถัดไป
ข้อจำกัดพื้นฐานไม่กี่ข้อก่อนที่คุณจะสร้าง โมเดลเป็นเพียงข้อความ ดังนั้นวิดีโอ รูปภาพ และแทร็กเสียงทั้งหมดต้องมาจากเครื่องมืออื่น เป็นโมเดลแบบเปิดน้ำหนักหนึ่งตัวที่ให้บริการโดยผู้ให้บริการอิสระ และไม่ใช่ API ทางการของผู้ขายรายใหญ่ คุณภาพเปลี่ยนแปลงตามพรอมต์ ดังนั้นจึงควรวางแผนการตรวจสอบโดยบุคคลสำหรับสคริปต์ทุกฉบับ; ให้ถือว่าเอาต์พุตเป็นเพียงร่าง
ในเรื่องของ throughput คีย์แบบเต็มอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอและ 300 คำขอต่อนาที ในขณะที่คีย์ทดลองอนุญาตให้ทำ 2 และ 60 หากคุณเขียนฉากแบบขนาน ให้ปรับขนาด worker pool ให้สอดคล้องกัน สถานะ 429 พร้อม rate_limited หรือ concurrency หมายถึงให้ลดความเร็วลง; คำตอบที่มีหัวข้อความ Retry-After: 5 หมายถึงบริการกำลังรับโหลดเกินชั่วคราว ดังนั้นให้รอห้าวินาทีแล้วลองอีกครั้ง พรอมต์ไม่ถูกใช้ในการฝึกฝน
เครดิตแบบชำระเงินเริ่มต้นที่การเติมเงิน $20 จำนวนเต็มใดๆ สูงสุด $500 พร้อมโบนัส +5% จาก $50, +10% จาก $100 และ +15% จาก $200 การชำระเงินเป็นคริปโตเท่านั้น USDT บน TRC20 หรือ USDC บน Base และเครดิตไม่หมดอายุ เงื่อนไขปัจจุบันอยู่ที่ หน้ากำหนดราคา สำหรับโปรเจกต์เช่นข้างต้น $20 ครอบคลุมสคริปต์เต็มหลายสิบเรื่อง
