64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package generators
|
|
|
|
import (
|
|
"learning-assistant/internal/ai"
|
|
)
|
|
|
|
// GeneratorType 生成器类型
|
|
type GeneratorType string
|
|
|
|
const (
|
|
GeneratorMermaid GeneratorType = "mermaid"
|
|
GeneratorGuodegang GeneratorType = "guodegang"
|
|
GeneratorQuiz GeneratorType = "quiz"
|
|
GeneratorCard GeneratorType = "card"
|
|
GeneratorScenario GeneratorType = "scenario"
|
|
)
|
|
|
|
// GenerateResult 生成结果
|
|
type GenerateResult struct {
|
|
Type GeneratorType
|
|
Content string
|
|
Error error
|
|
}
|
|
|
|
// BaseGenerator 基础生成器
|
|
type BaseGenerator struct {
|
|
client *ai.SiliconFlowClient
|
|
promptManager *ai.PromptManager
|
|
}
|
|
|
|
// NewBaseGenerator 创建基础生成器
|
|
func NewBaseGenerator(client *ai.SiliconFlowClient, promptManager *ai.PromptManager) *BaseGenerator {
|
|
return &BaseGenerator{
|
|
client: client,
|
|
promptManager: promptManager,
|
|
}
|
|
}
|
|
|
|
// Generate 生成内容
|
|
func (g *BaseGenerator) Generate(genType GeneratorType, knowledge string, resultChan chan<- GenerateResult) {
|
|
prompt, err := g.promptManager.GeneratePrompt(string(genType), knowledge)
|
|
if err != nil {
|
|
resultChan <- GenerateResult{
|
|
Type: genType,
|
|
Error: err,
|
|
}
|
|
return
|
|
}
|
|
|
|
content, err := g.client.Generate(prompt)
|
|
if err != nil {
|
|
resultChan <- GenerateResult{
|
|
Type: genType,
|
|
Error: err,
|
|
}
|
|
return
|
|
}
|
|
|
|
resultChan <- GenerateResult{
|
|
Type: genType,
|
|
Content: content,
|
|
}
|
|
}
|