haixunMaster/haixun-backend/internal/library/prompt/compose.go

181 lines
4.6 KiB
Go
Raw Normal View History

2026-06-23 16:55:10 +00:00
package prompt
2026-06-24 10:02:42 +00:00
import (
"encoding/json"
"strings"
)
2026-06-23 16:55:10 +00:00
const overlaySeparator = "\n\n---\n\n"
// ComposeSystem prepends global overlay to the base system prompt before provider send.
func ComposeSystem(base string) (string, error) {
base = strings.TrimSpace(base)
overlayText, err := Overlay()
if err != nil {
return "", err
}
overlayText = strings.TrimSpace(overlayText)
if overlayText == "" {
return base, nil
}
if base == "" {
return overlayText, nil
}
return overlayText + overlaySeparator + base, nil
}
// Style8DSystem loads 8D slots from config files and composes the outgoing system prompt.
func Style8DSystem() (string, error) {
system, err := Slot(KeyStyle8DSystem)
if err != nil {
return "", err
}
schema, err := Slot(KeyStyle8DSchema)
if err != nil {
return "", err
}
return ComposeSystem(system + schema)
}
// IslanderSystem composes the islander guide system prompt with optional live page context.
func IslanderSystem(pageContext string) (string, error) {
base, err := Slot(KeyIslanderSystem)
if err != nil {
return "", err
}
pageContext = strings.TrimSpace(pageContext)
if pageContext != "" {
base = base + "\n\n---\n\n" + pageContext
}
return ComposeSystem(base)
}
2026-06-24 10:02:42 +00:00
// KnowledgeGraphSystem composes the TKG synthesis system prompt.
func KnowledgeGraphSystem() (string, error) {
base, err := Slot(KeyKnowledgeGraphSystem)
if err != nil {
return "", err
}
return ComposeSystem(base)
}
2026-06-24 16:48:56 +00:00
// KnowledgeGraphLLMSystem composes the LLM-only TKG synthesis system prompt.
func KnowledgeGraphLLMSystem() (string, error) {
base, err := Slot(KeyKnowledgeGraphLLMSystem)
if err != nil {
return "", err
}
return ComposeSystem(base)
}
2026-06-24 10:02:42 +00:00
// KnowledgeGraphUser renders the TKG user prompt from the template slot.
func KnowledgeGraphUser(vars map[string]string) (string, error) {
base, err := Slot(KeyKnowledgeGraphUser)
if err != nil {
return "", err
}
return renderTemplate(base, vars), nil
}
2026-06-24 16:48:56 +00:00
// KnowledgeGraphLLMUser renders the LLM-only TKG user prompt.
func KnowledgeGraphLLMUser(vars map[string]string) (string, error) {
base, err := Slot(KeyKnowledgeGraphLLMUser)
if err != nil {
return "", err
}
return renderTemplate(base, vars), nil
}
2026-06-24 10:02:42 +00:00
// KnowledgeGraphSupplemental returns the supplemental-round instruction prompt.
func KnowledgeGraphSupplemental() (string, error) {
return Slot(KeyKnowledgeGraphSupplemental)
}
// KnowledgeGraphQueryConfig loads query template config from prompt files.
func KnowledgeGraphQueryConfig() (map[string]json.RawMessage, error) {
raw, err := readFile(fileKnowledgeGraphQueries)
if err != nil {
return nil, err
}
out := map[string]json.RawMessage{}
if err := json.Unmarshal([]byte(raw), &out); err != nil {
return nil, err
}
return out, nil
}
func renderTemplate(base string, vars map[string]string) string {
out := base
for key, value := range vars {
out = strings.ReplaceAll(out, "{{"+key+"}}", value)
}
return strings.TrimSpace(out)
}
// OutreachPlacementSystem composes placement outreach comment system prompt.
func OutreachPlacementSystem() (string, error) {
base, err := Slot(KeyOutreachPlacementSystem)
if err != nil {
return "", err
}
return ComposeSystem(base)
}
// OutreachPlacementUser renders outreach user prompt from template slot.
func OutreachPlacementUser(vars map[string]string) (string, error) {
base, err := Slot(KeyOutreachPlacementUser)
if err != nil {
return "", err
}
return renderTemplate(base, vars), nil
}
// MatrixPlacementSystem composes content matrix system prompt.
func MatrixPlacementSystem() (string, error) {
base, err := Slot(KeyMatrixPlacementSystem)
if err != nil {
return "", err
}
return ComposeSystem(base)
}
// MatrixPlacementUser renders matrix user prompt from template slot.
func MatrixPlacementUser(vars map[string]string) (string, error) {
base, err := Slot(KeyMatrixPlacementUser)
if err != nil {
return "", err
}
return renderTemplate(base, vars), nil
}
2026-06-25 08:20:03 +00:00
// MatrixCopySystem composes copy-mission matrix system prompt.
func MatrixCopySystem() (string, error) {
base, err := Slot(KeyMatrixCopySystem)
if err != nil {
return "", err
}
return ComposeSystem(base)
}
// MatrixCopyUser renders copy matrix user prompt from template slot.
func MatrixCopyUser(vars map[string]string) (string, error) {
base, err := Slot(KeyMatrixCopyUser)
if err != nil {
return "", err
}
return renderTemplate(base, vars), nil
}
2026-06-23 16:55:10 +00:00
// AIChatSystem composes the outgoing system prompt for console AI chat.
func AIChatSystem(clientSystem string) (string, error) {
base := strings.TrimSpace(clientSystem)
if base == "" {
var err error
base, err = Slot(KeyAIChatSystem)
if err != nil {
return "", err
}
}
return ComposeSystem(base)
2026-06-24 10:02:42 +00:00
}