中文 ▾
获取 API 密钥

角色扮演最佳 Abliterated LLM:API 设置指南

Abliterated 模型是大语言模型,其中执行安全拒绝的机制已被移除,允许模型在不触发内容过滤器的情况下回答争议性、成人或小众问题。这种方法让开发者完全控制模型的语气和知识截止日期,对于编码、角色扮演和创意写作尤其有价值,因为标准护栏可能会阻止有用的输出。

带有面具和发光聊天气泡的场景,气泡链接到代码终端,代表通过 API 进行角色扮演

要点

  • 当模型在场景中拒绝或说教时,角色扮演就会失败,因此拒绝行为比原始基准分数更重要。
  • 100,000 token 的窗口可以容纳长角色卡以及数小时的聊天记录。
  • SillyTavern 通过其自定义 OpenAI 兼容源连接,使用 base URL、密钥和 model ID uncensored。
  • 50 轮会话,平均提示词 6,000 token,成本约为 $0.05。

什么样的模型擅长角色扮演

角色扮演是对语言模型的严苛测试。它必须在数百条消息中保持角色声音,记住三幕之前的情节,在故事转向黑暗时保持角色设定,且从不跳出角色来解释自己。标准助手模型通常在最后一点失败。它会写出很好的段落,然后添加免责声明或拒绝一个显然是虚构的情节转折。

去审查或无审查模型经过调整以消除这些拒绝。这有帮助,但这只是你在承诺使用提供商之前值得检查的五个特征之一:

  • 拒绝行为。 它是否在没有评论的情况下遵循反派的对话或道德灰色场景?
  • 上下文长度。 角色卡、世界笔记和聊天记录是否能放入一个请求中?
  • 一致性。 角色在长会话中是否保持相同的说话习惯?
  • 采样控制。 你可以调整 temperature、top_p、惩罚和 stop sequences 吗?
  • 流式输出。 文本是否逐 token 出现,使回复感觉像对话?

没有人能诚实地为每种故事风格命名单一赢家。品味很重要,两位作家会对同一模型给出不同的排名。实际答案是运行你自己的场景,并自己评估输出。

此 API 为角色扮演提供什么

该服务运行一个开放权重模型,由独立提供商托管,并经过调整以在合法成人使用中无内容拒绝地回答。模型 ID 是 uncensored。没有供应商之间的路由,所以你在周一测试的声音就是周五得到的声音。

角色扮演需求你获得的功能
长记忆100,000 token 的上下文,提示词加补全
实时打字效果通过 SSE 流式输出,带有 stream: true
风格控制temperature、top_p、stop、seed 以及两种惩罚参数均透传
客户端支持OpenAI 兼容,因此 SillyTavern 和类似工具只需更改 URL 即可工作
隐私提示词不用于训练

有一个硬性限制且不可协商:不允许涉及未成年人的性内容。让你的角色和场景保持在这条线的正确一侧,并在合法成人使用范围内。模型家族的详细信息在 去审查模型页面 上。

分五步连接 SillyTavern

SillyTavern 可以连接到任何 OpenAI 兼容的接口。菜单标签在不同版本之间略有变化,但流程相同。

  1. 创建一个账户并在 API 密钥页面 领取你的密钥。新用户只需点击一下即可获得 $0.50 的试用额度,有效期为 7 天,无需信用卡。
  2. 在 SillyTavern 中,打开插件图标(API 连接)并将 API 类型设置为Chat Completion。
  3. 选择 Custom(OpenAI 兼容) 源。
  4. 输入 https://api.abliterated.cc/v1 作为接口 URL,并将你的密钥粘贴到 API 密钥字段中。
  5. 输入 uncensored 作为 model ID,然后按连接。绿色状态表示对 /v1/models 的请求成功。

如果连接失败,请先检查 URL。它必须以 /v1 结尾,且后面没有额外路径,也没有多余的 /chat/completions。客户端会自动添加该部分。

建议的起始设置

Temperature 在 0.8 到 1.0 之间可以产生生动的散文。保持 top_p 接近 0.9。如果回复开始重复相同的短语,添加一个小的 frequency penalty,约为 0.2。设置接近真实窗口的上下文大小,但为回复留出空间。然后在几场戏后通过感觉进行调整。

在 Python 中构建你自己的角色扮演循环

如果你编写自己的前端或 Discord 机器人,OpenAI SDK 就足够了。此脚本保留完整历史记录,流式输出回复,并防止模型替你写台词。

from openai import OpenAI

client = OpenAI(
    base_url="https://api.abliterated.cc/v1",
    api_key="YOUR_KEY",
)

system = (
    "You are Mara, a smuggler captain in a sea-faring fantasy setting. "
    "Write in third person, past tense, two short paragraphs per reply. "
    "Never write the actions or words of the player character."
)
history = [{"role": "system", "content": system}]

while True:
    user = input("> ")
    history.append({"role": "user", "content": user})

    stream = client.chat.completions.create(
        model="uncensored",
        messages=history,
        temperature=0.9,
        top_p=0.9,
        frequency_penalty=0.2,
        stop=["\nPlayer:"],
        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})

相同的调用在 Node、curl 或任何其他 OpenAI 客户端中均可使用。仅需更改 base URL、密钥和模型 ID。文档中的快速入门展示了每种变体。

编写模型可以遵循的角色卡

大多数角色扮演质量问题都是提示词问题。模糊的角色卡会产生模糊的角色。好的角色卡应控制在 300 到 600 个 token 之间,并涵盖四个方面:角色是谁、说话方式、当前目标,以及他们绝不能做的事。

具体胜过诗意。比较“Mara 神秘而危险”与“Mara 用问题回答问题,从不向陌生人透露她的真名,当有人站在她身后时,她会把一只手放在刀旁。”第二行为模型提供了可以在每一轮中重现的行为。

  • 声线样本。 添加两到三行示例对话。模型从示例中模仿节奏和词汇的可靠性高于从形容词中模仿。
  • 格式规则。 说明人物、时态、长度以及是否使用星号表示动作。除非明确告知一次,否则模型在格式上容易偏离。
  • 场景状态。 将当前地点、时间和未结束的线索放在提示词的末尾,因为最近的信息具有最强的影响力。
  • 边界。 如果故事仅涉及成年人,请在角色卡中说明。例如“所有角色均为成年人”这样的行,能让你和任何查看日志的人对设定保持清晰。

修复扁平、循环或强势的角色

这些是在第一个小时后出现的问题,以及通常的修复方法。

角色会重复自己

短语会在几次回复后再次出现。将 frequency_penalty 调高至 0.3,将 presence_penalty 调高至 0.1,将 temperature 调高 0.1,并检查你的摘要或示例对话本身是否包含该短语。模型会复制它看到的内容。

回复越来越长

长回复会让模型认为长回复是正常的。从历史记录中删除几条,重申长度规则,并将 max_tokens 设置为可接受的阈值。该字段是可选的,因此只有在设置时才会作为上限起作用。

模型决定你的角色做什么

在系统消息中添加硬性规则,并在角色名称前缀上设置停止序列,如上面的脚本所示。如果你使用前端,请检查它是否使用相同的名称标签格式化历史记录。

故事停滞

给角色设定一个目标和倒计时。“她需要在潮汐变化前拿到地图”能推动剧情。没有欲望的角色会等待你的行动,导致场景停滞。

保持长故事连贯

100,000 token 的窗口很大,但长达数月的战役会超出其容量。请提前规划。

  • 锁定关键内容。 将角色卡和当前场景目标放在系统消息的顶部,这样它们就不会被截断。
  • 总结旧对话。 每 30 或 40 条消息,要求模型将最旧的聊天部分浓缩为简短摘要,然后用该摘要替换这些消息。
  • 使用设定列表。 将名称、地点和承诺存储在一个短块中,并在每轮刷新。模型更容易忘记 80 条消息前的次要细节,而不是最近提示词中陈述的事实。
  • 调试时使用 seed。 当你调整提示词时,固定的 seed 使比较更公平。

常见故障:模型替你扮演角色。在系统提示词中通过直接规则修复,并用上述类似的 stop sequence 进行辅助。另一个问题:每次回复都以相同的方式开头。稍微提高 temperature 并增加频率惩罚。

会话成本

定价为每 1M 输入 token $0.15,每 1M 输出 token $0.50,从预付额度中扣除。角色扮演是输入密集的,因为每轮都会发送整个历史记录,所以输入端占主导地位。

进行一次 50 轮会话。平均提示词为 6,000 token(角色卡加历史记录),每条回复大约 250 token。

  • 输入:50 x 6,000 = 300,000 token,即 0.3 x $0.15 = $0.045
  • 输出:50 x 250 = 12,500 token,即 0.0125 x $0.50 = $0.00625
  • 总计:$0.05125,约五美分

$20 充值大约可支持 390 次该规模的会话。充值金额为 $20 至 $500 的整数,并享有额外奖励:满 $50 赠 5%,满 $100 赠 10%,满 $200 赠 15%。额度永不过期,失败或被拒的请求不扣费。支持加密货币(TRC20 链 USDT、Base 链 USDC)支付。完整数字详见 定价页面。

问答

是否存在一款用于角色扮演的最佳去对齐 LLM?

没有。偏好因流派和写作风格而异。在决定之前,使用 $0.50 的免费试用额度,用你自己的场景测试候选模型。

我可以与 SillyTavern 一起使用吗?

可以。选择 Chat Completion,然后选择 Custom (OpenAI-compatible) 源,输入 base URL 和你的密钥,并将模型 ID 设置为 uncensored。

它允许任何内容吗?

它经过调整,可在合法成人用途中不进行内容拒绝。涉及未成年人的性内容始终不允许。

我可以发送多少历史记录?

上下文窗口为 100,000 token,在提示词和补全之间共享。

只差一张表单,即可获得密钥

创建账户,复制密钥,更改基础 URL。这就是全部设置。