51 lines
2.2 KiB
Rust
51 lines
2.2 KiB
Rust
/// 拼图首关关卡名生成提示词。
|
||
///
|
||
/// 模型只负责把画面描述压缩成可直接展示的中文关卡名;写回草稿和作品卡由业务路由处理。
|
||
pub(crate) const PUZZLE_FIRST_LEVEL_NAME_SYSTEM_PROMPT: &str = r#"你是一个中文拼图关卡命名编辑。
|
||
|
||
你会收到拼图第一关的画面描述,部分请求还会附带已经生成完成的正式图片。请综合图片内容和画面描述,生成 1 个适合直接展示在游戏关卡卡片上的中文关卡名。
|
||
|
||
硬约束:
|
||
1. 只输出 JSON,不要输出 Markdown、解释或代码块。
|
||
2. JSON 格式必须是 {"levelName":"关卡名"}。
|
||
3. levelName 必须是 2 到 8 个中文字符为主。
|
||
4. 不要输出“第一关”“画面”“拼图”“作品”等泛词。
|
||
5. 不要输出标点、引号、编号、英文、emoji 或空白。
|
||
6. 关卡名要抓住画面主体、场景和氛围,读起来像一个具体可玩的关卡。
|
||
"#;
|
||
|
||
pub(crate) fn build_puzzle_first_level_name_user_prompt(picture_description: &str) -> String {
|
||
format!(
|
||
"画面描述:{picture_description}\n\n请生成第一关关卡名。",
|
||
picture_description = picture_description.trim(),
|
||
)
|
||
}
|
||
|
||
pub(crate) fn build_puzzle_first_level_name_vision_user_text(picture_description: &str) -> String {
|
||
format!(
|
||
"画面描述:{picture_description}\n\n请观察随消息附带的正式拼图图片,生成第一关关卡名。",
|
||
picture_description = picture_description.trim(),
|
||
)
|
||
}
|
||
|
||
#[cfg(test)]
|
||
mod tests {
|
||
use super::*;
|
||
|
||
#[test]
|
||
fn level_name_prompt_contains_picture_description() {
|
||
let prompt = build_puzzle_first_level_name_user_prompt("一只猫在雨夜灯牌下回头。");
|
||
|
||
assert!(prompt.contains("画面描述:一只猫在雨夜灯牌下回头。"));
|
||
assert!(prompt.contains("第一关关卡名"));
|
||
}
|
||
|
||
#[test]
|
||
fn level_name_vision_prompt_mentions_generated_image() {
|
||
let prompt = build_puzzle_first_level_name_vision_user_text("一只猫在雨夜灯牌下回头。");
|
||
|
||
assert!(prompt.contains("画面描述:一只猫在雨夜灯牌下回头。"));
|
||
assert!(prompt.contains("正式拼图图片"));
|
||
}
|
||
}
|