refactor: rewrite backend in Go, replacing Python FastAPI

Port the FastAPI backend to Go 1.26, preserving all API functionality:
- auth (register/login/guest/logout/profile/history) with JWT + bcrypt
- scripts (list/detail) backed by embedded sample_data.json
- games (create/join/start/chat/phase/clue/vote/state/replay) + WebSocket
- rule-based NPC agent plus DeepSeek/Ollama AI backends
- SQLite persistence via modernc.org/sqlite (pure Go, no cgo)

Frontend and documents are unchanged.
This commit is contained in:
gmh01
2026-08-03 11:39:53 +08:00
parent c176c04aab
commit 7614e79d12
43 changed files with 2498 additions and 1462 deletions
+38
View File
@@ -0,0 +1,38 @@
package agents
import (
"fmt"
"mmgame/internal/scripts"
)
type NPCAgent struct {
Role *scripts.Role
Background string
PublicInfo string
memory []ChatMessage
}
func NewNPCAgent(role *scripts.Role, background, publicInfo string) *NPCAgent {
return &NPCAgent{Role: role, Background: background, PublicInfo: publicInfo}
}
func (a *NPCAgent) Respond(phaseName string, recentMessages []map[string]string, playerMessage string, isPrivate bool, knownClues []string, phaseGoal string, allRoles []*scripts.Role) map[string]interface{} {
if len(recentMessages) > 5 {
recentMessages = recentMessages[len(recentMessages)-5:]
}
var recent []string
for _, m := range recentMessages {
sender := m["sender_name"]
if sender == "" {
sender = m["sender"]
}
recent = append(recent, fmt.Sprintf("%s: %s", sender, m["content"]))
}
result := NPCGenerate(a.Role, a.Background, phaseName, recent, playerMessage, isPrivate, knownClues, phaseGoal, allRoles)
if content, ok := result["content"].(string); ok && content != "" {
a.memory = append(a.memory, ChatMessage{Role: "assistant", Content: content})
return result
}
return map[string]interface{}{"content": a.Role.Name + "陷入了沉思……", "action": "speak"}
}