248 lines
7.4 KiB
Go
248 lines
7.4 KiB
Go
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 QuestionDistillPrompt(brandName, competitors, seedTopic string) string {
|
|
return strings.TrimSpace(fmt.Sprintf(
|
|
trimPrompt(loadRuntimePrompts().QuestionDistillPromptTemplate),
|
|
strings.TrimSpace(brandName),
|
|
strings.TrimSpace(competitors),
|
|
strings.TrimSpace(seedTopic),
|
|
))
|
|
}
|
|
|
|
func QuestionCombinationFillPrompt(brandName, website, description, competitors, regionTerms, currentInput string) string {
|
|
return strings.TrimSpace(fmt.Sprintf(
|
|
trimPrompt(loadRuntimePrompts().QuestionCombinationFillPromptTemplate),
|
|
strings.TrimSpace(brandName),
|
|
strings.TrimSpace(website),
|
|
strings.TrimSpace(description),
|
|
strings.TrimSpace(competitors),
|
|
strings.TrimSpace(regionTerms),
|
|
strings.TrimSpace(currentInput),
|
|
))
|
|
}
|
|
|
|
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)
|
|
}
|