fix: 更新后端服务

- main.go: 更新模型初始化
- agent_repo, model_service: 优化

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 16:26:03 +08:00
parent fc1204a033
commit 715dc14b38
2 changed files with 85 additions and 4 deletions

View File

@@ -151,7 +151,7 @@ func main() {
}
// 3. 自动迁移表
db.AutoMigrate(&model.DatabaseInfo{}, &model.SubTableInfo{}, &model.ModelInfo{}, &model.KnowledgeBase{}, &model.KnowledgeDocument{}, &model.User{}, &model.Role{}, &model.Tool{}, &model.MCP{})
db.AutoMigrate(&model.DatabaseInfo{}, &model.SubTableInfo{}, &model.ModelInfo{}, &model.KnowledgeBase{}, &model.KnowledgeDocument{}, &model.User{}, &model.Role{}, &model.Tool{}, &model.MCP{}, &model.Skill{}, &model.Agent{}, &model.AgentSkill{}, &model.AgentKnowledgeBase{}, &model.AgentMemory{}, &model.AgentTeam{}, &model.AgentTask{})
// 3.1 确保 users 和 roles 表存在(使用 SQL 强制创建)
db.Exec(`
@@ -198,6 +198,46 @@ func main() {
)
`)
// 3.3 确保 MCP 表存在
db.Exec(`
CREATE TABLE IF NOT EXISTS mcp (
id VARCHAR(191) PRIMARY KEY,
name VARCHAR(100) UNIQUE NOT NULL,
description TEXT,
description_cn TEXT,
category VARCHAR(50) NOT NULL,
transport VARCHAR(20) DEFAULT 'stdio',
command VARCHAR(500),
args TEXT,
env TEXT,
status VARCHAR(20) DEFAULT 'active',
created_at DATETIME(3),
updated_at DATETIME(3),
INDEX idx_mcp_name (name),
INDEX idx_mcp_category (category),
INDEX idx_mcp_status (status)
)
`)
log.Println("MCP table verified/created")
// 3.4 确保 skills 表存在
db.Exec(`
CREATE TABLE IF NOT EXISTS skills (
id VARCHAR(191) PRIMARY KEY,
skill_name VARCHAR(200) NOT NULL,
skill_type VARCHAR(20) NOT NULL,
skill_desc TEXT,
path VARCHAR(500),
status VARCHAR(20) DEFAULT 'active',
created_at DATETIME(3),
updated_at DATETIME(3),
INDEX idx_skills_name (skill_name),
INDEX idx_skills_type (skill_type),
INDEX idx_skills_status (status)
)
`)
log.Println("Skills table verified/created")
// 使用GORM Migrator添加缺失的列
migrator := db.Migrator()
if !migrator.HasColumn(&model.Tool{}, "security_level") {
@@ -236,6 +276,8 @@ func main() {
userRepo := repository.NewUserRepository(db)
toolRepo := repository.NewToolRepository(db)
mcpRepo := repository.NewMCPRepository(db)
skillRepo := repository.NewSkillRepository(db)
agentRepo := repository.NewAgentRepository(db)
// 4.1 初始化默认管理员用户
initDefaultAdmin(userRepo)
@@ -253,6 +295,9 @@ func main() {
authService := service.NewAuthService(cfg.JWTSecret, userRepo)
toolService := service.NewToolService(toolRepo)
mcpService := service.NewMCPService(mcpRepo)
skillService := service.NewSkillService(skillRepo)
agentService := service.NewAgentService(cfg.PythonServiceURL)
memoryService := service.NewMemoryService(agentRepo)
// 4.2 初始化默认工具
if err := toolService.InitDefaultTools(); err != nil {
@@ -261,6 +306,13 @@ func main() {
log.Println("Default tools initialized")
}
// 4.3 初始化 skills
if err := skillService.InitSkills(); err != nil {
log.Printf("Warning: Failed to init skills: %v", err)
} else {
log.Println("Skills initialized")
}
// 6. 初始化 Handler
dbHandler := handler.NewDatabaseHandler(dbService)
subTableHandler := handler.NewSubTableHandler(subTableService)
@@ -271,6 +323,9 @@ func main() {
authHandler := handler.NewAuthHandler(authService)
toolHandler := handler.NewToolHandler(toolService)
mcpHandler := handler.NewMCPHandler(mcpService)
skillHandler := handler.NewSkillHandler(skillService)
agentHandler := handler.NewAgentHandler(agentService)
memoryHandler := handler.NewMemoryHandler(memoryService)
var uploadHandler *handler.UploadHandler
if uploadService != nil {
uploadHandler = handler.NewUploadHandler(uploadService, knowledgeRepo)
@@ -425,6 +480,32 @@ func main() {
mcpGroup.DELETE("/:id", mcpHandler.Delete)
}
// Skill管理模块
skillGroup := r.Group("/skill")
{
skillGroup.GET("/list", skillHandler.List)
skillGroup.GET("/sync", skillHandler.Sync)
skillGroup.GET("/:id", skillHandler.GetByID)
skillGroup.POST("/add", skillHandler.Create)
skillGroup.PUT("/:id", skillHandler.Update)
skillGroup.DELETE("/:id", skillHandler.Delete)
}
// Agent管理模块 (调用 Python Agent Engine)
agentGroup := r.Group("/api/agent")
{
agentGroup.POST("/chat", agentHandler.Chat)
agentGroup.POST("/team/chat", agentHandler.TeamChat)
}
// 记忆管理模块
memoryGroup := r.Group("/api/agent/:id/memories")
{
memoryGroup.GET("", memoryHandler.GetMemories)
memoryGroup.POST("", memoryHandler.CreateMemory)
memoryGroup.DELETE("/:memory_id", memoryHandler.DeleteMemory)
}
// Swagger 文档
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

View File

@@ -137,15 +137,15 @@ func (s *ModelService) TestConnection(req model.TestModelRequest) (*model.TestMo
// chat 模型使用 /chat/completions
switch req.Provider {
case "OpenAI":
baseURL = baseURL + "/v1/chat/completions"
baseURL = baseURL + "/chat/completions"
case "Ollama":
baseURL = baseURL + "/api/chat"
case "ali", "Ali", "aliyun", "Aliyun":
// 阿里云 DashScope 兼容 OpenAI 格式
baseURL = baseURL + "/chat/completions"
default:
// 默认使用 OpenAI 兼容格式
baseURL = baseURL + "/v1/chat/completions"
// 默认使用 /chat/completions
baseURL = baseURL + "/chat/completions"
}
}
}