Aggiornato il
Narrativa web cinese (网文) e app di roleplay: contesto, personaggi e costi
La narrativa web cinese serializzata e il chat in-character sono due dei carichi di lavoro testuali più impegnativi: migliaia di caratteri per capitolo, un cast che deve rimanere coerente per mesi e lettori che notano ogni errore di continuità. Questa guida mostra come strutturare i prompt, gestire la finestra da 100.000 token e stimare il costo in base alle assunzioni indicate.
Aspetto di questi carichi di lavoro
I seriali di narrativa web sono scritti in capitoli da 2.000 a 4.000 caratteri, spesso pubblicati quotidianamente, con una trama che si estende per centinaia di capitoli. Le app di roleplay sono il cugino conversazionale: una personalità, uno scenario e una lunga cronologia. Entrambi hanno bisogno delle stesse tre cose dall'API del modello: abbastanza contesto per ricordare, abbastanza budget di output per scrivere a lungo e uno stile che non si discosti.
Il servizio offre un endpoint chat compatibile con OpenAI su https://api.chinesellmapi.com/v1 con un unico modello di testo, id uncensored. La finestra di contesto è di 100.000 token condivisi tra prompt e completamento, max_tokens è impostato di default a 2.048 e può arrivare a 32.000, e i campi di campionamento standard come temperature, top_p e stop vengono passati invariati. È supportato lo streaming, ideale per il chat. La configurazione di base e le note sull'encoding si trovano nella guida rapida all'app.
Regole sui contenuti, dichiarate subito
Questo è un servizio per adulti. La narrativa adulta legale, i temi maturi e gli argomenti controversi non vengono rifiutati in quanto tali, e il servizio è destinato a utenti di età pari o superiore a 18 anni. I contenuti sessuali che coinvolgono minori sono sempre bloccati e restituiscono un errore 403 content_blocked, anche quando sono inquadrati come narrativa o roleplay. Non esiste un'impostazione che modifichi questo comportamento.
Progetta per questo fin dall'inizio. Indica nelle tue schede personaggio che ogni personaggio è maggiorenne e fornisci età esplicite. Aggiungi un controllo dell'età al tuo prodotto. Tratta un 403 come una risposta definitiva per quella richiesta: mostra un messaggio neutro e non riprovare con prompt riformulati. Questi passaggi sono buone pratiche di prodotto indipendentemente dalle regole della piattaforma.
Schede personaggio e blocchi stile
La coerenza deriva dal mettere fatti stabili in un unico posto e ripeterli a ogni chiamata. Una scheda personaggio è un record compatto di nome, età, ruolo, abitudini di discorso, relazioni e vincoli rigidi, inclusi i segreti che il personaggio non deve ancora rivelare. Un blocco stile separato fissa il punto di vista, il ritmo, il rapporto dialoghi, la lunghezza del capitolo e l'abitudine di chiusura. Entrambi vanno nel messaggio di sistema in modo che si trovino all'inizio di ogni richiesta.
CHARACTER_SHEET = """\
【人物卡】
姓名:沈清禾(女,28岁)
身份:江城古籍修复师,性格沉静,嘴硬心软
口头禅:“先别急,东西不会跑。”
说话方式:短句,少用感叹号,偶尔引用旧书里的句子
关系:与顾远舟(男,31岁,旧书商)是多年好友,彼此有未说出口的好感
禁忌:不提及她离开出版社的真正原因(第40章才揭晓)
"""
STYLE = """\
【文风】第三人称限知视角,贴近沈清禾;节奏舒缓,多写物件与天气的细节;
对话占比约四成;每章 2500 到 3000 字;结尾留一个小悬念。"""
Scrivi questi elementi in cinese. Le abitudini espressive in cinese, come una frase ricorrente o la lunghezza della frase, si trasferiscono in modo molto più affidabile rispetto a una descrizione in inglese. Mantieni ogni foglio sotto poche centinaia di token e assegna un foglio a ogni personaggio ricorrente: un cast di dieci personaggi occupa comunque solo qualche migliaio di token. Quando la situazione di un personaggio cambia, aggiorna il foglio stesso piuttosto che affidarti alla cronologia per trasmettere il cambiamento.
Contesto lungo per capitoli serializzati
La tentazione è incollare ogni capitolo precedente nel prompt. Fai prima i calcoli. Con una finestra da 100.000 token e capitoli di circa 4.500 token, l'intera finestra contiene circa quattordici capitoli senza spazio per l'output, e un serial dura centinaia di capitoli. Il modello funzionante è la memoria a strati:
- La scheda personaggio e il blocco stile, sempre presenti.
- Un riassunto scorrevole della storia, poche centinaia di caratteri per capitolo, unito in un unico riassunto continuo che aggiorni ogni pochi capitoli.
- Il testo completo dell'ultimo capitolo, in modo che la prosa si colleghi senza soluzione di continuità.
- La scaletta del capitolo in fase di scrittura.
Dopo ogni capitolo, chiedi al modello un breve riassunto che conservi i cambiamenti nelle relazioni e le trame aperte, e aggiungilo al recap. Il codice qui sotto scrive un capitolo e produce il prossimo riassunto. Restituisce anche usage così puoi registrare i conteggi reali dei token:
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
Roleplay: personalità, struttura del turno e sequenze di stop
Il roleplay richiede la stessa disciplina del foglio personaggio e dello stile, più alcuni controlli specifici per la chat. Inserisci la personalità nel messaggio di sistema, specifica chi interpreta chi, fissa un intervallo di lunghezza della risposta e indica al modello di non scrivere le azioni del personaggio dell'utente. Usa stop per interrompere l'output se il modello inizia a scrivere la prossima riga dell'utente, e usa lo streaming per far apparire il testo man mano che viene generato.
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("(推开书店的门)这场雨下得真不是时候。")
La cronologia cresce di un messaggio utente e un messaggio assistente per turno. Quando si avvicina al tuo budget, riassume la parte più vecchia in un singolo messaggio e mantiene i turni più recenti verbatim. Una temperatura intorno a 0.9-1.0 dà un dialogo vivace per i personaggi; abbassala verso 0.5 quando vuoi che la persona rimanga strettamente sul copione.
Controllo dello stile che sopravvive a un lungo serial
La deriva dello stile è il problema di cui i lettori si lamentano di più: il narratore diventa lentamente più chiacchierone, il dialogo diventa formale, il ritmo accelera. Combattilo con specificità. Invece di "scrivi in uno stile elegante", descrivi abitudini misurabili: lunghezza della frase, frequenza di uso di idiomi, quantità di dettagli atmosferici e oggetti da includere, se i capitoli finiscono con un aggancio o una nota tranquilla. Due o tre brevi paragrafi campione nella voce target, inseriti nel blocco stile, valgono più di una pagina di aggettivi.
Generi diversi richiedono regolazioni diverse. Un romanzo di cultivation o fantasy beneficia di un glossario di termini inventati, come piani, sette e tecniche, così lo stesso nome non viene mai scritto in due modi diversi. Un romanzo rosa moderno si basa sul ritmo del dialogo e sui piccoli dettagli fisici. Un giallo ha bisogno di un registro degli indizi: un elenco di fatti che il lettore ha visto, così il modello non li contraddice. Mantieni ciascuno di questi elenchi nel prompt di sistema e aggiornalo man mano che la storia avanza.
Infine, mantieni temperature e top_p fissi all'interno di un serial. Se cambi il campionamento tra i capitoli, cambia anche la voce. Aumenta la temperatura solo per il brainstorming delle scalette, non per la prosa stessa.
Calcolo dei costi con assunzioni dichiarate
Tutte le cifre utilizzano le tariffe pubblicate di $0,25 per milione di token di input e $1,00 per milione di token di output, con un'assunzione di 1,5 token per carattere cinese. Sostituisci le assunzioni con i numeri dai tuoi log di usage.
| Scenario | Token di input assunti | Token di output assunti | Costo per chiamata |
|---|---|---|---|
| Capitolo di serial (3.000 caratteri in output) | 8.000 | 4.500 | $0.0020 + $0.0045 = $0.0065 |
| Turno di roleplay, cronologia da 20.000 token | 20.000 | 300 | $0.0050 + $0.0003 = $0.0053 |
| Turno di roleplay, cronologia completa da 60.000 token | 60.000 | 500 | $0.0150 + $0.0005 = $0.0155 |
Nella riga del capitolo gli 8.000 token di input si scompongono in una scheda personaggio e blocco stile da 1.200 token, un riassunto da 2.000 token, un capitolo precedente da 4.500 token e una scaletta da 300 token. Cento tali capitoli costerebbero circa $0,65. Cento turni di roleplay con cronologia da 20.000 token costerebbero circa $0,53. La conclusione è che la lunghezza della cronologia guida il costo della chat, quindi il taglio e il riassunto si ripagano rapidamente.
Il credito di prova da $0,50, valido per sette giorni, copre circa 76 capitoli in base alle assunzioni della prima riga. Controlla i prezzi per le tariffe attuali e consulta la FAQ sulla prova per i dettagli dell'account.
Note operative per la produzione
La generazione del capitolo è una richiesta lunga, quindi usa timeout generosi o fai streaming e assemblare il testo da solo. Gestisci 429 con un breve backoff, poiché ogni chiave permette 300 richieste al minuto, e tratta 503 con upstream_busy come un evento retry-in-a-few-seconds. Un 402 significa che il saldo prepagato è esaurito o che la prova è scaduta, il che dovrebbe avvisarti invece di riprovare.
Salva ogni capitolo generato e il suo riassunto nel tuo database prima di generare il successivo. Se una chiamata fallisce a metà di un batch notturno, puoi riprendere dall'ultimo capitolo memorizzato e non paghi mai due volte per lo stesso testo. Memorizza la versione del prompt e le cifre di utilizzo accanto a ogni capitolo in modo che il costo per capitolo sia una query piuttosto che un'ipotesi.
Per i prodotti di roleplay, mantieni un budget per sessione. Limita il numero di turni o i token totali che una singola sessione può consumare e mostra agli utenti un messaggio chiaro quando il limite viene raggiunto. Poiché i prompt includono la cronologia, una sessione molto lunga costa molto di più per turno rispetto a una fresca, motivo per cui il riassunto dei turni vecchi è importante oltre al semplice adattamento alla finestra. I prompt non sono usati per l'addestramento, cosa che puoi dichiarare nelle note sulla privacy del tuo prodotto insieme alla tua politica di archiviazione.
Domande e risposte
Quanto può essere lungo un capitolo in una singola richiesta?
L'output è limitato a 32.000 token per richiesta e condivide la finestra da 100.000 token con il prompt. Un capitolo da 3.000 caratteri si inserisce comodamente, quindi imposta max_tokens leggermente sopra la tua stima.
Come mantengo la coerenza dei personaggi tra centinaia di capitoli?
Mantieni una scheda del personaggio e un blocco di stile nel system prompt di ogni chiamata, e porta avanti la trama come un riassunto scorrevole più il capitolo precedente.
È ammessa la narrativa per adulti?
La narrativa adulta legale tra personaggi adulti non viene rifiutata e il servizio è destinato a utenti di età superiore ai 18 anni. I contenuti sessuali che coinvolgono minori sono sempre bloccati con un 403, anche nella narrativa e nel roleplay.
Posso fare lo streaming delle risposte di roleplay?
Sì. Imposta stream a true per ricevere eventi inviati dal server e usa le sequenze di stop per impedire al modello di scrivere le battute dell'utente.
La tua chiave è a un modulo di distanza
Crea un account, copia la chiave, modifica l'URL di base. È tutta qui la configurazione.