AI 工具

Character.AI 角色设定:发布前 JSON 校验

在网页创建角色前,先用 JSON 校验名称/开场白/人设长度,并拦截「冒充真人」「提供专业建议」等危险开关。软长度限制需对照当前创作页再调。

BINBHO · 图文教程

在网页创建角色前,先用 JSON 校验名称/开场白/人设长度,并拦截「冒充真人」「提供专业建议」等危险开关。软长度限制需对照当前创作页再调。

先看清成品

  • sample_ok → OK;过长名称/空开场/专业建议样例 → INVALID。
  • 3 项 pytest 通过。

合规提醒:Character.AI 角色均为虚构内容,不代表真实人物,不能当作医疗/法律/金融等专业建议。平台有年龄限制与未成年人安全措施,请遵守官方规定。长时间聊天注意休息。官方 Help Center 表明目前没有面向开发者的公开 API;勿使用非官方逆向客户端(可能违反条款且不稳定)。本文不编造价格与会员权益。

运行说明:无 Character.AI API(官方亦无公开开发者 API)。三篇均为本地助手:角色定义校验、会话时长账本、导出/提示词虚构免责扫描。未登录 character.ai。2026-10-23(Asia/Shanghai)pytest 通过。

做完之后你会得到什么?

成果 说明
character_def.py 人设预检
样例 JSON ok/bad
test_106a.py 测试

需要准备哪些环境?

项目 说明
Python 3.10+

关键事实

事实 来源
官方称目前没有公开 API;有需求可邮件说明用例 Help Center 历史说明 / 定位
角色内容为 AI 虚构,非真人发言 产品重要说明
本校验只服务创作前自检,不代替平台审核 重要

文件结构

106-character-ai-A-src/
├── character_def.py
├── sample_ok.json
├── sample_bad.json
└── test_106a.py

第 1 步:预检脚本

#!/usr/bin/env python3
"""Validate a Character.AI-style character definition JSON before pasting into the creator UI.

Character.AI has no public developer API (Help Center). This is a local checklist only.
"""
from __future__ import annotations

import argparse
import json
from pathlib import Path

NAME_MAX = 20
GREETING_MAX = 500
PERSONALITY_MAX = 3500
# Soft tutorial limits aligned with common creator UI constraints; verify on character.ai.


def validate(cfg: dict) -> list[str]:
    errs = []
    name = (cfg.get("name") or "").strip()
    if not name:
        errs.append("name 必填")
    elif len(name) > NAME_MAX:
        errs.append(f"name 过长 {len(name)}>{NAME_MAX}")
    greeting = cfg.get("greeting") or cfg.get("first_message") or ""
    if not str(greeting).strip():
        errs.append("greeting / first_message 必填")
    elif len(greeting) > GREETING_MAX:
        errs.append(f"greeting 过长 {len(greeting)}>{GREETING_MAX}")
    personality = cfg.get("personality") or cfg.get("definition") or ""
    if not str(personality).strip():
        errs.append("personality / definition 必填")
    elif len(personality) > PERSONALITY_MAX:
        errs.append(f"personality 过长 {len(personality)}>{PERSONALITY_MAX}")
    if cfg.get("claims_real_person") is True and not cfg.get("parody_disclaimer"):
        errs.append("涉及真实人物形象时须加 parody_disclaimer,且遵守平台规则(虚构内容)")
    if cfg.get("offers_professional_advice") is True:
        errs.append("不得把角色定位成医疗/法律/金融等专业建议来源")
    age = cfg.get("min_user_age")
    if age is not None:
        try:
            if int(age) < 13:
                errs.append("min_user_age 不得低于平台年龄要求(以官网为准,常见 ≥13)")
        except (TypeError, ValueError):
            errs.append("min_user_age 须为整数")
    return errs


def main(argv=None) -> int:
    ap = argparse.ArgumentParser(description=__doc__)
    ap.add_argument("config_json")
    args = ap.parse_args(argv)
    cfg = json.loads(Path(args.config_json).read_text(encoding="utf-8"))
    errs = validate(cfg)
    if errs:
        print("INVALID")
        for e in errs:
            print("-", e)
        return 1
    print("OK")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

第 2 步:测试

from pathlib import Path
import json, subprocess, sys
from character_def import validate
HERE = Path(__file__).resolve().parent

def test_ok():
    assert validate(json.loads((HERE/"sample_ok.json").read_text())) == []

def test_bad():
    assert len(validate(json.loads((HERE/"sample_bad.json").read_text()))) >= 3

def test_cli():
    r = subprocess.run([sys.executable, str(HERE/"character_def.py"), str(HERE/"sample_ok.json")], capture_output=True, text=True)
    assert r.returncode == 0 and "OK" in r.stdout

第 3 步:运行

$ python character_def.py sample_ok.json
OK

$ python character_def.py sample_bad.json
INVALID
- name 过长 37>20
- greeting / first_message 必填
- 涉及真实人物形象时须加 parody_disclaimer,且遵守平台规则(虚构内容)
- 不得把角色定位成医疗/法律/金融等专业建议来源
- min_user_age 不得低于平台年龄要求(以官网为准,常见 ≥13)

$ pytest -q
...                                                                      [100%]
3 passed in 0.03s

怎么检查结果?

  • OK 样例退出码 0。
  • bad 至少指出 name/greeting/专业建议之一。

调试示例

想做「某明星本人」角色。 校验会要求 parody_disclaimer,且平台规则仍可能禁止。虚构娱乐可以,冒充与骚扰不行。

常见问题

现象 原因 处理
长度和官网不一致 UI 会变 改 NAME_MAX 等常量
要不要 API 官方无公开 API 只用网页/App
未成年人 遵守年龄与安全设置 不要绕过

模板规则

  • 不提供专业建议人设。
  • 不冒充真人。
  • 遵守年龄与社区规则。

项目资源

用途 地址
About(官方) https://character.ai/about
Blog(官方) https://blog.character.ai/

人设过关,再点创建——别把聊天机器人写成「真医生」。