PT ▾

Chinese LLM APIFicção

Obter chave de API

Atualizado

Webnovels chinesas e apps de roleplay: contexto, personagens e custo

Ficção serializada chinesa e bate-papo em personagem são duas das cargas de texto mais exigentes: milhares de caracteres por capítulo, um elenco que deve permanecer consistente por meses e leitores que notam cada deslize. Este guia mostra como estruturar prompts, gerenciar a janela de 100.000 tokens e estimar custos com base em suposições declaradas.

Como são essas cargas de trabalho

Séries de webfiction são escritas em capítulos de 2.000 a 4.000 caracteres, muitas vezes publicados diariamente, com uma trama que abrange centenas de capítulos. Apps de RP são o primo conversacional: uma persona, um cenário e um histórico longo. Ambos precisam das mesmas três coisas da API do modelo: contexto suficiente para lembrar, orçamento de saída suficiente para escrever extensamente e um estilo que não se desvie.

O serviço oferece um endpoint de chat compatível com OpenAI em https://api.chinesellmapi.com/v1 com um modelo de texto, id uncensored. A janela de contexto é de 100.000 tokens compartilhados entre prompt e resposta, max_tokens padrão é 2.048 e pode chegar a 32.000, e campos de amostragem padrão como temperature, top_p e stop são passados. Streaming é suportado, o que é adequado para chat. Configuração básica e notas de codificação estão no app quickstart.

Regras de conteúdo, declaradas antecipadamente

Este é um serviço apenas para adultos. Ficção adulta lícita, temas maduros e assuntos controversos não são recusados como tal, e o serviço é destinado a usuários com 18 anos ou mais. Conteúdo sexual envolvendo menores é sempre bloqueado e retorna um erro content_blocked 403, incluindo quando é enquadrado como ficção ou roleplay. Não há configuração que altere isso.

Construa para isso desde o início. Declare em suas fichas de personagem que todos os personagens são adultos e forneça idades explícitas. Adicione um filtro de idade ao seu próprio produto. Trate um 403 como uma resposta final para essa requisição: mostre uma mensagem neutra e não tente novamente com prompts reformulados. Esses passos são uma boa higiene de produto, independentemente das regras da plataforma.

Fichas de personagem e blocos de estilo

A consistência vem de colocar fatos estáveis em um lugar e repeti-los em cada chamada. Uma ficha de personagem é um registro compacto de nome, idade, papel, hábitos de fala, relacionamentos e restrições rígidas, incluindo segredos que o personagem não deve revelar ainda. Um bloco de estilo separado define o ponto de vista, ritmo, proporção de diálogo, comprimento do capítulo e hábito de finalização. Ambos vão na mensagem do sistema para ficarem no início de cada requisição.

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

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

Escreva isso em chinês. Hábitos de fala expressos em exemplos em chinês, como uma frase de efeito ou comprimento de frase, são transferidos muito mais confiavelmente do que uma descrição em inglês deles. Mantenha cada ficha sob alguns centenas de tokens e dê a cada personagem recorrente uma; um elenco de dez ainda é apenas alguns milhares de tokens. Quando a situação de um personagem muda, atualize a ficha em si, em vez de confiar no histórico para carregar a mudança.

Contexto longo para capítulos serializados

A tentação é colar cada capítulo anterior no prompt. Faça a aritmética primeiro. Com uma janela de 100.000 tokens e capítulos de cerca de 4.500 tokens, a janela inteira contém cerca de catorze capítulos sem espaço restante para saída, e um serial roda por centenas. O padrão viável é memória em camadas:

  1. A ficha de personagem e o bloco de estilo, sempre presentes.
  2. Um resumo contínuo da história, algumas centenas de caracteres por capítulo, mesclados em um resumo corrido que você atualiza a cada poucos capítulos.
  3. O texto completo do capítulo anterior, para que a prosa se conecte na costura.
  4. O esboço do capítulo que está sendo escrito.

Após cada capítulo, peça ao modelo um resumo curto que preserve mudanças de relacionamento e fios da trama abertos, e anexe-o ao resumo recapitulativo. O código abaixo escreve um capítulo e produz o próximo resumo. Ele também retorna usage para que você possa registrar contagens reais 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

RPG: persona, formato de turno e sequências de parada

RP precisa da mesma disciplina de ficha e estilo mais alguns controles específicos de chat. Coloque a persona na mensagem do sistema, declare quem joga quem, fixe o intervalo de comprimento de resposta e diga ao modelo para não escrever as ações do personagem do usuário. Use stop para cortar a saída se o modelo começar a escrever a próxima linha do usuário, e faça streaming da resposta para que o texto apareça conforme é gerado.

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("(推开书店的门)这场雨下得真不是时候。")

O histórico cresce com uma mensagem de usuário e uma mensagem de assistente por turno. Quando se aproxima do seu orçamento, resuma a parte mais antiga em uma única mensagem e mantenha as rodadas mais recentes verbatim. Temperatura em torno de 0,9 a 1,0 dá diálogos animados para personagens; diminua para 0,5 quando precisar que a persona se mantenha estritamente no roteiro.

Controle de estilo que sobrevive a um serial longo

A deriva de estilo é a falha que os leitores mais reclamam: o narrador lentamente se torna mais falante, o diálogo torna-se formal, o ritmo acelera. Combata-a com especificidades. Em vez de "escreva em um estilo elegante", descreva hábitos mensuráveis: comprimento da frase, frequência de uso de expressões idiomáticas, quanto detalhe de clima e objetos incluir, se os capítulos terminam com um gancho ou um momento calmo. Dois ou três parágrafos de amostra na voz alvo, colocados no bloco de estilo, valem mais do que uma página de adjetivos.

Gêneros diferentes precisam de controles diferentes. Um serial de cultivo ou fantasia se beneficia de um glossário de termos inventados, como reinos, seitas e técnicas, para que o mesmo nome nunca seja grafado de duas formas. Um romance moderno depende do ritmo do diálogo e pequenos detalhes físicos. Um mistério precisa de um livro de pistas: uma lista de fatos que o leitor viu, para que o modelo não os contradiga. Mantenha cada uma dessas listas no prompt do sistema e atualize-a conforme a história avança.

Finalmente, mantenha temperatura e top_p fixos dentro de um serial. Se você alterar a amostragem entre capítulos, a voz muda. Aumente a temperatura apenas para brainstorming de esboços, não para a prosa em si.

Matemática de custo com suposições declaradas

Todas as figuras usam as taxas publicadas de $0,25 por milhão de tokens de entrada e $1,00 por milhão de tokens de saída, e uma suposição de 1,5 tokens por caractere chinês. Substitua as suposições por números dos seus próprios logs de usage.

CenárioTokens de entrada assumidosTokens de saída assumidosCusto por chamada
Capítulo serial (3.000 caracteres gerados)8,0004,500$0.0020 + $0.0045 = $0.0065
Rodada de RP, histórico de 20.000 tokens20,000300$0.0050 + $0.0003 = $0.0053
Rodada de RP, histórico completo de 60.000 tokens60,000500$0.0150 + $0.0005 = $0.0155

Na linha do capítulo, os 8.000 tokens de entrada se dividem em uma ficha de personagem e bloco de estilo de 1.200 tokens, um resumo de 2.000 tokens, um capítulo anterior de 4.500 tokens e um esboço de 300 tokens. Cem capítulos custariam cerca de $0,65. Cem rodadas de RP no tamanho de histórico de 20.000 tokens custam cerca de $0,53. A conclusão é que o comprimento do histórico impulsiona o custo do chat, então o corte e o resumo se pagam rapidamente.

O crédito de teste de $0,50, válido por sete dias, cobre aproximadamente 76 capítulos sob as suposições da primeira linha. Verifique pricing para taxas atuais e veja o trial FAQ para detalhes da conta.

Notas operacionais para produção

A geração de capítulos é uma longa requisição, então use tempos limite generosos ou faça streaming e monte o texto você mesmo. Lidar com 429 com um breve backoff, já que cada chave permite 300 requisições por minuto, e tratar 503 com upstream_busy como um evento de nova tentativa em alguns segundos. Um 402 significa que o saldo pré-pago está esgotado ou o período de teste expirou, o que deve alertá-lo em vez de tentar novamente.

Salve cada capítulo gerado e seu resumo no seu próprio banco de dados antes de gerar o próximo. Se uma chamada falhar no meio de um lote noturno, você pode retomar do último capítulo armazenado, e você nunca paga duas vezes pelo mesmo texto. Armazene a versão do prompt e as figuras de uso ao lado de cada capítulo para que o custo por capítulo seja uma consulta em vez de um palpite.

Para produtos de RPG, mantenha um orçamento por sessão. Limite o número de voltas ou os tokens totais que uma única sessão pode consumir e mostre aos usuários uma mensagem clara quando o limite for atingido. Como os prompts incluem histórico, uma sessão muito longa custa muito mais por turno do que uma nova, é por isso que resumir voltas antigas importa além de apenas caber na janela. Os prompts não são usados para treinamento, o que você pode declarar nas notas de privacidade do seu produto junto com sua própria política de armazenamento.

Perguntas e respostas

Quão longo pode ser um capítulo em uma requisição?

A saída é limitada a 32.000 tokens por requisição e compartilha a janela de 100.000 tokens com o prompt. Um capítulo de 3.000 caracteres cabe confortavelmente, então defina max_tokens um pouco acima da sua estimativa.

Como mantenho personagens consistentes ao longo de centenas de capítulos?

Mantenha uma ficha de personagem e um bloco de estilo no system prompt de todas as chamadas, e avance a trama por meio de um resumo contínuo mais o capítulo anterior.

Ficção adulta é permitida?

Ficção adulta lícita entre personagens adultos não é recusada, e o serviço é para usuários com 18 anos ou mais. Conteúdo sexual envolvendo menores é sempre bloqueado com 403, incluindo em ficção e roleplay.

Posso fazer streaming de respostas de RP?

Sim. Defina stream como true para receber eventos enviados pelo servidor e use sequências de parada para impedir que o modelo escreva as falas do usuário.

Sua chave está a um formulário de distância

Crie uma conta, copie a chave, altere a base URL. Essa é toda a configuração.

Obter chave de API