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 PromptRuleSupplementSection(items []string) string { return trimPrompt(loadRuntimePrompts().PromptRuleSupplementHeading) + "\n- " + strings.Join(items, "\n- ") } func PromptRuleOutputRequirementsSection() string { return trimPrompt(loadRuntimePrompts().PromptRuleOutputRequirementsSection) } func ArticleImitationPrompt(locale, sourceMeta, settingsBlock, knowledgeSection, sourceContent string) string { runtime := loadRuntimePrompts() template := trimPrompt(runtime.ArticleImitationPromptTemplate) if template == "" { template = `你是一名资深内容策略编辑,请基于给定源文章做高质量仿写创作。 %s ## 源文章 %s ## 仿写设置 %s %s ## 源文章内容 %s 请开始输出仿写后的完整文章。` } return strings.TrimSpace(fmt.Sprintf( template, ArticleImitationLocaleInstruction(locale), strings.TrimSpace(sourceMeta), strings.TrimSpace(settingsBlock), strings.TrimSpace(knowledgeSection), strings.TrimSpace(sourceContent), )) } func ArticleImitationLocaleInstruction(locale string) string { instructions := loadRuntimePrompts().ArticleImitationLocaleInstructions if value, ok := instructions[strings.TrimSpace(locale)]; ok && strings.TrimSpace(value) != "" { return strings.TrimSpace(value) } if strings.EqualFold(strings.TrimSpace(locale), "en-US") { return "Output language: English." } return "输出语言:中文简体。" } func ArticleImitationSettingLabel(key string) string { labels := loadRuntimePrompts().ArticleImitationSettingLabels if value, ok := labels[strings.TrimSpace(key)]; ok && strings.TrimSpace(value) != "" { return strings.TrimSpace(value) } return strings.TrimSpace(key) } 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) }