LLM thực hiện gì trong quy trình video
Nếu bạn đang xây dựng quy trình llm api cho kịch bản video nsfw, việc đầu tiên cần xác định là sự phân chia công việc. Một mô hình ngôn ngữ viết. Một mô hình video riêng biệt, hoặc một biên tập viên, hoặc một đội quay phim, sẽ tạo ra cảnh quay. Dịch vụ này chỉ cung cấp phần đầu tiên: một mô hình văn bản trọng số mở, được tinh chỉnh để trả lời mà không từ chối nội dung cho mục đích người trưởng thành hợp pháp, thông qua một endpoint tương thích OpenAI. Nó sẽ không render một khung hình, tổng hợp giọng nói hoặc tạo hình ảnh, và nó không cung cấp embeddings hay fine-tuning.
Điều này vẫn bao gồm nhiều công việc xung quanh một dự án dành cho khán giả người lớn, chẳng hạn như fiction, roleplay và storytelling theo phong cách companion. Mô hình có thể soạn một bản treatment, chia nó thành các scene, viết dialogue và narration, tạo danh sách shot-by-shot, và phrase các prompt cho bất kỳ công cụ video nào bạn sử dụng ở downstream. Trang về NSFW pipelines mô tả cách giai đoạn văn bản này kết nối với phần còn lại của stack.
Một quy tắc cố định áp dụng cho mọi yêu cầu: không có nội dung tình dục liên quan đến người chưa thành niên. Hãy xây dựng system prompt sao cho mọi nhân vật đều là người lớn, và coi đó là yêu cầu của dự án, không phải suy nghĩ sau cùng.
Quy trình gồm bốn giai đoạn
Quy trình kịch bản hoạt động tốt nhất khi mỗi yêu cầu thực hiện một công việc và chuyển đầu ra có cấu trúc sang bước tiếp theo. Bố cục thực tế trông như thế này:
- Bộ truyện. Một tài liệu chứa nhân vật (tất cả đều là người lớn), bối cảnh, tông giọng và các chi tiết lặp lại. Bạn viết nó một lần và gửi cùng mọi yêu cầu.
- Outline. Một call chuyển đổi một premise thành 8 đến 15 beat summaries.
- Kịch bản phân cảnh. Một yêu cầu cho mỗi phân cảnh tạo ra lời thoại, hướng dẫn hành động và lời dẫn, sử dụng bible và phân cảnh trước đó để đảm bảo tính liên tục.
- Shot list và prompts. Một call cuối cùng cho mỗi scene trả về JSON: shots, durations, camera notes và một prompt string cho công cụ video của bạn.
Việc chia nhỏ theo cách này giữ cho đầu ra ngắn, giúp dễ xem lại và rẻ hơn để tạo lại nếu bạn không thích. Nó cũng có nghĩa là một yêu cầu thất bại chỉ tốn một cảnh, không phải toàn bộ kịch bản.
System prompt thiết lập các quy tắc
System prompt là nơi chứa tông giọng, định dạng và giới hạn. Một mô hình không có hành vi từ chối vẫn tuân theo hướng dẫn, vì vậy chất lượng prompt của bạn quyết định chất lượng kịch bản. Hãy cụ thể về thể loại, điểm nhìn và những gì cần loại bỏ. Đây là điểm bắt đầu cho fiction hướng đến khán giả người lớn, được viết để giữ ở mức chuyên nghiệp:
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 minors 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.'''
Điều chỉnh nó theo từng dự án. Một bí ẩn noir và một phim hài lãng mạn cần các hướng dẫn khác nhau, và một ví dụ phong cách một dòng trong prompt thường dẫn dắt mô hình tốt hơn một đoạn văn các tính từ.
Tạo danh sách cảnh ở chế độ JSON
Ở giai đoạn danh sách cảnh, bạn muốn đầu ra mà mã có thể đọc. Chế độ JSON buộc một đối tượng có thể phân tích cú pháp. Truyền response_format={"type": "json_object"}, đặt tên các khóa trong prompt và giữ temperature thấp. Ví dụ này sử dụng gói Python openai với base URL của trang web này và model 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"])
Kiểm tra kết quả trước khi chuyển tiếp. Hãy đảm bảo rằng shots tồn tại, rằng seconds là một số, và các chuỗi prompt không rỗng. Nếu quá trình phân tích cú pháp thất bại, hãy thử lại một lần. Các yêu cầu bị lỗi hoặc bị từ chối không bị tính phí, nên việc thử lại không tốn thêm chi phí cho một lệnh gọi bị lỗi.
Các cài đặt quan trọng cho văn bản sáng tạo
Các giai đoạn khác nhau cần các cài đặt khác nhau, và API truyền các tham số thông thường qua: temperature, top_p, stop, seed và các hình phạt về tần suất và sự hiện diện.
- Dàn ý và lời thoại: temperature từ 0.8 đến 1.0 để tạo sự đa dạng. Tạo hai hoặc ba biến thể và chọn một.
- Danh sách cảnh: temperature từ 0.2 đến 0.3, cùng với một
seedcố định để việc chạy lại cùng đầu vào có thể so sánh được. - Lặp lại: các phân cảnh dài đôi khi lặp lại cùng một cụm từ. Một hình phạt tần suất nhỏ, chẳng hạn như 0.3, sẽ giúp ích.
- Kiểm soát độ dài:
max_tokenslà tùy chọn, nhưng giới hạn 800 cho một phân cảnh giữ đầu ra chặt chẽ. Một chuỗistopnhư"END SCENE"cho phép bạn kết thúc tại một dấu hiệu mà bạn yêu cầu mô hình viết. - Truyền phát: bật
stream: truenếu một biên kịch xem đầu ra trực tiếp. Hãy nhớ rằng một luồng giữ vị trí độ đồng thời của nó cho đến khi kết thúc.
quickstart liệt kê mọi tham số được hỗ trợ, và các endpoint là POST /v1/chat/completions và GET /v1/models.
Sử dụng cửa sổ ngữ cảnh 100k cho tính liên tục
Continuity là lỗi thường gặp trong các kịch bản được generate: một tên thay đổi, một độ tuổi trôi dạt, một đạo cụ biến mất. Cửa sổ ngữ cảnh là 100.000 token, bao gồm prompt và completion, và điều đó đủ lớn để đưa toàn bộ story bible, outline và nhiều scene hoàn chỉnh vào mỗi call. Bạn không cần một hệ thống retrieval cho một dự án ở quy mô này. Paste các facts vào và để mô hình đọc chúng mỗi lần.
Ngữ cảnh không miễn phí, nhưng nó rẻ. Giả sử bộ truyện và dàn ý của bạn tổng cộng 20.000 token và bạn viết 50 cảnh, mỗi yêu cầu trả về khoảng 600 token:
- Đầu vào: 50 x 20.000 = 1.000.000 token x $0.15 cho 1 triệu = $0.15
- Đầu ra: 50 x 600 = 30.000 token x $0.50 cho 1 triệu = $0.015
- Tổng cộng: $0.165 cho tất cả 50 cảnh
Thêm một lần chạy danh sách cảnh trên cùng 50 phân cảnh với 3.000 token đầu vào và 500 token đầu ra mỗi lần: đầu vào 150.000 token tốn $0.0225 và đầu ra 25.000 token tốn $0.0125, thêm $0.035. Toàn bộ kịch bản và danh sách cảnh tốn khoảng $0.20, ít hơn tín dụng dùng thử $0.50 mà bạn có thể nhận từ trang khóa API.
Hãy nhớ rằng cửa sổ phải chứa cả prompt và câu trả lời. Một bộ truyện 20.000 token để lại nhiều khoảng trống, nhưng một prompt 95.000 token để lại ít khoảng trống cho phần completion.
Xem lại và sửa chữa đầu ra
Hãy coi mỗi scene được generate là bản nháp đầu tiên. Ba bước kiểm tra sẽ bắt được hầu hết các vấn đề trước khi chúng đến công cụ video. Đầu tiên, chạy một lượt consistency: gửi lại kịch bản hoàn chỉnh cùng với story bible và yêu cầu mô hình liệt kê bất kỳ nơi nào mà một tên, độ tuổi, địa điểm hoặc timeline khác biệt. Một call thứ hai với temperature thấp là rẻ và thường tìm thấy sự trôi dạt mà bạn đã bỏ qua bằng mắt. Thứ hai, đọc to dialogue. Các dòng trông ổn trên màn hình có thể vụng về khi được nói, và một diễn viên voice-over hoặc một công cụ text-to-speech sẽ phơi bày chúng ngay lập tức. Thứ ba, kiểm tra xem các durations của shot có cộng lại bằng độ dài bạn đã lên kế hoạch hay không. Các mô hình khá lỏng lẻo với arithmetic, vì vậy hãy cộng các trường seconds trong code thay vì tin vào một total mà mô hình đã viết.
Khi một phân cảnh không đạt yêu cầu, hãy kiềm chế việc viết lại toàn bộ hệ thống prompt. Thêm một hướng dẫn sửa lỗi vào tin nhắn người dùng, chẳng hạn như "các dòng hành động ngắn hơn" hoặc "nhiều lời thoại hơn, ít mô tả hơn", và tạo lại riêng phân cảnh đó. Giữ bible và hệ thống prompt cố định trong khi bạn thay đổi từng hướng dẫn một giúp bạn rõ ràng thay đổi nào đã giúp ích. Tham số seed rất hữu ích ở đây, vì một seed cố định với một chỉnh sửa prompt nhỏ sẽ cô lập hiệu chỉnh của sự chỉnh sửa đó.
Giới hạn, sự trung thực và các bước tiếp theo
Một vài ràng buộc rõ ràng trước khi bạn xây dựng. Mô hình chỉ xử lý văn bản, vì vậy mọi video, hình ảnh và track giọng nói đều phải đến từ các công cụ khác. Đó là một mô hình trọng số mở được chạy bởi một nhà cung cấp độc lập, và nó không phải là API chính thức của bất kỳ nhà cung cấp lớn nào. Chất lượng thay đổi theo prompt, vì vậy hãy lên kế hoạch cho một lượt xem lại bởi con người trên mọi kịch bản; hãy coi đầu ra là bản nháp.
Về thông lượng, khóa đầy đủ cho phép 8 yêu cầu đồng thời và 300 mỗi phút, trong khi khóa dùng thử cho phép 2 và 60. Nếu bạn viết các cảnh song song, hãy điều chỉnh kích thước nhóm worker của bạn cho phù hợp. Mã 429 với rate_limited hoặc concurrency có nghĩa là hãy chậm lại; một cái với tiêu đề Retry-After: 5 có nghĩa là dịch vụ đang bị quá tải tạm thời, vì vậy hãy đợi năm giây và thử lại. Các prompt không được sử dụng để huấn luyện.
Tín dụng trả trước bắt đầu với một khoản nạp tiền $20, bất kỳ số nguyên nào lên đến $500, với +5% từ $50, +10% từ $100 và +15% từ $200. Thanh toán chỉ bằng tiền mã hóa, USDT trên TRC20 hoặc USDC trên Base, và tín dụng không bao giờ hết hạn. Các điều khoản hiện tại có trên trang giá. Đối với một dự án như ở trên, $20 bao gồm hàng chục kịch bản đầy đủ.
