LLM สร้างพรอมต์ Stable Diffusion: การติดตั้ง Python
หากคุณต้องการเครื่องมือสร้างพรอมต์สำหรับโมเดล LLM ของ Stable Diffusion เพื่อขยายคำไม่กี่คำให้เป็นพรอมต์แบบเต็มที่มีโครงสร้างดี คุณต้องการเพียงโมเดลข้อความและโค้ด Python ประมาณ 30 บรรทัด โมเดลจะเขียนพรอมต์เป็นข้อความ; โมเดลไม่ได้สร้างรูปภาพ ดังนั้นคุณยังต้องนำผลลัพธ์ไปผ่าน SDXL หรือเครื่องมือสร้างภาพอื่นๆ ที่คุณใช้


ประเด็นสำคัญ
- LLM เขียนเฉพาะข้อความเท่านั้น ส่งเอาต์พุตของมันไปยังการตั้งค่า SDXL, ComfyUI หรือ Automatic1111 ของคุณเอง
- โหมด JSON ส่งคืนพรอมต์บวกและพรอมต์ลบที่คุณสามารถแยกวิเคราะห์ได้โดยไม่ต้องใช้ regex
- การขยายหนึ่งครั้งมีค่าใช้จ่ายต่ำกว่า $0.0001 ดังนั้นการทำ 1,000 พรอมต์มีค่าใช้จ่ายประมาณ $0.09
- เขียนพรอมต์ให้กระชับ: ตัวเข้ารหัสข้อความของ SDXL อ่านเฉพาะ 77 โทเคนแรกของแต่ละส่วนเท่านั้น
LLM ทำอะไรได้และทำอะไรไม่ได้
โมเดลภาพตอบสนองต่อพรอมต์ที่หนาแน่นและเฉพาะเจาะจง: วัตถุ, ฉาก, เลนส์, แสง, สื่อ, อารมณ์ และรายการสิ่งที่ควรหลีกเลี่ยง ส่วนใหญ่พิมพ์เพียงสามคำแล้วได้รับผลลัพธ์ที่แบนราบ LLM ช่วยปิดช่องว่างนี้โดยรับแนวคิดสั้นๆ ของคุณแล้วเขียนเป็นเวอร์ชันยาวในรูปแบบที่สอดคล้องกัน
ระบุขอบเขตความรับผิดชอบให้ชัดเจน บริการนี้คือ API ของ text-only ไม่ได้สร้างภาพ เสียง หรือวิดีโอ และไม่มีฟีเจอร์ embeddings หรือ fine-tuning มันทำหน้าที่อยู่หน้า pipeline สร้างภาพของคุณและเขียนคำแนะนำที่ pipeline นั้นอ่าน มันคือเอนด์พอยต์ที่เข้ากันได้กับ OpenAI ซึ่งให้บริการโมเดลแบบเปิดน้ำหนักหนึ่งตัวจากผู้ให้บริการอิสระ ไม่ใช่ผลิตภัณฑ์ของบริษัทผู้พัฒนาโมเดลภาพ
โมเดลได้รับการปรับแต่งให้ตอบโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย ซึ่งสำคัญสำหรับศิลปินและนักพัฒนาเกมที่มีหัวข้อ (เช่น สยองขวัญ ความรุนแรงในนิยาย ธีมสำหรับผู้ใหญ่) มักถูกบล็อกที่อื่น เนื้อหาทางเพศที่เกี่ยวข้องกับผู้เยาว์เป็นขีดจำกัดแข็งและจะไม่ถูกสร้าง
ขั้นตอนที่ 1: รับคีย์ API และทดสอบการเรียกใช้หนึ่งครั้ง
สมัครสมาชิกด้วย Google หรือด้วยอีเมลและรหัสผ่าน จากนั้นเปิด หน้าคีย์ API การทดลองใช้แบบคลิกเดียวเพิ่มเครดิต $0.50 ใช้ได้ 7 วัน และไม่จำเป็นต้องใช้บัตรเครดิต นั่นเพียงพอสำหรับการขยายพรอมต์หลายพันรายการ ตามที่แสดงในส่วนค่าใช้จ่าย
ตรวจสอบว่าทุกอย่างทำงานได้โดยใช้ curl:
curl https://api.sdxlapi.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You write Stable Diffusion prompts."},
{"role": "user", "content": "lighthouse in a storm"}
]
}'
SDK ของ OpenAI ใดๆ ก็ใช้งานได้เมื่อคุณเปลี่ยน base URL และคีย์ รายละเอียดอยู่ใน เอกสารประกอบ
ขั้นตอนที่ 2: ระบบพรอมต์ที่ให้ผลลัพธ์ที่เสถียร
ระบบพรอมต์คือที่มาของคุณภาพ บอกโมเดลถึงรูปแบบเป้าหมาย ลำดับขององค์ประกอบ ขีดจำกัดความยาว และสิ่งที่ควรละเว้น เวอร์ชันที่ทำงานได้ดีในฐานะจุดเริ่มต้น:
คุณเปลี่ยนไอเดียรูปภาพสั้นๆ ให้เป็นพรอมต์สำหรับ SDXL เขียนพรอมต์เชิงบวกหนึ่งอันที่มีความยาว 40 ถึง 60 คำ: เริ่มจากวัตถุหลัก จากนั้นตามด้วยการตั้งค่า องค์ประกอบ แสง สีหรือสไตล์ และอารมณ์ ใช้วลีที่คั่นด้วยเครื่องหมายจุลภาค ไม่ต้องใช้ประโยคเต็ม จากนั้นเขียนพรอมต์เชิงลบที่มีความยาวไม่เกิน 15 วลีสั้นๆ อย่าเพิ่มข้อความ ลายน้ำ หรือคำอธิบายภาพลงในรูปภาพ ส่งคืน JSON ที่มีคีย์ "prompt" และ "negative"
ขีดจำกัดจำนวนคำมีความสำคัญ ตัวเข้ารหัสข้อความ CLIP ของ SDXL อ่านพรอมต์เป็นชุดละ 77 โทเคน และสิ่งที่เกินกว่านั้นจะถูกตัดออกหรือจัดการโดยฟีเจอร์ chunking ใน UI ของคุณ การมุ่งเป้าไปที่ 40 ถึง 60 คำช่วยให้พรอมต์ส่วนใหญ่อยู่ในชุดเดียว โดยที่รายละเอียดสำคัญที่สุดจะอยู่ก่อน
ใช้ค่า temperature ต่ำถึงปานกลาง (0.7 ถึง 0.9) เพื่อให้สไตล์คงที่แต่การรันสองครั้งของแนวคิดเดียวกันจะแตกต่างกัน หากต้องการผลลัพธ์ที่เหมือนกันสำหรับการทดสอบ ให้ส่งค่า seed ที่ตายตัว
ขั้นตอนที่ 3: สคริปต์ Python
สคริปต์นี้อ่านแนวคิดจากรายการ ส่งคำขอเพื่อรับ JSON และพิมพ์คู่พรอมต์ มันใช้แพ็กเกจ Python ของ OpenAI อย่างเป็นทางการโดยเปลี่ยน base URL
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.sdxlapi.com/v1", api_key="YOUR_KEY")
SYSTEM = (
"You turn short image ideas into prompts for SDXL. Write one positive "
"prompt of 40 to 60 words: subject, setting, composition, lighting, "
"medium or style, mood, as comma-separated phrases. Then a negative "
"prompt of up to 15 short phrases. Return JSON with keys "
"'prompt' and 'negative'."
)
def expand(idea: str) -> dict:
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": idea},
],
response_format={"type": "json_object"},
temperature=0.8,
max_tokens=400,
)
return json.loads(resp.choices[0].message.content)
for idea in ["lighthouse in a storm", "abandoned greenhouse at dawn"]:
result = expand(idea)
print(idea, "->", result["prompt"])
print("negative:", result["negative"], "\n")
โหมด JSON (response_format พร้อม json_object) ทำให้การตอบกลับสามารถแยกวิเคราะห์ได้อย่างสะอาด ยังควรห่อ json.loads ไว้ในบล็อก try ในสภาพแวดล้อมการผลิต และลองใหม่หนึ่งครั้งหากเกิดข้อผิดพลาด เนื่องจากคำตอบที่ยาวถูกตัดที่ max_tokens อาจจบลงกลางวัตถุ
ขั้นตอนที่ 4: ส่งพรอมต์ไปยังเครื่องมือสร้างภาพของคุณ
ผลลัพธ์คือสตริงธรรมดา ดังนั้น front end ใดๆ ก็สามารถใช้มันได้ ด้วยการติดตั้ง Automatic1111 หรือ ComfyUI ในเครื่อง ให้ส่งค่าสองฟิลด์ไปยัง API ของมัน ด้วยสคริปต์ที่วนลูปผ่าน CSV ของแนวคิด ให้เขียนผลลัพธ์ไปยังไฟล์และจัดคิวเป็นชุด
- บันทึกแนวคิด พรอมต์ และพรอมต์เชิงลบไว้ด้วยกัน เพื่อให้คุณสามารถติดตามภาพที่ดีย้อนกลับไปยังคำแนะนำที่สร้างมันได้
- เพิ่มบรรทัดสไตล์จากรายการของคุณเอง ("ภาพถ่ายภาพยนตร์", "ภาพวาดหมึก") เป็นฟิลด์เพิ่มเติมในข้อความผู้ใช้เมื่อคุณต้องการชุดที่มีลักษณะตรงกัน
- เก็บไลบรารีของพรอมต์ที่ใช้งานได้ดีไว้สั้นๆ แล้วป้อนสองหรือสามอันเข้าไปในระบบพรอมต์เป็นตัวอย่าง ตัวอย่าง few-shot ช่วยควบคุมสไตล์ได้เชื่อถือได้มากกว่าการใช้คำคุณศัพท์
สำหรับโปรเจกต์บทบาทสมมติหรือเกม รูปแบบเดียวกันนี้สามารถแสดงฉากจากเรื่องราวได้ โดย LLM จะเปลี่ยนย่อหน้าสุดท้ายๆ ให้เป็นการบรรยายภาพ บทความเกี่ยวกับ สถานการณ์บทบาทสมมติแบบใช้ข้อความ ครอบคลุมด้านเรื่องราว
ปัญหาที่พบบ่อยและการแก้ไข
ปัญหาบางประการเกิดขึ้นในโปรเจกต์สร้างพรอมต์เกือบทุกโปรเจกต์
โมเดลเพิ่มคำอธิบายประกอบ
การตอบกลับที่ขึ้นต้นด้วย "นี่คือพรอมต์ของคุณ" ทำลายระบบอัตโนมัติ โหมด JSON ช่วยขจัดปัญหาส่วนใหญ่ได้ หากคุณทำงานด้วยข้อความธรรมดา ให้ระบุ "เอาเฉพาะพรอมต์ ไม่ต้องมีคำนำ" และเพิ่มลำดับหยุดสำหรับบรรทัดที่คุณไม่อยากเห็น
พรอมต์ทุกอันดูเหมือนกัน
อุณหภูมิต่ำและเทมเพลตที่เข้มงวดให้ผลลัพธ์ที่เหมือนกัน ปรับอุณหภูมิสูงขึ้นเป็น 1.0 เปลี่ยนแปลงบรรทัดสไตล์ที่คุณส่งเข้าไป หรือขอสามทางเลือกแล้วเลือกอันที่ต้องการ ค่าปรับ (frequency_penalty, presence_penalty) จะส่งผ่านไปได้และสามารถทำลายวลีที่ซ้ำกัน
พรอมต์ยาวเกินไปสำหรับโมเดลภาพ
กำหนดขีดจำกัดจำนวนคำที่เข้มงวดในระบบพรอมต์และตรวจสอบความยาวในโค้ด การตัดด้วยมือจะทิ้งรายละเอียดสุดท้ายซึ่งมักจะไม่สำคัญที่สุด แต่การให้โมเดลเขียนให้สั้นลงตั้งแต่แรกดีกว่า
คุณเจอ 429
คุณส่งคำขอมากเกินไปต่อนาทีหรือพร้อมกัน ลดการส่งลงสักสองสามวินาทีแล้วลองใหม่; การตอบกลับอาจมี Retry-After: 5 ชุดงานที่มีพูลเธรดขนาดเล็กที่มี worker 4 ถึง 8 ตัวจะอยู่ในขีดจำกัดของคีย์เต็มจำนวน
ค่าใช้จ่ายของพรอมต์ 1,000 อัน
ราคาอยู่ที่ $0.15 ต่อ 1M โทเคนอินพุต และ $0.50 ต่อ 1M โทเคนเอาต์พุต การขยายแบบทั่วไปจะส่งระบบพรอมต์ที่มีความยาวประมาณ 150 โทเคนรวมกับไอเดียขนาด 15 โทเคน รวมเป็น 170 โทเคนอินพุต และได้รับ JSON ขนาดประมาณ 120 โทเคน
- อินพุต: 170 × $0.15 / 1M = $0.0000255
- เอาต์พุต: 120 × $0.50 / 1M = $0.00006
- ต่อพรอมต์: ประมาณ $0.0000855
- 1,000 prompts: ประมาณ $0.0855 หรือ $0.09
ปัดเศษขึ้นสำหรับระบบพรอมต์ที่ยาวขึ้นหรือตัวอย่าง few-shot หากคุณเพิ่มตัวอย่างอีก 600 โทเคน อินพุตจะกลายเป็น 770 โทเคน และ 1,000 พรอมต์มีค่าใช้จ่ายประมาณ $0.1155 สำหรับอินพุต + $0.06 สำหรับเอาต์พุต รวมประมาณ $0.18 ในภาพรวม ไม่ว่าในกรณีใด เครดิตทดลอง $0.50 จะครอบคลุมการขยายได้หลายพันครั้ง คำขอที่ล้มเหลวจะไม่ถูกเรียกเก็บเงิน และเครดิตแบบเติมเงินล่วงหน้าไม่หมดอายุ; ดู หน้าราคา เพื่อเติมเงิน ($20 ถึง $500 โดยคริปโต)
คู่มือเพิ่มเติม
ถาม-ตอบ
LLM สามารถสร้างภาพ Stable Diffusion ได้เองหรือไม่?
ไม่ มันเขียนเฉพาะข้อความเท่านั้น คุณส่งพรอมต์ของมันไปยัง SDXL, ComfyUI, Automatic1111 หรือเครื่องมือสร้างภาพอื่นๆ ที่คุณใช้งาน
พรอมต์ SDXL ควรยาวแค่ไหน?
ประมาณ 40 ถึง 60 คำทำงานได้ดี โดยใส่รายละเอียดสำคัญไว้ก่อน เนื่องจากตัวเข้ารหัสข้อความอ่านข้อมูลเป็นชุด 77 โทเคน
มันปฏิเสธธีมผู้ใหญ่หรือธีมมืดหรือไม่?
โมเดลได้รับการปรับแต่งให้ตอบคำถามโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย ไม่มีการสร้างเนื้อหาที่เกี่ยวข้องกับผู้เยาว์
ฉันต้องส่งชื่อโมเดลใด?
ส่ง uncensored เป็นโมเดล ID พร้อม base URL https://api.sdxlapi.com/v1 และคีย์ของคุณเป็น Bearer token
ฉันสามารถรันพรอมต์หลายรายการแบบขนานได้หรือไม่
คีย์เต็มรูปแบบอนุญาตให้ทำคำขอพร้อมกัน 8 รายการและ 300 รายการต่อนาที; คีย์ทดลองอนุญาตให้ทำ 2 รายการและ 60 รายการ การตอบกลับ 429 หมายถึงรอแล้วลองใหม่
คุณเพียงกรอกแบบฟอร์มเดียวก็รับคีย์ได้
สร้างบัญชี คัดลอกคีย์ และเปลี่ยน base URL นั่นคือการตั้งค่าทั้งหมด