TH ▾

Chinese LLM APIนิยาย

รับคีย์ API

อัปเดต

นิยายจีนและแอปบทบาทสมมติ: บริบท ตัวละคร และต้นทุน

นิยายจีนแบบต่อเนื่องและการแชทในบทบาทเป็นงานประมวลผลข้อความที่หนักที่สุดสองประเภท: ตัวอักษรหลายพันตัวต่อตอน ตัวละครที่ต้องคงความสม่ำเสมอตลอดหลายเดือน และผู้อ่านที่สังเกตความผิดพลาดทุกจุด คู่มือนี้แสดงวิธีจัดโครงสร้างพรอมต์ จัดการหน้าต่างบริบท 100,000 โทเคน และประมาณการค่าใช้จ่ายจากสมมติฐานที่ระบุ

ลักษณะของงานเหล่านี้

นิยายเว็บแบบต่อเนื่องเขียนเป็นตอนๆ ความยาว 2,000 ถึง 4,000 ตัวอักษร มักเผยแพร่ทุกวัน และมีพล็อตเรื่องที่ยาวนานหลายร้อยตอน แอปบทบาทสมมติคือญาติสนิทด้านการสนทนา: มีบุคลิก สถานการณ์ และประวัติการสนทนาที่ยาวนาน ทั้งสองอย่างต้องการสามสิ่งเดียวกันจาก API โมเดล: บริบทที่เพียงพอสำหรับการจดจำ งบประมาณเอาต์พุตที่เพียงพอสำหรับการเขียนยาวๆ และสไตล์ที่ไม่เพี้ยน

บริการมีเอนด์พอยต์แชทที่เข้ากันได้กับ OpenAI ที่ https://api.chinesellmapi.com/v1 โดยมีโมเดลข้อความหนึ่งตัว คือ id uncensored หน้าต่างบริบทคือ 100,000 โทเคนที่แชร์ระหว่างพรอมต์และการสร้างข้อความ max_tokens ตั้งค่าเริ่มต้นที่ 2,048 และสามารถเพิ่มได้ถึง 32,000 และฟิลด์การสุ่มตัวอย่างมาตรฐานเช่น temperature, top_p และ stop จะถูกส่งผ่าน การสตรีมมิงรองรับ ซึ่งเหมาะสำหรับแชท การตั้งค่าพื้นฐานและบันทึกการเข้ารหัสอยู่ใน app quickstart

กฎเนื้อหา ระบุไว้ล่วงหน้า

นี่คือบริการสำหรับผู้ใหญ่เท่านั้น นิยายผู้ใหญ่ที่ถูกต้องตามกฎหมาย ธีมผู้ใหญ่และหัวข้อที่ถกเถียงได้ไม่ถูกปฏิเสธในลักษณะนั้น และบริการนี้มุ่งหมายสำหรับผู้ใช้งานอายุ 18 ปีขึ้นไป เนื้อหาทางเพศที่เกี่ยวข้องกับเด็กจะถูกบล็อกเสมอและส่งข้อผิดพลาด 403 content_blocked รวมถึงเมื่อจัดกรอบเป็นนิยายหรือบทบาทสมมติ ไม่มีค่าตั้งค่าใดที่เปลี่ยนแปลงสิ่งนี้ได้

สร้างเพื่อสิ่งนั้นตั้งแต่เริ่มต้น ระบุในแผ่นตัวละครของคุณว่าตัวละครทุกตัวเป็นผู้ใหญ่และระบุอายุที่ชัดเจน เพิ่มการตรวจสอบอายุในผลิตภัณฑ์ของคุณเอง ถือว่า 403 เป็นคำตอบสุดท้ายสำหรับคำขอนั้น: แสดงข้อความที่เป็นกลางและอย่าลองใหม่ด้วยพรอมต์ที่ปรับคำพูดใหม่ ขั้นตอนเหล่านี้เป็นสุขอนามัยผลิตภัณฑ์ที่ดีไม่ว่ากฎของแพลตฟอร์มจะระบุอย่างไร

แผ่นตัวละครและบล็อกสไตล์

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

CHARACTER_SHEET = """\
【人物卡】
姓名:沈清禾(女,28岁)
身份:江城古籍修复师,性格沉静,嘴硬心软
口头禅:“先别急,东西不会跑。”
说话方式:短句,少用感叹号,偶尔引用旧书里的句子
关系:与顾远舟(男,31岁,旧书商)是多年好友,彼此有未说出口的好感
禁忌:不提及她离开出版社的真正原因(第40章才揭晓)
"""

STYLE = """\
【文风】第三人称限知视角,贴近沈清禾;节奏舒缓,多写物件与天气的细节;
对话占比约四成;每章 2500 到 3000 字;结尾留一个小悬念。"""

เขียนสิ่งเหล่านี้เป็นภาษาจีน พฤติกรรมการพูดที่แสดงด้วยตัวอย่างภาษาจีน เช่น คำติดปากหรือความยาวประโยค ถ่ายโอนได้เชื่อถือได้มากกว่าคำอธิบายภาษาอังกฤษ เก็บแต่ละแผ่นให้ต่ำกว่าไม่กี่ร้อยโทเคน และให้ตัวละครที่ปรากฏซ้ำแต่ละตัวหนึ่งแผ่น ตัวละครสิบตัวก็ยังมีค่าเพียงไม่กี่พันโทเคน เมื่อสถานการณ์ของตัวละครเปลี่ยน ให้อัปเดตแผ่นเองแทนที่จะพึ่งพาประวัติเพื่อส่งต่อการเปลี่ยนแปลง

บริบทยาวสำหรับตอนแบบต่อเนื่อง

แรงดึงดูดใจคือการวางตอนก่อนหน้าทั้งหมดลงในพรอมต์ ทำการคำนวณก่อน ด้วยหน้าต่างบริบท 100,000 โทเคนและตอนขนาดประมาณ 4,500 โทเคน หน้าต่างทั้งหมดรองรับประมาณสิบสี่ตอนโดยไม่มีพื้นที่เหลือสำหรับเอาต์พุต และนิยายต่อเนื่องดำเนินไปหลายร้อยตอน รูปแบบที่ใช้งานได้คือหน่วยความจำแบบชั้น:

  1. แผ่นตัวละครและบล็อกสไตล์ มีอยู่เสมอ
  2. บทสรุปเรื่องราวแบบเลื่อน ความยาวหลายร้อยตัวอักษรต่อตอน รวมเป็นบทสรุปต่อเนื่องที่คุณปรับปรุงทุกไม่กี่ตอน
  3. ข้อความเต็มของตอนก่อนหน้า เพื่อให้การเขียนเชื่อมโยงกันที่รอยต่อ
  4. โครงร่างสำหรับตอนที่กำลังเขียน

หลังจากแต่ละตอน ให้ถามโมเดลให้สรุปย่อสั้นๆ ที่รักษาการเปลี่ยนแปลงความสัมพันธ์และปมเรื่องที่ยังไม่คลี่คลาย แล้วเพิ่มลงในบทสรุป โค้ดด้านล่างเขียนตอนและสร้างสรุปถัดไป มันยังส่งคืน usage เพื่อให้คุณสามารถบันทึกจำนวนโทเคนจริงได้:

import os
from openai import OpenAI

client = OpenAI(base_url="https://api.chinesellmapi.com/v1", api_key=os.environ["API_KEY"])

def write_chapter(sheet, style, story_so_far, last_chapter, outline):
    messages = [
        {"role": "system", "content": "你是一位连载网络小说的作者,所有人物均为成年人。严格遵守人物卡和文风设定。\n" + sheet + "\n" + style},
        {"role": "user", "content": (
            "【前情提要】\n" + story_so_far +
            "\n\n【上一章全文】\n" + last_chapter +
            "\n\n【本章大纲】\n" + outline +
            "\n\n请直接写出本章正文,不要写标题以外的说明。")},
    ]
    r = client.chat.completions.create(
        model="uncensored",
        messages=messages,
        max_tokens=5000,       # ~3,000 characters needs roughly 4,500 tokens under our assumption
        temperature=0.9,
        top_p=0.95,
    )
    return r.choices[0].message.content, r.usage

def summarize(chapter_text):
    r = client.chat.completions.create(
        model="uncensored",
        messages=[{"role": "user", "content": "用 200 字以内概括下面这一章的剧情,保留人物关系的变化和未解的伏笔:\n" + chapter_text}],
        max_tokens=400,
        temperature=0.3,
    )
    return r.choices[0].message.content

บทบาทสมมติ: บุคลิก รูปแบบการตอบกลับ และลำดับหยุด

การสวมบทบาทต้องการวินัยเดียวกันกับแผ่นข้อมูลและสไตล์ รวมถึงการควบคุมเฉพาะสำหรับการแชท ใส่บุคลิกภาพในข้อความระบบ ระบุใครเล่นเป็นใคร กำหนดช่วงความยาวของการตอบกลับ และบอกโมเดลไม่ให้เขียนการกระทำของตัวละครผู้ใช้ ใช้ stop เพื่อตัดเอาต์พุตหากโมเดลเริ่มเขียนบรรทัดถัดไปของผู้ใช้ และสตรีมการตอบกลับเพื่อให้ข้อความปรากฏเมื่อสร้างเสร็จ

import os
from openai import OpenAI

client = OpenAI(base_url="https://api.chinesellmapi.com/v1", api_key=os.environ["API_KEY"])

PERSONA = (
    "你扮演顾远舟,31岁的旧书商,说话随和,爱开玩笑,但在重要的事上很认真。"
    "用户扮演沈清禾。所有角色均为成年人。保持第一人称,每次回复 80 到 200 字,"
    "用(括号)写简短的动作描写,不要替用户的角色做决定。"
)

history = [{"role": "system", "content": PERSONA}]

def turn(user_text):
    history.append({"role": "user", "content": user_text})
    stream = client.chat.completions.create(
        model="uncensored",
        messages=history,
        max_tokens=400,
        temperature=1.0,
        stop=["\n用户:"],        # keep the model from writing the user's next line
        stream=True,
    )
    reply = ""
    for chunk in stream:
        if chunk.choices and chunk.choices[0].delta.content:
            piece = chunk.choices[0].delta.content
            reply += piece
            print(piece, end="", flush=True)
    print()
    history.append({"role": "assistant", "content": reply})

turn("(推开书店的门)这场雨下得真不是时候。")

ประวัติเติบโตด้วยข้อความผู้ใช้หนึ่งข้อความและข้อความผู้ช่วยหนึ่งข้อความต่อรอบ เมื่อใกล้ถึงงบประมาณของคุณ ให้สรุปส่วนที่เก่าที่สุดเป็นข้อความเดียวและเก็บรอบล่าสุดไว้ครบถ้วน อุณหภูมิประมาณ 0.9 ถึง 1.0 ให้บทสนทนาที่มีชีวิตชีวาสำหรับตัวละคร; ลดลงเหลือประมาณ 0.5 เมื่อคุณต้องการให้บุคลิกคงเส้นคงวาตามบท

การควบคุมสไตล์ที่รอดชีวิตจากนิยายต่อเนื่องยาว

การเปลี่ยนแนวเป็นความล้มเหลวที่ผู้อ่านบ่นมากที่สุด: ผู้บรรยายค่อยๆ พูดมากขึ้น บทสนทนาเป็นทางการขึ้น จังหวะเร็วขึ้น ต่อสู้ด้วยรายละเอียดเฉพาะ แทนที่จะเขียน "เขียนในสไตล์ที่สง่างาม" ให้บรรยายนิสัยที่วัดได้: ความยาวประโยค ความถี่ในการใช้สำนวน ปริมาณรายละเอียดสภาพอากาศและวัตถุที่จะรวมไว้ บทนำสั้นๆ สองหรือสามย่อหน้าในเสียงเป้าหมาย วางไว้ในบล็อกสไตล์ มีค่ามากกว่าหน้าหนึ่งหน้าของคำคุณศัพท์

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

สุดท้าย รักษาอุณหภูมิและ top_p ให้คงที่ภายในนิยายต่อเนื่อง หากเปลี่ยนการสุ่มตัวอย่างระหว่างตอน เสียงจะเปลี่ยน เพิ่มอุณหภูมิเฉพาะสำหรับการระดมสมองโครงร่าง ไม่ใช่สำหรับเนื้อเรื่องเอง

การคำนวณต้นทุนด้วยสมมติฐานที่ระบุ

ตัวเลขทั้งหมดใช้อัตราที่ประกาศไว้คือ $0.25 ต่อล้านโทเคนอินพุตและ $1.00 ต่อล้านโทเคนเอาต์พุต และสมมติฐาน 1.5 โทเคนต่อตัวอักษรจีน แทนที่สมมติฐานด้วยตัวเลขจาก usage บันทึกของคุณ

สถานการณ์โทเคนอินพุตที่สมมติโทเคนเอาต์พุตที่สมมติต้นทุนต่อคำขอ
ตอนต่อเนื่อง (เอาต์พุต 3,000 ตัวอักษร)8,0004,500$0.0020 + $0.0045 = $0.0065
รอบบทบาทสมมติ ประวัติความยาว 20,000 โทเคน20,000300$0.0050 + $0.0003 = $0.0053
รอบบทบาทสมมติ ประวัติความยาวเต็ม 60,000 โทเคน60,000500$0.0150 + $0.0005 = $0.0155

ในแถวตอน โทเคนอินพุต 8,000 ตัวแบ่งย่อยเป็นแผ่นตัวละครและบล็อกสไตล์ขนาด 1,200 โทเคน บทสรุปขนาด 2,000 โทเคน ตอนก่อนหน้าขนาด 4,500 โทเคน และโครงร่างขนาด 300 โทเคน ตอนร้อยแบบนั้นจะมีต้นทุนประมาณ $0.65 รอบบทบาทสมมติร้อยรอบที่ขนาดประวัติ 20,000 โทเคนมีต้นทุนประมาณ $0.53 ข้อสรุปคือความยาวประวัติขับเคลื่อนต้นทุนแชท ดังนั้นการตัดและสรุปจึงคุ้มค่าอย่างรวดเร็ว

เครดิตทดลองใช้ $0.50 ใช้ได้เป็นเวลาเจ็ดวัน ครอบคลุมประมาณ 76 ตอนภายใต้สมมติฐานของแถวแรก ตรวจสอบ pricing สำหรับอัตราปัจจุบัน และดู trial FAQ สำหรับรายละเอียดบัญชี

บันทึกการดำเนินงานสำหรับการผลิต

การสร้างบทเป็นคำขอที่ใช้เวลานาน ดังนั้นจึงควรใช้เวลาหมดอายุที่ยาวนานหรือสตรีมและประกอบข้อความด้วยตนเอง จัดการ 429 ด้วยเวลาพักสั้นๆ เนื่องจากคีย์แต่ละอันอนุญาต 300 คำขอต่อนาที และจัดการ 503 ด้วย upstream_busy เป็นเหตุการณ์ลองใหม่ในไม่กี่วินาที 402 หมายถึงยอดเงินเติมเงินหมดหรือเครดิตทดลองใช้หมด ซึ่งควรแจ้งเตือนคุณแทนที่จะลองใหม่

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

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

ถาม-ตอบ

ตอนหนึ่งตอนสามารถยาวได้แค่ไหนในคำขอเดียว?

เอาต์พุตถูกจำกัดที่ 32,000 โทเคนต่อคำขอและแชร์หน้าต่างบริบท 100,000 โทเคนกับพรอมต์ บทความยาว 3,000 ตัวอักษรพอดีกับพื้นที่ ดังนั้นจึงตั้งค่า max_tokens สูงกว่าประมาณการเล็กน้อย

ฉันจะรักษาความสอดคล้องของตัวละครตลอดหลายร้อยตอนได้อย่างไร?

เก็บแผ่นตัวละครและบล็อกสไตล์ไว้ในระบบพรอมต์ในทุกคำขอ และนำพล็อตไปข้างหน้าโดยการสรุปแบบเลื่อนพร้อมด้วยบทก่อนหน้า

อนุญาตให้นิยายผู้ใหญ่หรือไม่?

นิยายผู้ใหญ่ที่ถูกต้องตามกฎหมายระหว่างตัวละครผู้ใหญ่ไม่ถูกปฏิเสธ และบริการนี้สำหรับผู้ใช้งานอายุ 18 ปีขึ้นไป เนื้อหาทางเพศที่เกี่ยวข้องกับเด็กจะถูกบล็อกเสมอด้วย 403 รวมถึงในนิยายและการสวมบทบาท

ฉันสามารถสตรีมการตอบกลับจากบทบาทสมมติได้หรือไม่?

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

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

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

รับคีย์ API