Cập nhật
Truyện mạng Trung Quốc và ứng dụng nhập vai: ngữ cảnh, nhân vật và chi phí
Truyện mạng Trung Quốc dạng serial và trò chuyện theo vai là hai trong số các khối lượng công việc văn bản đòi hỏi nhất: hàng nghìn ký tự mỗi chương, một dàn nhân vật phải duy trì sự nhất quán trong nhiều tháng, và độc giả nhận ra mọi sai sót. Hướng dẫn này cho bạn cách cấu trúc prompt, quản lý cửa sổ 100.000 token và ước tính chi phí từ các giả định đã nêu.
Các khối lượng công việc này trông như thế nào
Truyện mạng dạng serial được viết theo các chương từ 2.000 đến 4.000 ký tự, thường được xuất bản hàng ngày, với cốt truyện trải qua hàng trăm chương. Ứng dụng nhập vai là anh em họ trong lĩnh vực hội thoại: một nhân vật, một kịch bản và một lịch sử dài. Cả hai đều cần ba điều từ API mô hình: đủ ngữ cảnh để ghi nhớ, đủ ngân sách đầu ra để viết dài, và phong cách không bị lệch hướng.
Dịch vụ cung cấp một endpoint chat tương thích OpenAI tại https://api.chinesellmapi.com/v1 với một mô hình văn bản, id uncensored. Cửa sổ ngữ cảnh là 100.000 token dùng chung giữa prompt và phần hoàn thành, max_tokens mặc định là 2.048 và có thể lên đến 32.000, và các trường lấy mẫu tiêu chuẩn như temperature, top_p và stop được chuyển tiếp. Truyền phát (streaming) được hỗ trợ, phù hợp với chat. Hướng dẫn thiết lập cơ bản và ghi chú về mã hóa nằm trong app quickstart.
Quy tắc nội dung, nêu rõ từ đầu
Đây là dịch vụ dành riêng cho người lớn. Văn học người lớn hợp pháp, các chủ đề trưởng thành và các chủ đề gây tranh cãi không bị từ chối, và dịch vụ dành cho người dùng từ 18 tuổi trở lên. Nội dung tình dục liên quan đến người chưa thành niên luôn bị chặn và trả về lỗi 403 content_blocked, kể cả khi được trình bày dưới dạng truyện hoặc nhập vai. Không có cài đặt nào thay đổi điều này.
Xây dựng cho nó ngay từ đầu. Nêu trong hồ sơ nhân vật của bạn rằng mọi nhân vật đều là người lớn và cung cấp tuổi cụ thể. Thêm cổng kiểm tra tuổi vào sản phẩm của riêng bạn. Coi mã 403 là câu trả lời cuối cùng cho yêu cầu đó: hiển thị thông báo trung tính và không thử lại với các prompt được diễn giải lại. Những bước này là quy trình sản phẩm tốt bất kể quy tắc nền tảng.
Hồ sơ nhân vật và khối phong cách
Sự nhất quán đến từ việc đặt các sự kiện ổn định vào một nơi và lặp lại chúng trên mọi lệnh gọi. Hồ sơ nhân vật là bản ghi ngắn gọn về tên, tuổi, vai trò, thói quen nói, mối quan hệ và các ràng buộc cứng, bao gồm cả bí mật mà nhân vật không được tiết lộ. Một khối phong cách riêng biệt cố định điểm nhìn, nhịp độ, tỷ lệ hội thoại, độ dài chương và thói quen kết thúc. Cả hai đều nằm trong thông báo hệ thống để chúng đứng đầu mọi yêu cầu.
CHARACTER_SHEET = """\
【人物卡】
姓名:沈清禾(女,28岁)
身份:江城古籍修复师,性格沉静,嘴硬心软
口头禅:“先别急,东西不会跑。”
说话方式:短句,少用感叹号,偶尔引用旧书里的句子
关系:与顾远舟(男,31岁,旧书商)是多年好友,彼此有未说出口的好感
禁忌:不提及她离开出版社的真正原因(第40章才揭晓)
"""
STYLE = """\
【文风】第三人称限知视角,贴近沈清禾;节奏舒缓,多写物件与天气的细节;
对话占比约四成;每章 2500 到 3000 字;结尾留一个小悬念。"""
Viết những phần này bằng tiếng Trung. Thói quen nói được thể hiện bằng các ví dụ tiếng Trung, chẳng hạn như câu cửa miệng hoặc độ dài câu, chuyển giao đáng tin cậy hơn nhiều so với mô tả tiếng Anh về chúng. Giữ mỗi hồ sơ dưới vài trăm token và cung cấp cho mỗi nhân vật xuất hiện thường xuyên một hồ sơ; dàn nhân vật gồm mười người cũng chỉ tốn vài nghìn token. Khi tình huống của một nhân vật thay đổi, hãy cập nhật chính hồ sơ đó thay vì dựa vào lịch sử để truyền tải sự thay đổi.
Ngữ cảnh dài cho các chương đăng theo kỳ
Cái bẫy là dán mọi chương trước vào prompt. Hãy tính toán trước. Với cửa sổ 100.000 token và các chương khoảng 4.500 token, toàn bộ cửa sổ chỉ chứa khoảng mười bốn chương mà không còn chỗ cho đầu ra, và một bộ truyện kéo dài hàng trăm chương. Mẫu hoạt động là bộ nhớ phân lớp:
- Hồ sơ nhân vật và khối phong cách, luôn có mặt.
- Tóm tắt câu chuyện tuần hoàn, vài trăm ký tự mỗi chương, được hợp nhất thành một bản tóm chạy mà bạn làm mới sau mỗi vài chương.
- Văn bản đầy đủ của chương trước, để văn phong kết nối tại đường nối.
- Lộ trình cho chương đang được viết.
Sau mỗi chương, hãy yêu cầu mô hình tạo một bản tóm tắt ngắn bảo toàn các thay đổi về mối quan hệ và các mối dây cốt truyện còn mở, và thêm nó vào bản tóm chạy. Mã bên dưới viết một chương và tạo bản tóm tắt tiếp theo. Nó cũng trả về usage để bạn có thể ghi lại số lượng token thực tế:
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
Nhập vai: nhân vật, hình thức lượt và chuỗi dừng
Nhập vai cần kỷ luật hồ sơ và phong cách tương tự cộng với một số kiểm soát cụ thể cho trò chuyện. Đặt nhân vật trong thông báo hệ thống, nêu rõ ai đóng vai ai, cố định phạm vi độ dài phản hồi và bảo mô hình không viết hành động của nhân vật người dùng. Sử dụng stop để cắt đầu ra nếu mô hình bắt đầu viết dòng tiếp theo của người dùng, và phát trực tiếp phản hồi để văn bản xuất hiện khi nó được tạo.
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("(推开书店的门)这场雨下得真不是时候。")
Lịch sử tăng lên một tin nhắn người dùng và một tin nhắn trợ lý mỗi lượt. Khi nó gần đạt ngân sách của bạn, hãy tóm tắt phần cũ nhất thành một tin nhắn duy nhất và giữ các lượt gần đây nhất nguyên văn. Nhiệt độ khoảng 0,9 đến 1,0 mang lại hội thoại sôi động cho các nhân vật; giảm nó xuống khoảng 0,5 khi bạn cần nhân vật tuân thủ kịch bản nghiêm ngặt.
Kiểm soát phong cách tồn tại qua một bộ truyện dài
Lệch phong cách là lỗi mà độc giả phàn nàn nhiều nhất: người kể chuyện dần trở nên trò chuyện hơn, hội thoại trở nên trang trọng, nhịp độ tăng tốc. Hãy chống lại nó bằng các chi tiết cụ thể. Thay vì "viết theo phong cách tao nhã", hãy mô tả các thói quen có thể đo lường: độ dài câu, tần suất sử dụng thành ngữ, mức độ chi tiết về thời tiết và vật thể cần đưa vào, liệu các chương có kết thúc bằng một đoạn lôi cuốn hay một nhịp điệu yên tĩnh. Hai hoặc ba đoạn văn mẫu ngắn bằng giọng điệu mục tiêu, đặt trong khối phong cách, có giá trị hơn một trang tính từ.
Các thể loại khác nhau cần các núm điều chỉnh khác nhau. Một bộ truyện tu tiên hoặc giả tưởng được hưởng lợi từ một từ điển các thuật ngữ do sáng tạo, chẳng hạn như các thế giới, tông phái và kỹ thuật, để cùng một tên không bao giờ được viết theo hai cách. Một bộ truyện lãng mạn hiện đại dựa vào nhịp điệu hội thoại và các chi tiết vật lý nhỏ. Một bộ truyện trinh thám cần sổ theo dõi manh mối: danh sách các sự kiện mà độc giả đã thấy, để mô hình không mâu thuẫn với chúng. Giữ mỗi danh sách này trong prompt hệ thống và cập nhật nó khi câu chuyện diễn ra.
Cuối cùng, hãy giữ nhiệt độ và top_p cố định trong một bộ truyện. Nếu bạn thay đổi lấy mẫu giữa các chương, giọng điệu sẽ thay đổi theo. Chỉ tăng nhiệt độ khi lên ý tưởng cho các lộ trình, không phải cho văn bản chính.
Tính toán chi phí với các giả định đã nêu
Tất cả các số liệu sử dụng các mức giá công bố là $0,25 cho mỗi triệu token đầu vào và $1,00 cho mỗi triệu token đầu ra, cùng với giả định 1,5 token trên mỗi ký tự tiếng Trung. Thay thế các giả định bằng các số liệu từ nhật ký usage của riêng bạn.
| Kịch bản | Token đầu vào giả định | Token đầu ra giả định | Chi phí mỗi lệnh gọi |
|---|---|---|---|
| Chương truyện (đầu ra 3.000 ký tự) | 8.000 | 4.500 | $0.0020 + $0.0045 = $0.0065 |
| Lượt nhập vai, lịch sử 20.000 token | 20.000 | 300 | $0.0050 + $0.0003 = $0.0053 |
| Lượt nhập vai, lịch sử đầy đủ 60.000 token | 60.000 | 500 | $0.0150 + $0.0005 = $0.0155 |
Trong hàng chương, 8.000 token đầu vào được phân bổ như sau: 1.200 token cho bảng nhân vật và khối phong cách, 2.000 token cho tóm tắt, 4.500 token cho chương trước và 300 token cho dàn ý. Một trăm chương như vậy sẽ tốn khoảng $0,65. Một trăm lượt nhập vai với lịch sử kích thước 20.000 token tốn khoảng $0,53. Bài học là độ dài lịch sử quyết định chi phí chat, vì vậy việc cắt giảm và tóm tắt sẽ tự trang trải chi phí nhanh chóng.
Tín dụng dùng thử $0,50, có hiệu lực trong bảy ngày, bao gồm khoảng 76 chương theo các giả định của hàng đầu tiên. Kiểm tra bảng giá để biết mức giá hiện tại và xem FAQ về dùng thử để biết chi tiết tài khoản.
Ghi chú vận hành cho sản xuất
Tạo chương là một yêu cầu dài, vì vậy hãy sử dụng thời gian chờ đủ lớn hoặc truyền phát và tự lắp ráp văn bản. Xử lý lỗi 429 bằng cách tăng thời gian chờ ngắn, vì mỗi khóa cho phép 300 yêu cầu mỗi phút, và xử lý lỗi 503 với upstream_busy như một sự kiện thử lại sau vài giây. Lỗi 402 có nghĩa là số dư trả trước đã hết hoặc tín dụng dùng thử đã hết hạn, điều này nên cảnh báo bạn thay vì thử lại.
Lưu mọi chương đã tạo và bản tóm tắt của nó vào cơ sở dữ liệu của riêng bạn trước khi tạo chương tiếp theo. Nếu một lệnh gọi bị lỗi giữa chừng trong một lô qua đêm, bạn có thể tiếp tục từ chương được lưu trữ cuối cùng và bạn không bao giờ trả tiền hai lần cho cùng một văn bản. Lưu phiên bản prompt và các số liệu sử dụng bên cạnh mỗi chương để chi phí mỗi chương là một truy vấn thay vì một phỏng đoán.
Đối với các sản phẩm nhập vai, hãy giữ ngân sách cho mỗi phiên. Giới hạn số lượt hoặc tổng số token mà một phiên đơn lẻ có thể tiêu thụ và hiển thị thông báo rõ ràng cho người dùng khi đạt giới hạn. Vì các prompt bao gồm lịch sử, một phiên rất dài tốn nhiều chi phí hơn mỗi lượt so với một phiên mới, đó là lý do tại sao việc tóm tắt các lượt cũ lại quan trọng hơn việc chỉ vừa với cửa sổ. Các prompt không được sử dụng để huấn luyện, điều này bạn có thể nêu trong ghi chú quyền riêng tư của sản phẩm cùng với chính sách lưu trữ của riêng bạn.
Hỏi đáp
Một chương có thể dài bao nhiêu trong một yêu cầu?
Đầu ra bị giới hạn ở 32.000 token mỗi yêu cầu và chia sẻ cửa sổ ngữ cảnh 100.000 token với prompt. Một chương dài 3.000 ký tự phù hợp dễ dàng, vì vậy bạn hãy đặt max_tokens cao hơn một chút so với ước tính của mình.
Làm thế nào để giữ tính nhất quán của nhân vật qua hàng trăm chương?
Bạn hãy giữ một bảng mô tả nhân vật và khối phong cách trong system prompt cho mọi yêu cầu, đồng thời chuyển tiếp cốt truyện dưới dạng tóm tắt liên tục cộng với chương trước đó.
Truyện người lớn có được phép không?
Văn học người lớn hợp pháp giữa các nhân vật trưởng thành không bị từ chối, và dịch vụ dành cho người dùng từ 18 tuổi trở lên. Nội dung tình dục liên quan đến người chưa thành niên luôn bị chặn với lỗi 403, kể cả trong truyện và nhập vai.
Tôi có thể truyền phát các phản hồi nhập vai không?
Có. Bạn hãy đặt stream thành true để nhận các sự kiện do máy chủ gửi, và sử dụng stop sequences để ngăn mô hình viết các dòng của người dùng.
Khóa của bạn chỉ cách một biểu mẫu
Tạo tài khoản, sao chép khóa, thay đổi base URL. Đó là toàn bộ quy trình thiết lập.