Files
geo/server/internal/tenant/prompts/runtime.go
T
root 34ef5873ca
Deployment Config CI / Deployment Config (push) Successful in 27s
Backend CI / Backend (push) Successful in 16m5s
feat: load question expansion prompts from yaml
2026-05-13 20:24:51 +08:00

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)
}