package translator import ( "fmt" "strings" ) // PromptManager Prompt管理器 type PromptManager struct { prompts map[string]string } // NewPromptManager 创建Prompt管理器 func NewPromptManager(prompts map[string]string) *PromptManager { if prompts == nil { prompts = make(map[string]string) } return &PromptManager{ prompts: prompts, } } // GetPrompt 获取指定名称的Prompt func (pm *PromptManager) GetPrompt(name string) string { prompt, exists := pm.prompts[name] if !exists { return "" } return prompt } // SetPrompt 设置Prompt func (pm *PromptManager) SetPrompt(name, content string) { pm.prompts[name] = content } // DeletePrompt 删除Prompt func (pm *PromptManager) DeletePrompt(name string) { delete(pm.prompts, name) } // HasPrompt 检查Prompt是否存在 func (pm *PromptManager) HasPrompt(name string) bool { _, exists := pm.prompts[name] return exists } // GetAllPrompts 获取所有Prompt名称 func (pm *PromptManager) GetAllPrompts() []string { names := make([]string, 0, len(pm.prompts)) for name := range pm.prompts { names = append(names, name) } return names } // GetPromptCount 获取Prompt数量 func (pm *PromptManager) GetPromptCount() int { return len(pm.prompts) } // FormatPrompt 格式化Prompt,替换变量 func (pm *PromptManager) FormatPrompt(name string, vars map[string]string) string { prompt := pm.GetPrompt(name) if prompt == "" { return "" } // 替换变量 for key, value := range vars { placeholder := fmt.Sprintf("{{%s}}", key) prompt = strings.ReplaceAll(prompt, placeholder, value) } return prompt } // ValidatePrompt 验证Prompt是否包含必要变量 func (pm *PromptManager) ValidatePrompt(name string, requiredVars []string) error { prompt := pm.GetPrompt(name) if prompt == "" { return fmt.Errorf("prompt '%s' 不存在", name) } for _, varName := range requiredVars { placeholder := fmt.Sprintf("{{%s}}", varName) if !strings.Contains(prompt, placeholder) { return fmt.Errorf("prompt '%s' 缺少必要变量: %s", name, varName) } } return nil } // AddDefaultPrompts 添加默认Prompts func (pm *PromptManager) AddDefaultPrompts() { defaults := map[string]string{ "technical": "你是一位专业的技术翻译,请准确翻译以下技术文档,保持专业术语的准确性。", "creative": "你是一位富有创造力的翻译家,请用优美流畅的语言翻译以下内容。", "academic": "你是一位学术翻译专家,请用严谨的学术语言翻译以下内容。", "simple": "请用简单易懂的语言翻译以下内容。", "code": "你是一位专业的代码翻译专家,请准确翻译以下代码注释和文档,保持代码结构和注释格式。", } for name, content := range defaults { if !pm.HasPrompt(name) { pm.SetPrompt(name, content) } } } // GetPromptWithFallback 获取Prompt,如果不存在则返回默认Prompt func (pm *PromptManager) GetPromptWithFallback(name, fallback string) string { prompt := pm.GetPrompt(name) if prompt == "" { return fallback } return prompt } // MergePrompts 合并多个Prompt func (pm *PromptManager) MergePrompts(names []string, separator string) string { var prompts []string for _, name := range names { prompt := pm.GetPrompt(name) if prompt != "" { prompts = append(prompts, prompt) } } return strings.Join(prompts, separator) }