85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
package matrix
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
libprompt "haixun-backend/internal/library/prompt"
|
||
)
|
||
|
||
type CopyGenerateInput struct {
|
||
Count int
|
||
TopicLabel string
|
||
TopicBrief string
|
||
ResearchMap string
|
||
SelectedTags []string
|
||
ViralSamples string
|
||
PersonaBlock string
|
||
}
|
||
|
||
func BuildCopyUserPrompt(in CopyGenerateInput) (string, error) {
|
||
count := in.Count
|
||
if count <= 0 {
|
||
count = 5
|
||
}
|
||
if count > 12 {
|
||
count = 12
|
||
}
|
||
return libprompt.MatrixCopyUser(map[string]string{
|
||
"count": fmt.Sprintf("%d", count),
|
||
"topic_label": strings.TrimSpace(in.TopicLabel),
|
||
"topic_brief": strings.TrimSpace(in.TopicBrief),
|
||
"research_map_block": strings.TrimSpace(in.ResearchMap),
|
||
"selected_tags_block": formatTagList(in.SelectedTags),
|
||
"viral_samples_block": strings.TrimSpace(in.ViralSamples),
|
||
"persona_block": strings.TrimSpace(in.PersonaBlock),
|
||
})
|
||
}
|
||
|
||
func formatTagList(tags []string) string {
|
||
if len(tags) == 0 {
|
||
return "(尚未選擇)"
|
||
}
|
||
lines := make([]string, 0, len(tags))
|
||
for _, tag := range tags {
|
||
tag = strings.TrimSpace(tag)
|
||
if tag == "" {
|
||
continue
|
||
}
|
||
lines = append(lines, "- "+tag)
|
||
}
|
||
if len(lines) == 0 {
|
||
return "(尚未選擇)"
|
||
}
|
||
return strings.Join(lines, "\n")
|
||
}
|
||
|
||
func FormatCopyResearchMapBlock(audience, goal string, questions, pillars, exclusions []string) string {
|
||
var b strings.Builder
|
||
if audience = strings.TrimSpace(audience); audience != "" {
|
||
b.WriteString("受眾:")
|
||
b.WriteString(audience)
|
||
b.WriteString("\n")
|
||
}
|
||
if goal = strings.TrimSpace(goal); goal != "" {
|
||
b.WriteString("內容目標:")
|
||
b.WriteString(goal)
|
||
b.WriteString("\n")
|
||
}
|
||
if len(pillars) > 0 {
|
||
b.WriteString("支柱:")
|
||
b.WriteString(strings.Join(pillars, "、"))
|
||
b.WriteString("\n")
|
||
}
|
||
if len(questions) > 0 {
|
||
b.WriteString("受眾問題:")
|
||
b.WriteString(strings.Join(questions, ";"))
|
||
b.WriteString("\n")
|
||
}
|
||
if len(exclusions) > 0 {
|
||
b.WriteString("排除:")
|
||
b.WriteString(strings.Join(exclusions, ";"))
|
||
}
|
||
return strings.TrimSpace(b.String())
|
||
}
|