61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package context
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/yourname/cyrene-ai/ai-core/internal/memory"
|
|
"github.com/yourname/cyrene-ai/ai-core/internal/model"
|
|
"github.com/yourname/cyrene-ai/ai-core/internal/persona"
|
|
)
|
|
|
|
type BuildParams struct {
|
|
UserID string
|
|
SessionID string
|
|
UserMessage string
|
|
Persona *persona.PersonaConfig
|
|
Memories []memory.MemoryEntry
|
|
HistoryLimit int
|
|
}
|
|
|
|
// Build 构建发送给LLM的完整消息列表
|
|
func (b *Builder) Build(ctx context.Context, params BuildParams) ([]model.LLMMessage, error) {
|
|
messages := []model.LLMMessage{}
|
|
|
|
// 1. 系统消息 —— 昔涟的人格Prompt
|
|
systemPrompt := params.Persona.BuildSystemPrompt(
|
|
params.UserID, // 后续可替换为真实用户名
|
|
1, // 初始好感度
|
|
)
|
|
messages = append(messages, model.LLMMessage{
|
|
Role: "system",
|
|
Content: systemPrompt,
|
|
})
|
|
|
|
// 2. 记忆注入 —— 相关记忆以系统消息形式注入
|
|
if len(params.Memories) > 0 {
|
|
memoryPrompt := "【以下是关于开拓者的一些重要记忆,请在合适的时机自然地提及】\n"
|
|
for _, m := range params.Memories {
|
|
memoryPrompt += fmt.Sprintf("- %s\n", m.Content)
|
|
}
|
|
messages = append(messages, model.LLMMessage{
|
|
Role: "system",
|
|
Content: memoryPrompt,
|
|
})
|
|
}
|
|
|
|
// 3. 历史对话
|
|
history, err := b.loadHistory(ctx, params.SessionID, params.HistoryLimit)
|
|
if err == nil {
|
|
messages = append(messages, history...)
|
|
}
|
|
|
|
// 4. 当前用户消息
|
|
messages = append(messages, model.LLMMessage{
|
|
Role: "user",
|
|
Content: params.UserMessage,
|
|
})
|
|
|
|
return messages, nil
|
|
}
|