中文 ▾
获取 API 密钥

Uncensored VideoSora 2 API:在视频管线中使用无审查文本

与 AI 角色扮演:免费试用设置与实际成本

如果你希望与 AI 进行角色扮演且无需按消息付费,诚实的做法是保留少量试用余额并使用按 token 计费的 API。本文展示了试用额度能覆盖多少范围、如何连接聊天前端,以及一个回合实际花费多少。

更新于

由数据流驱动的发光对话气泡舞台,代表通过 API 进行的 AI 角色扮演

要点

  • $0.50 的试用额度足以进行数百次简短的角色扮演回合,有效期 7 天,无需付款。
  • 任何接受 OpenAI 兼容接口的前端均可使用:设置 base URL、密钥和模型 uncensored。
  • 成本由聊天历史记录长度决定,而非回复长度。精简或总结旧回合。
  • 仅限合法成人的虚构和角色扮演。绝不涉及未成年人。

此处的“免费”含义

该服务没有无限免费聊天,最好提前说明。你获得的是试用余额:使用 Google 或电子邮件和密码注册后,你可以在 API 密钥页面 上一键领取 $0.50 的试用额度。每人限领一次,有效期 7 天,无需付款。试用密钥支持 2 个并发请求和每分钟 60 个请求,这对于单人聊天已绰绰有余。

这听起来很少,但 token 很便宜。输入成本为每 1M token $0.15,输出成本为每 1M token $0.50。一次典型的角色扮演回合,使用 8,000 token 的提示词和 300 token 的回复,成本为 $0.00135,因此 $0.50 大约可覆盖 370 次回合。对许多人来说,这足以度过整个晚上或完成几部短篇故事,足以在产生任何费用之前判断设置是否适合你。

当试用额度用完时,你可以从 $20 起以任意整数金额充值,最高 $500。额度永不过期,失败或被拒绝的请求不收费,且无需取消订阅。该站点仅接受加密货币:TRC20 上的 USDT 或 Base 上的 USDC。

选择前端

API 仅通过 HTTP 传输文本。你仍需要一些工具来保存你的角色、聊天历史记录和提示词模板。三种常见选择:

  • SillyTavern。 一款专为角色聊天构建的本地 Web 应用,支持设定集、人设和预设。它允许你添加一个 OpenAI 兼容的接口,这正是本 API 所提供的。
  • 另一个聊天客户端 暴露了自定义 OpenAI 兼容 URL 的字段。寻找名为自定义接口、代理或 OpenAI 兼容的设置。
  • 你自己的脚本。 50 行 Python 代码即可让你完全掌控内存、提示词和成本。这也是查看实际发送内容的最佳方式。

如果你正在构建应用而不仅仅是聊天,相同的调用也适用于任何 OpenAI SDK。文档中的快速入门在一个地方列出了接口、标头和限制。

分五步连接 SillyTavern

  1. 创建账户,打开API 密钥页面,领取试用额度并复制你的密钥。
  2. 在 SillyTavern 中,打开插件图标(API 连接)并将 API 类型设置为Chat Completion。
  3. 选择名为 Custom (OpenAI-compatible) 的源。
  4. 将https://api.uncensoredvideo.cc/v1粘贴到自定义接口字段,将密钥粘贴到密钥字段,并将uncensored输入为模型 ID。
  5. 点击连接。绿色状态表示对GET /v1/models的请求或测试消息成功。

菜单标签在 SillyTavern 版本之间会有所变化,因此请按意思对应而非照搬措辞。在责怪应用之前,请从终端测试密钥:

curl https://api.uncensoredvideo.cc/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"uncensored","messages":[{"role":"user","content":"Reply with the word ready."}]}'

如果 curl 能正常工作但应用不行,问题出在应用的字段中:缺少 /v1、密钥中有意外空格,或模型名称错误。

或者编写一个简单的聊天循环

脚本是了解角色扮演成本的好方法,因为你可以打印每次回合的 token 使用情况。此脚本保留人格提示词,将历史记录限制为最后 20 条消息,并流式输出回复。

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.uncensoredvideo.cc/v1",
    api_key=os.environ["API_KEY"],
)

system = (
    "You are Mara, a dry-witted smuggler pilot in a space-opera story. "
    "Stay in character, write in third person, keep replies under 150 words."
)
history = []

while True:
    user = input("> ")
    history.append({"role": "user", "content": user})
    messages = [{"role": "system", "content": system}] + history[-20:]
    stream = client.chat.completions.create(
        model="uncensored",
        messages=messages,
        temperature=0.9,
        top_p=0.95,
        max_tokens=300,
        stream=True,
        stream_options={"include_usage": 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)
        if chunk.usage:
            print("\n[tokens in/out: %d/%d]" % (chunk.usage.prompt_tokens, chunk.usage.completion_tokens))
    history.append({"role": "assistant", "content": reply})

观察使用情况行。经过几十次回合后,你会看到输入计数上升,而输出保持平稳。这是你需要管理的数字。

编写一个持久的角色提示词

大多数角色扮演问题始于提示词,而非模型。一个好的角色提示词应简短且具体。给角色起名,用一两句话描述语气,描述背景,并说明回复长度。然后停止。每条额外规则都是你在每轮对话中都要付费的 token,而冗长的“要”和“不要”列表往往不如清晰的示例执行得好。

比较两种描述同一飞行员的方式。第一种说她勇敢、有趣、忠诚和聪明。这没有给模型任何可据以行动的信息。第二种说她先开玩笑回答问题,再说真话,除非被问两次,否则不解释过去,并在飞船部件损坏时轻微咒骂。第二种给出了模型可以重复的习惯,而习惯正是读者体验到的个性。

添加一个简短的三到四行对话示例。模型非常擅长模仿节奏,因此示例可以固定长度、时态和视角,而无需单独的规则。如果你使用第二人称,请展示它。如果你想要斜体叙述,也请展示。将示例放在系统提示词中或作为历史记录的前几条消息。

最后,决定谁控制其他角色。如果你希望模型扮演整个演员阵容,请说明。如果你希望它只扮演一个角色,请说明它绝不能写你角色的话语或动作。在你角色名称上的停止序列可在 API 层面支持这一点。

一次角色扮演回合的成本

每次请求都会重新发送系统提示词、角色描述和历史记录,因此随着聊天变长,输入 token 会增长。以下是 300 token 回复的计算:其单独成本为 300 x $0.50 / 1,000,000 = $0.00015:

提示词大小输入成本每回合成本每 100 次回合$0.50 可支持的回合数
4,000 token$0.0006$0.00075$0.075约 666
8,000 token$0.0012$0.00135$0.135约 370
20,000 token$0.0030$0.00315$0.315约 158
50,000 token$0.0075$0.00765$0.765约 65

计算很简单。对于相同数量的回合,8,000 token 的提示词比 50,000 token 的提示词便宜约 5.7 倍。在 8,000 token 的水平下,$20 的充值可支持约 14,800 个回合。更大的充值有额外奖励:$50 起 +5%,$100 起 +10%,$200 起 +15%,因此 $100 可获赠 $110 额度。完整表格请参阅 定价页面。

保持长篇故事便宜且连贯

上下文窗口为 100,000 token(包含提示词和回复),因此你可以加载大量内容。但你通常不应这样做。长提示词成本更高,并给模型更多容易失去追踪的文本。以下习惯会有所帮助:

  • 先总结,再丢弃。 每 20 个回合,让模型对到目前为止的故事进行 150 词的总结,将其保留在系统提示词中,并删除旧消息。
  • 保持角色卡简短。 模型忽略的规则页就是你在每个回合都要付费的页面。
  • 限制回复长度。 max_tokens 是可选的,但限制可以防止回复失控并保持节奏紧凑。
  • 调整采样。 0.8 到 1.0 之间的温度适合小说。如果模型重复短语,稍微提高频率或存在惩罚。它们会被传递。
  • 使用stop序列,这样模型就不会替你写台词,例如在你的角色名称后加上冒号作为停止符。

固定种子也会一并传入,这在你想回放场景并比较两个提示词版本时很有帮助。

常见问题与快速修复

以下是长对话中最常遇到的问题,以及通常能解决问题的设置。

  • 模型替你说。 在系统提示词中添加一行,并在角色名称上设置停止序列。
  • 回复逐轮变长。 模型会复制早期回复的长度。降低 max_tokens,手动缩短一条长回复,即可重置该模式。
  • 重复短语。 略微提高温度,添加较小的存在惩罚或频率惩罚,并多样化你自己的消息。模型会镜像它所看到的内容。
  • 遗忘细节。 将必须保留的事实(如姓名、伤势和承诺)放在提示词顶部附近的简短固定笔记中,并在故事变化时刷新它。
  • 语调平淡。 提供更强的声音示例。语调更多来自示例,而非形容词。

当出现异常情况时,打印你的脚本发送的完整消息列表。十有八九,原因在提示词本身可见:一条残留的指令、重复的摘要,或未修剪的历史记录。

可能遇到的限制和错误

完整密钥允许 8 个并发请求和每分钟 300 个请求,试用密钥为 2 和 60。如果超出限制,API 将返回 HTTP 429。错误代码 rate_limited 表示每分钟请求过多,concurrency 表示同时请求过多。带有 Retry-After: 5 头的 429 响应表示临时过载,因此等待五秒后重试。

一个容易让人忽略的细节:流式请求会占用其并发槽位,直到流结束。如果你在试用密钥上快速点击三次重新生成,第三次尝试可能会因 concurrency 而失败。等待流结束,或让客户端在短暂暂停后重试。每个响应都包含 X-Balance-USD,因此你的脚本可以在每轮之后打印剩余余额。

一条不变的规则:该模型经过调整,可在合法成人使用中无内容拒绝地回答,且不会生成涉及未成年人的性内容。让你的故事保持在此界限内。提示词不用于训练。

问答

有永久免费套餐吗?

没有。免费部分是注册后每人可领取一次的 $0.50 试用额度。之后你按 token 从预付额度付费,起始充值额为 $20。

我可以用哪些应用进行角色扮演?

任何允许你设置 OpenAI 兼容 base URL、API 密钥和模型名称的应用或脚本。SillyTavern 是常见选择,简短的 Python 循环也可以。

模型会拒绝角色扮演场景吗?

该模型经过调整,可在合法成人用途中不因内容而拒绝回答。它仍不会生成涉及未成年人的性内容,且该限制不可更改。

如何避免长篇故事费用高昂?

保持提示词简短。总结旧回合,限制发送的历史记录量,并设置合理的回复长度。在长对话中,输入 token 是账单的主要部分。

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

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

获取 API 密钥