62 lines
2.7 KiB
Go
62 lines
2.7 KiB
Go
package worker
|
|
|
|
import "strings"
|
|
|
|
const scriptAnalysisOutputRules = `将分析目标能够对应到标准字段的结果写入标准字段;无法对应到标准字段的目标写入 custom_analysis;因原文信息不足或目标不适用于剧本而无法完成的目标写入 unmatched_objectives。不得为了填充标准字段而曲解分析目标。
|
|
|
|
必须只返回一个合法 JSON 对象,不得输出 Markdown、代码围栏、解释或额外文字。所有字段均须存在并严格符合以下结构:
|
|
{
|
|
"tags": {
|
|
"drama_tags": ["标签"],
|
|
"applicable_scene_tags": ["适用场景标签"]
|
|
},
|
|
"selling_point": {
|
|
"summary": "一句话总结",
|
|
"highlights": [
|
|
{"type": "爽点|痛点|卖点|看点", "content": "具体内容"}
|
|
]
|
|
},
|
|
"story_structure": {
|
|
"synopsis": "短剧简介",
|
|
"story_outline": ["按故事阶段组织的大纲"],
|
|
"emotion_outline": [
|
|
{"stage": "情绪阶段", "emotion": "主导情绪", "description": "情绪变化"}
|
|
],
|
|
"episode_outlines": [
|
|
{"episode_no": 1, "title": "集标题", "outline": "本集大纲", "emotion": "本集情绪"}
|
|
],
|
|
"characters": [
|
|
{"name": "人物名", "faction": "正派|反派|中立派", "biography": "人物小传", "motivation": "核心动机", "relationship": "关键人物关系"}
|
|
]
|
|
},
|
|
"opening_hook": {
|
|
"first_scene": "开篇第一个画面或场景",
|
|
"first_line": "第一句台词",
|
|
"attention_methods": ["悬念前置|激烈冲突|视觉奇观|其他明确手法"],
|
|
"analysis": "为什么能或不能抓住观众",
|
|
"optimization": "必要时给出优化建议"
|
|
},
|
|
"episode_hooks": [
|
|
{"episode_no": 1, "hook_type": "钩子类型", "hook": "本集结尾或关键卡点钩子", "basis": "对应的原文依据或信息不足说明"}
|
|
],
|
|
"episode_10_paywall_hooks": [
|
|
{"hook_type": "钩子类型", "content": "付费卡点候选", "appeal": "促使继续付费观看的原因"}
|
|
],
|
|
"custom_analysis": [
|
|
{"objective": "无法对应标准字段的分析目标", "conclusion": "分析结论", "evidence": ["剧本原文依据"]}
|
|
],
|
|
"unmatched_objectives": [
|
|
{"objective": "无法完成的分析目标", "reason": "无法完成的原因"}
|
|
]
|
|
}
|
|
|
|
仅当分析目标要求逐集钩子时,episode_hooks 必须按 episode_no 从1到10排列且恰好返回10项;仅当分析目标要求第10集付费卡点时,episode_10_paywall_hooks 返回3至5项。其他情况下对应数组返回空数组。`
|
|
|
|
func scriptAnalysisSystemPrompt(analysisGoal string) string {
|
|
goal := strings.TrimSpace(analysisGoal)
|
|
if goal == "" {
|
|
return scriptAnalysisOutputRules
|
|
}
|
|
return goal + "\n\n" + scriptAnalysisOutputRules
|
|
}
|