132 lines
3.3 KiB
Go
132 lines
3.3 KiB
Go
|
|
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)
|
|||
|
|
}
|