Mis à jour le
Romans-web chinois et apps de jeu de rôle : contexte, personnages et coûts
La fiction web chinoise sérialisée et le chat en personnage sont deux des charges de travail textuelles les plus exigeantes : des milliers de caractères par chapitre, un casting qui doit rester cohérent pendant des mois, et des lecteurs qui remarquent chaque erreur. Ce guide montre comment structurer les prompts, gérer la fenêtre de contexte de 100 000 tokens et estimer le coût à partir des hypothèses indiquées.
À quoi ressemblent ces charges de travail
Les serials de fiction web sont écrits par chapitres de 2 000 à 4 000 caractères, souvent publiés quotidiennement, avec une intrigue s'étendant sur des centaines de chapitres. Les apps de jeu de rôle sont le cousin conversationnel : une personnalité, un scénario et un historique long. Les deux ont besoin des trois mêmes choses de l'API modèle : assez de contexte pour se souvenir, assez de budget de sortie pour écrire longuement, et un style qui ne dérive pas.
Le service propose un endpoint de chat compatible OpenAI à l'adresse https://api.chinesellmapi.com/v1 avec un seul modèle de texte, id uncensored. La fenêtre de contexte est de 100 000 tokens partagés entre le prompt et la complétion, max_tokens vaut par défaut 2 048 et peut aller jusqu'à 32 000, et les champs d'échantillonnage standards tels que temperature, top_p et stop sont transmis. Le streaming est pris en charge, ce qui convient au chat. La configuration de base et les notes sur l'encodage se trouvent dans le guide de démarrage de l'application.
Règles de contenu, indiquées dès le départ
Il s'agit d'un service réservé aux adultes. La fiction adulte légale, les thèmes matures et les sujets controversés ne sont pas refusés en tant que tels, et le service est destiné aux utilisateurs âgés de 18 ans ou plus. Le contenu sexuel impliquant des mineurs est toujours bloqué et renvoie une erreur 403 content_blocked, y compris lorsqu'il est présenté comme de la fiction ou du jeu de rôle. Aucun paramètre ne modifie ce comportement.
Concevez pour cela dès le début. Indiquez dans vos fiches de personnage que chaque personnage est majeur et donnez des âges explicites. Ajoutez un contrôle d'âge à votre propre produit. Traitez un 403 comme une réponse définitive pour cette requête : affichez un message neutre et ne réessayez pas avec des prompts reformulés. Ces étapes constituent une bonne hygiène produit quelles que soient les règles de la plateforme.
Fiches de personnage et blocs de style
La cohérence provient du fait de placer des faits stables à un seul endroit et de les répéter à chaque appel. Une fiche de personnage est un enregistrement compact du nom, de l'âge, du rôle, des habitudes de parole, des relations et des contraintes strictes, y compris les secrets que le personnage ne doit pas encore révéler. Un bloc de style séparé fixe le point de vue, le rythme, le ratio de dialogue, la longueur du chapitre et l'habitude de fin. Les deux vont dans le message système afin qu'ils se situent au début de chaque requête.
CHARACTER_SHEET = """\
【人物卡】
姓名:沈清禾(女,28岁)
身份:江城古籍修复师,性格沉静,嘴硬心软
口头禅:“先别急,东西不会跑。”
说话方式:短句,少用感叹号,偶尔引用旧书里的句子
关系:与顾远舟(男,31岁,旧书商)是多年好友,彼此有未说出口的好感
禁忌:不提及她离开出版社的真正原因(第40章才揭晓)
"""
STYLE = """\
【文风】第三人称限知视角,贴近沈清禾;节奏舒缓,多写物件与天气的细节;
对话占比约四成;每章 2500 到 3000 字;结尾留一个小悬念。"""
Écrivez-les en chinois. Les habitudes de parole exprimées dans des exemples chinois, comme une phrase fétiche ou une longueur de phrase, se transfèrent beaucoup plus fiablement qu'une description anglaise. Gardez chaque fiche sous quelques centaines de tokens, et donnez-en une à chaque personnage récurrent ; un casting de dix personnages ne représente toujours que quelques milliers de tokens. Lorsque la situation d'un personnage change, mettez à jour la fiche elle-même plutôt que de compter sur l'historique pour transmettre le changement.
Long contexte pour les chapitres sérialisés
La tentation est de coller chaque chapitre précédent dans le prompt. Faites d'abord l'arithmétique. Avec une fenêtre de 100 000 tokens et des chapitres d'environ 4 500 tokens, la fenêtre entière contient environ quatorze chapitres sans laisser de place pour la sortie, et un serial dure des centaines de chapitres. Le modèle utilisable est une mémoire en couches :
- La fiche de personnage et le bloc de style, toujours présents.
- Un résumé de l'histoire roulant, quelques centaines de caractères par chapitre, fusionné en un seul résumé continu que vous actualisez tous les quelques chapitres.
- Le texte intégral du chapitre précédent, afin que la prose s'articule à la jonction.
- Le plan du chapitre en cours d'écriture.
Après chaque chapitre, demandez au modèle un court résumé qui préserve les changements de relations et les intrigues en suspens, et ajoutez-le au résumé. Le code ci-dessous écrit un chapitre et produit le résumé suivant. Il retourne également usage afin que vous puissiez enregistrer les comptes réels de tokens :
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
Jeu de rôle : personnalité, forme du tour et séquences d'arrêt
Le jeu de rôle nécessite la même discipline de fiche et de style, plus quelques contrôles spécifiques au chat. Placez la personnalité dans le message système, indiquez qui joue qui, fixez la plage de longueur de réponse, et dites au modèle de ne pas écrire les actions du personnage de l'utilisateur. Utilisez stop pour couper la sortie si le modèle commence à écrire la prochaine ligne de l'utilisateur, et stream la réponse afin que le texte apparaisse au fur et à mesure de sa génération.
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'historique s'accroît d'un message utilisateur et d'un message assistant par tour. Une fois qu'il approche de votre budget, résumez la partie la plus ancienne en un seul message et conservez les tours les plus récents tels quels. Une température autour de 0,9 à 1,0 donne un dialogue vivant pour les personnages ; baissez-la vers 0,5 lorsque vous avez besoin que la personnalité reste strictement dans le script.
Contrôle du style qui survit à un long serial
La dérive de style est l'échec dont les lecteurs se plaignent le plus : le narrateur devient lentement plus bavard, le dialogue devient formel, le rythme s'accélère. Lutte contre cela avec des spécificités. Au lieu de « écris dans un style élégant », décrivez des habitudes mesurables : longueur des phrases, fréquence d'utilisation des idiomes, quantité de détails météorologiques et d'objets à inclure, si les chapitres se terminent sur un crochet ou une note calme. Deux ou trois courts paragraphes d'exemple dans la voix cible, placés dans le bloc de style, valent plus qu'une page d'adjectifs.
Différents genres nécessitent différents réglages. Un serial de cultivation ou de fantasy bénéficie d'un glossaire de termes inventés, tels que les royaumes, les sectes et les techniques, afin que le même nom ne soit jamais orthographié de deux façons. Une romance moderne s'appuie sur le rythme du dialogue et de petits détails physiques. Un mystère a besoin d'un registre d'indices : une liste de faits que le lecteur a vus, afin que le modèle ne les contredise pas. Gardez chacune de ces listes dans le prompt système et mettez-les à jour au fur et à mesure que l'histoire avance.
Enfin, gardez la température et top_p fixes au sein d'un serial. Si vous modifiez l'échantillonnage entre les chapitres, la voix change. Augmentez la température uniquement pour le brainstorming des plans, pas pour la prose elle-même.
Calcul des coûts avec les hypothèses indiquées
Tous les chiffres utilisent les tarifs publiés de 0,25 $ par million de tokens d'entrée et 1,00 $ par million de tokens de sortie, et une hypothèse de 1,5 token par caractère chinois. Remplacez les hypothèses par des chiffres provenant de vos propres journaux usage.
| Scénario | Tokens d'entrée supposés | Tokens de sortie supposés | Coût par appel |
|---|---|---|---|
| Chapitre de serial (3 000 caractères en sortie) | 8 000 | 4 500 | $0.0020 + $0.0045 = $0.0065 |
| Tour de jeu de rôle, historique de 20 000 tokens | 20 000 | 300 | $0.0050 + $0.0003 = $0.0053 |
| Tour de jeu de rôle, historique complet de 60 000 tokens | 60 000 | 500 | $0.0150 + $0.0005 = $0.0155 |
Dans la ligne du chapitre, les 8 000 tokens d'entrée se décomposent en une fiche de personnage et un bloc de style de 1 200 tokens, un résumé de 2 000 tokens, un chapitre précédent de 4 500 tokens et un plan de 300 tokens. Cent chapitres de ce type coûteraient environ 0,65 $. Cent tours de jeu de rôle avec un historique de 20 000 tokens coûteraient environ 0,53 $. La conclusion est que la longueur de l'historique entraîne le coût du chat, donc le rétrécissement et le résumé se remboursent rapidement.
Le crédit d'essai de 0,50 $, valable sept jours, couvre environ 76 chapitres selon les hypothèses de la première ligne. Consultez la tarification pour les tarifs actuels, et consultez la FAQ sur l'essai pour les détails du compte.
Notes opérationnelles pour la production
La génération de chapitres est une longue requête, utilisez donc des délais d'attente généreux ou stream et assemblez le texte vous-même. Gérez les 429 avec un court backoff, car chaque clé permet 300 requêtes par minute, et traitez les 503 avec upstream_busy comme un événement de nouvelle tentative dans quelques secondes. Un 402 signifie que le solde prépayé est épuisé ou que l'essai a expiré, ce qui devrait vous alerter plutôt que de réessayer.
Enregistrez chaque chapitre généré et son résumé dans votre propre base de données avant de générer le suivant. Si un appel échoue en milieu de batch nocturne, vous pouvez reprendre depuis le dernier chapitre stocké, et vous ne payez jamais deux fois pour le même texte. Stockez la version du prompt et les chiffres d'utilisation à côté de chaque chapitre afin que le coût par chapitre soit une requête plutôt qu'une estimation.
Pour les produits de jeu de rôle, gardez un budget par session. Limitez le nombre de tours ou les tokens totaux qu'une seule session peut consommer, et affichez un message clair aux utilisateurs lorsque le plafond est atteint. Parce que les prompts incluent l'historique, une session très longue coûte beaucoup plus cher par tour qu'une session fraîche, c'est pourquoi le résumé des anciens tours est important au-delà du simple ajustement de la fenêtre. Les prompts ne sont pas utilisés pour l'entraînement, ce que vous pouvez indiquer dans les notes de confidentialité de votre produit, aux côtés de votre propre politique de stockage.
Questions et réponses
Quelle est la longueur maximale d’un chapitre dans une seule requête ?
La sortie est limitée à 32 000 tokens par requête et partage la fenêtre de 100 000 tokens avec le prompt. Un chapitre de 3 000 caractères s’intègre facilement ; définissez max_tokens légèrement au-dessus de votre estimation.
Comment conserver la cohérence des personnages sur des centaines de chapitres ?
Conservez une fiche de personnage et un bloc de style dans le prompt système à chaque appel, et faites avancer l’intrigue grâce à un résumé continu ainsi qu’au chapitre précédent.
La fiction pour adultes est-elle autorisée ?
La fiction adulte légale entre personnages adultes n'est pas refusée, et le service est destiné aux utilisateurs de 18 ans et plus. Le contenu sexuel impliquant des mineurs est toujours bloqué avec un 403, y compris dans la fiction et le jeu de rôle.
Puis-je diffuser en streaming les réponses de jeu de rôle ?
Oui. Définissez stream à true pour recevoir des événements envoyés par le serveur (SSE), et utilisez des séquences d’arrêt pour empêcher le modèle d’écrire les lignes de l’utilisateur.
Votre clé est à un formulaire de vous
Créez un compte, copiez la clé API et modifiez l’URL de base. C’est toute la configuration nécessaire.