1
This commit is contained in:
@@ -58,15 +58,12 @@ mod tests {
|
||||
#[test]
|
||||
fn form_seed_prompt_keeps_only_user_visible_fields() {
|
||||
let prompt = build_puzzle_form_seed_prompt(PuzzleFormSeedPromptParts {
|
||||
title: Some(" 暖灯猫街 "),
|
||||
work_description: Some("雨夜礼物拼图"),
|
||||
title: None,
|
||||
work_description: None,
|
||||
picture_description: Some("猫咪在灯牌下回头"),
|
||||
});
|
||||
|
||||
assert_eq!(
|
||||
prompt,
|
||||
"作品名称:暖灯猫街\n作品描述:雨夜礼物拼图\n画面描述:猫咪在灯牌下回头"
|
||||
);
|
||||
assert_eq!(prompt, "画面描述:猫咪在灯牌下回头");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
35
server-rs/crates/api-server/src/prompt/puzzle/level_name.rs
Normal file
35
server-rs/crates/api-server/src/prompt/puzzle/level_name.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
/// 拼图首关关卡名生成提示词。
|
||||
///
|
||||
/// 模型只负责把画面描述压缩成可直接展示的中文关卡名;写回草稿和作品卡由业务路由处理。
|
||||
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(),
|
||||
)
|
||||
}
|
||||
|
||||
#[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("第一关关卡名"));
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
pub(crate) mod agent_chat;
|
||||
pub(crate) mod draft;
|
||||
pub(crate) mod image;
|
||||
pub(crate) mod level_name;
|
||||
pub(crate) mod tags;
|
||||
|
||||
40
server-rs/crates/api-server/src/prompt/puzzle/tags.rs
Normal file
40
server-rs/crates/api-server/src/prompt/puzzle/tags.rs
Normal file
@@ -0,0 +1,40 @@
|
||||
/// 拼图作品标签生成提示词。
|
||||
///
|
||||
/// 这里只负责标签生成的文本契约,业务路由负责调用 LLM、解析结果和写回草稿。
|
||||
pub(crate) const PUZZLE_TAG_GENERATION_SYSTEM_PROMPT: &str = r#"你是一个中文内容标签编辑。
|
||||
|
||||
你会收到拼图作品名称和作品描述。请生成 6 个适合作品广场检索和相似推荐的中文短标签。
|
||||
|
||||
硬约束:
|
||||
1. 只输出 JSON,不要输出 Markdown、解释或代码块。
|
||||
2. JSON 格式必须是 {"tags":["标签1","标签2","标签3","标签4","标签5","标签6"]}。
|
||||
3. tags 必须正好 6 个。
|
||||
4. 每个标签 2 到 6 个中文字符为主,不要整句描述。
|
||||
5. 不要输出空标签、重复标签、英文标签、编号、标点或井号。
|
||||
6. 标签要覆盖题材、主体、氛围、场景、风格和拼图辨识点。
|
||||
"#;
|
||||
|
||||
pub(crate) fn build_puzzle_tag_generation_user_prompt(
|
||||
work_title: &str,
|
||||
work_description: &str,
|
||||
) -> String {
|
||||
format!(
|
||||
"作品名称:{work_title}\n作品描述:{work_description}\n\n请生成 6 个作品标签。",
|
||||
work_title = work_title.trim(),
|
||||
work_description = work_description.trim(),
|
||||
)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn tag_prompt_contains_title_and_description() {
|
||||
let prompt = build_puzzle_tag_generation_user_prompt("雨夜猫街", "一套暖灯街角主题拼图。");
|
||||
|
||||
assert!(prompt.contains("作品名称:雨夜猫街"));
|
||||
assert!(prompt.contains("作品描述:一套暖灯街角主题拼图。"));
|
||||
assert!(prompt.contains("6 个作品标签"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user