现象
测试环境里可以提交任意动作描述,包括与角色形态不相容的、以及不适合出现在产品里的内容。实测输入过一个明显不合适的描述,全程无任何拦截,直接进入付费生成。
现状
ai_engine/prompt/lint.py 的措辞门禁只查形式:
- 否定词(模型不处理否定极性,只 latch 名词)
- 危险名词(提到即勾出特效)
- 亚阈值微动(低于模型可控分辨率)
- 持物动作无身体位移词(i2v 强跟身体弱跟持物)
- 装备形状先验(会让模型凭空造物)
这五条针对的都是**「这样写模型做不好」,没有一条针对「这个动作不该做」或「这个角色做不了这个动作」**。
两类不同的问题,不要混为一谈
一、物理上做不出来的动作
当母版姿态与所要求的动作不相容时(例如站立母版配趴卧动作),模型只能靠大幅变形调和图文矛盾,产出必然是坏的。
更正:本 issue 初稿曾断言某次实测里母版是站立姿态,那是未经核对的推测。实际核查该次生成,母版本身与描述相符。这条机制仍然成立,但不该拿那个例子当证据。
这一类的关键不是"不雅",而是钱花了必然拿不到可用结果。同类还有:让四足角色做双手动作、让远程角色做接触攻击、让站立母版做躺卧姿态。
master_prep.py 的 docstring 里已经记着同源的教训:母版姿态决定动作,提示词只能微调;attack 那条更狠——用站立母版时即使提示词写死约束,模型仍会突破。
二、内容上不适合出现在产品里的
这类与技术无关,是产品边界问题。
建议方向(需要拍板,不要直接实现)
对第一类
已有的 CharacterCard.stance(双足/四足/蛇形)是现成的抓手:可以对"体型与动作描述明显矛盾"给出拒绝,理由讲清机制("母版是站立姿态,趴卧类动作会让模型大幅变形,建议改用……")。
注意边界:判据要能自动判定且误判可接受。措辞门禁现有五条都是词表级的确定性判断;"这个动作这个身体做不做得到"是语义判断,规则化会有大量误伤。是否引入模型判断、以及误伤的代价谁承担,需要产品决策。
对第二类
这是产品策略问题,不是工程问题。可选做法从轻到重:
- 什么都不做(内部工具,用户自负)
- 词表拦截(成本低,但绕过成本更低,且会误伤正常描述)
- 模型判断(准确但每次请求都花钱,且需要定义边界)
建议先明确产品定位再选:面向内部/受控用户与面向公开注册用户,答案完全不同。
与既有机制的关系
拒绝通道已经就绪:PromptRejected(code, detail) 带机器可读的 code 与面向用户的机制说明,PromptRejectCode 加成员即可。所以这件事的成本不在实现,在定判据。
现象
测试环境里可以提交任意动作描述,包括与角色形态不相容的、以及不适合出现在产品里的内容。实测输入过一个明显不合适的描述,全程无任何拦截,直接进入付费生成。
现状
ai_engine/prompt/lint.py的措辞门禁只查形式:这五条针对的都是**「这样写模型做不好」,没有一条针对「这个动作不该做」或「这个角色做不了这个动作」**。
两类不同的问题,不要混为一谈
一、物理上做不出来的动作
当母版姿态与所要求的动作不相容时(例如站立母版配趴卧动作),模型只能靠大幅变形调和图文矛盾,产出必然是坏的。
更正:本 issue 初稿曾断言某次实测里母版是站立姿态,那是未经核对的推测。实际核查该次生成,母版本身与描述相符。这条机制仍然成立,但不该拿那个例子当证据。
这一类的关键不是"不雅",而是钱花了必然拿不到可用结果。同类还有:让四足角色做双手动作、让远程角色做接触攻击、让站立母版做躺卧姿态。
master_prep.py的 docstring 里已经记着同源的教训:母版姿态决定动作,提示词只能微调;attack 那条更狠——用站立母版时即使提示词写死约束,模型仍会突破。二、内容上不适合出现在产品里的
这类与技术无关,是产品边界问题。
建议方向(需要拍板,不要直接实现)
对第一类
已有的
CharacterCard.stance(双足/四足/蛇形)是现成的抓手:可以对"体型与动作描述明显矛盾"给出拒绝,理由讲清机制("母版是站立姿态,趴卧类动作会让模型大幅变形,建议改用……")。注意边界:判据要能自动判定且误判可接受。措辞门禁现有五条都是词表级的确定性判断;"这个动作这个身体做不做得到"是语义判断,规则化会有大量误伤。是否引入模型判断、以及误伤的代价谁承担,需要产品决策。
对第二类
这是产品策略问题,不是工程问题。可选做法从轻到重:
建议先明确产品定位再选:面向内部/受控用户与面向公开注册用户,答案完全不同。
与既有机制的关系
拒绝通道已经就绪:
PromptRejected(code, detail)带机器可读的 code 与面向用户的机制说明,PromptRejectCode加成员即可。所以这件事的成本不在实现,在定判据。