package prompts import ( "fmt" "strings" ) func DefaultGenerationBasePrompt(templateName string) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().DefaultGenerationBasePromptTemplate), templateName) } func PromptContextSection(contextBlock string) string { return trimPrompt(loadRuntimePrompts().PromptContextHeading) + "\n" + contextBlock } func GenerationWritingRequirementsSection() string { return trimPrompt(loadRuntimePrompts().GenerationWritingRequirementsSection) } func GenerationTemplateSpecificRulesHeading() string { return trimPrompt(loadRuntimePrompts().GenerationTemplateSpecificRulesHeading) } func GenerationLengthGuidanceHeading() string { return trimPrompt(loadRuntimePrompts().GenerationLengthGuidanceHeading) } func TopXBrandPriorityRules(brandName string) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().TopXBrandPriorityRulesTemplate), brandName) } func EnglishLengthGuidance(minWords, maxWords int) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().EnglishLengthGuidanceTemplate), minWords, maxWords) } func ChineseLengthGuidance(minChars, maxChars int) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().ChineseLengthGuidanceTemplate), minChars, maxChars) } func ContextLabel(key string) string { if value, ok := loadRuntimePrompts().ContextLabels[key]; ok { return strings.TrimSpace(value) } return key } func TemplateContextWithJSONExample(basePrompt, contextJSON, outputExample string) string { return strings.TrimSpace(fmt.Sprintf( trimPrompt(loadRuntimePrompts().TemplateContextWithJSONExampleTemplate), basePrompt, contextJSON, outputExample, )) } func JSONOutputExampleSection(outputExample string) string { return trimPrompt(loadRuntimePrompts().JSONOutputExampleHeading) + "\n" + outputExample } func AnalyzeOutputExample() string { return trimPrompt(loadRuntimePrompts().AnalyzeOutputExample) } func AnalyzeFallbackPrompt(contextJSON string) string { return strings.TrimSpace(fmt.Sprintf( trimPrompt(loadRuntimePrompts().AnalyzeFallbackPromptTemplate), contextJSON, AnalyzeOutputExample(), )) } func TitleCustomOutputRequirementsSection() string { return trimPrompt(loadRuntimePrompts().TitleCustomOutputRequirementsSection) } func TitleOutputExample() string { return trimPrompt(loadRuntimePrompts().TitleOutputExample) } func TitleFallbackPrompt(contextJSON string) string { return strings.TrimSpace(fmt.Sprintf( trimPrompt(loadRuntimePrompts().TitleFallbackPromptTemplate), contextJSON, TitleOutputExample(), )) } func OutlineOutputExample() string { return trimPrompt(loadRuntimePrompts().OutlineOutputExample) } func OutlineCustomOutputRequirementsSection() string { return trimPrompt(loadRuntimePrompts().OutlineCustomOutputRequirementsSection) } func OutlineFallbackPrompt(contextJSON string) string { return strings.TrimSpace(fmt.Sprintf( trimPrompt(loadRuntimePrompts().OutlineFallbackPromptTemplate), contextJSON, OutlineOutputExample(), )) } func OutlineResponseFormatDescription() string { return trimPrompt(loadRuntimePrompts().OutlineResponseFormatDescription) } func PromptRuleTaskNameSupplement(taskName string) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().PromptRuleTaskNameSupplementFormat), taskName) } func PromptRuleSceneSupplement(scene string) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().PromptRuleSceneSupplementFormat), scene) } func PromptRuleToneSupplement(tone string) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().PromptRuleToneSupplementFormat), tone) } func PromptRuleWordCountSupplement(wordCount int) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().PromptRuleWordCountSupplementFormat), wordCount) } func PromptRuleTargetPlatformSupplement(target string) string { return fmt.Sprintf( trimPrompt(loadRuntimePrompts().PromptRuleTargetPlatformSupplementFormat), strings.ReplaceAll(target, ",", "、"), ) } func PromptRuleSupplementSection(items []string) string { return trimPrompt(loadRuntimePrompts().PromptRuleSupplementHeading) + "\n- " + strings.Join(items, "\n- ") } func PromptRuleOutputRequirementsSection() string { return trimPrompt(loadRuntimePrompts().PromptRuleOutputRequirementsSection) } func KnowledgePromptIntroLines() []string { lines := loadRuntimePrompts().KnowledgePromptIntroLines return append([]string(nil), lines...) } func KnowledgeSnippetLabel(index int) string { return fmt.Sprintf(trimPrompt(loadRuntimePrompts().KnowledgeSnippetLabelFormat), index+1) } func KnowledgeWebsiteMarkdownPrompt(title, rawURL, content string, chunkIndex, chunkCount int) string { cfg := loadRuntimePrompts().KnowledgeWebsiteMarkdown scope := trimPrompt(cfg.ScopeSingle) if chunkCount > 1 { scope = fmt.Sprintf(trimPrompt(cfg.ScopeMultiFormat), chunkIndex+1, chunkCount) } var builder strings.Builder builder.WriteString(trimPrompt(cfg.AssistantRole)) builder.WriteString("\n") builder.WriteString(trimPrompt(cfg.Task)) builder.WriteString("\n") builder.WriteString("要求:\n") for _, item := range cfg.Requirements { builder.WriteString(trimPrompt(item)) builder.WriteString("\n") } if strings.TrimSpace(title) != "" { builder.WriteString(trimPrompt(cfg.TitlePrefix)) builder.WriteString(title) builder.WriteString("\n") } if strings.TrimSpace(rawURL) != "" { builder.WriteString(trimPrompt(cfg.URLPrefix)) builder.WriteString(rawURL) builder.WriteString("\n") } builder.WriteString(scope) builder.WriteString("\n\n") builder.WriteString(content) return builder.String() } func trimPrompt(value string) string { return strings.TrimSpace(value) }